@rqmii_immersive/agent-react-sdk 5.4.1 → 5.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/dist/embed.js +217 -217
  2. package/dist/embed.js.map +1 -1
  3. package/dist/ui/chat/footer.test.d.ts +2 -0
  4. package/dist/ui/chat/footer.test.d.ts.map +1 -0
  5. package/dist/ui/chat/primitives.d.ts.map +1 -1
  6. package/dist/ui/languages/text.d.ts.map +1 -1
  7. package/dist/ui/languages/translations/af.d.ts.map +1 -1
  8. package/dist/ui/languages/translations/ar-eg.d.ts.map +1 -1
  9. package/dist/ui/languages/translations/ar-sa.d.ts.map +1 -1
  10. package/dist/ui/languages/translations/az.d.ts.map +1 -1
  11. package/dist/ui/languages/translations/be.d.ts.map +1 -1
  12. package/dist/ui/languages/translations/bg.d.ts.map +1 -1
  13. package/dist/ui/languages/translations/bn.d.ts.map +1 -1
  14. package/dist/ui/languages/translations/bs.d.ts.map +1 -1
  15. package/dist/ui/languages/translations/ca.d.ts.map +1 -1
  16. package/dist/ui/languages/translations/cs.d.ts.map +1 -1
  17. package/dist/ui/languages/translations/cy.d.ts.map +1 -1
  18. package/dist/ui/languages/translations/da.d.ts.map +1 -1
  19. package/dist/ui/languages/translations/de.d.ts.map +1 -1
  20. package/dist/ui/languages/translations/el.d.ts.map +1 -1
  21. package/dist/ui/languages/translations/en.d.ts.map +1 -1
  22. package/dist/ui/languages/translations/es.d.ts.map +1 -1
  23. package/dist/ui/languages/translations/et.d.ts.map +1 -1
  24. package/dist/ui/languages/translations/eu.d.ts.map +1 -1
  25. package/dist/ui/languages/translations/fa.d.ts.map +1 -1
  26. package/dist/ui/languages/translations/fi.d.ts.map +1 -1
  27. package/dist/ui/languages/translations/fr.d.ts.map +1 -1
  28. package/dist/ui/languages/translations/gl.d.ts.map +1 -1
  29. package/dist/ui/languages/translations/gu.d.ts.map +1 -1
  30. package/dist/ui/languages/translations/hi.d.ts.map +1 -1
  31. package/dist/ui/languages/translations/hr.d.ts.map +1 -1
  32. package/dist/ui/languages/translations/hu.d.ts.map +1 -1
  33. package/dist/ui/languages/translations/id.d.ts.map +1 -1
  34. package/dist/ui/languages/translations/it.d.ts.map +1 -1
  35. package/dist/ui/languages/translations/ja.d.ts.map +1 -1
  36. package/dist/ui/languages/translations/kk.d.ts.map +1 -1
  37. package/dist/ui/languages/translations/kn.d.ts.map +1 -1
  38. package/dist/ui/languages/translations/ko.d.ts.map +1 -1
  39. package/dist/ui/languages/translations/lt.d.ts.map +1 -1
  40. package/dist/ui/languages/translations/lv.d.ts.map +1 -1
  41. package/dist/ui/languages/translations/mk.d.ts.map +1 -1
  42. package/dist/ui/languages/translations/ml.d.ts.map +1 -1
  43. package/dist/ui/languages/translations/mr.d.ts.map +1 -1
  44. package/dist/ui/languages/translations/ms.d.ts.map +1 -1
  45. package/dist/ui/languages/translations/nl.d.ts.map +1 -1
  46. package/dist/ui/languages/translations/no.d.ts.map +1 -1
  47. package/dist/ui/languages/translations/pa.d.ts.map +1 -1
  48. package/dist/ui/languages/translations/pl.d.ts.map +1 -1
  49. package/dist/ui/languages/translations/pt.d.ts.map +1 -1
  50. package/dist/ui/languages/translations/ro.d.ts.map +1 -1
  51. package/dist/ui/languages/translations/ru.d.ts.map +1 -1
  52. package/dist/ui/languages/translations/sk.d.ts.map +1 -1
  53. package/dist/ui/languages/translations/sl.d.ts.map +1 -1
  54. package/dist/ui/languages/translations/sq.d.ts.map +1 -1
  55. package/dist/ui/languages/translations/sr.d.ts.map +1 -1
  56. package/dist/ui/languages/translations/sv.d.ts.map +1 -1
  57. package/dist/ui/languages/translations/sw.d.ts.map +1 -1
  58. package/dist/ui/languages/translations/ta.d.ts.map +1 -1
  59. package/dist/ui/languages/translations/te.d.ts.map +1 -1
  60. package/dist/ui/languages/translations/th.d.ts.map +1 -1
  61. package/dist/ui/languages/translations/tl.d.ts.map +1 -1
  62. package/dist/ui/languages/translations/tr.d.ts.map +1 -1
  63. package/dist/ui/languages/translations/uk.d.ts.map +1 -1
  64. package/dist/ui/languages/translations/ur.d.ts.map +1 -1
  65. package/dist/ui/languages/translations/vi.d.ts.map +1 -1
  66. package/dist/ui/languages/translations/zh.d.ts.map +1 -1
  67. package/dist/ui/languages/types.d.ts +1 -0
  68. package/dist/ui/languages/types.d.ts.map +1 -1
  69. package/dist/ui.cjs +27 -27
  70. package/dist/ui.cjs.map +1 -1
  71. package/dist/ui.js +1035 -1006
  72. package/dist/ui.js.map +1 -1
  73. package/package.json +1 -1
  74. package/dist/ui/languages/translations/ar.d.ts +0 -4
  75. package/dist/ui/languages/translations/ar.d.ts.map +0 -1
package/dist/ui.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"ui.cjs","sources":["../src/ui/languages/translations/af.ts","../src/ui/languages/translations/sq.ts","../src/ui/languages/translations/ar.ts","../src/ui/languages/translations/ar-eg.ts","../src/ui/languages/translations/ar-sa.ts","../src/ui/languages/translations/az.ts","../src/ui/languages/translations/eu.ts","../src/ui/languages/translations/be.ts","../src/ui/languages/translations/bn.ts","../src/ui/languages/translations/bs.ts","../src/ui/languages/translations/bg.ts","../src/ui/languages/translations/ca.ts","../src/ui/languages/translations/zh.ts","../src/ui/languages/translations/hr.ts","../src/ui/languages/translations/cs.ts","../src/ui/languages/translations/da.ts","../src/ui/languages/translations/nl.ts","../src/ui/languages/translations/en.ts","../src/ui/languages/translations/et.ts","../src/ui/languages/translations/fi.ts","../src/ui/languages/translations/fr.ts","../src/ui/languages/translations/gl.ts","../src/ui/languages/translations/de.ts","../src/ui/languages/translations/el.ts","../src/ui/languages/translations/gu.ts","../src/ui/languages/translations/hi.ts","../src/ui/languages/translations/hu.ts","../src/ui/languages/translations/id.ts","../src/ui/languages/translations/it.ts","../src/ui/languages/translations/ja.ts","../src/ui/languages/translations/kn.ts","../src/ui/languages/translations/kk.ts","../src/ui/languages/translations/ko.ts","../src/ui/languages/translations/lv.ts","../src/ui/languages/translations/lt.ts","../src/ui/languages/translations/mk.ts","../src/ui/languages/translations/ms.ts","../src/ui/languages/translations/ml.ts","../src/ui/languages/translations/mr.ts","../src/ui/languages/translations/no.ts","../src/ui/languages/translations/fa.ts","../src/ui/languages/translations/pl.ts","../src/ui/languages/translations/pt.ts","../src/ui/languages/translations/pa.ts","../src/ui/languages/translations/ro.ts","../src/ui/languages/translations/ru.ts","../src/ui/languages/translations/sr.ts","../src/ui/languages/translations/sk.ts","../src/ui/languages/translations/sl.ts","../src/ui/languages/translations/es.ts","../src/ui/languages/translations/sw.ts","../src/ui/languages/translations/sv.ts","../src/ui/languages/translations/tl.ts","../src/ui/languages/translations/ta.ts","../src/ui/languages/translations/te.ts","../src/ui/languages/translations/th.ts","../src/ui/languages/translations/tr.ts","../src/ui/languages/translations/uk.ts","../src/ui/languages/translations/ur.ts","../src/ui/languages/translations/vi.ts","../src/ui/languages/translations/cy.ts","../src/ui/languages/text.ts","../src/ui/languages/list.ts","../src/ui/languages/utils.ts","../src/ui/agent-data.ts","../node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.mjs","../node_modules/lucide-react/dist/esm/shared/src/utils/toKebabCase.mjs","../node_modules/lucide-react/dist/esm/shared/src/utils/toCamelCase.mjs","../node_modules/lucide-react/dist/esm/shared/src/utils/toPascalCase.mjs","../node_modules/lucide-react/dist/esm/defaultAttributes.mjs","../node_modules/lucide-react/dist/esm/shared/src/utils/hasA11yProp.mjs","../node_modules/lucide-react/dist/esm/context.mjs","../node_modules/lucide-react/dist/esm/Icon.mjs","../node_modules/lucide-react/dist/esm/createLucideIcon.mjs","../node_modules/lucide-react/dist/esm/icons/arrow-up.mjs","../node_modules/lucide-react/dist/esm/icons/chevron-left.mjs","../node_modules/lucide-react/dist/esm/icons/chevron-down.mjs","../node_modules/lucide-react/dist/esm/icons/chevron-up.mjs","../node_modules/lucide-react/dist/esm/icons/loader-circle.mjs","../node_modules/lucide-react/dist/esm/icons/maximize-2.mjs","../node_modules/lucide-react/dist/esm/icons/mic-off.mjs","../node_modules/lucide-react/dist/esm/icons/mic.mjs","../node_modules/lucide-react/dist/esm/icons/minimize-2.mjs","../node_modules/lucide-react/dist/esm/icons/phone-off.mjs","../node_modules/lucide-react/dist/esm/icons/phone.mjs","../node_modules/lucide-react/dist/esm/icons/rotate-ccw.mjs","../node_modules/lucide-react/dist/esm/icons/star.mjs","../node_modules/lucide-react/dist/esm/icons/x.mjs","../src/ui/chat/utils.ts","../src/ui/chat/primitives.tsx","../src/ui/chat/feedback.tsx","../src/ui/chat/panels.tsx","../src/ui/chat/markdown.tsx","../src/ui/chat/consent-dialog.tsx","../src/ui/chat/chat-box-content.tsx","../src/ui/chat/chat-box-shared.ts","../src/ui/chat/chat-box-text.tsx","../src/ui/chat/chat-box-voice.tsx","../src/ui/chat/chat-box-text-and-voice.tsx","../src/ui/chat/chat-box-avatar.tsx","../src/ui/chat/ChatBox.tsx","../src/ui/RqmiiAgentChat.tsx"],"sourcesContent":["import type { UiTextKeys } from '../types';\n\nconst af: UiTextKeys = {\n sendMessage: 'Stuur \\'n boodskap',\n send: 'Stuur',\n close: 'Sluit',\n minimize: 'Minimaliseer',\n maximize: 'Maksimaliseer',\n call: 'Bel',\n listening: 'Luister',\n processing: 'Verwerk',\n talkToInterrupt: 'Praat om te onderbreek',\n startVoice: 'Begin stem',\n stopVoice: 'Stop stem',\n endCall: 'Beëindig oproep',\n openChat: 'Maak klets oop',\n connectionFailed: 'Verbinding het misluk',\n retry: 'Probeer weer',\n loading: 'Laai',\n creditsExhausted: 'Krediete is opgebruik',\n creditsExhaustedDetail: 'Hierdie sessie se krediete is opgebruik.',\n consentTitle: 'Privaatheidstoestemming',\n consentBody: 'Deur voort te gaan, stem jy in tot die versameling en verwerking van jou data soos beskryf in ons',\n consentAccept: 'Aanvaar',\n consentDecline: 'Weier',\n consentTermsLink: 'Diensbepalings',\n consentPrivacyLink: 'Privaatheidsbeleid',\n refresh: 'Verfris',\n ratingQuestion: 'Hoe was hierdie gesprek?',\n ratingThankYou: 'Dankie vir jou terugvoer!',\n youEnded: 'Jy het die gesprek beëindig',\n agentEnded: 'Die agent het die gesprek beëindig',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Vertel ons meer',\n feedbackSubtitle: 'Jou terugvoer help ons om ons diens te verbeter en jou in die toekoms beter te ondersteun.',\n feedbackPlaceholder: 'Vertel ons meer oor jou ervaring…',\n submit: 'Dien in',\n leadFormTitle: 'Kontakinligting',\n leadFormSuccess: 'Dankie! Jou besonderhede is ingedien.',\n leadFormRequiredError: 'Vul asseblief al die verpligte velde in.',\n leadFormGenericError: 'Iets het verkeerd geloop. Probeer asseblief weer.',\n leadFormName: 'Naam',\n leadFormEmail: 'E-pos',\n leadFormPhone: 'Foon',\n leadFormMessage: 'Jou boodskap',\n};\n\nexport default af;\n","import type { UiTextKeys } from '../types';\n\nconst sq: UiTextKeys = {\n sendMessage: 'Dërgo një mesazh',\n send: 'Dërgo',\n close: 'Mbyll',\n minimize: 'Minimizo',\n maximize: 'Maksimizo',\n call: 'Thirr',\n listening: 'Duke dëgjuar',\n processing: 'Duke përpunuar',\n talkToInterrupt: 'Flisni për të ndërprerë',\n startVoice: 'Fillo zërin',\n stopVoice: 'Ndalo zërin',\n endCall: 'Përfundo thirrjen',\n openChat: 'Hap bisedën',\n connectionFailed: 'Lidhja dështoi',\n retry: 'Riprovo',\n loading: 'Duke u ngarkuar',\n creditsExhausted: 'Kreditë e mbaruara',\n creditsExhaustedDetail: 'Kreditë e këtij sesioni kanë mbaruar.',\n consentTitle: 'Pëlqimi për Privatësi',\n consentBody: 'Duke vazhduar, ju pranoni mbledhjen dhe përpunimin e të dhënave tuaja siç përshkruhet në',\n consentAccept: 'Prano',\n consentDecline: 'Refuzo',\n consentTermsLink: 'Kushtet e Shërbimit',\n consentPrivacyLink: 'Rregullat e Privatësisë',\n refresh: 'Rifresko',\n ratingQuestion: 'Si ishte kjo bisedë?',\n ratingThankYou: 'Faleminderit për komentin tuaj!',\n youEnded: 'Ju e përfunduat bisedën',\n agentEnded: 'Agjenti e përfundoi bisedën',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Na tregoni më shumë',\n feedbackSubtitle: 'Komenti juaj na ndihmon të përmirësojmë shërbimin tonë dhe t’ju mbështesim më mirë në të ardhmen.',\n feedbackPlaceholder: 'Na tregoni më shumë rreth përvojës suaj…',\n submit: 'Dërgo',\n leadFormTitle: 'Informacioni i kontaktit',\n leadFormSuccess: 'Faleminderit! Të dhënat tuaja u dërguan.',\n leadFormRequiredError: 'Ju lutemi plotësoni të gjitha fushat e kërkuara.',\n leadFormGenericError: 'Ndodhi një gabim. Ju lutemi provoni përsëri.',\n leadFormName: 'Emri',\n leadFormEmail: 'Email',\n leadFormPhone: 'Telefoni',\n leadFormMessage: 'Mesazhi juaj',\n};\n\nexport default sq;\n","import type { UiTextKeys } from '../types';\n\nconst ar: UiTextKeys = {\n sendMessage: 'اكتب رسالة',\n send: 'إرسال',\n close: 'إغلاق',\n minimize: 'تصغير',\n maximize: 'تكبير',\n call: 'اتصل',\n listening: 'يستمع',\n processing: 'يعالج',\n talkToInterrupt: 'تحدث للمقاطعة',\n startVoice: 'بدء الصوت',\n stopVoice: 'إيقاف الصوت',\n endCall: 'إنهاء المكالمة',\n openChat: 'فتح المحادثة',\n connectionFailed: 'فشل الاتصال',\n retry: 'إعادة المحاولة',\n loading: 'جار التحميل',\n creditsExhausted: 'نفذ الرصيد',\n creditsExhaustedDetail: 'نفذ رصيد هذه الجلسة.',\n consentTitle: 'الموافقة على الخصوصية',\n consentBody: 'بالمتابعة، أنت توافق على جمع ومعالجة بياناتك كما هو موضح في',\n consentAccept: 'قبول',\n consentDecline: 'رفض',\n consentTermsLink: 'شروط الخدمة',\n consentPrivacyLink: 'سياسة الخصوصية',\n refresh: 'تحديث',\n ratingQuestion: 'كيف كانت هذه المحادثة؟',\n ratingThankYou: 'شكرًا على ملاحظاتك!',\n youEnded: 'لقد أنهيت المحادثة',\n agentEnded: 'أنهى الوكيل المحادثة',\n sessionIdLabel: 'المعرّف:',\n tellUsMore: 'أخبرنا المزيد',\n feedbackSubtitle: 'تساعدنا ملاحظاتك في تحسين خدمتنا ودعمك بشكل أفضل في المستقبل.',\n feedbackPlaceholder: 'أخبرنا المزيد عن تجربتك…',\n submit: 'إرسال',\n leadFormTitle: 'معلومات التواصل',\n leadFormSuccess: 'شكرًا لك! تم إرسال بياناتك.',\n leadFormRequiredError: 'يرجى تعبئة جميع الحقول المطلوبة.',\n leadFormGenericError: 'حدث خطأ ما. حاول مرة أخرى.',\n leadFormName: 'الاسم',\n leadFormEmail: 'البريد الإلكتروني',\n leadFormPhone: 'رقم الهاتف',\n leadFormMessage: 'رسالتك',\n};\n\nexport default ar;\n","import type { UiTextKeys } from '../types';\n\nconst ar: UiTextKeys = {\n sendMessage: 'اكتب رسالة',\n send: 'إرسال',\n close: 'إغلاق',\n minimize: 'تصغير',\n maximize: 'تكبير',\n call: 'اتصل',\n listening: 'يستمع',\n processing: 'يعالج',\n talkToInterrupt: 'تحدث للمقاطعة',\n startVoice: 'بدء الصوت',\n stopVoice: 'إيقاف الصوت',\n endCall: 'إنهاء المكالمة',\n openChat: 'فتح المحادثة',\n connectionFailed: 'فشل الاتصال',\n retry: 'إعادة المحاولة',\n loading: 'جار التحميل',\n creditsExhausted: 'نفذ الرصيد',\n creditsExhaustedDetail: 'نفذ رصيد هذه الجلسة.',\n consentTitle: 'الموافقة على الخصوصية',\n consentBody: 'بالمتابعة، أنت توافق على جمع ومعالجة بياناتك كما هو موضح في',\n consentAccept: 'قبول',\n consentDecline: 'رفض',\n consentTermsLink: 'شروط الخدمة',\n consentPrivacyLink: 'سياسة الخصوصية',\n refresh: 'تحديث',\n ratingQuestion: 'كيف كانت هذه المحادثة؟',\n ratingThankYou: 'شكرًا على ملاحظاتك!',\n youEnded: 'لقد أنهيت المحادثة',\n agentEnded: 'أنهى الوكيل المحادثة',\n sessionIdLabel: 'المعرّف:',\n tellUsMore: 'أخبرنا المزيد',\n feedbackSubtitle: 'تساعدنا ملاحظاتك في تحسين خدمتنا ودعمك بشكل أفضل في المستقبل.',\n feedbackPlaceholder: 'أخبرنا المزيد عن تجربتك…',\n submit: 'إرسال',\n leadFormTitle: 'معلومات التواصل',\n leadFormSuccess: 'شكرًا لك! تم إرسال بياناتك.',\n leadFormRequiredError: 'يرجى تعبئة جميع الحقول المطلوبة.',\n leadFormGenericError: 'حدث خطأ ما. حاول مرة أخرى.',\n leadFormName: 'الاسم',\n leadFormEmail: 'البريد الإلكتروني',\n leadFormPhone: 'رقم الهاتف',\n leadFormMessage: 'رسالتك',\n};\n\nexport default ar;\n","import type { UiTextKeys } from '../types';\n\nconst ar: UiTextKeys = {\n sendMessage: 'اكتب رسالة',\n send: 'إرسال',\n close: 'إغلاق',\n minimize: 'تصغير',\n maximize: 'تكبير',\n call: 'اتصل',\n listening: 'يستمع',\n processing: 'يعالج',\n talkToInterrupt: 'تحدث للمقاطعة',\n startVoice: 'بدء الصوت',\n stopVoice: 'إيقاف الصوت',\n endCall: 'إنهاء المكالمة',\n openChat: 'فتح المحادثة',\n connectionFailed: 'فشل الاتصال',\n retry: 'إعادة المحاولة',\n loading: 'جار التحميل',\n creditsExhausted: 'نفذ الرصيد',\n creditsExhaustedDetail: 'نفذ رصيد هذه الجلسة.',\n consentTitle: 'الموافقة على الخصوصية',\n consentBody: 'بالمتابعة، أنت توافق على جمع ومعالجة بياناتك كما هو موضح في',\n consentAccept: 'قبول',\n consentDecline: 'رفض',\n consentTermsLink: 'شروط الخدمة',\n consentPrivacyLink: 'سياسة الخصوصية',\n refresh: 'تحديث',\n ratingQuestion: 'كيف كانت هذه المحادثة؟',\n ratingThankYou: 'شكرًا على ملاحظاتك!',\n youEnded: 'لقد أنهيت المحادثة',\n agentEnded: 'أنهى الوكيل المحادثة',\n sessionIdLabel: 'المعرّف:',\n tellUsMore: 'أخبرنا المزيد',\n feedbackSubtitle: 'تساعدنا ملاحظاتك في تحسين خدمتنا ودعمك بشكل أفضل في المستقبل.',\n feedbackPlaceholder: 'أخبرنا المزيد عن تجربتك…',\n submit: 'إرسال',\n leadFormTitle: 'معلومات التواصل',\n leadFormSuccess: 'شكرًا لك! تم إرسال بياناتك.',\n leadFormRequiredError: 'يرجى تعبئة جميع الحقول المطلوبة.',\n leadFormGenericError: 'حدث خطأ ما. حاول مرة أخرى.',\n leadFormName: 'الاسم',\n leadFormEmail: 'البريد الإلكتروني',\n leadFormPhone: 'رقم الهاتف',\n leadFormMessage: 'رسالتك',\n};\n\nexport default ar;\n","import type { UiTextKeys } from '../types';\n\nconst az: UiTextKeys = {\n sendMessage: 'Mesaj göndər',\n send: 'Göndər',\n close: 'Bağla',\n minimize: 'Kiçilt',\n maximize: 'Böyüt',\n call: 'Zəng et',\n listening: 'Dinləyir',\n processing: 'Emal edilir',\n talkToInterrupt: 'Dayandırmaq üçün danışın',\n startVoice: 'Səsi başlat',\n stopVoice: 'Səsi dayandır',\n endCall: 'Zəngi bitir',\n openChat: 'Çatı aç',\n connectionFailed: 'Əlaqə uğursuz oldu',\n retry: 'Yenidən cəhd et',\n loading: 'Yüklənir',\n creditsExhausted: 'Kreditlər bitdi',\n creditsExhaustedDetail: 'Bu sessiyanın kreditləri bitdi.',\n consentTitle: 'Məxfilik Razılığı',\n consentBody: 'Davam etməklə, məlumatlarınızın toplanması və emalına icazə verdiyinizi təsdiq edirsiniz',\n consentAccept: 'Qəbul et',\n consentDecline: 'Rədd et',\n consentTermsLink: 'Xidmət Şərtləri',\n consentPrivacyLink: 'Məxfilik Siyasəti',\n refresh: 'Yenilə',\n ratingQuestion: 'Bu söhbət necə idi?',\n ratingThankYou: 'Rəyiniz üçün təşəkkür edirik!',\n youEnded: 'Söhbəti siz bitirdiniz',\n agentEnded: 'Agent söhbəti bitirdi',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Bizə daha çox danışın',\n feedbackSubtitle: 'Rəyiniz xidmətimizi təkmilləşdirməyə və gələcəkdə sizə daha yaxşı dəstək olmağa kömək edir.',\n feedbackPlaceholder: 'Təcrübəniz haqqında bizə daha çox danışın…',\n submit: 'Göndər',\n leadFormTitle: 'Əlaqə məlumatları',\n leadFormSuccess: 'Təşəkkürlər! Məlumatlarınız göndərildi.',\n leadFormRequiredError: 'Zəhmət olmasa bütün tələb olunan sahələri doldurun.',\n leadFormGenericError: 'Xəta baş verdi. Zəhmət olmasa yenidən cəhd edin.',\n leadFormName: 'Ad',\n leadFormEmail: 'E-poçt',\n leadFormPhone: 'Telefon',\n leadFormMessage: 'Mesajınız',\n};\n\nexport default az;\n","import type { UiTextKeys } from '../types';\n\nconst eu: UiTextKeys = {\n sendMessage: 'Bidali mezua',\n send: 'Bidali',\n close: 'Itxi',\n minimize: 'Minimizatu',\n maximize: 'Maximizatu',\n call: 'Deitu',\n listening: 'Entzuten',\n processing: 'Prozesatzen',\n talkToInterrupt: 'Hitz egin eteteko',\n startVoice: 'Hasi ahotsa',\n stopVoice: 'Gelditu ahotsa',\n endCall: 'Amaitu deia',\n openChat: 'Ireki txata',\n connectionFailed: 'Konexioak huts egin du',\n retry: 'Saiatu berriro',\n loading: 'Kargatzen',\n creditsExhausted: 'Kredituak agortuta',\n creditsExhaustedDetail: 'Saio honen kredituak agortu dira.',\n consentTitle: 'Pribatutasunaren Baimena',\n consentBody: 'Jarraitzean, zure datuak biltzea eta prozesatzea onartzen duzu gure deskribatzen den moduan',\n consentAccept: 'Onartu',\n consentDecline: 'Ukatu',\n consentTermsLink: 'Zerbitzu-baldintzak',\n consentPrivacyLink: 'Pribatutasun-politika',\n refresh: 'Freskatu',\n ratingQuestion: 'Nolakoa izan da elkarrizketa hau?',\n ratingThankYou: 'Eskerrik asko zure iritziagatik!',\n youEnded: 'Zuk amaitu duzu elkarrizketa',\n agentEnded: 'Agenteak amaitu du elkarrizketa',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Esan iezaguzu gehiago',\n feedbackSubtitle: 'Zure iritziak gure zerbitzua hobetzen eta etorkizunean hobeto laguntzen laguntzen digu.',\n feedbackPlaceholder: 'Esan iezaguzu gehiago zure esperientziari buruz…',\n submit: 'Bidali',\n leadFormTitle: 'Kontaktu informazioa',\n leadFormSuccess: 'Eskerrik asko! Zure datuak bidali dira.',\n leadFormRequiredError: 'Bete beharrezko eremu guztiak, mesedez.',\n leadFormGenericError: 'Zerbait okerra gertatu da. Saiatu berriro.',\n leadFormName: 'Izena',\n leadFormEmail: 'Helbide elektronikoa',\n leadFormPhone: 'Telefonoa',\n leadFormMessage: 'Zure mezua',\n};\n\nexport default eu;\n","import type { UiTextKeys } from '../types';\n\nconst be: UiTextKeys = {\n sendMessage: 'Адправіць паведамленне',\n send: 'Адправіць',\n close: 'Зачыніць',\n minimize: 'Згарнуць',\n maximize: 'Разгарнуць',\n call: 'Патэлефанаваць',\n listening: 'Слухае',\n processing: 'Апрацоўка',\n talkToInterrupt: 'Гаварыце, каб перапыніць',\n startVoice: 'Пачаць голас',\n stopVoice: 'Спыніць голас',\n endCall: 'Завяршыць званок',\n openChat: 'Адкрыць чат',\n connectionFailed: 'Памылка падключэння',\n retry: 'Паўтарыць',\n loading: 'Загрузка',\n creditsExhausted: 'Крэдыты скончыліся',\n creditsExhaustedDetail: 'Крэдыты гэтай сесіі скончыліся.',\n consentTitle: 'Згода на апрацоўку даных',\n consentBody: 'Працягваючы, вы згаджаецеся на збор і апрацоўку вашых даных, як апісана ў нашых',\n consentAccept: 'Прыняць',\n consentDecline: 'Адхіліць',\n consentTermsLink: 'Умовы абслугоўвання',\n consentPrivacyLink: 'Палітыка прыватнасці',\n refresh: 'Абнавіць',\n ratingQuestion: 'Як прайшла гэтая размова?',\n ratingThankYou: 'Дзякуй за ваш водгук!',\n youEnded: 'Вы завяршылі размову',\n agentEnded: 'Агент завяршыў размову',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Раскажыце падрабязней',\n feedbackSubtitle: 'Ваш водгук дапамагае нам паляпшаць сэрвіс і лепш падтрымліваць вас у будучыні.',\n feedbackPlaceholder: 'Раскажыце падрабязней пра ваш вопыт…',\n submit: 'Адправіць',\n leadFormTitle: 'Кантактная інфармацыя',\n leadFormSuccess: 'Дзякуй! Вашы дадзеныя адпраўлены.',\n leadFormRequiredError: 'Калі ласка, запаўніце ўсе абавязковыя палі.',\n leadFormGenericError: 'Нешта пайшло не так. Паспрабуйце зноў.',\n leadFormName: 'Імя',\n leadFormEmail: 'Электронная пошта',\n leadFormPhone: 'Тэлефон',\n leadFormMessage: 'Ваша паведамленне',\n};\n\nexport default be;\n","import type { UiTextKeys } from '../types';\n\nconst bn: UiTextKeys = {\n sendMessage: 'একটি বার্তা পাঠান',\n send: 'পাঠান',\n close: 'বন্ধ করুন',\n minimize: 'ছোট করুন',\n maximize: 'বড় করুন',\n call: 'কল করুন',\n listening: 'শুনছে',\n processing: 'প্রক্রিয়া হচ্ছে',\n talkToInterrupt: 'বাধা দিতে কথা বলুন',\n startVoice: 'ভয়েস শুরু করুন',\n stopVoice: 'ভয়েস বন্ধ করুন',\n endCall: 'কল শেষ করুন',\n openChat: 'চ্যাট খুলুন',\n connectionFailed: 'সংযোগ ব্যর্থ হয়েছে',\n retry: 'পুনরায় চেষ্টা করুন',\n loading: 'লোড হচ্ছে',\n creditsExhausted: 'ক্রেডিট শেষ',\n creditsExhaustedDetail: 'এই সেশনের ক্রেডিট শেষ হয়ে গেছে।',\n consentTitle: 'গোপনীয়তা সম্মতি',\n consentBody: 'এগিয়ে গেলে, আপনি আমাদের বর্ণিত হিসাবে আপনার ডেটা সংগ্রহ এবং প্রক্রিয়াকরণে সম্মত হন',\n consentAccept: 'গ্রহণ করুন',\n consentDecline: 'প্রত্যাখ্যান করুন',\n consentTermsLink: 'পরিষেবার শর্তাবলী',\n consentPrivacyLink: 'গোপনীয়তা নীতি',\n refresh: 'রিফ্রেশ করুন',\n ratingQuestion: 'এই কথোপকথনটি কেমন ছিল?',\n ratingThankYou: 'আপনার মতামতের জন্য ধন্যবাদ!',\n youEnded: 'আপনি কথোপকথনটি শেষ করেছেন',\n agentEnded: 'এজেন্ট কথোপকথনটি শেষ করেছে',\n sessionIdLabel: 'আইডি:',\n tellUsMore: 'আরও বলুন',\n feedbackSubtitle: 'আপনার মতামত আমাদের পরিষেবা উন্নত করতে এবং ভবিষ্যতে আপনাকে আরও ভালোভাবে সহায়তা করতে সাহায্য করে।',\n feedbackPlaceholder: 'আপনার অভিজ্ঞতা সম্পর্কে আরও বলুন…',\n submit: 'জমা দিন',\n leadFormTitle: 'যোগাযোগের তথ্য',\n leadFormSuccess: 'ধন্যবাদ! আপনার তথ্য জমা দেওয়া হয়েছে।',\n leadFormRequiredError: 'সমস্ত প্রয়োজনীয় ক্ষেত্র পূরণ করুন।',\n leadFormGenericError: 'কিছু ভুল হয়েছে। আবার চেষ্টা করুন।',\n leadFormName: 'নাম',\n leadFormEmail: 'ইমেইল',\n leadFormPhone: 'ফোন',\n leadFormMessage: 'আপনার বার্তা',\n};\n\nexport default bn;\n","import type { UiTextKeys } from '../types';\n\nconst bs: UiTextKeys = {\n sendMessage: 'Pošalji poruku',\n send: 'Pošalji',\n close: 'Zatvori',\n minimize: 'Minimiziraj',\n maximize: 'Maksimiziraj',\n call: 'Pozovi',\n listening: 'Sluša',\n processing: 'Obrađuje',\n talkToInterrupt: 'Govorite da prekinete',\n startVoice: 'Pokreni glas',\n stopVoice: 'Zaustavi glas',\n endCall: 'Završi poziv',\n openChat: 'Otvori ćaskanje',\n connectionFailed: 'Veza nije uspjela',\n retry: 'Pokušaj ponovo',\n loading: 'Učitavanje',\n creditsExhausted: 'Krediti su potrošeni',\n creditsExhaustedDetail: 'Krediti ove sesije su potrošeni.',\n consentTitle: 'Privatnost Saglasnost',\n consentBody: 'Nastavkom se slažete sa prikupljanjem i obradom vaših podataka kako je opisano u našim',\n consentAccept: 'Prihvati',\n consentDecline: 'Odbij',\n consentTermsLink: 'Uslovi korištenja',\n consentPrivacyLink: 'Politika privatnosti',\n refresh: 'Osvježi',\n ratingQuestion: 'Kako je bio ovaj razgovor?',\n ratingThankYou: 'Hvala na vašoj povratnoj informaciji!',\n youEnded: 'Vi ste završili razgovor',\n agentEnded: 'Agent je završio razgovor',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Recite nam više',\n feedbackSubtitle: 'Vaša povratna informacija nam pomaže da poboljšamo uslugu i bolje vas podržimo u budućnosti.',\n feedbackPlaceholder: 'Recite nam više o svom iskustvu…',\n submit: 'Pošalji',\n leadFormTitle: 'Kontakt informacije',\n leadFormSuccess: 'Hvala! Vaši podaci su poslani.',\n leadFormRequiredError: 'Molimo popunite sva obavezna polja.',\n leadFormGenericError: 'Nešto je pošlo po zlu. Pokušajte ponovo.',\n leadFormName: 'Ime',\n leadFormEmail: 'E-mail',\n leadFormPhone: 'Telefon',\n leadFormMessage: 'Vaša poruka',\n};\n\nexport default bs;\n","import type { UiTextKeys } from '../types';\n\nconst bg: UiTextKeys = {\n sendMessage: 'Изпрати съобщение',\n send: 'Изпрати',\n close: 'Затвори',\n minimize: 'Минимизирай',\n maximize: 'Максимизирай',\n call: 'Обади се',\n listening: 'Слуша',\n processing: 'Обработва',\n talkToInterrupt: 'Говорете за прекъсване',\n startVoice: 'Започни глас',\n stopVoice: 'Спри гласа',\n endCall: 'Край на разговора',\n openChat: 'Отвори чат',\n connectionFailed: 'Неуспешна връзка',\n retry: 'Опитай отново',\n loading: 'Зареждане',\n creditsExhausted: 'Кредитите са изчерпани',\n creditsExhaustedDetail: 'Кредитите на тази сесия са изчерпани.',\n consentTitle: 'Съгласие за поверителност',\n consentBody: 'Продължавайки, вие се съгласявате със събирането и обработката на вашите данни, както е описано в нашите',\n consentAccept: 'Приемам',\n consentDecline: 'Отказвам',\n consentTermsLink: 'Условия за ползване',\n consentPrivacyLink: 'Политика за поверителност',\n refresh: 'Обнови',\n ratingQuestion: 'Как беше този разговор?',\n ratingThankYou: 'Благодарим за обратната връзка!',\n youEnded: 'Вие приключихте разговора',\n agentEnded: 'Агентът приключи разговора',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Кажете ни повече',\n feedbackSubtitle: 'Вашата обратна връзка ни помага да подобрим услугата си и да ви подкрепяме по-добре в бъдеще.',\n feedbackPlaceholder: 'Кажете ни повече за вашето преживяване…',\n submit: 'Изпрати',\n leadFormTitle: 'Информация за контакт',\n leadFormSuccess: 'Благодарим! Вашите данни бяха изпратени.',\n leadFormRequiredError: 'Моля, попълнете всички задължителни полета.',\n leadFormGenericError: 'Нещо се обърка. Моля, опитайте отново.',\n leadFormName: 'Име',\n leadFormEmail: 'Имейл',\n leadFormPhone: 'Телефон',\n leadFormMessage: 'Вашето съобщение',\n};\n\nexport default bg;\n","import type { UiTextKeys } from '../types';\n\nconst ca: UiTextKeys = {\n sendMessage: 'Enviar un missatge',\n send: 'Enviar',\n close: 'Tancar',\n minimize: 'Minimitzar',\n maximize: 'Maximitzar',\n call: 'Trucar',\n listening: 'Escoltant',\n processing: 'Processant',\n talkToInterrupt: 'Parleu per interrompre',\n startVoice: 'Iniciar veu',\n stopVoice: 'Aturar veu',\n endCall: 'Finalitzar trucada',\n openChat: 'Obrir xat',\n connectionFailed: 'Connexió fallida',\n retry: 'Tornar a intentar',\n loading: 'Carregant',\n creditsExhausted: 'Crèdits esgotats',\n creditsExhaustedDetail: 'Aquesta sessió ha esgotat els crèdits.',\n consentTitle: 'Consentiment de Privacitat',\n consentBody: 'En continuar, accepteu la recollida i el processament de les vostres dades tal com es descriu als nostres',\n consentAccept: 'Acceptar',\n consentDecline: 'Rebutjar',\n consentTermsLink: 'Termes del servei',\n consentPrivacyLink: 'Política de privacitat',\n refresh: 'Actualitza',\n ratingQuestion: 'Com ha anat aquesta conversa?',\n ratingThankYou: 'Gràcies pel teu comentari!',\n youEnded: 'Has finalitzat la conversa',\n agentEnded: 'L’agent ha finalitzat la conversa',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Explica’ns més',\n feedbackSubtitle: 'El teu comentari ens ajuda a millorar el servei i a donar-te un millor suport en el futur.',\n feedbackPlaceholder: 'Explica’ns més sobre la teva experiència…',\n submit: 'Envia',\n leadFormTitle: 'Informació de contacte',\n leadFormSuccess: 'Gràcies! Les teves dades s\\'han enviat.',\n leadFormRequiredError: 'Si us plau, ompliu tots els camps obligatoris.',\n leadFormGenericError: 'Alguna cosa ha anat malament. Torneu-ho a provar.',\n leadFormName: 'Nom',\n leadFormEmail: 'Correu electrònic',\n leadFormPhone: 'Telèfon',\n leadFormMessage: 'El teu missatge',\n};\n\nexport default ca;\n","import type { UiTextKeys } from '../types';\n\nconst zh: UiTextKeys = {\n sendMessage: '发送消息',\n send: '发送',\n close: '关闭',\n minimize: '最小化',\n maximize: '最大化',\n call: '呼叫',\n listening: '正在聆听',\n processing: '处理中',\n talkToInterrupt: '说话以打断',\n startVoice: '开始语音',\n stopVoice: '停止语音',\n endCall: '结束通话',\n openChat: '打开聊天',\n connectionFailed: '连接失败',\n retry: '重试',\n loading: '正在加载',\n creditsExhausted: '额度已用完',\n creditsExhaustedDetail: '此会话的额度已用完。',\n consentTitle: '隐私同意',\n consentBody: '继续操作即表示您同意我们按照所述方式收集和处理您的数据',\n consentAccept: '接受',\n consentDecline: '拒绝',\n consentTermsLink: '服务条款',\n consentPrivacyLink: '隐私政策',\n refresh: '刷新',\n ratingQuestion: '这次对话怎么样?',\n ratingThankYou: '感谢您的反馈!',\n youEnded: '您结束了对话',\n agentEnded: '智能体结束了对话',\n sessionIdLabel: 'ID:',\n tellUsMore: '告诉我们更多',\n feedbackSubtitle: '您的反馈有助于我们改进服务,并在未来为您提供更好的支持。',\n feedbackPlaceholder: '告诉我们更多关于您的体验…',\n submit: '提交',\n leadFormTitle: '联系信息',\n leadFormSuccess: '谢谢!您的信息已提交。',\n leadFormRequiredError: '请填写所有必填字段。',\n leadFormGenericError: '出现错误,请重试。',\n leadFormName: '姓名',\n leadFormEmail: '电子邮箱',\n leadFormPhone: '电话',\n leadFormMessage: '您的留言',\n};\n\nexport default zh;\n","import type { UiTextKeys } from '../types';\n\nconst hr: UiTextKeys = {\n sendMessage: 'Pošalji poruku',\n send: 'Pošalji',\n close: 'Zatvori',\n minimize: 'Minimiziraj',\n maximize: 'Maksimiziraj',\n call: 'Nazovi',\n listening: 'Sluša',\n processing: 'Obrađuje',\n talkToInterrupt: 'Govorite za prekidanje',\n startVoice: 'Pokreni glas',\n stopVoice: 'Zaustavi glas',\n endCall: 'Završi poziv',\n openChat: 'Otvori chat',\n connectionFailed: 'Veza nije uspjela',\n retry: 'Pokušaj ponovno',\n loading: 'Učitavanje',\n creditsExhausted: 'Krediti iscrpljeni',\n creditsExhaustedDetail: 'Krediti ove sesije su iscrpljeni.',\n consentTitle: 'Privola za privatnost',\n consentBody: 'Nastavkom pristajete na prikupljanje i obradu vaših podataka kako je opisano u našim',\n consentAccept: 'Prihvati',\n consentDecline: 'Odbij',\n consentTermsLink: 'Uvjeti korištenja',\n consentPrivacyLink: 'Pravila privatnosti',\n refresh: 'Osvježi',\n ratingQuestion: 'Kakav je bio ovaj razgovor?',\n ratingThankYou: 'Hvala na povratnoj informaciji!',\n youEnded: 'Vi ste završili razgovor',\n agentEnded: 'Agent je završio razgovor',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Recite nam više',\n feedbackSubtitle: 'Vaša povratna informacija pomaže nam poboljšati uslugu i bolje vas podržati u budućnosti.',\n feedbackPlaceholder: 'Recite nam više o svom iskustvu…',\n submit: 'Pošalji',\n leadFormTitle: 'Podaci za kontakt',\n leadFormSuccess: 'Hvala! Vaši podaci su poslani.',\n leadFormRequiredError: 'Ispunite sva obavezna polja.',\n leadFormGenericError: 'Nešto je pošlo po zlu. Pokušajte ponovo.',\n leadFormName: 'Ime',\n leadFormEmail: 'E-mail',\n leadFormPhone: 'Telefon',\n leadFormMessage: 'Vaša poruka',\n};\n\nexport default hr;\n","import type { UiTextKeys } from '../types';\n\nconst cs: UiTextKeys = {\n sendMessage: 'Poslat zprávu',\n send: 'Odeslat',\n close: 'Zavřít',\n minimize: 'Minimalizovat',\n maximize: 'Maximalizovat',\n call: 'Volat',\n listening: 'Poslouchá',\n processing: 'Zpracovává',\n talkToInterrupt: 'Mluvte pro přerušení',\n startVoice: 'Spustit hlas',\n stopVoice: 'Zastavit hlas',\n endCall: 'Ukončit hovor',\n openChat: 'Otevřít chat',\n connectionFailed: 'Připojení selhalo',\n retry: 'Zkusit znovu',\n loading: 'Načítání',\n creditsExhausted: 'Kredity vyčerpány',\n creditsExhaustedDetail: 'Kredity této relace byly vyčerpány.',\n consentTitle: 'Souhlas se soukromím',\n consentBody: 'Pokračováním souhlasíte se shromažďováním a zpracováním vašich údajů, jak je popsáno v našich',\n consentAccept: 'Přijmout',\n consentDecline: 'Odmítnout',\n consentTermsLink: 'Podmínky služby',\n consentPrivacyLink: 'Zásady ochrany soukromí',\n refresh: 'Obnovit',\n ratingQuestion: 'Jaká byla tato konverzace?',\n ratingThankYou: 'Děkujeme za vaši zpětnou vazbu!',\n youEnded: 'Konverzaci jste ukončili vy',\n agentEnded: 'Konverzaci ukončil agent',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Řekněte nám více',\n feedbackSubtitle: 'Vaše zpětná vazba nám pomáhá zlepšovat naše služby a lépe vás v budoucnu podporovat.',\n feedbackPlaceholder: 'Řekněte nám více o své zkušenosti…',\n submit: 'Odeslat',\n leadFormTitle: 'Kontaktní údaje',\n leadFormSuccess: 'Děkujeme! Vaše údaje byly odeslány.',\n leadFormRequiredError: 'Vyplňte prosím všechna povinná pole.',\n leadFormGenericError: 'Něco se pokazilo. Zkuste to znovu.',\n leadFormName: 'Jméno',\n leadFormEmail: 'E-mail',\n leadFormPhone: 'Telefon',\n leadFormMessage: 'Vaše zpráva',\n};\n\nexport default cs;\n","import type { UiTextKeys } from '../types';\n\nconst da: UiTextKeys = {\n sendMessage: 'Send en besked',\n send: 'Send',\n close: 'Luk',\n minimize: 'Minimer',\n maximize: 'Maksimer',\n call: 'Ring',\n listening: 'Lytter',\n processing: 'Behandler',\n talkToInterrupt: 'Tal for at afbryde',\n startVoice: 'Start stemme',\n stopVoice: 'Stop stemme',\n endCall: 'Afslut opkald',\n openChat: 'Åbn chat',\n connectionFailed: 'Forbindelse mislykkedes',\n retry: 'Prøv igen',\n loading: 'Indlæser',\n creditsExhausted: 'Kreditter opbrugt',\n creditsExhaustedDetail: 'Denne sessions kreditter er opbrugt.',\n consentTitle: 'Samtykke til privatliv',\n consentBody: 'Ved at fortsætte accepterer du indsamling og behandling af dine data som beskrevet i vores',\n consentAccept: 'Acceptér',\n consentDecline: 'Afvis',\n consentTermsLink: 'Servicevilkår',\n consentPrivacyLink: 'Privatlivspolitik',\n refresh: 'Opdater',\n ratingQuestion: 'Hvordan var denne samtale?',\n ratingThankYou: 'Tak for din feedback!',\n youEnded: 'Du afsluttede samtalen',\n agentEnded: 'Agenten afsluttede samtalen',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Fortæl os mere',\n feedbackSubtitle: 'Din feedback hjælper os med at forbedre vores service og støtte dig bedre i fremtiden.',\n feedbackPlaceholder: 'Fortæl os mere om din oplevelse…',\n submit: 'Send',\n leadFormTitle: 'Kontaktinfo',\n leadFormSuccess: 'Tak! Dine oplysninger er indsendt.',\n leadFormRequiredError: 'Udfyld venligst alle obligatoriske felter.',\n leadFormGenericError: 'Noget gik galt. Prøv igen.',\n leadFormName: 'Navn',\n leadFormEmail: 'E-mail',\n leadFormPhone: 'Telefon',\n leadFormMessage: 'Din besked',\n};\n\nexport default da;\n","import type { UiTextKeys } from '../types';\n\nconst nl: UiTextKeys = {\n sendMessage: 'Stuur een bericht',\n send: 'Verzenden',\n close: 'Sluiten',\n minimize: 'Minimaliseren',\n maximize: 'Maximaliseren',\n call: 'Bel',\n listening: 'Luistert',\n processing: 'Verwerken',\n talkToInterrupt: 'Praat om te onderbreken',\n startVoice: 'Start spraak',\n stopVoice: 'Stop spraak',\n endCall: 'Gesprek beëindigen',\n openChat: 'Chat openen',\n connectionFailed: 'Verbinding mislukt',\n retry: 'Opnieuw proberen',\n loading: 'Laden',\n creditsExhausted: 'Credits opgebruikt',\n creditsExhaustedDetail: 'De credits van deze sessie zijn opgebruikt.',\n consentTitle: 'Toestemming privacy',\n consentBody: 'Door verder te gaan, gaat u akkoord met het verzamelen en verwerken van uw gegevens zoals beschreven in onze',\n consentAccept: 'Accepteren',\n consentDecline: 'Weigeren',\n consentTermsLink: 'Servicevoorwaarden',\n consentPrivacyLink: 'Privacybeleid',\n refresh: 'Vernieuwen',\n ratingQuestion: 'Hoe was dit gesprek?',\n ratingThankYou: 'Bedankt voor je feedback!',\n youEnded: 'Je hebt het gesprek beëindigd',\n agentEnded: 'De agent heeft het gesprek beëindigd',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Vertel ons meer',\n feedbackSubtitle: 'Je feedback helpt ons onze service te verbeteren en je in de toekomst beter te ondersteunen.',\n feedbackPlaceholder: 'Vertel ons meer over je ervaring…',\n submit: 'Verzenden',\n leadFormTitle: 'Contactgegevens',\n leadFormSuccess: 'Bedankt! Je gegevens zijn verzonden.',\n leadFormRequiredError: 'Vul alle verplichte velden in.',\n leadFormGenericError: 'Er is iets misgegaan. Probeer het opnieuw.',\n leadFormName: 'Naam',\n leadFormEmail: 'E-mail',\n leadFormPhone: 'Telefoon',\n leadFormMessage: 'Uw bericht',\n};\n\nexport default nl;\n","import type { UiTextKeys } from '../types';\n\nconst en: UiTextKeys = {\n sendMessage: 'Send a message',\n send: 'Send',\n close: 'Close',\n minimize: 'Minimize',\n maximize: 'Maximize',\n call: 'Call',\n listening: 'Listening',\n processing: 'Processing',\n talkToInterrupt: 'Talk to interrupt',\n startVoice: 'Start voice',\n stopVoice: 'Stop voice',\n endCall: 'End call',\n openChat: 'Open chat',\n connectionFailed: 'Connection failed',\n retry: 'Retry',\n loading: 'Loading',\n creditsExhausted: 'Credits Exhausted',\n creditsExhaustedDetail: 'This session has run out of credits.',\n consentTitle: 'Privacy Consent',\n consentBody: 'By proceeding, you agree to the collection and processing of your data as described in our',\n consentAccept: 'Accept',\n consentDecline: 'Decline',\n consentTermsLink: 'Terms of Service',\n consentPrivacyLink: 'Privacy Policy',\n refresh: 'Refresh',\n ratingQuestion: 'How was this conversation?',\n ratingThankYou: 'Thank you for your feedback!',\n youEnded: 'You ended the conversation',\n agentEnded: 'The agent ended the conversation',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Tell us more',\n feedbackSubtitle: 'Your feedback helps us improve our service and better support you in the future.',\n feedbackPlaceholder: 'Tell us more about your experience…',\n submit: 'Submit',\n leadFormTitle: 'Contact info',\n leadFormSuccess: 'Thanks! Your details have been submitted.',\n leadFormRequiredError: 'Please fill in all required fields.',\n leadFormGenericError: 'Something went wrong. Please try again.',\n leadFormName: 'Name',\n leadFormEmail: 'Email',\n leadFormPhone: 'Phone',\n leadFormMessage: 'Your message',\n};\n\nexport default en;\n","import type { UiTextKeys } from '../types';\n\nconst et: UiTextKeys = {\n sendMessage: 'Saada sõnum',\n send: 'Saada',\n close: 'Sulge',\n minimize: 'Minimeeri',\n maximize: 'Maksimeeri',\n call: 'Helista',\n listening: 'Kuulab',\n processing: 'Töötleb',\n talkToInterrupt: 'Katkestamiseks räägi',\n startVoice: 'Alusta häält',\n stopVoice: 'Peata hääl',\n endCall: 'Lõpeta kõne',\n openChat: 'Ava vestlus',\n connectionFailed: 'Ühendus ebaõnnestus',\n retry: 'Proovi uuesti',\n loading: 'Laadimine',\n creditsExhausted: 'Krediidid otsas',\n creditsExhaustedDetail: 'Selle seansi krediidid on otsas.',\n consentTitle: 'Privaatsusnõusolek',\n consentBody: 'Jätkates nõustute oma andmete kogumise ja töötlemisega, nagu on kirjeldatud meie',\n consentAccept: 'Nõustu',\n consentDecline: 'Keeldu',\n consentTermsLink: 'Teenusetingimused',\n consentPrivacyLink: 'Privaatsuspoliitika',\n refresh: 'Värskenda',\n ratingQuestion: 'Milline see vestlus oli?',\n ratingThankYou: 'Täname tagasiside eest!',\n youEnded: 'Sina lõpetasid vestluse',\n agentEnded: 'Agent lõpetas vestluse',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Räägi meile rohkem',\n feedbackSubtitle: 'Sinu tagasiside aitab meil teenust parandada ja sind tulevikus paremini toetada.',\n feedbackPlaceholder: 'Räägi meile rohkem oma kogemusest…',\n submit: 'Saada',\n leadFormTitle: 'Kontaktandmed',\n leadFormSuccess: 'Aitäh! Teie andmed on esitatud.',\n leadFormRequiredError: 'Palun täitke kõik kohustuslikud väljad.',\n leadFormGenericError: 'Midagi läks valesti. Palun proovige uuesti.',\n leadFormName: 'Nimi',\n leadFormEmail: 'E-post',\n leadFormPhone: 'Telefon',\n leadFormMessage: 'Teie sõnum',\n};\n\nexport default et;\n","import type { UiTextKeys } from '../types';\n\nconst fi: UiTextKeys = {\n sendMessage: 'Lähetä viesti',\n send: 'Lähetä',\n close: 'Sulje',\n minimize: 'Pienennä',\n maximize: 'Suurenna',\n call: 'Soita',\n listening: 'Kuuntelee',\n processing: 'Käsittelee',\n talkToInterrupt: 'Puhu keskeyttääksesi',\n startVoice: 'Aloita puhe',\n stopVoice: 'Lopeta puhe',\n endCall: 'Lopeta puhelu',\n openChat: 'Avaa chat',\n connectionFailed: 'Yhteys epäonnistui',\n retry: 'Yritä uudelleen',\n loading: 'Ladataan',\n creditsExhausted: 'Krediitit loppu',\n creditsExhaustedDetail: 'Tämän istunnon krediitit ovat loppuneet.',\n consentTitle: 'Yksityisyyden suostumus',\n consentBody: 'Jatkamalla hyväksyt tietojesi keräämisen ja käsittelyn kuten on kuvattu',\n consentAccept: 'Hyväksy',\n consentDecline: 'Hylkää',\n consentTermsLink: 'Käyttöehdot',\n consentPrivacyLink: 'Tietosuojakäytäntö',\n refresh: 'Päivitä',\n ratingQuestion: 'Millainen tämä keskustelu oli?',\n ratingThankYou: 'Kiitos palautteestasi!',\n youEnded: 'Sinä lopetit keskustelun',\n agentEnded: 'Agentti lopetti keskustelun',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Kerro lisää',\n feedbackSubtitle: 'Palautteesi auttaa meitä parantamaan palveluamme ja tukemaan sinua paremmin tulevaisuudessa.',\n feedbackPlaceholder: 'Kerro lisää kokemuksestasi…',\n submit: 'Lähetä',\n leadFormTitle: 'Yhteystiedot',\n leadFormSuccess: 'Kiitos! Tietosi on lähetetty.',\n leadFormRequiredError: 'Täytä kaikki pakolliset kentät.',\n leadFormGenericError: 'Jokin menikin pieleen. Yritä uudelleen.',\n leadFormName: 'Nimi',\n leadFormEmail: 'Sähköposti',\n leadFormPhone: 'Puhelin',\n leadFormMessage: 'Viestisi',\n};\n\nexport default fi;\n","import type { UiTextKeys } from '../types';\n\nconst fr: UiTextKeys = {\n sendMessage: 'Envoyer un message',\n send: 'Envoyer',\n close: 'Fermer',\n minimize: 'Réduire',\n maximize: 'Agrandir',\n call: 'Appeler',\n listening: 'Écoute',\n processing: 'Traitement',\n talkToInterrupt: 'Parlez pour interrompre',\n startVoice: 'Démarrer la voix',\n stopVoice: 'Arrêter la voix',\n endCall: \"Terminer l'appel\",\n openChat: 'Ouvrir le chat',\n connectionFailed: 'Connexion échouée',\n retry: 'Réessayer',\n loading: 'Chargement',\n creditsExhausted: 'Crédits épuisés',\n creditsExhaustedDetail: 'Cette session a épuisé ses crédits.',\n consentTitle: 'Consentement à la confidentialité',\n consentBody: 'En continuant, vous acceptez la collecte et le traitement de vos données comme décrit dans nos',\n consentAccept: 'Accepter',\n consentDecline: 'Refuser',\n consentTermsLink: 'Conditions d\\'utilisation',\n consentPrivacyLink: 'Politique de confidentialité',\n refresh: 'Actualiser',\n ratingQuestion: 'Comment s’est passée cette conversation ?',\n ratingThankYou: 'Merci pour votre retour !',\n youEnded: 'Vous avez terminé la conversation',\n agentEnded: 'L’agent a terminé la conversation',\n sessionIdLabel: 'ID :',\n tellUsMore: 'Dites-nous en plus',\n feedbackSubtitle: 'Votre retour nous aide à améliorer notre service et à mieux vous accompagner à l’avenir.',\n feedbackPlaceholder: 'Dites-nous en plus sur votre expérience…',\n submit: 'Envoyer',\n leadFormTitle: 'Coordonnées',\n leadFormSuccess: 'Merci ! Vos informations ont été envoyées.',\n leadFormRequiredError: 'Veuillez remplir tous les champs obligatoires.',\n leadFormGenericError: 'Une erreur est survenue. Veuillez réessayer.',\n leadFormName: 'Nom',\n leadFormEmail: 'E-mail',\n leadFormPhone: 'Téléphone',\n leadFormMessage: 'Votre message',\n};\n\nexport default fr;\n","import type { UiTextKeys } from '../types';\n\nconst gl: UiTextKeys = {\n sendMessage: 'Enviar unha mensaxe',\n send: 'Enviar',\n close: 'Pechar',\n minimize: 'Minimizar',\n maximize: 'Maximizar',\n call: 'Chamar',\n listening: 'Escoitando',\n processing: 'Procesando',\n talkToInterrupt: 'Fale para interromper',\n startVoice: 'Iniciar voz',\n stopVoice: 'Deter voz',\n endCall: 'Finalizar chamada',\n openChat: 'Abrir chat',\n connectionFailed: 'Fallou a conexión',\n retry: 'Tentar de novo',\n loading: 'Cargando',\n creditsExhausted: 'Créditos esgotados',\n creditsExhaustedDetail: 'Esta sesión esgotou os seus créditos.',\n consentTitle: 'Consentimento de Privacidade',\n consentBody: 'Ao continuar, acepta a recollida e o procesamento dos seus datos tal como se describe nos nosos',\n consentAccept: 'Aceptar',\n consentDecline: 'Rexeitar',\n consentTermsLink: 'Termos do servizo',\n consentPrivacyLink: 'Política de privacidade',\n refresh: 'Actualizar',\n ratingQuestion: 'Como foi esta conversa?',\n ratingThankYou: 'Grazas polos teus comentarios!',\n youEnded: 'Ti finalizaches a conversa',\n agentEnded: 'O axente finalizou a conversa',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Cóntanos máis',\n feedbackSubtitle: 'Os teus comentarios axúdannos a mellorar o servizo e a apoiarte mellor no futuro.',\n feedbackPlaceholder: 'Cóntanos máis sobre a túa experiencia…',\n submit: 'Enviar',\n leadFormTitle: 'Información de contacto',\n leadFormSuccess: 'Grazas! Os teus datos foron enviados.',\n leadFormRequiredError: 'Cubra todos os campos obrigatorios.',\n leadFormGenericError: 'Algo saíu mal. Téntao de novo.',\n leadFormName: 'Nome',\n leadFormEmail: 'Correo electrónico',\n leadFormPhone: 'Teléfono',\n leadFormMessage: 'A túa mensaxe',\n};\n\nexport default gl;\n","import type { UiTextKeys } from '../types';\n\nconst de: UiTextKeys = {\n sendMessage: 'Nachricht senden',\n send: 'Senden',\n close: 'Schließen',\n minimize: 'Minimieren',\n maximize: 'Maximieren',\n call: 'Anrufen',\n listening: 'Hört zu',\n processing: 'Verarbeitung',\n talkToInterrupt: 'Sprechen zum Unterbrechen',\n startVoice: 'Sprache starten',\n stopVoice: 'Sprache stoppen',\n endCall: 'Anruf beenden',\n openChat: 'Chat öffnen',\n connectionFailed: 'Verbindung fehlgeschlagen',\n retry: 'Erneut versuchen',\n loading: 'Wird geladen',\n creditsExhausted: 'Guthaben aufgebraucht',\n creditsExhaustedDetail: 'Das Guthaben dieser Sitzung ist aufgebraucht.',\n consentTitle: 'Datenschutz-Einwilligung',\n consentBody: 'Wenn Sie fortfahren, stimmen Sie der Erhebung und Verarbeitung Ihrer Daten wie in unseren beschrieben zu',\n consentAccept: 'Akzeptieren',\n consentDecline: 'Ablehnen',\n consentTermsLink: 'Nutzungsbedingungen',\n consentPrivacyLink: 'Datenschutzerklärung',\n refresh: 'Aktualisieren',\n ratingQuestion: 'Wie war dieses Gespräch?',\n ratingThankYou: 'Danke für dein Feedback!',\n youEnded: 'Du hast das Gespräch beendet',\n agentEnded: 'Der Agent hat das Gespräch beendet',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Erzähl uns mehr',\n feedbackSubtitle: 'Dein Feedback hilft uns, unseren Service zu verbessern und dich in Zukunft besser zu unterstützen.',\n feedbackPlaceholder: 'Erzähl uns mehr über deine Erfahrung…',\n submit: 'Senden',\n leadFormTitle: 'Kontaktinformationen',\n leadFormSuccess: 'Danke! Ihre Angaben wurden übermittelt.',\n leadFormRequiredError: 'Bitte füllen Sie alle Pflichtfelder aus.',\n leadFormGenericError: 'Etwas ist schiefgelaufen. Bitte versuchen Sie es erneut.',\n leadFormName: 'Name',\n leadFormEmail: 'E-Mail',\n leadFormPhone: 'Telefon',\n leadFormMessage: 'Ihre Nachricht',\n};\n\nexport default de;\n","import type { UiTextKeys } from '../types';\n\nconst el: UiTextKeys = {\n sendMessage: 'Αποστολή μηνύματος',\n send: 'Αποστολή',\n close: 'Κλείσιμο',\n minimize: 'Ελαχιστοποίηση',\n maximize: 'Μεγιστοποίηση',\n call: 'Κλήση',\n listening: 'Ακούει',\n processing: 'Επεξεργασία',\n talkToInterrupt: 'Μιλήστε για διακοπή',\n startVoice: 'Έναρξη φωνής',\n stopVoice: 'Διακοπή φωνής',\n endCall: 'Τερματισμός κλήσης',\n openChat: 'Άνοιγμα συνομιλίας',\n connectionFailed: 'Η σύνδεση απέτυχε',\n retry: 'Επανάληψη',\n loading: 'Φόρτωση',\n creditsExhausted: 'Οι πιστώσεις εξαντλήθηκαν',\n creditsExhaustedDetail: 'Οι πιστώσεις αυτής της συνεδρίας εξαντλήθηκαν.',\n consentTitle: 'Συγκατάθεση Απορρήτου',\n consentBody: 'Με τη συνέχιση, συμφωνείτε με τη συλλογή και επεξεργασία των δεδομένων σας όπως περιγράφεται στους',\n consentAccept: 'Αποδοχή',\n consentDecline: 'Απόρριψη',\n consentTermsLink: 'Όροι Υπηρεσίας',\n consentPrivacyLink: 'Πολιτική Απορρήτου',\n refresh: 'Ανανέωση',\n ratingQuestion: 'Πώς ήταν αυτή η συνομιλία;',\n ratingThankYou: 'Ευχαριστούμε για τα σχόλιά σας!',\n youEnded: 'Εσείς τερματίσατε τη συνομιλία',\n agentEnded: 'Ο πράκτορας τερμάτισε τη συνομιλία',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Πείτε μας περισσότερα',\n feedbackSubtitle: 'Τα σχόλιά σας μας βοηθούν να βελτιώσουμε την υπηρεσία μας και να σας υποστηρίξουμε καλύτερα στο μέλλον.',\n feedbackPlaceholder: 'Πείτε μας περισσότερα για την εμπειρία σας…',\n submit: 'Υποβολή',\n leadFormTitle: 'Στοιχεία επικοινωνίας',\n leadFormSuccess: 'Ευχαριστούμε! Τα στοιχεία σας υποβλήθηκαν.',\n leadFormRequiredError: 'Συμπληρώστε όλα τα υποχρεωτικά πεδία.',\n leadFormGenericError: 'Κάτι πήγε στραβά. Δοκιμάστε ξανά.',\n leadFormName: 'Όνομα',\n leadFormEmail: 'E-mail',\n leadFormPhone: 'Τηλέφωνο',\n leadFormMessage: 'Το μήνυμά σας',\n};\n\nexport default el;\n","import type { UiTextKeys } from '../types';\n\nconst gu: UiTextKeys = {\n sendMessage: 'સંદેશ મોકલો',\n send: 'મોકલો',\n close: 'બંધ કરો',\n minimize: 'નાનું કરો',\n maximize: 'મોટું કરો',\n call: 'કૉલ કરો',\n listening: 'સાંભળી રહ્યું છે',\n processing: 'પ્રક્રિયા ચાલુ છે',\n talkToInterrupt: 'રોકવા માટે બોલો',\n startVoice: 'વૉઇસ શરૂ કરો',\n stopVoice: 'વૉઇસ બંધ કરો',\n endCall: 'કૉલ સમાપ્ત કરો',\n openChat: 'ચેટ ખોલો',\n connectionFailed: 'કનેક્શન નિષ્ફળ',\n retry: 'ફરી પ્રયાસ કરો',\n loading: 'લોડ થઈ રહ્યું છે',\n creditsExhausted: 'ક્રેડિટ સમાપ્ત',\n creditsExhaustedDetail: 'આ સત્રની ક્રેડિટ સમાપ્ત થઈ ગઈ છે.',\n consentTitle: 'ગોપનીયતા સંમતિ',\n consentBody: 'આગળ વધીને, તમે અમારા દ્વારા વર્ણવ્યા મુજબ તમારા ડેટાના સંગ્રહ અને પ્રક્રિયા માટે સંમત થાઓ છો',\n consentAccept: 'સ્વીકારો',\n consentDecline: 'નકારો',\n consentTermsLink: 'સેવાની શરતો',\n consentPrivacyLink: 'ગોપનીયતા નીતિ',\n refresh: 'રિફ્રેશ કરો',\n ratingQuestion: 'આ વાતચીત કેવી રહી?',\n ratingThankYou: 'તમારા પ્રતિસાદ બદલ આભાર!',\n youEnded: 'તમે વાતચીત સમાપ્ત કરી',\n agentEnded: 'એજન્ટે વાતચીત સમાપ્ત કરી',\n sessionIdLabel: 'ID:',\n tellUsMore: 'અમને વધુ જણાવો',\n feedbackSubtitle: 'તમારો પ્રતિસાદ અમને અમારી સેવા સુધારવામાં અને ભવિષ્યમાં તમને વધુ સારી રીતે સહાય કરવામાં મદદ કરે છે.',\n feedbackPlaceholder: 'તમારા અનુભવ વિશે અમને વધુ જણાવો…',\n submit: 'સબમિટ કરો',\n leadFormTitle: 'સંપર્ક માહિતી',\n leadFormSuccess: 'આભાર! તમારી વિગતો સબમિટ થઈ ગઈ છે.',\n leadFormRequiredError: 'કૃપા કરીને બધા જરૂરી ફીલ્ડ ભરો.',\n leadFormGenericError: 'કંઈક ખોટું થયું. કૃપા કરી ફરી પ્રયાસ કરો.',\n leadFormName: 'નામ',\n leadFormEmail: 'ઇમેઇલ',\n leadFormPhone: 'ફોન',\n leadFormMessage: 'તમારો સંદેશ',\n};\n\nexport default gu;\n","import type { UiTextKeys } from '../types';\n\nconst hi: UiTextKeys = {\n sendMessage: 'संदेश भेजें',\n send: 'भेजें',\n close: 'बंद करें',\n minimize: 'छोटा करें',\n maximize: 'बड़ा करें',\n call: 'कॉल करें',\n listening: 'सुन रहा है',\n processing: 'प्रोसेस हो रहा है',\n talkToInterrupt: 'रोकने के लिए बोलें',\n startVoice: 'वॉइस शुरू करें',\n stopVoice: 'वॉइस रोकें',\n endCall: 'कॉल समाप्त करें',\n openChat: 'चैट खोलें',\n connectionFailed: 'कनेक्शन विफल',\n retry: 'फिर कोशिश करें',\n loading: 'लोड हो रहा है',\n creditsExhausted: 'क्रेडिट समाप्त',\n creditsExhaustedDetail: 'इस सत्र के क्रेडिट समाप्त हो गए हैं।',\n consentTitle: 'गोपनीयता सहमति',\n consentBody: 'आगे बढ़ने पर, आप हमारे द्वारा वर्णित अनुसार अपने डेटा के संग्रह और प्रसंस्करण के लिए सहमत होते हैं',\n consentAccept: 'स्वीकार करें',\n consentDecline: 'अस्वीकार करें',\n consentTermsLink: 'सेवा की शर्तें',\n consentPrivacyLink: 'गोपनीयता नीति',\n refresh: 'रिफ्रेश करें',\n ratingQuestion: 'यह बातचीत कैसी रही?',\n ratingThankYou: 'आपकी प्रतिक्रिया के लिए धन्यवाद!',\n youEnded: 'आपने बातचीत समाप्त की',\n agentEnded: 'एजेंट ने बातचीत समाप्त की',\n sessionIdLabel: 'आईडी:',\n tellUsMore: 'हमें और बताएं',\n feedbackSubtitle: 'आपकी प्रतिक्रिया हमें अपनी सेवा बेहतर बनाने और भविष्य में आपकी बेहतर सहायता करने में मदद करती है।',\n feedbackPlaceholder: 'अपने अनुभव के बारे में हमें और बताएं…',\n submit: 'सबमिट करें',\n leadFormTitle: 'संपर्क जानकारी',\n leadFormSuccess: 'धन्यवाद! आपकी जानकारी सबमिट कर दी गई है।',\n leadFormRequiredError: 'कृपया सभी आवश्यक फ़ील्ड भरें।',\n leadFormGenericError: 'कुछ गलत हो गया। कृपया पुनः प्रयास करें।',\n leadFormName: 'नाम',\n leadFormEmail: 'ईमेल',\n leadFormPhone: 'फ़ोन',\n leadFormMessage: 'आपका संदेश',\n};\n\nexport default hi;\n","import type { UiTextKeys } from '../types';\n\nconst hu: UiTextKeys = {\n sendMessage: 'Üzenet küldése',\n send: 'Küldés',\n close: 'Bezárás',\n minimize: 'Kis méret',\n maximize: 'Teljes méret',\n call: 'Hívás',\n listening: 'Figyel',\n processing: 'Feldolgozás',\n talkToInterrupt: 'Beszéljen a megszakításhoz',\n startVoice: 'Hang indítása',\n stopVoice: 'Hang leállítása',\n endCall: 'Hívás befejezése',\n openChat: 'Csevegés megnyitása',\n connectionFailed: 'A kapcsolat sikertelen',\n retry: 'Újrapróbálkozás',\n loading: 'Betöltés',\n creditsExhausted: 'Kreditek elfogytak',\n creditsExhaustedDetail: 'Ennek a munkamenetnek a kreditjei elfogytak.',\n consentTitle: 'Adatvédelmi hozzájárulás',\n consentBody: 'A folytatással Ön hozzájárul adatainak gyűjtéséhez és feldolgozásához a mi',\n consentAccept: 'Elfogadás',\n consentDecline: 'Elutasítás',\n consentTermsLink: 'Szolgáltatási feltételek',\n consentPrivacyLink: 'Adatvédelmi irányelvek',\n refresh: 'Frissítés',\n ratingQuestion: 'Milyen volt ez a beszélgetés?',\n ratingThankYou: 'Köszönjük a visszajelzését!',\n youEnded: 'Ön fejezte be a beszélgetést',\n agentEnded: 'Az ügynök fejezte be a beszélgetést',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Mondjon többet',\n feedbackSubtitle: 'Visszajelzése segít nekünk fejleszteni szolgáltatásunkat, és a jövőben jobban támogatni Önt.',\n feedbackPlaceholder: 'Mondjon többet az élményéről…',\n submit: 'Küldés',\n leadFormTitle: 'Elérhetőségi adatok',\n leadFormSuccess: 'Köszönjük! Az adatait elküldtük.',\n leadFormRequiredError: 'Kérjük, töltse ki az összes kötelező mezőt.',\n leadFormGenericError: 'Valami hiba történt. Kérjük, próbálja újra.',\n leadFormName: 'Név',\n leadFormEmail: 'E-mail',\n leadFormPhone: 'Telefon',\n leadFormMessage: 'Üzenete',\n};\n\nexport default hu;\n","import type { UiTextKeys } from '../types';\n\nconst id: UiTextKeys = {\n sendMessage: 'Kirim pesan',\n send: 'Kirim',\n close: 'Tutup',\n minimize: 'Minimalkan',\n maximize: 'Maksimalkan',\n call: 'Panggil',\n listening: 'Mendengarkan',\n processing: 'Memproses',\n talkToInterrupt: 'Bicara untuk menyela',\n startVoice: 'Mulai suara',\n stopVoice: 'Hentikan suara',\n endCall: 'Akhiri panggilan',\n openChat: 'Buka obrolan',\n connectionFailed: 'Koneksi gagal',\n retry: 'Coba lagi',\n loading: 'Memuat',\n creditsExhausted: 'Kredit Habis',\n creditsExhaustedDetail: 'Kredit sesi ini telah habis.',\n consentTitle: 'Persetujuan Privasi',\n consentBody: 'Dengan melanjutkan, Anda menyetujui pengumpulan dan pemrosesan data Anda seperti yang dijelaskan dalam',\n consentAccept: 'Terima',\n consentDecline: 'Tolak',\n consentTermsLink: 'Ketentuan Layanan',\n consentPrivacyLink: 'Kebijakan Privasi',\n refresh: 'Segarkan',\n ratingQuestion: 'Bagaimana percakapan ini?',\n ratingThankYou: 'Terima kasih atas masukan Anda!',\n youEnded: 'Anda mengakhiri percakapan',\n agentEnded: 'Agen mengakhiri percakapan',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Ceritakan lebih banyak',\n feedbackSubtitle: 'Masukan Anda membantu kami meningkatkan layanan dan mendukung Anda lebih baik di masa depan.',\n feedbackPlaceholder: 'Ceritakan lebih banyak tentang pengalaman Anda…',\n submit: 'Kirim',\n leadFormTitle: 'Informasi kontak',\n leadFormSuccess: 'Terima kasih! Detail Anda telah dikirim.',\n leadFormRequiredError: 'Harap isi semua kolom yang wajib diisi.',\n leadFormGenericError: 'Terjadi kesalahan. Silakan coba lagi.',\n leadFormName: 'Nama',\n leadFormEmail: 'Email',\n leadFormPhone: 'Telepon',\n leadFormMessage: 'Pesan Anda',\n};\n\nexport default id;\n","import type { UiTextKeys } from '../types';\n\nconst it: UiTextKeys = {\n sendMessage: 'Invia un messaggio',\n send: 'Invia',\n close: 'Chiudi',\n minimize: 'Riduci',\n maximize: 'Ingrandisci',\n call: 'Chiama',\n listening: 'In ascolto',\n processing: 'Elaborazione',\n talkToInterrupt: 'Parla per interrompere',\n startVoice: 'Avvia voce',\n stopVoice: 'Ferma voce',\n endCall: 'Termina chiamata',\n openChat: 'Apri chat',\n connectionFailed: 'Connessione non riuscita',\n retry: 'Riprova',\n loading: 'Caricamento',\n creditsExhausted: 'Crediti esauriti',\n creditsExhaustedDetail: 'Questa sessione ha esaurito i crediti.',\n consentTitle: 'Consenso alla privacy',\n consentBody: 'Proseguendo, accetti la raccolta e il trattamento dei tuoi dati come descritto nei nostri',\n consentAccept: 'Accetta',\n consentDecline: 'Rifiuta',\n consentTermsLink: 'Termini di servizio',\n consentPrivacyLink: 'Informativa sulla privacy',\n refresh: 'Aggiorna',\n ratingQuestion: 'Com’è andata questa conversazione?',\n ratingThankYou: 'Grazie per il tuo feedback!',\n youEnded: 'Hai terminato tu la conversazione',\n agentEnded: 'L’agente ha terminato la conversazione',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Dicci di più',\n feedbackSubtitle: 'Il tuo feedback ci aiuta a migliorare il servizio e a supportarti meglio in futuro.',\n feedbackPlaceholder: 'Raccontaci di più sulla tua esperienza…',\n submit: 'Invia',\n leadFormTitle: 'Informazioni di contatto',\n leadFormSuccess: 'Grazie! I tuoi dati sono stati inviati.',\n leadFormRequiredError: 'Compila tutti i campi obbligatori.',\n leadFormGenericError: 'Qualcosa è andato storto. Riprova.',\n leadFormName: 'Nome',\n leadFormEmail: 'E-mail',\n leadFormPhone: 'Telefono',\n leadFormMessage: 'Il tuo messaggio',\n};\n\nexport default it;\n","import type { UiTextKeys } from '../types';\n\nconst ja: UiTextKeys = {\n sendMessage: 'メッセージを送信',\n send: '送信',\n close: '閉じる',\n minimize: '最小化',\n maximize: '最大化',\n call: '通話',\n listening: '聞き取り中',\n processing: '処理中',\n talkToInterrupt: '話して中断',\n startVoice: '音声を開始',\n stopVoice: '音声を停止',\n endCall: '通話終了',\n openChat: 'チャットを開く',\n connectionFailed: '接続に失敗しました',\n retry: '再試行',\n loading: '読み込み中',\n creditsExhausted: 'クレジット切れ',\n creditsExhaustedDetail: 'このセッションのクレジットがなくなりました。',\n consentTitle: 'プライバシー同意',\n consentBody: '続行すると、当社に記載されているように、お客様のデータの収集と処理に同意したことになります。',\n consentAccept: '同意する',\n consentDecline: '拒否する',\n consentTermsLink: '利用規約',\n consentPrivacyLink: 'プライバシーポリシー',\n refresh: 'リフレッシュ',\n ratingQuestion: 'この会話はいかがでしたか?',\n ratingThankYou: 'フィードバックをありがとうございます!',\n youEnded: 'あなたが会話を終了しました',\n agentEnded: 'エージェントが会話を終了しました',\n sessionIdLabel: 'ID:',\n tellUsMore: '詳しく教えてください',\n feedbackSubtitle: 'いただいたフィードバックは、サービスの改善と今後のより良いサポートに役立ちます。',\n feedbackPlaceholder: 'ご体験について詳しくお聞かせください…',\n submit: '送信',\n leadFormTitle: '連絡先情報',\n leadFormSuccess: 'ありがとうございます!情報が送信されました。',\n leadFormRequiredError: '必須項目をすべて入力してください。',\n leadFormGenericError: '問題が発生しました。もう一度お試しください。',\n leadFormName: 'お名前',\n leadFormEmail: 'メールアドレス',\n leadFormPhone: '電話番号',\n leadFormMessage: 'メッセージ',\n};\n\nexport default ja;\n","import type { UiTextKeys } from '../types';\n\nconst kn: UiTextKeys = {\n sendMessage: 'ಸಂದೇಶ ಕಳುಹಿಸಿ',\n send: 'ಕಳುಹಿಸಿ',\n close: 'ಮುಚ್ಚಿ',\n minimize: 'ಚಿಕ್ಕದಾಗಿಸು',\n maximize: 'ದೊಡ್ಡದಾಗಿಸು',\n call: 'ಕರೆ ಮಾಡಿ',\n listening: 'ಕೇಳುತ್ತಿದೆ',\n processing: 'ಪ್ರಕ್ರಿಯೆಗೊಳಿಸುತ್ತಿದೆ',\n talkToInterrupt: 'ತಡೆಯಲು ಮಾತನಾಡಿ',\n startVoice: 'ಧ್ವನಿ ಪ್ರಾರಂಭಿಸಿ',\n stopVoice: 'ಧ್ವನಿ ನಿಲ್ಲಿಸಿ',\n endCall: 'ಕರೆ ಕೊನೆಗೊಳಿಸಿ',\n openChat: 'ಚಾಟ್ ತೆರೆಯಿರಿ',\n connectionFailed: 'ಸಂಪರ್ಕ ವಿಫಲವಾಗಿದೆ',\n retry: 'ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ',\n loading: 'ಲೋಡ್ ಆಗುತ್ತಿದೆ',\n creditsExhausted: 'ಕ್ರೆಡಿಟ್‌ಗಳು ಮುಗಿದಿವೆ',\n creditsExhaustedDetail: 'ಈ ಸೆಷನ್‌ನ ಕ್ರೆಡಿಟ್‌ಗಳು ಮುಗಿದಿವೆ.',\n consentTitle: 'ಗೌಪ್ಯತೆ ಒಪ್ಪಿಗೆ',\n consentBody: 'ಮುಂದುವರಿಯುವ ಮೂಲಕ, ನಮ್ಮಲ್ಲಿ ವಿವರಿಸಿದಂತೆ ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಸಂಗ್ರಹಿಸುವುದು ಮತ್ತು ಸಂಸ್ಕರಿಸುವುದನ್ನು ನೀವು ಒಪ್ಪುತ್ತೀರಿ',\n consentAccept: 'ಸ್ವೀಕರಿಸಿ',\n consentDecline: 'ನಿರಾಕರಿಸಿ',\n consentTermsLink: 'ಸೇವೆಯ ನಿಯಮಗಳು',\n consentPrivacyLink: 'ಗೌಪ್ಯತೆ ನೀತಿ',\n refresh: 'ರಿಫ್ರೆಶ್ ಮಾಡಿ',\n ratingQuestion: 'ಈ ಸಂಭಾಷಣೆ ಹೇಗಿತ್ತು?',\n ratingThankYou: 'ನಿಮ್ಮ ಪ್ರತಿಕ್ರಿಯೆಗೆ ಧನ್ಯವಾದಗಳು!',\n youEnded: 'ನೀವು ಸಂಭಾಷಣೆಯನ್ನು ಕೊನೆಗೊಳಿಸಿದ್ದೀರಿ',\n agentEnded: 'ಏಜೆಂಟ್ ಸಂಭಾಷಣೆಯನ್ನು ಕೊನೆಗೊಳಿಸಿದ್ದಾರೆ',\n sessionIdLabel: 'ID:',\n tellUsMore: 'ನಮಗೆ ಇನ್ನಷ್ಟು ತಿಳಿಸಿ',\n feedbackSubtitle: 'ನಿಮ್ಮ ಪ್ರತಿಕ್ರಿಯೆ ನಮ್ಮ ಸೇವೆಯನ್ನು ಸುಧಾರಿಸಲು ಮತ್ತು ಭವಿಷ್ಯದಲ್ಲಿ ನಿಮಗೆ ಉತ್ತಮ ಬೆಂಬಲ ನೀಡಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ.',\n feedbackPlaceholder: 'ನಿಮ್ಮ ಅನುಭವದ ಬಗ್ಗೆ ನಮಗೆ ಇನ್ನಷ್ಟು ತಿಳಿಸಿ…',\n submit: 'ಸಲ್ಲಿಸಿ',\n leadFormTitle: 'ಸಂಪರ್ಕ ಮಾಹಿತಿ',\n leadFormSuccess: 'ಧನ್ಯವಾದಗಳು! ನಿಮ್ಮ ವಿವರಗಳನ್ನು ಸಲ್ಲಿಸಲಾಗಿದೆ.',\n leadFormRequiredError: 'ದಯವಿಟ್ಟು ಎಲ್ಲಾ ಅಗತ್ಯ ಕ್ಷೇತ್ರಗಳನ್ನು ಭರ್ತಿ ಮಾಡಿ.',\n leadFormGenericError: 'ಏನೋ ತಪ್ಪಾಗಿದೆ. ದಯವಿಟ್ಟು ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ.',\n leadFormName: 'ಹೆಸರು',\n leadFormEmail: 'ಇಮೇಲ್',\n leadFormPhone: 'ಫೋನ್',\n leadFormMessage: 'ನಿಮ್ಮ ಸಂದೇಶ',\n};\n\nexport default kn;\n","import type { UiTextKeys } from '../types';\n\nconst kk: UiTextKeys = {\n sendMessage: 'Хабарлама жіберу',\n send: 'Жіберу',\n close: 'Жабу',\n minimize: 'Кішірейту',\n maximize: 'Үлкейту',\n call: 'Қоңырау шалу',\n listening: 'Тыңдауда',\n processing: 'Өңдеу',\n talkToInterrupt: 'Үзу үшін сөйлеңіз',\n startVoice: 'Дауысты бастау',\n stopVoice: 'Дауысты тоқтату',\n endCall: 'Қоңырауды аяқтау',\n openChat: 'Чатты ашу',\n connectionFailed: 'Қосылым сәтсіз аяқталды',\n retry: 'Қайталау',\n loading: 'Жүктелуде',\n creditsExhausted: 'Кредиттер таусылды',\n creditsExhaustedDetail: 'Бұл сессияның кредиттері таусылды.',\n consentTitle: 'Құпиялылық келісімі',\n consentBody: 'Жалғастыру арқылы сіз деректеріңізді жинауға және өңдеуге келісім бересіз',\n consentAccept: 'Қабылдау',\n consentDecline: 'Қабылдамау',\n consentTermsLink: 'Қызмет көрсету шарттары',\n consentPrivacyLink: 'Құпиялылық саясаты',\n refresh: 'Жаңарту',\n ratingQuestion: 'Бұл әңгіме қалай өтті?',\n ratingThankYou: 'Пікіріңіз үшін рахмет!',\n youEnded: 'Әңгімені сіз аяқтадыңыз',\n agentEnded: 'Агент әңгімені аяқтады',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Бізге көбірек айтыңыз',\n feedbackSubtitle: 'Пікіріңіз бізге қызметімізді жақсартуға және болашақта сізге жақсырақ қолдау көрсетуге көмектеседі.',\n feedbackPlaceholder: 'Тәжірибеңіз туралы бізге көбірек айтыңыз…',\n submit: 'Жіберу',\n leadFormTitle: 'Байланыс ақпараты',\n leadFormSuccess: 'Рахмет! Сіздің деректеріңіз жіберілді.',\n leadFormRequiredError: 'Барлық міндетті жолдарды толтырыңыз.',\n leadFormGenericError: 'Бірдеңе қате кетті. Қайталап көріңіз.',\n leadFormName: 'Аты',\n leadFormEmail: 'Электрондық пошта',\n leadFormPhone: 'Телефон',\n leadFormMessage: 'Сіздің хабарламаңыз',\n};\n\nexport default kk;\n","import type { UiTextKeys } from '../types';\n\nconst ko: UiTextKeys = {\n sendMessage: '메시지 보내기',\n send: '보내기',\n close: '닫기',\n minimize: '최소화',\n maximize: '최대화',\n call: '전화',\n listening: '듣는 중',\n processing: '처리 중',\n talkToInterrupt: '말해서 중단',\n startVoice: '음성 시작',\n stopVoice: '음성 중지',\n endCall: '통화 종료',\n openChat: '채팅 열기',\n connectionFailed: '연결 실패',\n retry: '다시 시도',\n loading: '로딩 중',\n creditsExhausted: '크레딧 소진',\n creditsExhaustedDetail: '이 세션의 크레딧이 모두 소진되었습니다.',\n consentTitle: '개인정보 동의',\n consentBody: '계속 진행하면 당사에 설명된 대로 데이터 수집 및 처리에 동의하게 됩니다.',\n consentAccept: '동의',\n consentDecline: '거부',\n consentTermsLink: '서비스 이용약관',\n consentPrivacyLink: '개인정보 처리방침',\n refresh: '새로고침',\n ratingQuestion: '이 대화는 어떠셨나요?',\n ratingThankYou: '의견 주셔서 감사합니다!',\n youEnded: '회원님이 대화를 종료했습니다',\n agentEnded: '상담원이 대화를 종료했습니다',\n sessionIdLabel: 'ID:',\n tellUsMore: '더 알려주세요',\n feedbackSubtitle: '의견은 서비스를 개선하고 앞으로 더 나은 지원을 제공하는 데 도움이 됩니다.',\n feedbackPlaceholder: '경험에 대해 더 알려주세요…',\n submit: '제출',\n leadFormTitle: '연락처 정보',\n leadFormSuccess: '감사합니다! 정보가 제출되었습니다.',\n leadFormRequiredError: '필수 항목을 모두 입력해 주세요.',\n leadFormGenericError: '문제가 발생했습니다. 다시 시도해 주세요.',\n leadFormName: '이름',\n leadFormEmail: '이메일',\n leadFormPhone: '전화번호',\n leadFormMessage: '메시지',\n};\n\nexport default ko;\n","import type { UiTextKeys } from '../types';\n\nconst lv: UiTextKeys = {\n sendMessage: 'Sūtīt ziņojumu',\n send: 'Sūtīt',\n close: 'Aizvērt',\n minimize: 'Minimizēt',\n maximize: 'Maksimizēt',\n call: 'Zvanīt',\n listening: 'Klausās',\n processing: 'Apstrādā',\n talkToInterrupt: 'Runājiet, lai pārtrauktu',\n startVoice: 'Sākt balsi',\n stopVoice: 'Pārtraukt balsi',\n endCall: 'Beigt zvanu',\n openChat: 'Atvērt tērzēšanu',\n connectionFailed: 'Savienojums neizdevās',\n retry: 'Mēģināt vēlreiz',\n loading: 'Ielādē',\n creditsExhausted: 'Kredīti izsmelti',\n creditsExhaustedDetail: 'Šīs sesijas kredīti ir izsmelti.',\n consentTitle: 'Piekrišana privātumam',\n consentBody: 'Turpinot, jūs piekrītat savu datu vākšanai un apstrādei, kā aprakstīts mūsu',\n consentAccept: 'Piekrist',\n consentDecline: 'Noraidīt',\n consentTermsLink: 'Pakalpojuma noteikumi',\n consentPrivacyLink: 'Privātuma politika',\n refresh: 'Atjaunot',\n ratingQuestion: 'Kāda bija šī saruna?',\n ratingThankYou: 'Paldies par jūsu atsauksmi!',\n youEnded: 'Jūs pabeidzāt sarunu',\n agentEnded: 'Aģents pabeidza sarunu',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Pastāstiet mums vairāk',\n feedbackSubtitle: 'Jūsu atsauksme palīdz mums uzlabot pakalpojumu un nākotnē jūs labāk atbalstīt.',\n feedbackPlaceholder: 'Pastāstiet mums vairāk par savu pieredzi…',\n submit: 'Iesniegt',\n leadFormTitle: 'Kontaktinformācija',\n leadFormSuccess: 'Paldies! Jūsu dati ir iesniegti.',\n leadFormRequiredError: 'Lūdzu, aizpildiet visus obligātos laukus.',\n leadFormGenericError: 'Kaut kas noticis nepareizi. Lūdzu, mēģiniet vēlreiz.',\n leadFormName: 'Vārds',\n leadFormEmail: 'E-pasts',\n leadFormPhone: 'Tālrunis',\n leadFormMessage: 'Jūsu ziņojums',\n};\n\nexport default lv;\n","import type { UiTextKeys } from '../types';\n\nconst lt: UiTextKeys = {\n sendMessage: 'Siųsti žinutę',\n send: 'Siųsti',\n close: 'Uždaryti',\n minimize: 'Sumažinti',\n maximize: 'Padidinti',\n call: 'Skambinti',\n listening: 'Klausosi',\n processing: 'Apdorojama',\n talkToInterrupt: 'Kalbėkite, kad pertrauktumėte',\n startVoice: 'Pradėti balsą',\n stopVoice: 'Sustabdyti balsą',\n endCall: 'Baigti skambutį',\n openChat: 'Atidaryti pokalbį',\n connectionFailed: 'Ryšys nepavyko',\n retry: 'Bandyti dar kartą',\n loading: 'Įkeliama',\n creditsExhausted: 'Kreditai išnaudoti',\n creditsExhaustedDetail: 'Šios sesijos kreditai išnaudoti.',\n consentTitle: 'Sutikimas dėl privatumo',\n consentBody: 'Tęsdami sutinkate, kad jūsų duomenys būtų renkami ir tvarkomi, kaip aprašyta mūsų',\n consentAccept: 'Sutikti',\n consentDecline: 'Atmesti',\n consentTermsLink: 'Paslaugų teikimo sąlygos',\n consentPrivacyLink: 'Privatumo politika',\n refresh: 'Atnaujinti',\n ratingQuestion: 'Kokie buvo šie pokalbiai?',\n ratingThankYou: 'Ačiū už jūsų atsiliepimą!',\n youEnded: 'Jūs užbaigėte pokalbį',\n agentEnded: 'Agentas užbaigė pokalbį',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Papasakokite daugiau',\n feedbackSubtitle: 'Jūsų atsiliepimas padeda mums tobulinti paslaugą ir ateityje geriau jus aptarnauti.',\n feedbackPlaceholder: 'Papasakokite daugiau apie savo patirtį…',\n submit: 'Pateikti',\n leadFormTitle: 'Kontaktinė informacija',\n leadFormSuccess: 'Dėkojame! Jūsų duomenys buvo pateikti.',\n leadFormRequiredError: 'Užpildykite visus privalomus laukus.',\n leadFormGenericError: 'Kažkas nutiko negerai. Bandykite dar kartą.',\n leadFormName: 'Vardas',\n leadFormEmail: 'El. paštas',\n leadFormPhone: 'Telefonas',\n leadFormMessage: 'Jūsų žinutė',\n};\n\nexport default lt;\n","import type { UiTextKeys } from '../types';\n\nconst mk: UiTextKeys = {\n sendMessage: 'Испрати порака',\n send: 'Испрати',\n close: 'Затвори',\n minimize: 'Минимизирај',\n maximize: 'Максимизирај',\n call: 'Повикај',\n listening: 'Слуша',\n processing: 'Обработува',\n talkToInterrupt: 'Зборувајте за прекинување',\n startVoice: 'Започни глас',\n stopVoice: 'Запри глас',\n endCall: 'Заврши повик',\n openChat: 'Отвори чет',\n connectionFailed: 'Поврзувањето не успеа',\n retry: 'Обиди се повторно',\n loading: 'Се вчитува',\n creditsExhausted: 'Кредитите се потрошени',\n creditsExhaustedDetail: 'Кредитите на оваа сесија се потрошени.',\n consentTitle: 'Согласност за приватност',\n consentBody: 'Продолжувајќи, се согласувате со собирањето и обработката на вашите податоци како што е опишано во нашите',\n consentAccept: 'Прифати',\n consentDecline: 'Одбиј',\n consentTermsLink: 'Услови за користење',\n consentPrivacyLink: 'Политика за приватност',\n refresh: 'Обнови',\n ratingQuestion: 'Каков беше овој разговор?',\n ratingThankYou: 'Ви благодариме за вашата повратна информација!',\n youEnded: 'Вие го завршивте разговорот',\n agentEnded: 'Агентот го заврши разговорот',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Кажете ни повеќе',\n feedbackSubtitle: 'Вашата повратна информација ни помага да ја подобриме услугата и подобро да ве поддржиме во иднина.',\n feedbackPlaceholder: 'Кажете ни повеќе за вашето искуство…',\n submit: 'Испрати',\n leadFormTitle: 'Информации за контакт',\n leadFormSuccess: 'Ви благодариме! Вашите податоци се испратени.',\n leadFormRequiredError: 'Пополнете ги сите задолжителни полиња.',\n leadFormGenericError: 'Нешто тргна наопаку. Пробајте повторно.',\n leadFormName: 'Име',\n leadFormEmail: 'Е-пошта',\n leadFormPhone: 'Телефон',\n leadFormMessage: 'Вашата порака',\n};\n\nexport default mk;\n","import type { UiTextKeys } from '../types';\n\nconst ms: UiTextKeys = {\n sendMessage: 'Hantar mesej',\n send: 'Hantar',\n close: 'Tutup',\n minimize: 'Minimumkan',\n maximize: 'Maksimumkan',\n call: 'Panggil',\n listening: 'Mendengar',\n processing: 'Memproses',\n talkToInterrupt: 'Bercakap untuk mengganggu',\n startVoice: 'Mulakan suara',\n stopVoice: 'Hentikan suara',\n endCall: 'Tamatkan panggilan',\n openChat: 'Buka sembang',\n connectionFailed: 'Sambungan gagal',\n retry: 'Cuba lagi',\n loading: 'Memuatkan',\n creditsExhausted: 'Kredit Habis',\n creditsExhaustedDetail: 'Kredit sesi ini telah habis.',\n consentTitle: 'Persetujuan Privasi',\n consentBody: 'Dengan meneruskan, anda bersetuju dengan pengumpulan dan pemprosesan data anda seperti yang diterangkan dalam',\n consentAccept: 'Terima',\n consentDecline: 'Tolak',\n consentTermsLink: 'Terma Perkhidmatan',\n consentPrivacyLink: 'Dasar Privasi',\n refresh: 'Muat semula',\n ratingQuestion: 'Bagaimana perbualan ini?',\n ratingThankYou: 'Terima kasih atas maklum balas anda!',\n youEnded: 'Anda menamatkan perbualan',\n agentEnded: 'Ejen menamatkan perbualan',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Beritahu kami lebih lanjut',\n feedbackSubtitle: 'Maklum balas anda membantu kami menambah baik perkhidmatan dan menyokong anda dengan lebih baik pada masa depan.',\n feedbackPlaceholder: 'Beritahu kami lebih lanjut tentang pengalaman anda…',\n submit: 'Hantar',\n leadFormTitle: 'Maklumat hubungan',\n leadFormSuccess: 'Terima kasih! Butiran anda telah dihantar.',\n leadFormRequiredError: 'Sila isi semua ruangan yang diperlukan.',\n leadFormGenericError: 'Sesuatu tidak kena. Sila cuba lagi.',\n leadFormName: 'Nama',\n leadFormEmail: 'E-mel',\n leadFormPhone: 'Telefon',\n leadFormMessage: 'Mesej anda',\n};\n\nexport default ms;\n","import type { UiTextKeys } from '../types';\n\nconst ml: UiTextKeys = {\n sendMessage: 'ഒരു സന്ദേശം അയയ്‌ക്കുക',\n send: 'അയയ്‌ക്കുക',\n close: 'അടയ്‌ക്കുക',\n minimize: 'ചെറുതാക്കുക',\n maximize: 'വലുതാക്കുക',\n call: 'വിളിക്കുക',\n listening: 'ശ്രദ്ധിക്കുന്നു',\n processing: 'പ്രോസസ്സ് ചെയ്യുന്നു',\n talkToInterrupt: 'തടസ്സപ്പെടുത്താൻ സംസാരിക്കുക',\n startVoice: 'ശബ്ദം ആരംഭിക്കുക',\n stopVoice: 'ശബ്ദം നിർത്തുക',\n endCall: 'കോൾ അവസാനിപ്പിക്കുക',\n openChat: 'ചാറ്റ് തുറക്കുക',\n connectionFailed: 'കണക്ഷൻ പരാജയപ്പെട്ടു',\n retry: 'വീണ്ടും ശ്രമിക്കുക',\n loading: 'ലോഡുചെയ്യുന്നു',\n creditsExhausted: 'ക്രെഡിറ്റുകൾ തീർന്നു',\n creditsExhaustedDetail: 'ഈ സെഷന്റെ ക്രെഡിറ്റുകൾ തീർന്നിരിക്കുന്നു.',\n consentTitle: 'സ്വകാര്യത സമ്മതം',\n consentBody: 'തുടരുന്നതിലൂടെ, ഞങ്ങളിൽ വിവരിച്ചിരിക്കുന്ന പ്രകാരം നിങ്ങളുടെ ഡാറ്റ ശേഖരിക്കുന്നതിനും പ്രോസസ്സ് ചെയ്യുന്നതിനും നിങ്ങൾ സമ്മതിക്കുന്നു',\n consentAccept: 'സ്വീകരിക്കുക',\n consentDecline: 'നിരസിക്കുക',\n consentTermsLink: 'സേവന നിബന്ധനകൾ',\n consentPrivacyLink: 'സ്വകാര്യതാ നയം',\n refresh: 'പുതുക്കുക',\n ratingQuestion: 'ഈ സംഭാഷണം എങ്ങനെയായിരുന്നു?',\n ratingThankYou: 'നിങ്ങളുടെ പ്രതികരണത്തിന് നന്ദി!',\n youEnded: 'നിങ്ങൾ സംഭാഷണം അവസാനിപ്പിച്ചു',\n agentEnded: 'ഏജന്റ് സംഭാഷണം അവസാനിപ്പിച്ചു',\n sessionIdLabel: 'ID:',\n tellUsMore: 'ഞങ്ങളോട് കൂടുതൽ പറയൂ',\n feedbackSubtitle: 'നിങ്ങളുടെ പ്രതികരണം ഞങ്ങളുടെ സേവനം മെച്ചപ്പെടുത്താനും ഭാവിയിൽ നിങ്ങളെ മികച്ച രീതിയിൽ പിന്തുണയ്ക്കാനും സഹായിക്കുന്നു.',\n feedbackPlaceholder: 'നിങ്ങളുടെ അനുഭവത്തെക്കുറിച്ച് കൂടുതൽ പറയൂ…',\n submit: 'സമർപ്പിക്കുക',\n leadFormTitle: 'ബന്ധപ്പെടാനുള്ള വിവരങ്ങൾ',\n leadFormSuccess: 'നന്ദി! നിങ്ങളുടെ വിവരങ്ങൾ സമർപ്പിച്ചു.',\n leadFormRequiredError: 'ദയവായി എല്ലാ ആവശ്യമായ ഫീൽഡുകളും പൂരിപ്പിക്കുക.',\n leadFormGenericError: 'എന്തോ കുഴപ്പം സംഭവിച്ചു. വീണ്ടും ശ്രമിക്കുക.',\n leadFormName: 'പേര്',\n leadFormEmail: 'ഇമെയിൽ',\n leadFormPhone: 'ഫോൺ',\n leadFormMessage: 'നിങ്ങളുടെ സന്ദേശം',\n};\n\nexport default ml;\n","import type { UiTextKeys } from '../types';\n\nconst mr: UiTextKeys = {\n sendMessage: 'संदेश पाठवा',\n send: 'पाठवा',\n close: 'बंद करा',\n minimize: 'लहान करा',\n maximize: 'मोठे करा',\n call: 'कॉल करा',\n listening: 'ऐकत आहे',\n processing: 'प्रक्रिया होत आहे',\n talkToInterrupt: 'थांबवण्यासाठी बोला',\n startVoice: 'व्हॉइस सुरू करा',\n stopVoice: 'व्हॉइस थांबवा',\n endCall: 'कॉल समाप्त करा',\n openChat: 'चॅट उघडा',\n connectionFailed: 'कनेक्शन अयशस्वी',\n retry: 'पुन्हा प्रयत्न करा',\n loading: 'लोड होत आहे',\n creditsExhausted: 'क्रेडिट्स संपली',\n creditsExhaustedDetail: 'या सत्राची क्रेडिट्स संपली आहेत.',\n consentTitle: 'गोपनीयता संमती',\n consentBody: 'पुढे जाऊन, आमच्यामध्ये वर्णन केल्याप्रमाणे तुम्ही तुमच्या डेटाच्या संकलन आणि प्रक्रियेस सहमती देता',\n consentAccept: 'स्वीकारा',\n consentDecline: 'नकार द्या',\n consentTermsLink: 'सेवेच्या अटी',\n consentPrivacyLink: 'गोपनीयता धोरण',\n refresh: 'रिफ्रेश करा',\n ratingQuestion: 'हे संभाषण कसे होते?',\n ratingThankYou: 'तुमच्या अभिप्रायाबद्दल धन्यवाद!',\n youEnded: 'तुम्ही संभाषण संपवले',\n agentEnded: 'एजंटने संभाषण संपवले',\n sessionIdLabel: 'ID:',\n tellUsMore: 'आम्हाला अधिक सांगा',\n feedbackSubtitle: 'तुमचा अभिप्राय आम्हाला आमची सेवा सुधारण्यात आणि भविष्यात तुम्हाला अधिक चांगली मदत करण्यात मदत करतो.',\n feedbackPlaceholder: 'तुमच्या अनुभवाबद्दल आम्हाला अधिक सांगा…',\n submit: 'सबमिट करा',\n leadFormTitle: 'संपर्क माहिती',\n leadFormSuccess: 'धन्यवाद! तुमची माहिती सबमिट केली आहे.',\n leadFormRequiredError: 'कृपया सर्व आवश्यक फील्ड भरा.',\n leadFormGenericError: 'काहीतरी चुकले. कृपया पुन्हा प्रयत्न करा.',\n leadFormName: 'नाव',\n leadFormEmail: 'ईमेल',\n leadFormPhone: 'फोन',\n leadFormMessage: 'तुमचा संदेश',\n};\n\nexport default mr;\n","import type { UiTextKeys } from '../types';\n\nconst no: UiTextKeys = {\n sendMessage: 'Send en melding',\n send: 'Send',\n close: 'Lukk',\n minimize: 'Minimer',\n maximize: 'Maksimer',\n call: 'Ring',\n listening: 'Lytter',\n processing: 'Behandler',\n talkToInterrupt: 'Snakk for å avbryte',\n startVoice: 'Start tale',\n stopVoice: 'Stopp tale',\n endCall: 'Avslutt samtale',\n openChat: 'Åpne chat',\n connectionFailed: 'Tilkobling mislyktes',\n retry: 'Prøv igjen',\n loading: 'Laster',\n creditsExhausted: 'Kreditter oppbrukt',\n creditsExhaustedDetail: 'Denne øktens kreditter er oppbrukt.',\n consentTitle: 'Personvernerklæring',\n consentBody: 'Ved å fortsette godtar du innsamling og behandling av dataene dine som beskrevet i våre',\n consentAccept: 'Godta',\n consentDecline: 'Avslå',\n consentTermsLink: 'Vilkår for bruk',\n consentPrivacyLink: 'Personvernpolicy',\n refresh: 'Oppdater',\n ratingQuestion: 'Hvordan var denne samtalen?',\n ratingThankYou: 'Takk for tilbakemeldingen din!',\n youEnded: 'Du avsluttet samtalen',\n agentEnded: 'Agenten avsluttet samtalen',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Fortell oss mer',\n feedbackSubtitle: 'Tilbakemeldingen din hjelper oss med å forbedre tjenesten og støtte deg bedre i fremtiden.',\n feedbackPlaceholder: 'Fortell oss mer om opplevelsen din…',\n submit: 'Send inn',\n leadFormTitle: 'Kontaktinfo',\n leadFormSuccess: 'Takk! Dine opplysninger er sendt.',\n leadFormRequiredError: 'Fyll ut alle obligatoriske felt.',\n leadFormGenericError: 'Noe gikk galt. Prøv igjen.',\n leadFormName: 'Navn',\n leadFormEmail: 'E-post',\n leadFormPhone: 'Telefon',\n leadFormMessage: 'Din melding',\n};\n\nexport default no;\n","import type { UiTextKeys } from '../types';\n\nconst fa: UiTextKeys = {\n sendMessage: 'پیامی بنویسید',\n send: 'ارسال',\n close: 'بستن',\n minimize: 'کوچک کردن',\n maximize: 'بزرگ کردن',\n call: 'تماس بگیر',\n listening: 'در حال شنیدن',\n processing: 'در حال پردازش',\n talkToInterrupt: 'برای قطع کردن صحبت کنید',\n startVoice: 'شروع صدا',\n stopVoice: 'توقف صدا',\n endCall: 'پایان تماس',\n openChat: 'باز کردن گفتگو',\n connectionFailed: 'اتصال ناموفق بود',\n retry: 'تلاش دوباره',\n loading: 'در حال بارگذاری',\n creditsExhausted: 'اعتبار تمام شد',\n creditsExhaustedDetail: 'اعتبار این جلسه تمام شده است.',\n consentTitle: 'رضایت حریم خصوصی',\n consentBody: 'با ادامه، شما با جمع‌آوری و پردازش داده‌های خود همانطور که در شرح داده شده است موافقت می‌کنید',\n consentAccept: 'پذیرش',\n consentDecline: 'رد',\n consentTermsLink: 'شرایط خدمات',\n consentPrivacyLink: 'سیاست حفظ حریم خصوصی',\n refresh: 'بازنشانی',\n ratingQuestion: 'این گفتگو چطور بود؟',\n ratingThankYou: 'از بازخورد شما سپاسگزاریم!',\n youEnded: 'شما گفتگو را پایان دادید',\n agentEnded: 'دستیار گفتگو را پایان داد',\n sessionIdLabel: 'شناسه:',\n tellUsMore: 'بیشتر بگویید',\n feedbackSubtitle: 'بازخورد شما به ما کمک می‌کند خدماتمان را بهبود دهیم و در آینده بهتر از شما پشتیبانی کنیم.',\n feedbackPlaceholder: 'درباره تجربه خود بیشتر بگویید…',\n submit: 'ارسال',\n leadFormTitle: 'اطلاعات تماس',\n leadFormSuccess: 'متشکریم! اطلاعات شما ارسال شد.',\n leadFormRequiredError: 'لطفاً همه فیلدهای ضروری را تکمیل کنید.',\n leadFormGenericError: 'مشکلی پیش آمد. لطفاً دوباره تلاش کنید.',\n leadFormName: 'نام',\n leadFormEmail: 'ایمیل',\n leadFormPhone: 'تلفن',\n leadFormMessage: 'پیام شما',\n};\n\nexport default fa;\n","import type { UiTextKeys } from '../types';\n\nconst pl: UiTextKeys = {\n sendMessage: 'Wyślij wiadomość',\n send: 'Wyślij',\n close: 'Zamknij',\n minimize: 'Minimalizuj',\n maximize: 'Maksymalizuj',\n call: 'Zadzwoń',\n listening: 'Słucha',\n processing: 'Przetwarzanie',\n talkToInterrupt: 'Mów, aby przerwać',\n startVoice: 'Rozpocznij głos',\n stopVoice: 'Zatrzymaj głos',\n endCall: 'Zakończ połączenie',\n openChat: 'Otwórz chat',\n connectionFailed: 'Połączenie nieudane',\n retry: 'Spróbuj ponownie',\n loading: 'Ładowanie',\n creditsExhausted: 'Kredyty wyczerpane',\n creditsExhaustedDetail: 'Ta sesja wykorzystała wszystkie kredyty.',\n consentTitle: 'Zgoda na prywatność',\n consentBody: 'Kontynuując, wyrażasz zgodę na gromadzenie i przetwarzanie swoich danych, jak opisano w naszych',\n consentAccept: 'Akceptuj',\n consentDecline: 'Odrzuć',\n consentTermsLink: 'Warunki korzystania z usługi',\n consentPrivacyLink: 'Polityka prywatności',\n refresh: 'Odśwież',\n ratingQuestion: 'Jak przebiegła ta rozmowa?',\n ratingThankYou: 'Dziękujemy za opinię!',\n youEnded: 'To Ty zakończyłeś rozmowę',\n agentEnded: 'Agent zakończył rozmowę',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Powiedz nam więcej',\n feedbackSubtitle: 'Twoja opinia pomaga nam ulepszać usługę i lepiej wspierać Cię w przyszłości.',\n feedbackPlaceholder: 'Powiedz nam więcej o swoim doświadczeniu…',\n submit: 'Wyślij',\n leadFormTitle: 'Dane kontaktowe',\n leadFormSuccess: 'Dziękujemy! Twoje dane zostały wysłane.',\n leadFormRequiredError: 'Wypełnij wszystkie wymagane pola.',\n leadFormGenericError: 'Coś poszło nie tak. Spróbuj ponownie.',\n leadFormName: 'Imię',\n leadFormEmail: 'E-mail',\n leadFormPhone: 'Telefon',\n leadFormMessage: 'Twoja wiadomość',\n};\n\nexport default pl;\n","import type { UiTextKeys } from '../types';\n\nconst pt: UiTextKeys = {\n sendMessage: 'Enviar mensagem',\n send: 'Enviar',\n close: 'Fechar',\n minimize: 'Minimizar',\n maximize: 'Maximizar',\n call: 'Ligar',\n listening: 'Ouvindo',\n processing: 'Processando',\n talkToInterrupt: 'Fale para interromper',\n startVoice: 'Iniciar voz',\n stopVoice: 'Parar voz',\n endCall: 'Encerrar chamada',\n openChat: 'Abrir chat',\n connectionFailed: 'Falha na conexão',\n retry: 'Tentar novamente',\n loading: 'Carregando',\n creditsExhausted: 'Créditos esgotados',\n creditsExhaustedDetail: 'Esta sessão esgotou os créditos.',\n consentTitle: 'Consentimento de Privacidade',\n consentBody: 'Ao prosseguir, você concorda com a coleta e o processamento dos seus dados conforme descrito em nossos',\n consentAccept: 'Aceitar',\n consentDecline: 'Recusar',\n consentTermsLink: 'Termos de Serviço',\n consentPrivacyLink: 'Política de Privacidade',\n refresh: 'Atualizar',\n ratingQuestion: 'Como foi esta conversa?',\n ratingThankYou: 'Obrigado pelo seu feedback!',\n youEnded: 'Você encerrou a conversa',\n agentEnded: 'O agente encerrou a conversa',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Conte-nos mais',\n feedbackSubtitle: 'Seu feedback nos ajuda a melhorar nosso serviço e a apoiar você melhor no futuro.',\n feedbackPlaceholder: 'Conte-nos mais sobre a sua experiência…',\n submit: 'Enviar',\n leadFormTitle: 'Informações de contacto',\n leadFormSuccess: 'Obrigado! Os seus dados foram enviados.',\n leadFormRequiredError: 'Preencha todos os campos obrigatórios.',\n leadFormGenericError: 'Algo correu mal. Tente novamente.',\n leadFormName: 'Nome',\n leadFormEmail: 'E-mail',\n leadFormPhone: 'Telefone',\n leadFormMessage: 'Sua mensagem',\n};\n\nexport default pt;\n","import type { UiTextKeys } from '../types';\n\nconst pa: UiTextKeys = {\n sendMessage: 'ਇੱਕ ਸੁਨੇਹਾ ਭੇਜੋ',\n send: 'ਭੇਜੋ',\n close: 'ਬੰਦ ਕਰੋ',\n minimize: 'ਛੋਟਾ ਕਰੋ',\n maximize: 'ਵੱਡਾ ਕਰੋ',\n call: 'ਕਾਲ ਕਰੋ',\n listening: 'ਸੁਣ ਰਿਹਾ ਹੈ',\n processing: 'ਪ੍ਰਕਿਰਿਆ ਹੋ ਰਹੀ ਹੈ',\n talkToInterrupt: 'ਰੋਕਣ ਲਈ ਬੋਲੋ',\n startVoice: 'ਵੌਇਸ ਸ਼ੁਰੂ ਕਰੋ',\n stopVoice: 'ਵੌਇਸ ਬੰਦ ਕਰੋ',\n endCall: 'ਕਾਲ ਖਤਮ ਕਰੋ',\n openChat: 'ਚੈਟ ਖੋਲ੍ਹੋ',\n connectionFailed: 'ਕੁਨੈਕਸ਼ਨ ਅਸਫਲ',\n retry: 'ਮੁੜ ਕੋਸ਼ਿਸ਼ ਕਰੋ',\n loading: 'ਲੋਡ ਹੋ ਰਿਹਾ ਹੈ',\n creditsExhausted: 'ਕ੍ਰੈਡਿਟ ਖਤਮ',\n creditsExhaustedDetail: 'ਇਸ ਸੈਸ਼ਨ ਦੇ ਕ੍ਰੈਡਿਟ ਖਤਮ ਹੋ ਗਏ ਹਨ।',\n consentTitle: 'ਗੋਪਨੀਯਤਾ ਸਹਿਮਤੀ',\n consentBody: 'ਅੱਗੇ ਵਧਣ ਨਾਲ, ਤੁਸੀਂ ਸਾਡੇ ਵਿੱਚ ਦੱਸੇ ਅਨੁਸਾਰ ਆਪਣੇ ਡੇਟਾ ਦੇ ਸੰਗ੍ਰਹਿ ਅਤੇ ਪ੍ਰਕਿਰਿਆ ਲਈ ਸਹਿਮਤ ਹੁੰਦੇ ਹੋ',\n consentAccept: 'ਸਵੀਕਾਰ ਕਰੋ',\n consentDecline: 'ਅਸਵੀਕਾਰ ਕਰੋ',\n consentTermsLink: 'ਸੇਵਾ ਦੀਆਂ ਸ਼ਰਤਾਂ',\n consentPrivacyLink: 'ਗੋਪਨੀਯਤਾ ਨੀਤੀ',\n refresh: 'ਰਿਫ੍ਰੈਸ਼ ਕਰੋ',\n ratingQuestion: 'ਇਹ ਗੱਲਬਾਤ ਕਿਵੇਂ ਰਹੀ?',\n ratingThankYou: 'ਤੁਹਾਡੇ ਸੁਝਾਅ ਲਈ ਧੰਨਵਾਦ!',\n youEnded: 'ਤੁਸੀਂ ਗੱਲਬਾਤ ਖ਼ਤਮ ਕੀਤੀ',\n agentEnded: 'ਏਜੰਟ ਨੇ ਗੱਲਬਾਤ ਖ਼ਤਮ ਕੀਤੀ',\n sessionIdLabel: 'ID:',\n tellUsMore: 'ਸਾਨੂੰ ਹੋਰ ਦੱਸੋ',\n feedbackSubtitle: 'ਤੁਹਾਡਾ ਸੁਝਾਅ ਸਾਨੂੰ ਸਾਡੀ ਸੇਵਾ ਸੁਧਾਰਨ ਅਤੇ ਭਵਿੱਖ ਵਿੱਚ ਤੁਹਾਡੀ ਬਿਹਤਰ ਮਦਦ ਕਰਨ ਵਿੱਚ ਸਹਾਇਤਾ ਕਰਦਾ ਹੈ।',\n feedbackPlaceholder: 'ਆਪਣੇ ਅਨੁਭਵ ਬਾਰੇ ਸਾਨੂੰ ਹੋਰ ਦੱਸੋ…',\n submit: 'ਜਮ੍ਹਾਂ ਕਰੋ',\n leadFormTitle: 'ਸੰਪਰਕ ਜਾਣਕਾਰੀ',\n leadFormSuccess: 'ਧੰਨਵਾਦ! ਤੁਹਾਡੀ ਜਾਣਕਾਰੀ ਭੇਜ ਦਿੱਤੀ ਗਈ ਹੈ।',\n leadFormRequiredError: 'ਕਿਰਪਾ ਕਰਕੇ ਸਾਰੇ ਲੋੜੀਂਦੇ ਖੇਤਰ ਭਰੋ।',\n leadFormGenericError: 'ਕੁਝ ਗਲਤ ਹੋ ਗਿਆ। ਕਿਰਪਾ ਕਰਕੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।',\n leadFormName: 'ਨਾਮ',\n leadFormEmail: 'ਈਮੇਲ',\n leadFormPhone: 'ਫ਼ੋਨ',\n leadFormMessage: 'ਤੁਹਾਡਾ ਸੁਨੇਹਾ',\n};\n\nexport default pa;\n","import type { UiTextKeys } from '../types';\n\nconst ro: UiTextKeys = {\n sendMessage: 'Trimite un mesaj',\n send: 'Trimite',\n close: 'Închide',\n minimize: 'Minimizează',\n maximize: 'Maximizează',\n call: 'Apelează',\n listening: 'Ascultă',\n processing: 'Procesare',\n talkToInterrupt: 'Vorbiți pentru a întrerupe',\n startVoice: 'Pornește vocea',\n stopVoice: 'Oprește vocea',\n endCall: 'Încheie apelul',\n openChat: 'Deschide chatul',\n connectionFailed: 'Conexiune eșuată',\n retry: 'Reîncercați',\n loading: 'Se încarcă',\n creditsExhausted: 'Credite epuizate',\n creditsExhaustedDetail: 'Creditele acestei sesiuni s-au epuizat.',\n consentTitle: 'Consimțământ pentru confidențialitate',\n consentBody: 'Continuând, sunteți de acord cu colectarea și procesarea datelor dvs. așa cum este descris în',\n consentAccept: 'Acceptă',\n consentDecline: 'Respinge',\n consentTermsLink: 'Termeni și condiții',\n consentPrivacyLink: 'Politica de confidențialitate',\n refresh: 'Reîmprospătează',\n ratingQuestion: 'Cum a fost această conversație?',\n ratingThankYou: 'Mulțumim pentru feedback!',\n youEnded: 'Tu ai încheiat conversația',\n agentEnded: 'Agentul a încheiat conversația',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Spune-ne mai multe',\n feedbackSubtitle: 'Feedbackul tău ne ajută să ne îmbunătățim serviciul și să te sprijinim mai bine în viitor.',\n feedbackPlaceholder: 'Spune-ne mai multe despre experiența ta…',\n submit: 'Trimite',\n leadFormTitle: 'Informații de contact',\n leadFormSuccess: 'Mulțumim! Datele dumneavoastră au fost trimise.',\n leadFormRequiredError: 'Completați toate câmpurile obligatorii.',\n leadFormGenericError: 'Ceva nu a funcționat. Încercați din nou.',\n leadFormName: 'Nume',\n leadFormEmail: 'E-mail',\n leadFormPhone: 'Telefon',\n leadFormMessage: 'Mesajul dumneavoastră',\n};\n\nexport default ro;\n","import type { UiTextKeys } from '../types';\n\nconst ru: UiTextKeys = {\n sendMessage: 'Отправить сообщение',\n send: 'Отправить',\n close: 'Закрыть',\n minimize: 'Свернуть',\n maximize: 'Развернуть',\n call: 'Позвонить',\n listening: 'Слушает',\n processing: 'Обработка',\n talkToInterrupt: 'Говорите, чтобы прервать',\n startVoice: 'Начать голос',\n stopVoice: 'Остановить голос',\n endCall: 'Завершить звонок',\n openChat: 'Открыть чат',\n connectionFailed: 'Ошибка подключения',\n retry: 'Повторить',\n loading: 'Загрузка',\n creditsExhausted: 'Кредиты исчерпаны',\n creditsExhaustedDetail: 'В этой сессии закончились кредиты.',\n consentTitle: 'Согласие на обработку данных',\n consentBody: 'Продолжая, вы соглашаетесь на сбор и обработку ваших данных, как описано в наших',\n consentAccept: 'Принять',\n consentDecline: 'Отклонить',\n consentTermsLink: 'Условия обслуживания',\n consentPrivacyLink: 'Политика конфиденциальности',\n refresh: 'Обновить',\n ratingQuestion: 'Как прошёл этот разговор?',\n ratingThankYou: 'Спасибо за ваш отзыв!',\n youEnded: 'Вы завершили разговор',\n agentEnded: 'Агент завершил разговор',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Расскажите подробнее',\n feedbackSubtitle: 'Ваш отзыв помогает нам улучшать сервис и лучше поддерживать вас в будущем.',\n feedbackPlaceholder: 'Расскажите подробнее о вашем опыте…',\n submit: 'Отправить',\n leadFormTitle: 'Контактная информация',\n leadFormSuccess: 'Спасибо! Ваши данные отправлены.',\n leadFormRequiredError: 'Заполните все обязательные поля.',\n leadFormGenericError: 'Что-то пошло не так. Попробуйте снова.',\n leadFormName: 'Имя',\n leadFormEmail: 'Электронная почта',\n leadFormPhone: 'Телефон',\n leadFormMessage: 'Ваше сообщение',\n};\n\nexport default ru;\n","import type { UiTextKeys } from '../types';\n\nconst sr: UiTextKeys = {\n sendMessage: 'Пошаљи поруку',\n send: 'Пошаљи',\n close: 'Затвори',\n minimize: 'Минимизуј',\n maximize: 'Максимизуј',\n call: 'Позови',\n listening: 'Слуша',\n processing: 'Обрађује',\n talkToInterrupt: 'Говорите за прекидање',\n startVoice: 'Покрени глас',\n stopVoice: 'Заустави глас',\n endCall: 'Заврши позив',\n openChat: 'Отвори чет',\n connectionFailed: 'Веза није успела',\n retry: 'Покушај поново',\n loading: 'Учитавање',\n creditsExhausted: 'Кредити су потрошени',\n creditsExhaustedDetail: 'Кредити ове сесије су потрошени.',\n consentTitle: 'Пристанак на приватност',\n consentBody: 'Наставком пристајете на прикупљање и обраду ваших података како је описано у нашим',\n consentAccept: 'Прихвати',\n consentDecline: 'Одбиј',\n consentTermsLink: 'Услови коришћења',\n consentPrivacyLink: 'Политика приватности',\n refresh: 'Освежи',\n ratingQuestion: 'Какав је био овај разговор?',\n ratingThankYou: 'Хвала на повратним информацијама!',\n youEnded: 'Ви сте завршили разговор',\n agentEnded: 'Агент је завршио разговор',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Реците нам више',\n feedbackSubtitle: 'Ваше повратне информације нам помажу да побољшамо услугу и боље вас подржимо у будућности.',\n feedbackPlaceholder: 'Реците нам више о свом искуству…',\n submit: 'Пошаљи',\n leadFormTitle: 'Контакт информације',\n leadFormSuccess: 'Хвала! Ваши подаци су послати.',\n leadFormRequiredError: 'Попуните сва обавезна поља.',\n leadFormGenericError: 'Нешто је пошло по злу. Покушајте поново.',\n leadFormName: 'Име',\n leadFormEmail: 'Имејл',\n leadFormPhone: 'Телефон',\n leadFormMessage: 'Ваша порука',\n};\n\nexport default sr;\n","import type { UiTextKeys } from '../types';\n\nconst sk: UiTextKeys = {\n sendMessage: 'Poslať správu',\n send: 'Odoslať',\n close: 'Zavrieť',\n minimize: 'Minimalizovať',\n maximize: 'Maximalizovať',\n call: 'Volaj',\n listening: 'Počúva',\n processing: 'Spracováva',\n talkToInterrupt: 'Hovorte pre prerušenie',\n startVoice: 'Spustiť hlas',\n stopVoice: 'Zastaviť hlas',\n endCall: 'Ukončiť hovor',\n openChat: 'Otvoriť chat',\n connectionFailed: 'Pripojenie zlyhalo',\n retry: 'Skúsiť znova',\n loading: 'Načítava sa',\n creditsExhausted: 'Kredity vyčerpané',\n creditsExhaustedDetail: 'Kredity tejto relácie boli vyčerpané.',\n consentTitle: 'Súhlas so súkromím',\n consentBody: 'Pokračovaním súhlasíte so zhromažďovaním a spracovaním vašich údajov, ako je popísané v našich',\n consentAccept: 'Prijať',\n consentDecline: 'Odmietnuť',\n consentTermsLink: 'Podmienky služby',\n consentPrivacyLink: 'Zásady ochrany súkromia',\n refresh: 'Obnoviť',\n ratingQuestion: 'Aká bola táto konverzácia?',\n ratingThankYou: 'Ďakujeme za vašu spätnú väzbu!',\n youEnded: 'Konverzáciu ste ukončili vy',\n agentEnded: 'Konverzáciu ukončil agent',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Povedzte nám viac',\n feedbackSubtitle: 'Vaša spätná väzba nám pomáha zlepšovať službu a lepšie vás v budúcnosti podporovať.',\n feedbackPlaceholder: 'Povedzte nám viac o svojej skúsenosti…',\n submit: 'Odoslať',\n leadFormTitle: 'Kontaktné údaje',\n leadFormSuccess: 'Ďakujeme! Vaše údaje boli odoslané.',\n leadFormRequiredError: 'Vyplňte všetky povinné polia.',\n leadFormGenericError: 'Niečo sa pokazilo. Skúste znova.',\n leadFormName: 'Meno',\n leadFormEmail: 'E-mail',\n leadFormPhone: 'Telefón',\n leadFormMessage: 'Vaša správa',\n};\n\nexport default sk;\n","import type { UiTextKeys } from '../types';\n\nconst sl: UiTextKeys = {\n sendMessage: 'Pošlji sporočilo',\n send: 'Pošlji',\n close: 'Zapri',\n minimize: 'Minimiziraj',\n maximize: 'Maksimiziraj',\n call: 'Pokliči',\n listening: 'Posluša',\n processing: 'Obdeluje',\n talkToInterrupt: 'Govorite za prekinitev',\n startVoice: 'Zaženi glas',\n stopVoice: 'Ustavi glas',\n endCall: 'Končaj klic',\n openChat: 'Odpri klepet',\n connectionFailed: 'Povezava ni uspela',\n retry: 'Poskusi znova',\n loading: 'Nalaganje',\n creditsExhausted: 'Krediti so porabljeni',\n creditsExhaustedDetail: 'Krediti te seje so porabljeni.',\n consentTitle: 'Soglasje za zasebnost',\n consentBody: 'Z nadaljevanjem se strinjate z zbiranjem in obdelavo vaših podatkov, kot je opisano v naših',\n consentAccept: 'Sprejmi',\n consentDecline: 'Zavrni',\n consentTermsLink: 'Pogoji storitve',\n consentPrivacyLink: 'Pravilnik o zasebnosti',\n refresh: 'Osveži',\n ratingQuestion: 'Kakšen je bil ta pogovor?',\n ratingThankYou: 'Hvala za vaše mnenje!',\n youEnded: 'Pogovor ste končali vi',\n agentEnded: 'Agent je končal pogovor',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Povejte nam več',\n feedbackSubtitle: 'Vaše mnenje nam pomaga izboljšati storitev in vas v prihodnje bolje podpirati.',\n feedbackPlaceholder: 'Povejte nam več o svoji izkušnji…',\n submit: 'Pošlji',\n leadFormTitle: 'Kontaktni podatki',\n leadFormSuccess: 'Hvala! Vaši podatki so bili posredovani.',\n leadFormRequiredError: 'Izpolnite vsa obvezna polja.',\n leadFormGenericError: 'Nekaj je šlo narobe. Poskusite znova.',\n leadFormName: 'Ime',\n leadFormEmail: 'E-pošta',\n leadFormPhone: 'Telefon',\n leadFormMessage: 'Vaše sporočilo',\n};\n\nexport default sl;\n","import type { UiTextKeys } from '../types';\n\nconst es: UiTextKeys = {\n sendMessage: 'Enviar un mensaje',\n send: 'Enviar',\n close: 'Cerrar',\n minimize: 'Minimizar',\n maximize: 'Maximizar',\n call: 'Llamar',\n listening: 'Escuchando',\n processing: 'Procesando',\n talkToInterrupt: 'Habla para interrumpir',\n startVoice: 'Iniciar voz',\n stopVoice: 'Detener voz',\n endCall: 'Finalizar llamada',\n openChat: 'Abrir chat',\n connectionFailed: 'Error de conexión',\n retry: 'Reintentar',\n loading: 'Cargando',\n creditsExhausted: 'Créditos agotados',\n creditsExhaustedDetail: 'Esta sesión ha agotado sus créditos.',\n consentTitle: 'Consentimiento de Privacidad',\n consentBody: 'Al continuar, acepta la recopilación y el procesamiento de sus datos según se describe en nuestros',\n consentAccept: 'Aceptar',\n consentDecline: 'Rechazar',\n consentTermsLink: 'Términos del servicio',\n consentPrivacyLink: 'Política de privacidad',\n refresh: 'Actualizar',\n ratingQuestion: '¿Qué tal esta conversación?',\n ratingThankYou: '¡Gracias por tus comentarios!',\n youEnded: 'Tú finalizaste la conversación',\n agentEnded: 'El agente finalizó la conversación',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Cuéntanos más',\n feedbackSubtitle: 'Tus comentarios nos ayudan a mejorar nuestro servicio y a apoyarte mejor en el futuro.',\n feedbackPlaceholder: 'Cuéntanos más sobre tu experiencia…',\n submit: 'Enviar',\n leadFormTitle: 'Información de contacto',\n leadFormSuccess: '¡Gracias! Tus datos han sido enviados.',\n leadFormRequiredError: 'Por favor completa todos los campos obligatorios.',\n leadFormGenericError: 'Algo salió mal. Inténtalo de nuevo.',\n leadFormName: 'Nombre',\n leadFormEmail: 'Correo electrónico',\n leadFormPhone: 'Teléfono',\n leadFormMessage: 'Tu mensaje',\n};\n\nexport default es;\n","import type { UiTextKeys } from '../types';\n\nconst sw: UiTextKeys = {\n sendMessage: 'Tuma ujumbe',\n send: 'Tuma',\n close: 'Funga',\n minimize: 'Punguza',\n maximize: 'Panua',\n call: 'Piga simu',\n listening: 'Anasikiliza',\n processing: 'Inachakata',\n talkToInterrupt: 'Ongea ili kukatiza',\n startVoice: 'Anzisha sauti',\n stopVoice: 'Simamisha sauti',\n endCall: 'Maliza simu',\n openChat: 'Fungua mazungumzo',\n connectionFailed: 'Muunganisho umeshindwa',\n retry: 'Jaribu tena',\n loading: 'Inapakia',\n creditsExhausted: 'Salio limeisha',\n creditsExhaustedDetail: 'Salio la kikao hiki limeisha.',\n consentTitle: 'Idhini ya Faragha',\n consentBody: 'Kwa kuendelea, unakubali ukusanyaji na usindikaji wa data yako kama ilivyoelezwa katika',\n consentAccept: 'Kubali',\n consentDecline: 'Kataa',\n consentTermsLink: 'Sheria na Masharti',\n consentPrivacyLink: 'Sera ya Faragha',\n refresh: 'Onyesha upya',\n ratingQuestion: 'Mazungumzo haya yalikuwaje?',\n ratingThankYou: 'Asante kwa maoni yako!',\n youEnded: 'Wewe ulimaliza mazungumzo',\n agentEnded: 'Wakala alimaliza mazungumzo',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Tuambie zaidi',\n feedbackSubtitle: 'Maoni yako yanatusaidia kuboresha huduma yetu na kukusaidia vizuri zaidi siku zijazo.',\n feedbackPlaceholder: 'Tuambie zaidi kuhusu tajriba yako…',\n submit: 'Wasilisha',\n leadFormTitle: 'Maelezo ya mawasiliano',\n leadFormSuccess: 'Asante! Maelezo yako yamewasilishwa.',\n leadFormRequiredError: 'Tafadhali jaza sehemu zote zinazohitajika.',\n leadFormGenericError: 'Hitilafu imetokea. Tafadhali jaribu tena.',\n leadFormName: 'Jina',\n leadFormEmail: 'Barua pepe',\n leadFormPhone: 'Simu',\n leadFormMessage: 'Ujumbe wako',\n};\n\nexport default sw;\n","import type { UiTextKeys } from '../types';\n\nconst sv: UiTextKeys = {\n sendMessage: 'Skicka ett meddelande',\n send: 'Skicka',\n close: 'Stäng',\n minimize: 'Minimera',\n maximize: 'Maximera',\n call: 'Ring',\n listening: 'Lyssnar',\n processing: 'Bearbetar',\n talkToInterrupt: 'Prata för att avbryta',\n startVoice: 'Starta röst',\n stopVoice: 'Stoppa röst',\n endCall: 'Avsluta samtal',\n openChat: 'Öppna chatt',\n connectionFailed: 'Anslutning misslyckades',\n retry: 'Försök igen',\n loading: 'Laddar',\n creditsExhausted: 'Krediter slut',\n creditsExhaustedDetail: 'Den här sessionens krediter är slut.',\n consentTitle: 'Samtycke till integritet',\n consentBody: 'Genom att fortsätta godkänner du insamling och behandling av dina uppgifter enligt vad som beskrivs i våra',\n consentAccept: 'Godkänn',\n consentDecline: 'Avvisa',\n consentTermsLink: 'Användarvillkor',\n consentPrivacyLink: 'Integritetspolicy',\n refresh: 'Uppdatera',\n ratingQuestion: 'Hur var det här samtalet?',\n ratingThankYou: 'Tack för din feedback!',\n youEnded: 'Du avslutade samtalet',\n agentEnded: 'Agenten avslutade samtalet',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Berätta mer',\n feedbackSubtitle: 'Din feedback hjälper oss att förbättra vår tjänst och stötta dig bättre i framtiden.',\n feedbackPlaceholder: 'Berätta mer om din upplevelse…',\n submit: 'Skicka',\n leadFormTitle: 'Kontaktinformation',\n leadFormSuccess: 'Tack! Dina uppgifter har skickats.',\n leadFormRequiredError: 'Fyll i alla obligatoriska fält.',\n leadFormGenericError: 'Något gick fel. Försök igen.',\n leadFormName: 'Namn',\n leadFormEmail: 'E-post',\n leadFormPhone: 'Telefon',\n leadFormMessage: 'Ditt meddelande',\n};\n\nexport default sv;\n","import type { UiTextKeys } from '../types';\n\nconst tl: UiTextKeys = {\n sendMessage: 'Magpadala ng mensahe',\n send: 'Ipadala',\n close: 'Isara',\n minimize: 'Minimize',\n maximize: 'Maximize',\n call: 'Tawag',\n listening: 'Nakikinig',\n processing: 'Pinoproseso',\n talkToInterrupt: 'Magsalita para humadlang',\n startVoice: 'Simulan ang boses',\n stopVoice: 'Itigil ang boses',\n endCall: 'Tapusin ang tawag',\n openChat: 'Buksan ang chat',\n connectionFailed: 'Nabigo ang koneksyon',\n retry: 'Subukan muli',\n loading: 'Naglo-load',\n creditsExhausted: 'Naubos ang Kredito',\n creditsExhaustedDetail: 'Naubos na ang mga kredito ng sesyong ito.',\n consentTitle: 'Pahintulot sa Pagkapribado',\n consentBody: 'Sa pamamagitan ng pagpapatuloy, sumasang-ayon ka sa pagkolekta at pagproseso ng iyong data tulad ng inilarawan sa aming',\n consentAccept: 'Tanggapin',\n consentDecline: 'Tanggihan',\n consentTermsLink: 'Mga Tuntunin ng Serbisyo',\n consentPrivacyLink: 'Patakaran sa Pagkapribado',\n refresh: 'I-refresh',\n ratingQuestion: 'Kumusta ang usapang ito?',\n ratingThankYou: 'Salamat sa iyong feedback!',\n youEnded: 'Ikaw ang nagtapos ng usapan',\n agentEnded: 'Tinapos ng ahente ang usapan',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Magkuwento pa',\n feedbackSubtitle: 'Nakakatulong ang iyong feedback para mapahusay ang aming serbisyo at masuportahan ka nang mas mabuti sa hinaharap.',\n feedbackPlaceholder: 'Magkuwento pa tungkol sa iyong karanasan…',\n submit: 'Ipasa',\n leadFormTitle: 'Impormasyon ng contact',\n leadFormSuccess: 'Salamat! Naisumite na ang iyong mga detalye.',\n leadFormRequiredError: 'Pakipunan ang lahat ng kinakailangang field.',\n leadFormGenericError: 'Nagkaroon ng problema. Pakisubukan ulit.',\n leadFormName: 'Pangalan',\n leadFormEmail: 'Email',\n leadFormPhone: 'Telepono',\n leadFormMessage: 'Ang iyong mensahe',\n};\n\nexport default tl;\n","import type { UiTextKeys } from '../types';\n\nconst ta: UiTextKeys = {\n sendMessage: 'ஒரு செய்தி அனுப்பவும்',\n send: 'அனுப்பு',\n close: 'மூடு',\n minimize: 'சிறியதாக்கு',\n maximize: 'பெரியதாக்கு',\n call: 'அழை',\n listening: 'கேட்கிறது',\n processing: 'செயலாக்குகிறது',\n talkToInterrupt: 'தடுக்க பேசவும்',\n startVoice: 'குரலைத் தொடங்கு',\n stopVoice: 'குரலை நிறுத்து',\n endCall: 'அழைப்பை முடி',\n openChat: 'அரட்டையைத் திற',\n connectionFailed: 'இணைப்பு தோல்வியடைந்தது',\n retry: 'மீண்டும் முயற்சி செய்',\n loading: 'ஏற்றுகிறது',\n creditsExhausted: 'கிரெடிட்கள் தீர்ந்துவிட்டன',\n creditsExhaustedDetail: 'இந்த அமர்வின் கிரெடிட்கள் தீர்ந்துவிட்டன.',\n consentTitle: 'தனியுரிமை ஒப்புதல்',\n consentBody: 'தொடர்வதன் மூலம், எங்களில் விவரிக்கப்பட்டுள்ளபடி உங்கள் தரவு சேகரிப்பு மற்றும் செயலாக்கத்திற்கு நீங்கள் ஒப்புக்கொள்கிறீர்கள்',\n consentAccept: 'ஏற்க',\n consentDecline: 'நிராகரி',\n consentTermsLink: 'சேவை விதிமுறைகள்',\n consentPrivacyLink: 'தனியுரிமைக் கொள்கை',\n refresh: 'புதுப்பி',\n ratingQuestion: 'இந்த உரையாடல் எப்படி இருந்தது?',\n ratingThankYou: 'உங்கள் கருத்துக்கு நன்றி!',\n youEnded: 'நீங்கள் உரையாடலை முடித்தீர்கள்',\n agentEnded: 'முகவர் உரையாடலை முடித்தார்',\n sessionIdLabel: 'ID:',\n tellUsMore: 'மேலும் சொல்லுங்கள்',\n feedbackSubtitle: 'உங்கள் கருத்து எங்கள் சேவையை மேம்படுத்தவும் எதிர்காலத்தில் உங்களை சிறப்பாக ஆதரிக்கவும் உதவுகிறது.',\n feedbackPlaceholder: 'உங்கள் அனுபவம் குறித்து மேலும் சொல்லுங்கள்…',\n submit: 'சமர்ப்பிக்கவும்',\n leadFormTitle: 'தொடர்பு தகவல்',\n leadFormSuccess: 'நன்றி! உங்கள் விவரங்கள் சமர்ப்பிக்கப்பட்டன.',\n leadFormRequiredError: 'தேவையான அனைத்து புலங்களையும் நிரப்பவும்.',\n leadFormGenericError: 'ஏதோ தவறு ஏற்பட்டது. மீண்டும் முயற்சிக்கவும்.',\n leadFormName: 'பெயர்',\n leadFormEmail: 'மின்னஞ்சல்',\n leadFormPhone: 'தொலைபேசி',\n leadFormMessage: 'உங்கள் செய்தி',\n};\n\nexport default ta;\n","import type { UiTextKeys } from '../types';\n\nconst te: UiTextKeys = {\n sendMessage: 'సందేశం పంపండి',\n send: 'పంపు',\n close: 'మూసివేయండి',\n minimize: 'చిన్నదిగా చేయి',\n maximize: 'పెద్దదిగా చేయి',\n call: 'కాల్ చేయండి',\n listening: 'వింటోంది',\n processing: 'ప్రాసెస్ చేస్తోంది',\n talkToInterrupt: 'అంతరాయం కలిగించడానికి మాట్లాడండి',\n startVoice: 'వాయిస్ ప్రారంభించండి',\n stopVoice: 'వాయిస్ ఆపండి',\n endCall: 'కాల్‌ను ముగించండి',\n openChat: 'చాట్ తెరవండి',\n connectionFailed: 'కనెక్షన్ విఫలమైంది',\n retry: 'మళ్లీ ప్రయత్నించండి',\n loading: 'లోడ్ అవుతోంది',\n creditsExhausted: 'క్రెడిట్లు ముగిశాయి',\n creditsExhaustedDetail: 'ఈ సెషన్ యొక్క క్రెడిట్లు ముగిశాయి.',\n consentTitle: 'గోప్యతా సమ్మతి',\n consentBody: 'కొనసాగించడం ద్వారా, మాలో వివరించిన విధంగా మీ డేటా సేకరణ మరియు ప్రాసెసింగ్‌కు మీరు అంగీకరిస్తున్నారు',\n consentAccept: 'అంగీకరించు',\n consentDecline: 'తిరస్కరించు',\n consentTermsLink: 'సేవా నిబంధనలు',\n consentPrivacyLink: 'గోప్యతా విధానం',\n refresh: 'రిఫ్రెష్ చేయండి',\n ratingQuestion: 'ఈ సంభాషణ ఎలా ఉంది?',\n ratingThankYou: 'మీ అభిప్రాయానికి ధన్యవాదాలు!',\n youEnded: 'మీరు సంభాషణను ముగించారు',\n agentEnded: 'ఏజెంట్ సంభాషణను ముగించారు',\n sessionIdLabel: 'ID:',\n tellUsMore: 'మాకు మరింత చెప్పండి',\n feedbackSubtitle: 'మీ అభిప్రాయం మా సేవను మెరుగుపరచడానికి మరియు భవిష్యత్తులో మిమ్మల్ని మెరుగ్గా మద్దతు ఇవ్వడానికి సహాయపడుతుంది.',\n feedbackPlaceholder: 'మీ అనుభవం గురించి మాకు మరింత చెప్పండి…',\n submit: 'సమర్పించండి',\n leadFormTitle: 'సంప్రదింపు సమాచారం',\n leadFormSuccess: 'ధన్యవాదాలు! మీ వివరాలు సమర్పించబడ్డాయి.',\n leadFormRequiredError: 'దయచేసి అన్ని అవసరమైన ఫీల్డ్‌లను నింపండి.',\n leadFormGenericError: 'ఏదో తప్పు జరిగింది. దయచేసి మళ్లీ ప్రయత్నించండి.',\n leadFormName: 'పేరు',\n leadFormEmail: 'ఇమెయిల్',\n leadFormPhone: 'ఫోన్',\n leadFormMessage: 'మీ సందేశం',\n};\n\nexport default te;\n","import type { UiTextKeys } from '../types';\n\nconst th: UiTextKeys = {\n sendMessage: 'ส่งข้อความ',\n send: 'ส่ง',\n close: 'ปิด',\n minimize: 'ย่อ',\n maximize: 'ขยาย',\n call: 'โทร',\n listening: 'กำลังฟัง',\n processing: 'กำลังประมวลผล',\n talkToInterrupt: 'พูดเพื่อขัดจังหวะ',\n startVoice: 'เริ่มเสียง',\n stopVoice: 'หยุดเสียง',\n endCall: 'วางสาย',\n openChat: 'เปิดแชท',\n connectionFailed: 'การเชื่อมต่อล้มเหลว',\n retry: 'ลองอีกครั้ง',\n loading: 'กำลังโหลด',\n creditsExhausted: 'เครดิตหมด',\n creditsExhaustedDetail: 'เครดิตของเซสชันนี้หมดแล้ว',\n consentTitle: 'ความยินยอมด้านความเป็นส่วนตัว',\n consentBody: 'โดยดำเนินการต่อ คุณยินยอมให้มีการรวบรวมและประมวลผลข้อมูลของคุณตามที่อธิบายไว้ใน',\n consentAccept: 'ยอมรับ',\n consentDecline: 'ปฏิเสธ',\n consentTermsLink: 'ข้อกำหนดในการให้บริการ',\n consentPrivacyLink: 'นโยบายความเป็นส่วนตัว',\n refresh: 'รีเฟรช',\n ratingQuestion: 'การสนทนานี้เป็นอย่างไรบ้าง?',\n ratingThankYou: 'ขอบคุณสำหรับความคิดเห็นของคุณ!',\n youEnded: 'คุณเป็นผู้จบการสนทนา',\n agentEnded: 'ตัวแทนจบการสนทนา',\n sessionIdLabel: 'ID:',\n tellUsMore: 'บอกเราเพิ่มเติม',\n feedbackSubtitle: 'ความคิดเห็นของคุณช่วยให้เราปรับปรุงบริการและสนับสนุนคุณได้ดียิ่งขึ้นในอนาคต',\n feedbackPlaceholder: 'บอกเราเพิ่มเติมเกี่ยวกับประสบการณ์ของคุณ…',\n submit: 'ส่ง',\n leadFormTitle: 'ข้อมูลติดต่อ',\n leadFormSuccess: 'ขอบคุณ! ข้อมูลของคุณถูกส่งแล้ว',\n leadFormRequiredError: 'กรุณากรอกข้อมูลในช่องที่จำเป็นทั้งหมด',\n leadFormGenericError: 'เกิดข้อผิดพลาด กรุณาลองใหม่อีกครั้ง',\n leadFormName: 'ชื่อ',\n leadFormEmail: 'อีเมล',\n leadFormPhone: 'โทรศัพท์',\n leadFormMessage: 'ข้อความของคุณ',\n};\n\nexport default th;\n","import type { UiTextKeys } from '../types';\n\nconst tr: UiTextKeys = {\n sendMessage: 'Mesaj gönder',\n send: 'Gönder',\n close: 'Kapat',\n minimize: 'Küçült',\n maximize: 'Büyüt',\n call: 'Ara',\n listening: 'Dinliyor',\n processing: 'İşleniyor',\n talkToInterrupt: 'Kesmek için konuşun',\n startVoice: 'Sesi başlat',\n stopVoice: 'Sesi durdur',\n endCall: 'Aramayı bitir',\n openChat: 'Sohbeti aç',\n connectionFailed: 'Bağlantı başarısız',\n retry: 'Tekrar dene',\n loading: 'Yükleniyor',\n creditsExhausted: 'Krediler Tükendi',\n creditsExhaustedDetail: 'Bu oturumun kredileri tükendi.',\n consentTitle: 'Gizlilik Onayı',\n consentBody: 'Devam ederek, verilerinizin toplanması ve işlenmesini kabul etmiş olursunuz',\n consentAccept: 'Kabul Et',\n consentDecline: 'Reddet',\n consentTermsLink: 'Hizmet Şartları',\n consentPrivacyLink: 'Gizlilik Politikası',\n refresh: 'Yenile',\n ratingQuestion: 'Bu görüşme nasıldı?',\n ratingThankYou: 'Geri bildiriminiz için teşekkürler!',\n youEnded: 'Görüşmeyi siz sonlandırdınız',\n agentEnded: 'Görüşmeyi temsilci sonlandırdı',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Bize daha fazla anlatın',\n feedbackSubtitle: 'Geri bildiriminiz hizmetimizi geliştirmemize ve gelecekte size daha iyi destek olmamıza yardımcı olur.',\n feedbackPlaceholder: 'Deneyiminiz hakkında bize daha fazla anlatın…',\n submit: 'Gönder',\n leadFormTitle: 'İletişim bilgileri',\n leadFormSuccess: 'Teşekkürler! Bilgileriniz gönderildi.',\n leadFormRequiredError: 'Lütfen tüm zorunlu alanları doldurun.',\n leadFormGenericError: 'Bir sorun oluştu. Lütfen tekrar deneyin.',\n leadFormName: 'Ad',\n leadFormEmail: 'E-posta',\n leadFormPhone: 'Telefon',\n leadFormMessage: 'Mesajınız',\n};\n\nexport default tr;\n","import type { UiTextKeys } from '../types';\n\nconst uk: UiTextKeys = {\n sendMessage: 'Надіслати повідомлення',\n send: 'Надіслати',\n close: 'Закрити',\n minimize: 'Згорнути',\n maximize: 'Розгорнути',\n call: 'Зателефонувати',\n listening: 'Слухає',\n processing: 'Обробка',\n talkToInterrupt: 'Говоріть, щоб перервати',\n startVoice: 'Запустити голос',\n stopVoice: 'Зупинити голос',\n endCall: 'Завершити дзвінок',\n openChat: 'Відкрити чат',\n connectionFailed: 'Помилка підключення',\n retry: 'Повторити',\n loading: 'Завантаження',\n creditsExhausted: 'Кредити вичерпано',\n creditsExhaustedDetail: 'Кредити цієї сесії вичерпано.',\n consentTitle: 'Згода на обробку даних',\n consentBody: 'Продовжуючи, ви погоджуєтеся на збір та обробку ваших даних, як описано в наших',\n consentAccept: 'Прийняти',\n consentDecline: 'Відхилити',\n consentTermsLink: 'Умови обслуговування',\n consentPrivacyLink: 'Політика конфіденційності',\n refresh: 'Оновити',\n ratingQuestion: 'Якою була ця розмова?',\n ratingThankYou: 'Дякуємо за ваш відгук!',\n youEnded: 'Ви завершили розмову',\n agentEnded: 'Агент завершив розмову',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Розкажіть докладніше',\n feedbackSubtitle: 'Ваш відгук допомагає нам покращувати сервіс і краще підтримувати вас у майбутньому.',\n feedbackPlaceholder: 'Розкажіть докладніше про ваш досвід…',\n submit: 'Надіслати',\n leadFormTitle: 'Контактна інформація',\n leadFormSuccess: 'Дякуємо! Ваші дані відправлено.',\n leadFormRequiredError: \"Будь ласка, заповніть усі обов\\u2019язкові поля.\",\n leadFormGenericError: 'Щось пішло не так. Спробуйте ще раз.',\n leadFormName: \"\\u0406\\u043C\\u2019\\u044F\",\n leadFormEmail: 'Електронна пошта',\n leadFormPhone: 'Телефон',\n leadFormMessage: 'Ваше повідомлення',\n};\n\nexport default uk;\n","import type { UiTextKeys } from '../types';\n\nconst ur: UiTextKeys = {\n sendMessage: 'پیغام بھیجیں',\n send: 'بھیجیں',\n close: 'بند کریں',\n minimize: 'چھوٹا کریں',\n maximize: 'بڑا کریں',\n call: 'کال کریں',\n listening: 'سن رہا ہے',\n processing: 'پروسیسنگ',\n talkToInterrupt: 'روکنے کے لیے بولیں',\n startVoice: 'آواز شروع کریں',\n stopVoice: 'آواز بند کریں',\n endCall: 'کال ختم کریں',\n openChat: 'چیٹ کھولیں',\n connectionFailed: 'کنکشن ناکام',\n retry: 'دوبارہ کوشش کریں',\n loading: 'لوڈ ہو رہا ہے',\n creditsExhausted: 'کریڈٹس ختم',\n creditsExhaustedDetail: 'اس سیشن کے کریڈٹس ختم ہو گئے ہیں۔',\n consentTitle: 'رازداری کی رضامندی',\n consentBody: 'آگے بڑھ کر، آپ اپنے ڈیٹا کی جمع آوری اور پروسیسنگ سے اتفاق کرتے ہیں جیسا کہ ہماری میں بیان کیا گیا ہے',\n consentAccept: 'قبول کریں',\n consentDecline: 'مسترد کریں',\n consentTermsLink: 'خدمات کی شرائط',\n consentPrivacyLink: 'رازداری کی پالیسی',\n refresh: 'ریفریش کریں',\n ratingQuestion: 'یہ گفتگو کیسی رہی؟',\n ratingThankYou: 'آپ کی رائے کا شکریہ!',\n youEnded: 'آپ نے گفتگو ختم کی',\n agentEnded: 'ایجنٹ نے گفتگو ختم کی',\n sessionIdLabel: 'شناخت:',\n tellUsMore: 'مزید بتائیں',\n feedbackSubtitle: 'آپ کی رائے ہمیں اپنی خدمات بہتر بنانے اور مستقبل میں آپ کی بہتر مدد کرنے میں مدد دیتی ہے۔',\n feedbackPlaceholder: 'اپنے تجربے کے بارے میں مزید بتائیں…',\n submit: 'جمع کرائیں',\n leadFormTitle: 'رابطہ کی معلومات',\n leadFormSuccess: 'شکریہ! آپ کی تفصیلات جمع کر دی گئی ہیں۔',\n leadFormRequiredError: 'براہ کرم تمام ضروری خانے پُر کریں۔',\n leadFormGenericError: 'کچھ غلط ہو گیا۔ براہ کرم دوبارہ کوشش کریں۔',\n leadFormName: 'نام',\n leadFormEmail: 'ای میل',\n leadFormPhone: 'فون',\n leadFormMessage: 'آپ کا پیغام',\n};\n\nexport default ur;\n","import type { UiTextKeys } from '../types';\n\nconst vi: UiTextKeys = {\n sendMessage: 'Gửi tin nhắn',\n send: 'Gửi',\n close: 'Đóng',\n minimize: 'Thu nhỏ',\n maximize: 'Phóng to',\n call: 'Gọi',\n listening: 'Đang nghe',\n processing: 'Đang xử lý',\n talkToInterrupt: 'Nói để ngắt',\n startVoice: 'Bắt đầu giọng nói',\n stopVoice: 'Dừng giọng nói',\n endCall: 'Kết thúc cuộc gọi',\n openChat: 'Mở trò chuyện',\n connectionFailed: 'Kết nối thất bại',\n retry: 'Thử lại',\n loading: 'Đang tải',\n creditsExhausted: 'Đã hết tín dụng',\n creditsExhaustedDetail: 'Tín dụng của phiên này đã hết.',\n consentTitle: 'Đồng ý về Quyền riêng tư',\n consentBody: 'Bằng cách tiếp tục, bạn đồng ý với việc thu thập và xử lý dữ liệu của bạn như được mô tả trong',\n consentAccept: 'Chấp nhận',\n consentDecline: 'Từ chối',\n consentTermsLink: 'Điều khoản Dịch vụ',\n consentPrivacyLink: 'Chính sách Bảo mật',\n refresh: 'Làm mới',\n ratingQuestion: 'Cuộc trò chuyện này thế nào?',\n ratingThankYou: 'Cảm ơn phản hồi của bạn!',\n youEnded: 'Bạn đã kết thúc cuộc trò chuyện',\n agentEnded: 'Trợ lý đã kết thúc cuộc trò chuyện',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Cho chúng tôi biết thêm',\n feedbackSubtitle: 'Phản hồi của bạn giúp chúng tôi cải thiện dịch vụ và hỗ trợ bạn tốt hơn trong tương lai.',\n feedbackPlaceholder: 'Cho chúng tôi biết thêm về trải nghiệm của bạn…',\n submit: 'Gửi',\n leadFormTitle: 'Thông tin liên hệ',\n leadFormSuccess: 'Cảm ơn! Thông tin của bạn đã được gửi.',\n leadFormRequiredError: 'Vui lòng điền vào tất cả các trường bắt buộc.',\n leadFormGenericError: 'Đã xảy ra lỗi. Vui lòng thử lại.',\n leadFormName: 'Tên',\n leadFormEmail: 'Email',\n leadFormPhone: 'Điện thoại',\n leadFormMessage: 'Tin nhắn của bạn',\n};\n\nexport default vi;\n","import type { UiTextKeys } from '../types';\n\nconst cy: UiTextKeys = {\n sendMessage: 'Anfon neges',\n send: 'Anfon',\n close: 'Cau',\n minimize: 'Lleihau',\n maximize: 'Mwyhau',\n call: 'Galw',\n listening: 'Gwrando',\n processing: 'Prosesu',\n talkToInterrupt: 'Siaradwch i dorri ar draws',\n startVoice: 'Dechrau llais',\n stopVoice: 'Stopio llais',\n endCall: 'Diweddu galwad',\n openChat: 'Agor sgwrs',\n connectionFailed: 'Methwyd cysylltu',\n retry: 'Ceisio eto',\n loading: 'Llwytho',\n creditsExhausted: 'Credydau wedi dod i ben',\n creditsExhaustedDetail: 'Mae credydau\\'r sesiwn hon wedi dod i ben.',\n consentTitle: 'Cydsyniad Preifatrwydd',\n consentBody: 'Drwy fynd ymlaen, rydych yn cytuno i gasglu a phrosesu eich data fel y disgrifir yn ein',\n consentAccept: 'Derbyn',\n consentDecline: 'Gwrthod',\n consentTermsLink: 'Telerau Gwasanaeth',\n consentPrivacyLink: 'Polisi Preifatrwydd',\n refresh: 'Adnewyddu',\n ratingQuestion: 'Sut oedd y sgwrs hon?',\n ratingThankYou: 'Diolch am eich adborth!',\n youEnded: 'Chi ddaeth â’r sgwrs i ben',\n agentEnded: 'Daeth yr asiant â’r sgwrs i ben',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Dywedwch fwy wrthym',\n feedbackSubtitle: 'Mae eich adborth yn ein helpu i wella ein gwasanaeth a’ch cefnogi’n well yn y dyfodol.',\n feedbackPlaceholder: 'Dywedwch fwy wrthym am eich profiad…',\n submit: 'Cyflwyno',\n leadFormTitle: 'Manylion cyswllt',\n leadFormSuccess: 'Diolch! Mae eich manylion wedi cael eu cyflwyno.',\n leadFormRequiredError: 'Llenwch bob maes gofynnol.',\n leadFormGenericError: 'Aeth rhywbeth o chwith. Rhowch gynnig arall arni.',\n leadFormName: 'Enw',\n leadFormEmail: 'E-bost',\n leadFormPhone: 'Ffôn',\n leadFormMessage: 'Eich neges',\n};\n\nexport default cy;\n","import af from './translations/af';\nimport sq from './translations/sq';\nimport ar from './translations/ar';\nimport arEg from './translations/ar-eg';\nimport arSa from './translations/ar-sa';\nimport az from './translations/az';\nimport eu from './translations/eu';\nimport be from './translations/be';\nimport bn from './translations/bn';\nimport bs from './translations/bs';\nimport bg from './translations/bg';\nimport ca from './translations/ca';\nimport zh from './translations/zh';\nimport hr from './translations/hr';\nimport cs from './translations/cs';\nimport da from './translations/da';\nimport nl from './translations/nl';\nimport en from './translations/en';\nimport et from './translations/et';\nimport fi from './translations/fi';\nimport fr from './translations/fr';\nimport gl from './translations/gl';\nimport de from './translations/de';\nimport el from './translations/el';\nimport gu from './translations/gu';\nimport hi from './translations/hi';\nimport hu from './translations/hu';\nimport id from './translations/id';\nimport it from './translations/it';\nimport ja from './translations/ja';\nimport kn from './translations/kn';\nimport kk from './translations/kk';\nimport ko from './translations/ko';\nimport lv from './translations/lv';\nimport lt from './translations/lt';\nimport mk from './translations/mk';\nimport ms from './translations/ms';\nimport ml from './translations/ml';\nimport mr from './translations/mr';\nimport no from './translations/no';\nimport fa from './translations/fa';\nimport pl from './translations/pl';\nimport pt from './translations/pt';\nimport pa from './translations/pa';\nimport ro from './translations/ro';\nimport ru from './translations/ru';\nimport sr from './translations/sr';\nimport sk from './translations/sk';\nimport sl from './translations/sl';\nimport es from './translations/es';\nimport sw from './translations/sw';\nimport sv from './translations/sv';\nimport tl from './translations/tl';\nimport ta from './translations/ta';\nimport te from './translations/te';\nimport th from './translations/th';\nimport tr from './translations/tr';\nimport uk from './translations/uk';\nimport ur from './translations/ur';\nimport vi from './translations/vi';\nimport cy from './translations/cy';\nimport type { UiTextKeys } from './types';\n\nexport const TEXT: Record<string, UiTextKeys> = {\n af, sq, ar, 'ar-eg': arEg, 'ar-sa': arSa, az, eu, be, bn, bs, bg,\n ca, zh, hr, cs, da, nl, en, et, fi,\n fr, gl, de, el, gu, hi, hu, id,\n it, ja, kn, kk, ko, lv, lt, mk, ms,\n ml, mr, no, fa, pl, pt, pa, ro, ru,\n sr, sk, sl, es, sw, sv, tl, ta, te,\n th, tr, uk, ur, vi, cy,\n};\n","export const RQMII_CHAT_LANGUAGES = [\n { value: 'af', label: 'Afrikaans', dir: 'ltr' },\n { value: 'sq', label: 'Shqip', dir: 'ltr' },\n { value: 'ar-eg', label: 'العربية (مصر)', dir: 'rtl' },\n { value: 'ar-sa', label: 'العربية (السعودية)', dir: 'rtl' },\n { value: 'az', label: 'Azərbaycan', dir: 'ltr' },\n { value: 'eu', label: 'Euskara', dir: 'ltr' },\n { value: 'be', label: 'Беларуская', dir: 'ltr' },\n { value: 'bn', label: 'বাংলা', dir: 'ltr' },\n { value: 'bs', label: 'Bosanski', dir: 'ltr' },\n { value: 'bg', label: 'Български', dir: 'ltr' },\n { value: 'ca', label: 'Català', dir: 'ltr' },\n { value: 'zh', label: '中文', dir: 'ltr' },\n { value: 'hr', label: 'Hrvatski', dir: 'ltr' },\n { value: 'cs', label: 'Čeština', dir: 'ltr' },\n { value: 'da', label: 'Dansk', dir: 'ltr' },\n { value: 'nl', label: 'Nederlands', dir: 'ltr' },\n { value: 'en', label: 'English', dir: 'ltr' },\n { value: 'et', label: 'Eesti', dir: 'ltr' },\n { value: 'fi', label: 'Suomi', dir: 'ltr' },\n { value: 'fr', label: 'Français', dir: 'ltr' },\n { value: 'gl', label: 'Galego', dir: 'ltr' },\n { value: 'de', label: 'Deutsch', dir: 'ltr' },\n { value: 'el', label: 'Ελληνικά', dir: 'ltr' },\n { value: 'gu', label: 'ગુજરાતી', dir: 'ltr' },\n { value: 'hi', label: 'हिन्दी', dir: 'ltr' },\n { value: 'hu', label: 'Magyar', dir: 'ltr' },\n { value: 'id', label: 'Bahasa Indonesia', dir: 'ltr' },\n { value: 'it', label: 'Italiano', dir: 'ltr' },\n { value: 'ja', label: '日本語', dir: 'ltr' },\n { value: 'kn', label: 'ಕನ್ನಡ', dir: 'ltr' },\n { value: 'kk', label: 'Қазақша', dir: 'ltr' },\n { value: 'ko', label: '한국어', dir: 'ltr' },\n { value: 'lv', label: 'Latviešu', dir: 'ltr' },\n { value: 'lt', label: 'Lietuvių', dir: 'ltr' },\n { value: 'mk', label: 'Македонски', dir: 'ltr' },\n { value: 'ms', label: 'Bahasa Melayu', dir: 'ltr' },\n { value: 'ml', label: 'മലയാളം', dir: 'ltr' },\n { value: 'mr', label: 'मराठी', dir: 'ltr' },\n { value: 'no', label: 'Norsk', dir: 'ltr' },\n { value: 'fa', label: 'فارسی', dir: 'rtl' },\n { value: 'pl', label: 'Polski', dir: 'ltr' },\n { value: 'pt', label: 'Português', dir: 'ltr' },\n { value: 'pa', label: 'ਪੰਜਾਬੀ', dir: 'ltr' },\n { value: 'ro', label: 'Română', dir: 'ltr' },\n { value: 'ru', label: 'Русский', dir: 'ltr' },\n { value: 'sr', label: 'Српски', dir: 'ltr' },\n { value: 'sk', label: 'Slovenčina', dir: 'ltr' },\n { value: 'sl', label: 'Slovenščina', dir: 'ltr' },\n { value: 'es', label: 'Español', dir: 'ltr' },\n { value: 'sw', label: 'Kiswahili', dir: 'ltr' },\n { value: 'sv', label: 'Svenska', dir: 'ltr' },\n { value: 'tl', label: 'Tagalog', dir: 'ltr' },\n { value: 'ta', label: 'தமிழ்', dir: 'ltr' },\n { value: 'te', label: 'తెలుగు', dir: 'ltr' },\n { value: 'th', label: 'ไทย', dir: 'ltr' },\n { value: 'tr', label: 'Türkçe', dir: 'ltr' },\n { value: 'uk', label: 'Українська', dir: 'ltr' },\n { value: 'ur', label: 'اردو', dir: 'rtl' },\n { value: 'vi', label: 'Tiếng Việt', dir: 'ltr' },\n { value: 'cy', label: 'Cymraeg', dir: 'ltr' },\n];\n\nexport const RQMII_CHAT_LANGUAGE_VALUES = RQMII_CHAT_LANGUAGES.map(\n (language) => language.value\n);\n","import { RQMII_CHAT_LANGUAGES, RQMII_CHAT_LANGUAGE_VALUES } from './list';\nimport { TEXT } from './text';\n\nexport function getChatLanguage(value: string): (typeof RQMII_CHAT_LANGUAGES)[number] | undefined {\n return (\n RQMII_CHAT_LANGUAGES.find((language) => language.value === value) ||\n RQMII_CHAT_LANGUAGES.find((language) => language.value === 'en')\n );\n}\n\nexport function getChatText(language: string, key: string): string {\n return (TEXT as Record<string, Record<string, string>>)[language]?.[key]\n || (TEXT.en as Record<string, string>)[key]\n || key;\n}\n\nexport function normalizeChatLanguages(languages: string[] | undefined, fallback = 'en'): string[] {\n const clean = Array.isArray(languages)\n ? languages.filter((language) => RQMII_CHAT_LANGUAGE_VALUES.includes(language))\n : [];\n\n if (!clean.includes(fallback) && RQMII_CHAT_LANGUAGE_VALUES.includes(fallback)) {\n clean.unshift(fallback);\n }\n\n return clean.length ? [...new Set(clean)] : ['ar-sa'];\n}\n","\nimport { AGENT_TYPES } from '../core/constants';\nimport { normalizeChatLanguages } from './languages';\nimport type { PublicAgent, AgentType, WidgetWelcomeBubble, WidgetConversationEndedScreen, WidgetTheme } from '../types';\n\nconst DEFAULT_AGENT: PublicAgent = {\n id: null,\n\n name: 'Agent',\n agentType: AGENT_TYPES.TEXT,\n useText: true,\n useVoice: false,\n faceImage: null,\n languages: ['ar-sa'],\n defaultLanguage: 'ar-sa',\n allowInterrupt: true,\n allowWelcomeMessageInterrupt: false,\n welcomeMessages: {},\n conversation: { default_language: 'ar-sa', languages: ['ar-sa'], suggested_messages: {} },\n widget: {\n appearance: {\n position: 'right',\n show_branding: true,\n show_topbar_avatar_image: true,\n font: 'Cairo',\n footer_content: {},\n theme: { mode: 'dark', accent_color: null, end_call_button_color: null },\n },\n behavior: {\n default_open: false,\n conversation_ended_screen: {\n post_chat_rating_enabled: false,\n show_conversation_id: true,\n },\n welcome_bubble: {\n enabled: false,\n delay_seconds: 3,\n sound_enabled: false,\n },\n typing_indicator_enabled: true,\n suggested_messages: {},\n },\n consent: {\n enabled: false,\n one_time: true,\n content: {},\n },\n },\n};\n\nexport function normalizePublicAgent(rawAgent: Partial<PublicAgent> | Record<string, unknown> | null | undefined): PublicAgent {\n if (!rawAgent) return DEFAULT_AGENT;\n const r = rawAgent as Record<string, unknown>;\n\n const agentType = (r.agent_type || r.agentType || AGENT_TYPES.TEXT) as AgentType;\n const useText =\n typeof r.use_text === 'boolean'\n ? r.use_text\n : typeof r.useText === 'boolean'\n ? r.useText\n : agentType !== AGENT_TYPES.VOICE;\n const useVoice =\n typeof r.use_voice === 'boolean'\n ? r.use_voice\n : typeof r.useVoice === 'boolean'\n ? r.useVoice\n : agentType === AGENT_TYPES.TEXT_AND_VOICE ||\n agentType === AGENT_TYPES.CLOUD_AVATAR ||\n agentType === AGENT_TYPES.DESKTOP_AVATAR;\n const conversation =\n (r.conversation as Record<string, unknown> | undefined) ||\n ((r.agent_customization as Record<string, unknown> | undefined)?.conversation as Record<string, unknown> | undefined) ||\n {};\n const speech =\n (r.speech as Record<string, unknown> | undefined) ||\n ((r.agent_customization as Record<string, unknown> | undefined)?.speech as Record<string, unknown> | undefined) ||\n {};\n const defaultLanguage = (conversation.default_language as string) || 'ar-sa';\n const languages = normalizeChatLanguages(conversation.languages as string[] | undefined, defaultLanguage);\n\n // Try top-level widget first, then fall back to agent_customization.widget\n // or widget_customization for paths that pass raw backend JSON.\n const rawWidgetSource =\n (r.widget as Record<string, unknown> | undefined) ||\n ((r.agent_customization as Record<string, unknown> | undefined)?.widget as Record<string, unknown> | undefined) ||\n (r.widget_customization as Record<string, unknown> | undefined) ||\n null;\n const rawAppearance = rawWidgetSource?.appearance as Record<string, unknown> | undefined;\n const rawBehavior = rawWidgetSource?.behavior as Record<string, unknown> | undefined;\n const rawWidget = rawWidgetSource;\n\n // Map hide_branding (from API) -> show_branding (SDK convention).\n // When both are present, hide_branding takes precedence.\n const showBranding =\n typeof rawAppearance?.hide_branding === 'boolean'\n ? !rawAppearance.hide_branding\n : typeof rawAppearance?.show_branding === 'boolean'\n ? rawAppearance.show_branding\n : true;\n\n const showTopbarAvatarImage =\n typeof rawAppearance?.show_topbar_avatar_image === 'boolean'\n ? rawAppearance.show_topbar_avatar_image\n : typeof rawAppearance?.showTopbarAvatarImage === 'boolean'\n ? rawAppearance.showTopbarAvatarImage\n : typeof (rawWidgetSource as Record<string, unknown> | null)?.show_topbar_avatar_image === 'boolean'\n ? (rawWidgetSource as Record<string, unknown>).show_topbar_avatar_image as boolean\n : typeof (rawWidgetSource as Record<string, unknown> | null)?.showTopbarAvatarImage === 'boolean'\n ? (rawWidgetSource as Record<string, unknown>).showTopbarAvatarImage as boolean\n : typeof r.show_topbar_avatar_image === 'boolean'\n ? r.show_topbar_avatar_image\n : typeof r.showTopbarAvatarImage === 'boolean'\n ? r.showTopbarAvatarImage\n : true;\n\n const rawSuggested =\n (rawBehavior?.suggested_messages as Record<string, string[]> | undefined) ||\n (rawWidgetSource?.suggested_messages as Record<string, string[]> | undefined) ||\n (conversation.suggested_messages as Record<string, string[]> | undefined) ||\n (conversation.suggestedMessages as Record<string, string[]> | undefined) ||\n {};\n\n const rawDefaultOpen =\n typeof rawBehavior?.default_open === 'boolean'\n ? rawBehavior.default_open\n : typeof rawBehavior?.defaultOpen === 'boolean'\n ? rawBehavior.defaultOpen\n : typeof (rawWidgetSource as Record<string, unknown> | null)?.default_open === 'boolean'\n ? (rawWidgetSource as Record<string, unknown>).default_open as boolean\n : typeof (rawWidgetSource as Record<string, unknown> | null)?.defaultOpen === 'boolean'\n ? (rawWidgetSource as Record<string, unknown>).defaultOpen as boolean\n : typeof r.default_open === 'boolean'\n ? r.default_open\n : typeof r.defaultOpen === 'boolean'\n ? r.defaultOpen\n : false;\n\n const rawFont =\n typeof rawAppearance?.font === 'string'\n ? rawAppearance.font\n : typeof (rawWidgetSource as Record<string, unknown> | null)?.font === 'string'\n ? (rawWidgetSource as Record<string, unknown>).font as string\n : typeof r.font === 'string'\n ? r.font\n : 'Cairo';\n\n const normalizedFont = (() => {\n const val = (rawFont || '').trim().toLowerCase().replace(/[-_]/g, ' ');\n if (val === 'readex pro' || val === 'readex') return 'Readex Pro';\n if (val === 'noto sans' || val === 'noto' || val === 'noto sans arabic') return 'Noto Sans';\n return 'Cairo';\n })();\n\n const rawConsentSource =\n (rawWidgetSource?.consent as Record<string, unknown> | undefined) ||\n (r.consent as Record<string, unknown> | undefined) ||\n (r.consent_config as Record<string, unknown> | undefined) ||\n null;\n\n const rawConsentEnabled =\n typeof rawConsentSource?.enabled === 'boolean'\n ? rawConsentSource.enabled\n : false;\n\n const rawConsentOneTime =\n typeof rawConsentSource?.one_time === 'boolean'\n ? rawConsentSource.one_time\n : typeof rawConsentSource?.oneTime === 'boolean'\n ? rawConsentSource.oneTime\n : true;\n\n const rawConsentContent =\n (rawConsentSource?.content as Record<string, string> | undefined) ||\n (rawConsentSource?.body as Record<string, string> | undefined) ||\n {};\n\n const rawEndedScreen = rawBehavior?.conversation_ended_screen as Record<string, unknown> | undefined;\n const conversationEndedScreen: WidgetConversationEndedScreen = {\n post_chat_rating_enabled:\n typeof rawEndedScreen?.post_chat_rating_enabled === 'boolean'\n ? rawEndedScreen.post_chat_rating_enabled\n : typeof (rawBehavior as Record<string, unknown>)?.post_chat_rating_enabled === 'boolean'\n ? (rawBehavior as Record<string, unknown>).post_chat_rating_enabled as boolean\n : false,\n show_conversation_id:\n typeof rawEndedScreen?.show_conversation_id === 'boolean'\n ? rawEndedScreen.show_conversation_id\n : typeof rawEndedScreen?.showConversationId === 'boolean'\n ? rawEndedScreen.showConversationId\n : true,\n };\n\n const rawBubble = rawBehavior?.welcome_bubble as Record<string, unknown> | undefined;\n const welcomeBubble: WidgetWelcomeBubble = {\n enabled: typeof rawBubble?.enabled === 'boolean' ? rawBubble.enabled : false,\n delay_seconds: typeof rawBubble?.delay_seconds === 'number' ? rawBubble.delay_seconds : 3,\n sound_enabled: typeof rawBubble?.sound_enabled === 'boolean' ? rawBubble.sound_enabled : false,\n };\n\n const rawTheme = rawAppearance?.theme as Record<string, unknown> | undefined;\n const theme: WidgetTheme = {\n mode: rawTheme?.mode === 'light' ? 'light' : 'dark',\n accent_color: typeof rawTheme?.accent_color === 'string' ? rawTheme.accent_color : null,\n end_call_button_color:\n typeof rawTheme?.end_call_button_color === 'string' ? rawTheme.end_call_button_color : null,\n };\n\n const widget: PublicAgent['widget'] | undefined = rawWidget\n ? {\n appearance: {\n position: (rawAppearance?.position as 'left' | 'right') || 'right',\n show_branding: showBranding,\n show_topbar_avatar_image: showTopbarAvatarImage,\n font: normalizedFont,\n footer_content: (rawAppearance?.footer_content as Record<string, string>) || {},\n theme,\n },\n behavior: {\n default_open: rawDefaultOpen,\n conversation_ended_screen: conversationEndedScreen,\n welcome_bubble: welcomeBubble,\n typing_indicator_enabled:\n typeof rawBehavior?.typing_indicator_enabled === 'boolean'\n ? rawBehavior.typing_indicator_enabled\n : true,\n suggested_messages: rawSuggested,\n },\n consent: {\n enabled: rawConsentEnabled,\n one_time: rawConsentOneTime,\n content: rawConsentContent,\n },\n }\n : undefined;\n\n const rawConsent = (r.consent || r.consent_config || null) as Record<string, unknown> | null;\n\n // The public API nests the welcome message under `conversation.welcome_message`.\n // Fall back to top-level (camelCase or snake_case) for compatibility.\n const rawWelcome = (conversation.welcome_message || conversation.welcomeMessage || r.welcome_message || r.welcomeMessage || {}) as Record<string, unknown>;\n const welcomeMessages: Record<string, string> = Object.fromEntries(\n Object.entries(rawWelcome)\n .filter(([, v]) => typeof v === 'string')\n .map(([k, v]) => [k, (v as string).slice(0, 1000)]),\n );\n\n const allowInterrupt =\n typeof r.allow_interrupt === 'boolean'\n ? r.allow_interrupt\n : typeof speech.allow_interrupt === 'boolean'\n ? speech.allow_interrupt\n : true;\n\n const allowWelcomeMessageInterrupt =\n typeof r.allow_welcome_message_interrupt === 'boolean'\n ? r.allow_welcome_message_interrupt\n : typeof speech.allow_welcome_message_interrupt === 'boolean'\n ? speech.allow_welcome_message_interrupt\n : false;\n\n const faceImage =\n (typeof r.face_image === 'string' ? r.face_image : null) ||\n (typeof r.faceImage === 'string' ? r.faceImage : null) ||\n null;\n\n return {\n id: (r.id as string) || null,\n name: (r.name as string) || DEFAULT_AGENT.name,\n agentType,\n useText,\n useVoice,\n faceImage,\n allowInterrupt,\n allowWelcomeMessageInterrupt,\n welcomeMessages,\n languages,\n defaultLanguage: languages.includes(defaultLanguage)\n ? defaultLanguage\n : languages[0],\n conversation: {\n default_language: defaultLanguage,\n languages,\n suggested_messages: rawSuggested,\n },\n widget: widget || undefined,\n consent: rawConsent ? {\n enabled: (rawConsent.enabled as boolean) ?? false,\n title: (rawConsent.title as Record<string, string>) || undefined,\n body: (rawConsent.body as Record<string, string>) || undefined,\n acceptLabel: (rawConsent.accept_label as Record<string, string>) || (rawConsent.acceptLabel as Record<string, string>) || undefined,\n declineLabel: (rawConsent.decline_label as Record<string, string>) || (rawConsent.declineLabel as Record<string, string>) || undefined,\n termsUrl: (rawConsent.terms_url as Record<string, string>) || (rawConsent.termsUrl as Record<string, string>) || undefined,\n privacyUrl: (rawConsent.privacy_url as Record<string, string>) || (rawConsent.privacyUrl as Record<string, string>) || undefined,\n } : undefined,\n };\n}\n\n/**\n * Fetch the slim, public-safe agent customization (name, face, languages,\n * chat kind) used to render the floating chat button and start-session screen\n * BEFORE a session is initialized. Returns a normalized PublicAgent.\n *\n * `identifier` may be an agent_id or api_key. Pass\n * `withCredentials` for authenticated (agent_id) contexts like the platform.\n */\nexport async function fetchAgentCustomization({\n restUrl,\n identifier,\n withCredentials = false,\n signal,\n}: {\n restUrl: string;\n identifier: string;\n withCredentials?: boolean;\n signal?: AbortSignal;\n}): Promise<PublicAgent> {\n if (!restUrl) throw new Error('Missing restUrl');\n if (!identifier) throw new Error('Missing identifier (agent_id or api_key)');\n\n const response = await fetch(`${restUrl}/agent/${identifier}/customization`, {\n method: 'GET',\n mode: 'cors',\n credentials: withCredentials ? 'include' : 'omit',\n headers: {\n Accept: 'application/json',\n },\n signal,\n });\n\n if (!response.ok) {\n throw new Error(`Failed to load agent customization: ${response.status}`);\n }\n\n const data = (await response.json()) as Record<string, unknown>;\n return normalizePublicAgent({\n id: data.id,\n name: data.name,\n company_name: data.company_name,\n agent_type: data.agent_type,\n use_voice: data.use_voice,\n use_text: data.use_text,\n face_image: data.face_image,\n conversation: data.conversation,\n widget: data.widget,\n allow_interrupt: data.allow_interrupt,\n allow_welcome_message_interrupt: data.allow_welcome_message_interrupt,\n welcome_message: data.welcome_message,\n });\n}\n\n\nexport async function fetchAgentConfig({ restUrl, apiKey, agentId, signal }: { restUrl: string; apiKey?: string; agentId?: string; signal?: AbortSignal }): Promise<PublicAgent> {\n if (!restUrl) throw new Error('Missing restUrl');\n const identifier = apiKey || agentId;\n if (!identifier) throw new Error('Provide one of apiKey or agentId');\n\n const response = await fetch(`${restUrl}/agent/${identifier}`, {\n method: 'GET',\n mode: 'cors',\n credentials: 'omit',\n headers: {\n Accept: 'application/json',\n },\n signal,\n });\n\n if (!response.ok) {\n let detail = `HTTP ${response.status}`;\n try {\n const data = await response.json();\n const d = data as Record<string, string>;\n detail = d?.detail || d?.message || detail;\n } catch {\n // keep fallback\n }\n throw new Error(detail);\n }\n\n return normalizePublicAgent(await response.json());\n}\n\n/**\n * Derive an effective agent from a base agent and a session config override.\n * The override may toggle `use_voice` / `use_text` which affect `useVoice` / `useText`\n * on the returned agent, changing the resolved chat kind and audio behavior.\n */\nexport function applyAgentConfigOverrides(\n agent: PublicAgent,\n config: Record<string, unknown> | undefined | null,\n): PublicAgent {\n if (!config) return agent;\n\n let { useVoice, useText } = agent;\n\n if (typeof config.use_voice === 'boolean') {\n useVoice = config.use_voice;\n }\n if (typeof config.use_text === 'boolean') {\n useText = config.use_text;\n }\n\n if (useVoice === agent.useVoice && useText === agent.useText) {\n return agent;\n }\n\n return { ...agent, useVoice, useText };\n}\n\nexport function resolveChatKind(agent: PublicAgent): 'avatar' | 'text_and_voice' | 'voice' | 'text' {\n if (\n agent.agentType === AGENT_TYPES.CLOUD_AVATAR ||\n agent.agentType === AGENT_TYPES.DESKTOP_AVATAR\n ) {\n return 'avatar';\n }\n if (agent.useText && agent.useVoice) return 'text_and_voice';\n if (agent.useVoice) return 'voice';\n return 'text';\n}\n","/**\n * @license lucide-react v1.24.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst mergeClasses = (...classes) => classes.filter((className, index, array) => {\n return Boolean(className) && className.trim() !== \"\" && array.indexOf(className) === index;\n}).join(\" \").trim();\n\nexport { mergeClasses };\n//# sourceMappingURL=mergeClasses.mjs.map\n","/**\n * @license lucide-react v1.24.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\n\nexport { toKebabCase };\n//# sourceMappingURL=toKebabCase.mjs.map\n","/**\n * @license lucide-react v1.24.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toCamelCase = (string) => string.replace(\n /^([A-Z])|[\\s-_]+(\\w)/g,\n (match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase()\n);\n\nexport { toCamelCase };\n//# sourceMappingURL=toCamelCase.mjs.map\n","/**\n * @license lucide-react v1.24.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { toCamelCase } from './toCamelCase.mjs';\n\nconst toPascalCase = (string) => {\n const camelCase = toCamelCase(string);\n return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);\n};\n\nexport { toPascalCase };\n//# sourceMappingURL=toPascalCase.mjs.map\n","/**\n * @license lucide-react v1.24.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nvar defaultAttributes = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n};\n\nexport { defaultAttributes as default };\n//# sourceMappingURL=defaultAttributes.mjs.map\n","/**\n * @license lucide-react v1.24.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst hasA11yProp = (props) => {\n for (const prop in props) {\n if (prop.startsWith(\"aria-\") || prop === \"role\" || prop === \"title\") {\n return true;\n }\n }\n return false;\n};\n\nexport { hasA11yProp };\n//# sourceMappingURL=hasA11yProp.mjs.map\n","\"use strict\";\n\"use client\";\n/**\n * @license lucide-react v1.24.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { createContext, useContext, useMemo, createElement } from 'react';\n\nconst LucideContext = createContext({});\nfunction LucideProvider({\n children,\n size,\n color,\n strokeWidth,\n absoluteStrokeWidth,\n className\n}) {\n const value = useMemo(\n () => ({\n size,\n color,\n strokeWidth,\n absoluteStrokeWidth,\n className\n }),\n [size, color, strokeWidth, absoluteStrokeWidth, className]\n );\n return createElement(LucideContext.Provider, { value }, children);\n}\nconst useLucideContext = () => useContext(LucideContext);\n\nexport { LucideProvider, useLucideContext };\n//# sourceMappingURL=context.mjs.map\n","\"use strict\";\n\"use client\";\n/**\n * @license lucide-react v1.24.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport defaultAttributes from './defaultAttributes.mjs';\nimport { hasA11yProp } from './shared/src/utils/hasA11yProp.mjs';\nimport { mergeClasses } from './shared/src/utils/mergeClasses.mjs';\nimport { useLucideContext } from './context.mjs';\n\nconst Icon = forwardRef(\n ({ color, size, strokeWidth, absoluteStrokeWidth, className = \"\", children, iconNode, ...rest }, ref) => {\n const {\n size: contextSize = 24,\n strokeWidth: contextStrokeWidth = 2,\n absoluteStrokeWidth: contextAbsoluteStrokeWidth = false,\n color: contextColor = \"currentColor\",\n className: contextClass = \"\"\n } = useLucideContext() ?? {};\n const calculatedStrokeWidth = absoluteStrokeWidth ?? contextAbsoluteStrokeWidth ? Number(strokeWidth ?? contextStrokeWidth) * 24 / Number(size ?? contextSize) : strokeWidth ?? contextStrokeWidth;\n return createElement(\n \"svg\",\n {\n ref,\n ...defaultAttributes,\n width: size ?? contextSize ?? defaultAttributes.width,\n height: size ?? contextSize ?? defaultAttributes.height,\n stroke: color ?? contextColor,\n strokeWidth: calculatedStrokeWidth,\n className: mergeClasses(\"lucide\", contextClass, className),\n ...!children && !hasA11yProp(rest) && { \"aria-hidden\": \"true\" },\n ...rest\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...Array.isArray(children) ? children : [children]\n ]\n );\n }\n);\n\nexport { Icon as default };\n//# sourceMappingURL=Icon.mjs.map\n","/**\n * @license lucide-react v1.24.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport { mergeClasses } from './shared/src/utils/mergeClasses.mjs';\nimport { toKebabCase } from './shared/src/utils/toKebabCase.mjs';\nimport { toPascalCase } from './shared/src/utils/toPascalCase.mjs';\nimport Icon from './Icon.mjs';\n\nconst createLucideIcon = (iconName, iconNode) => {\n const Component = forwardRef(\n ({ className, ...props }, ref) => createElement(Icon, {\n ref,\n iconNode,\n className: mergeClasses(\n `lucide-${toKebabCase(toPascalCase(iconName))}`,\n `lucide-${iconName}`,\n className\n ),\n ...props\n })\n );\n Component.displayName = toPascalCase(iconName);\n return Component;\n};\n\nexport { createLucideIcon as default };\n//# sourceMappingURL=createLucideIcon.mjs.map\n","/**\n * @license lucide-react v1.24.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"m5 12 7-7 7 7\", key: \"hav0vg\" }],\n [\"path\", { d: \"M12 19V5\", key: \"x0mq9r\" }]\n];\nconst ArrowUp = createLucideIcon(\"arrow-up\", __iconNode);\n\nexport { __iconNode, ArrowUp as default };\n//# sourceMappingURL=arrow-up.mjs.map\n","/**\n * @license lucide-react v1.24.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [[\"path\", { d: \"m15 18-6-6 6-6\", key: \"1wnfg3\" }]];\nconst ChevronLeft = createLucideIcon(\"chevron-left\", __iconNode);\n\nexport { __iconNode, ChevronLeft as default };\n//# sourceMappingURL=chevron-left.mjs.map\n","/**\n * @license lucide-react v1.24.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [[\"path\", { d: \"m6 9 6 6 6-6\", key: \"qrunsl\" }]];\nconst ChevronDown = createLucideIcon(\"chevron-down\", __iconNode);\n\nexport { __iconNode, ChevronDown as default };\n//# sourceMappingURL=chevron-down.mjs.map\n","/**\n * @license lucide-react v1.24.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [[\"path\", { d: \"m18 15-6-6-6 6\", key: \"153udz\" }]];\nconst ChevronUp = createLucideIcon(\"chevron-up\", __iconNode);\n\nexport { __iconNode, ChevronUp as default };\n//# sourceMappingURL=chevron-up.mjs.map\n","/**\n * @license lucide-react v1.24.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [[\"path\", { d: \"M21 12a9 9 0 1 1-6.219-8.56\", key: \"13zald\" }]];\nconst LoaderCircle = createLucideIcon(\"loader-circle\", __iconNode);\n\nexport { __iconNode, LoaderCircle as default };\n//# sourceMappingURL=loader-circle.mjs.map\n","/**\n * @license lucide-react v1.24.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"M15 3h6v6\", key: \"1q9fwt\" }],\n [\"path\", { d: \"m21 3-7 7\", key: \"1l2asr\" }],\n [\"path\", { d: \"m3 21 7-7\", key: \"tjx5ai\" }],\n [\"path\", { d: \"M9 21H3v-6\", key: \"wtvkvv\" }]\n];\nconst Maximize2 = createLucideIcon(\"maximize-2\", __iconNode);\n\nexport { __iconNode, Maximize2 as default };\n//# sourceMappingURL=maximize-2.mjs.map\n","/**\n * @license lucide-react v1.24.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"M12 19v3\", key: \"npa21l\" }],\n [\"path\", { d: \"M15 9.34V5a3 3 0 0 0-5.68-1.33\", key: \"1gzdoj\" }],\n [\"path\", { d: \"M16.95 16.95A7 7 0 0 1 5 12v-2\", key: \"cqa7eg\" }],\n [\"path\", { d: \"M18.89 13.23A7 7 0 0 0 19 12v-2\", key: \"16hl24\" }],\n [\"path\", { d: \"m2 2 20 20\", key: \"1ooewy\" }],\n [\"path\", { d: \"M9 9v3a3 3 0 0 0 5.12 2.12\", key: \"r2i35w\" }]\n];\nconst MicOff = createLucideIcon(\"mic-off\", __iconNode);\n\nexport { __iconNode, MicOff as default };\n//# sourceMappingURL=mic-off.mjs.map\n","/**\n * @license lucide-react v1.24.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"M12 19v3\", key: \"npa21l\" }],\n [\"path\", { d: \"M19 10v2a7 7 0 0 1-14 0v-2\", key: \"1vc78b\" }],\n [\"rect\", { x: \"9\", y: \"2\", width: \"6\", height: \"13\", rx: \"3\", key: \"s6n7sd\" }]\n];\nconst Mic = createLucideIcon(\"mic\", __iconNode);\n\nexport { __iconNode, Mic as default };\n//# sourceMappingURL=mic.mjs.map\n","/**\n * @license lucide-react v1.24.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"m14 10 7-7\", key: \"oa77jy\" }],\n [\"path\", { d: \"M20 10h-6V4\", key: \"mjg0md\" }],\n [\"path\", { d: \"m3 21 7-7\", key: \"tjx5ai\" }],\n [\"path\", { d: \"M4 14h6v6\", key: \"rmj7iw\" }]\n];\nconst Minimize2 = createLucideIcon(\"minimize-2\", __iconNode);\n\nexport { __iconNode, Minimize2 as default };\n//# sourceMappingURL=minimize-2.mjs.map\n","/**\n * @license lucide-react v1.24.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M10.1 13.9a14 14 0 0 0 3.732 2.668 1 1 0 0 0 1.213-.303l.355-.465A2 2 0 0 1 17 15h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2 18 18 0 0 1-12.728-5.272\",\n key: \"1wngk7\"\n }\n ],\n [\"path\", { d: \"M22 2 2 22\", key: \"y4kqgn\" }],\n [\n \"path\",\n {\n d: \"M4.76 13.582A18 18 0 0 1 2 4a2 2 0 0 1 2-2h3a2 2 0 0 1 2 2v3a2 2 0 0 1-.8 1.6l-.468.351a1 1 0 0 0-.292 1.233 14 14 0 0 0 .244.473\",\n key: \"10hv5p\"\n }\n ]\n];\nconst PhoneOff = createLucideIcon(\"phone-off\", __iconNode);\n\nexport { __iconNode, PhoneOff as default };\n//# sourceMappingURL=phone-off.mjs.map\n","/**\n * @license lucide-react v1.24.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M13.832 16.568a1 1 0 0 0 1.213-.303l.355-.465A2 2 0 0 1 17 15h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2A18 18 0 0 1 2 4a2 2 0 0 1 2-2h3a2 2 0 0 1 2 2v3a2 2 0 0 1-.8 1.6l-.468.351a1 1 0 0 0-.292 1.233 14 14 0 0 0 6.392 6.384\",\n key: \"9njp5v\"\n }\n ]\n];\nconst Phone = createLucideIcon(\"phone\", __iconNode);\n\nexport { __iconNode, Phone as default };\n//# sourceMappingURL=phone.mjs.map\n","/**\n * @license lucide-react v1.24.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\", key: \"1357e3\" }],\n [\"path\", { d: \"M3 3v5h5\", key: \"1xhq8a\" }]\n];\nconst RotateCcw = createLucideIcon(\"rotate-ccw\", __iconNode);\n\nexport { __iconNode, RotateCcw as default };\n//# sourceMappingURL=rotate-ccw.mjs.map\n","/**\n * @license lucide-react v1.24.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z\",\n key: \"r04s7s\"\n }\n ]\n];\nconst Star = createLucideIcon(\"star\", __iconNode);\n\nexport { __iconNode, Star as default };\n//# sourceMappingURL=star.mjs.map\n","/**\n * @license lucide-react v1.24.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"M18 6 6 18\", key: \"1bl5f8\" }],\n [\"path\", { d: \"m6 6 12 12\", key: \"d8bk6v\" }]\n];\nconst X = createLucideIcon(\"x\", __iconNode);\n\nexport { __iconNode, X as default };\n//# sourceMappingURL=x.mjs.map\n","import { useEffect, useRef, useState } from 'react';\n\nexport const noop = () => {};\n\n// Matches the `@media (max-width: 767px)` mobile breakpoint used across styles.css\n// and the MOBILE_BREAKPOINT constant in primitives.tsx.\nexport const MOBILE_BREAKPOINT = 767;\n\n/** True when the current viewport is a mobile-sized screen. SSR-safe. */\nexport function isMobileViewport(): boolean {\n return typeof window !== 'undefined' && window.innerWidth <= MOBILE_BREAKPOINT;\n}\n\nexport function cx(...classes: (string | boolean | undefined | null)[]): string {\n return classes.filter(Boolean).join(' ');\n}\n\nexport function resolveWidgetFontFamily(font?: string): string {\n const normalized = (font || '').trim().toLowerCase().replace(/[-_]/g, ' ');\n if (normalized === 'readex pro' || normalized === 'readex') {\n return \"'Readex Pro', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif\";\n }\n if (normalized === 'noto sans' || normalized === 'noto' || normalized === 'noto sans arabic') {\n return \"'Noto Sans', 'Noto Sans Arabic', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif\";\n }\n return \"'Cairo', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif\";\n}\n\n/**\n * Takes a hex color and returns '#000000' or '#ffffff' based on contrast.\n */\nexport function getContrastTextColor(hexColor?: string | null): string {\n if (!hexColor) return '#ffffff';\n const hex = hexColor.replace('#', '').trim();\n\n let fullHex = hex;\n if (hex.length === 3) {\n fullHex = hex.split('').map((c) => c + c).join('');\n }\n if (fullHex.length < 6) return '#ffffff';\n\n const r = parseInt(fullHex.substring(0, 2), 16);\n const g = parseInt(fullHex.substring(2, 4), 16);\n const b = parseInt(fullHex.substring(4, 6), 16);\n\n if (Number.isNaN(r) || Number.isNaN(g) || Number.isNaN(b)) return '#ffffff';\n\n // Calculate the YIQ brightness ratio\n const yiq = ((r * 299) + (g * 587) + (b * 114)) / 1000;\n\n // If the background is light (yiq >= 128), return black text. Otherwise, white.\n return yiq >= 128 ? '#000000' : '#ffffff';\n}\n\n/**\n * Builds CSS custom property styles for the widget surface based on appearance and theme options.\n */\nexport function resolveWidgetThemeStyles(appearance?: {\n font?: string;\n theme?: { accent_color?: string | null; end_call_button_color?: string | null };\n}): React.CSSProperties {\n const styles: Record<string, string> = {\n '--rqmii-font-family': resolveWidgetFontFamily(appearance?.font),\n };\n\n const accentColor = appearance?.theme?.accent_color?.trim();\n if (accentColor) {\n const accentTextColor = getContrastTextColor(accentColor);\n styles['--rqmii-accent'] = accentColor;\n styles['--rqmii-accent-text'] = accentTextColor;\n styles['--rqmii-message-user'] = accentColor;\n styles['--rqmii-message-user-text'] = accentTextColor;\n }\n\n const endCallColor = appearance?.theme?.end_call_button_color?.trim();\n if (endCallColor) {\n const endCallTextColor = getContrastTextColor(endCallColor);\n styles['--rqmii-end-call-bg'] = endCallColor;\n styles['--rqmii-end-call-text'] = endCallTextColor;\n }\n\n return styles as React.CSSProperties;\n}\n\nexport function getGoogleFontUrl(font?: string): string {\n const normalized = (font || '').trim().toLowerCase().replace(/[-_]/g, ' ');\n if (normalized === 'readex pro' || normalized === 'readex') {\n return 'https://fonts.googleapis.com/css2?family=Readex+Pro:wght@400;500;600;700&display=swap';\n }\n if (normalized === 'noto sans' || normalized === 'noto' || normalized === 'noto sans arabic') {\n return 'https://fonts.googleapis.com/css2?family=Noto+Sans:wght@400;500;600;700&family=Noto+Sans+Arabic:wght@400;500;600;700&display=swap';\n }\n return 'https://fonts.googleapis.com/css2?family=Cairo:wght@400;500;600;700&display=swap';\n}\n\nexport function ensureGoogleFontLoaded(font?: string): void {\n if (typeof document === 'undefined') return;\n const href = getGoogleFontUrl(font);\n const existing = document.querySelector(`link[data-rqmii-font=\"${href}\"]`);\n if (existing) return;\n const link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = href;\n link.setAttribute('data-rqmii-font', href);\n document.head.appendChild(link);\n}\n\nexport function languageFontClass(_language?: string): string {\n return '';\n}\n\nexport function languageMenuFontClass(_value?: string): string {\n return '';\n}\n\nexport function languageTextDirection(language: string): 'rtl' | 'ltr' {\n return language.startsWith('ar') || ['fa', 'ur', 'he'].includes(language) ? 'rtl' : 'ltr';\n}\n\nexport function formatTime(seconds: number): string {\n const minutes = Math.floor(seconds / 60).toString().padStart(2, '0');\n const rest = (seconds % 60).toString().padStart(2, '0');\n return `${minutes}:${rest}`;\n}\n\nexport function useElapsed(active = true): number {\n const [elapsed, setElapsed] = useState(0);\n\n useEffect(() => {\n if (!active) return undefined;\n const interval = setInterval(() => setElapsed((value) => value + 1), 1000);\n return () => clearInterval(interval);\n }, [active]);\n\n return elapsed;\n}\n\nexport function useVisualViewportHeight(): number | null {\n const [height, setHeight] = useState<number | null>(null);\n\n useEffect(() => {\n const vv = window.visualViewport;\n if (!vv) return;\n\n const update = () => setHeight(vv.height);\n update();\n\n vv.addEventListener('resize', update);\n vv.addEventListener('scroll', update);\n return () => {\n vv.removeEventListener('resize', update);\n vv.removeEventListener('scroll', update);\n };\n }, []);\n\n return height;\n}\n\nexport function useStreamingText(text: string, streaming?: boolean): string {\n const wordsRef = useRef<string[]>([]);\n wordsRef.current = text.match(/\\S+\\s*/g) || [text];\n\n const [wordCount, setWordCount] = useState(() =>\n streaming ? Math.min(1, wordsRef.current.length) : wordsRef.current.length,\n );\n\n useEffect(() => {\n if (!streaming || !text) {\n setWordCount(wordsRef.current.length);\n return;\n }\n setWordCount((prev) => Math.max(1, prev));\n\n if (wordsRef.current.length <= 1) return;\n\n const timer = setInterval(() => {\n setWordCount((prev) => {\n if (prev >= wordsRef.current.length) {\n clearInterval(timer);\n return prev;\n }\n return prev + 1;\n });\n }, 50);\n\n return () => clearInterval(timer);\n }, [text, streaming]);\n\n return wordsRef.current.slice(0, wordCount).join('');\n}\n","import React, { useEffect, useLayoutEffect, useRef, useState } from 'react';\nimport { ArrowUp, ChevronDown, ChevronUp, RotateCcw } from 'lucide-react';\nimport { getChatLanguage, getChatText, normalizeChatLanguages } from '../languages';\nconst RqmiiOrb = React.lazy(() => import('../Orb').then(m => ({ default: m.RqmiiOrb })));\nimport { cx, languageFontClass, languageTextDirection, useStreamingText } from './utils';\nimport type { PublicAgent, LeadCaptureForm as LeadCaptureFormData } from '../../types';\nimport { useRqmiiAgentContext } from '../../provider/RqmiiAgentProvider';\n\nexport const LanguageSelect = React.memo(function LanguageSelect({ language, languages, onChange }: { language: string; languages: string[]; onChange: (v: string) => void }) {\n const [open, setOpen] = useState(false);\n const ref = useRef<HTMLDivElement>(null);\n const selected = getChatLanguage(language);\n const options = normalizeChatLanguages(languages, language)\n .map((value) => getChatLanguage(value))\n .filter(Boolean);\n\n useEffect(() => {\n if (!open) return undefined;\n const handler = (event: MouseEvent) => {\n if (!ref.current?.contains(event.target as Node)) setOpen(false);\n };\n document.addEventListener('mousedown', handler);\n return () => document.removeEventListener('mousedown', handler);\n }, [open]);\n\n return (\n <div className=\"rqmii-chat-language\" ref={ref}>\n <button type=\"button\" className=\"rqmii-chat-pill\" onClick={() => setOpen((value) => !value)}>\n <span>{selected?.label || language}</span>\n <ChevronDown size={16} />\n </button>\n {open && options.length > 1 && (\n <div className=\"rqmii-chat-language-menu\">\n {options.map((option) => (\n <button\n key={option!.value}\n type=\"button\"\n className={cx('rqmii-chat-language-item', option!.value === language && 'is-selected')}\n onClick={() => { onChange(option!.value); setOpen(false); }}\n >\n {option!.label}\n </button>\n ))}\n </div>\n )}\n </div>\n );\n});\n\nexport const RqmiiChatFooter = React.memo(function RqmiiChatFooter({ language = 'en', brand = 'rqmii', agent }: { language?: string; brand?: string; agent?: PublicAgent | null }) {\n const appearance = agent?.widget?.appearance;\n const showBranding = appearance?.show_branding !== false;\n const footerContent = appearance?.footer_content?.[language];\n const hasFooterContent = !!footerContent?.trim();\n\n if (!showBranding && !hasFooterContent) return <div style={{ padding: 11 }} />;\n\n return (\n <div className=\"rqmii-chat-footer\">\n {showBranding && (\n <p>Powered by <strong>{brand}</strong></p>\n )}\n {hasFooterContent && <p>{footerContent}</p>}\n </div>\n );\n});\n\nexport const RqmiiAgentAvatar = React.memo(function RqmiiAgentAvatar({\n agent,\n size = 'large',\n active = false,\n className = '',\n}: {\n agent: PublicAgent | null;\n size?: string;\n active?: boolean;\n className?: string;\n}) {\n const faceImage = agent?.faceImage;\n const isOrb = !faceImage || faceImage === 'orb';\n\n return (\n <div\n className={cx(\n 'rqmii-agent-avatar',\n `rqmii-agent-avatar--${size}`,\n active && 'is-active',\n isOrb && 'is-orb',\n className\n )}\n >\n {isOrb ? (\n <React.Suspense fallback={null}>\n <RqmiiOrb className=\"rqmii-agent-avatar-orb\" />\n </React.Suspense>\n ) : (\n <img\n src={faceImage}\n alt={agent?.name || 'Agent'}\n />\n )}\n </div>\n );\n});\n\nexport const RqmiiChatOpenButton = React.memo(function RqmiiChatOpenButton({ agent, onClick, className = '', position = 'fixed', active = false }: { agent: PublicAgent | null; onClick: () => void; className?: string; position?: 'fixed' | 'static'; active?: boolean }) {\n return (\n <button type=\"button\" className={cx('rqmii-chat-open-button', position === 'fixed' && 'is-fixed', className)} onClick={onClick} aria-label=\"Open chat\">\n <RqmiiAgentAvatar agent={agent} size=\"button\" active={active} />\n </button>\n );\n});\n\n// Plays a short, synthesized notification tone (no external asset needed).\nfunction playNotificationSound(): void {\n try {\n const Ctx = window.AudioContext || (window as unknown as { webkitAudioContext?: typeof AudioContext }).webkitAudioContext;\n if (!Ctx) return;\n const ctx = new Ctx();\n const now = ctx.currentTime;\n const osc = ctx.createOscillator();\n const gain = ctx.createGain();\n osc.type = 'sine';\n osc.frequency.setValueAtTime(880, now);\n osc.frequency.setValueAtTime(1180, now + 0.12);\n gain.gain.setValueAtTime(0.0001, now);\n gain.gain.exponentialRampToValueAtTime(0.18, now + 0.02);\n gain.gain.exponentialRampToValueAtTime(0.0001, now + 0.32);\n osc.connect(gain);\n gain.connect(ctx.destination);\n osc.start(now);\n osc.stop(now + 0.34);\n osc.onended = () => { void ctx.close(); };\n } catch {\n // Autoplay/permission errors are non-fatal — silently ignore.\n }\n}\n\n/**\n * Welcome message bubble shown next to the floating open button before the chat\n * opens. Appears after `delaySeconds`, optionally plays a notification sound, and\n * is dismissed by the parent when clicked or when the chat opens.\n * `buttonPosition` is where the chat button is anchored ('right' or 'left').\n * The bubble appears on the OPPOSITE side so it doesn't overlap the button.\n */\nexport const WelcomeBubble = React.memo(function WelcomeBubble({ message, delaySeconds, soundEnabled, language, buttonPosition = 'right', onClick }: {\n message: string;\n delaySeconds: number;\n soundEnabled: boolean;\n language: string;\n /** Side where the floating chat button sits. Bubble appears on the opposite side. */\n buttonPosition?: 'left' | 'right';\n onClick: () => void;\n}) {\n const [visible, setVisible] = useState(false);\n const trimmed = message.trim();\n\n useEffect(() => {\n if (!trimmed) return undefined;\n const timer = setTimeout(() => {\n setVisible(true);\n if (soundEnabled) playNotificationSound();\n }, Math.max(0, delaySeconds) * 1000);\n return () => clearTimeout(timer);\n }, [trimmed, delaySeconds, soundEnabled]);\n\n if (!visible || !trimmed) return null;\n\n // Bubble is pinned above the floating button on the same side, growing left (button right)\n // or right (button left) up to max-width, then growing up.\n const sideClass = buttonPosition === 'right' ? 'is-right' : 'is-left';\n\n return (\n <button\n type=\"button\"\n className={cx('rqmii-chat-welcome-bubble', sideClass, languageFontClass(language))}\n dir={languageTextDirection(language)}\n onClick={onClick}\n aria-label={trimmed}\n >\n {trimmed}\n </button>\n );\n});\n\nexport const ChatInput = React.memo(function ChatInput({ language, placeholder, onSend, disabled = false, variant = 'text' }: { language: string; placeholder?: string; onSend: (text: string) => void; disabled?: boolean; variant?: 'text' | 'compact' | 'voice' }) {\n const [message, setMessage] = useState('');\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n const maxTextareaHeight = 7 * 24;\n\n const send = () => {\n const text = message.trim();\n if (!text || disabled) return;\n onSend(text);\n setMessage('');\n if (textareaRef.current) textareaRef.current.style.height = 'auto';\n };\n\n return (\n <div className={cx('rqmii-chat-input', languageFontClass(language), variant === 'voice' && 'is-voice')}>\n <textarea\n ref={textareaRef}\n value={message}\n disabled={disabled}\n rows={variant === 'compact' ? 2 : 3}\n dir={languageTextDirection(language)}\n placeholder={placeholder || getChatText(language, 'sendMessage')}\n onChange={(event) => {\n setMessage(event.target.value);\n const textarea = textareaRef.current;\n if (!textarea) return;\n textarea.style.height = 'auto';\n textarea.style.height = `${Math.min(textarea.scrollHeight, maxTextareaHeight)}px`;\n }}\n onKeyDown={(event) => {\n if (event.key === 'Enter' && !event.shiftKey) { event.preventDefault(); send(); }\n }}\n />\n <button type=\"button\" onClick={send} disabled={!message.trim() || disabled} aria-label={getChatText(language, 'send')}>\n <ArrowUp size={20} />\n </button>\n </div>\n );\n});\n\nconst StreamingText = React.memo(function StreamingText({ text, streaming }: { text: string; streaming?: boolean }) {\n const displayText = useStreamingText(text, streaming);\n return <>{displayText}</>;\n});\n\nconst SUGGESTIONS_MAX_HEIGHT = 133;\n// On mobile the panel is a full-screen takeover (see the 767px breakpoint in\n// styles.css), so there's extra vertical room to give the suggestions list.\nconst SUGGESTIONS_MAX_HEIGHT_MOBILE = SUGGESTIONS_MAX_HEIGHT + 44;\nconst MOBILE_BREAKPOINT = 767;\nconst TOGGLE_SIZE = 36;\nconst TOGGLE_GAP = 8;\nconst TOGGLE_RESERVED = TOGGLE_SIZE + TOGGLE_GAP;\n\nfunction getSuggestionsMaxHeight(): number {\n if (typeof window === 'undefined') return SUGGESTIONS_MAX_HEIGHT;\n return window.innerWidth <= MOBILE_BREAKPOINT ? SUGGESTIONS_MAX_HEIGHT_MOBILE : SUGGESTIONS_MAX_HEIGHT;\n}\n\n// The toggle sits on the reading-start side: right in RTL, left in LTR\n// (mirrors CSS `inset-inline-start`).\nfunction toggleSide(textDirection: string): 'left' | 'right' {\n return textDirection === 'rtl' ? 'right' : 'left';\n}\n\n// Finds whichever bubble sits in the toggle's corner of `items`' last row.\nfunction findCornerBubble(items: HTMLButtonElement[], containerWidth: number, side: 'left' | 'right', reserved: number) {\n if (!items.length) return null;\n const lastRowTop = Math.max(...items.map((b) => b.offsetTop));\n const rowItems = items.filter((b) => b.offsetTop >= lastRowTop - 0.5);\n return side === 'right'\n ? rowItems.find((b) => b.offsetLeft + b.offsetWidth > containerWidth - reserved) || null\n : rowItems.find((b) => b.offsetLeft < reserved) || null;\n}\n\n// Reserves room in the corner bubble so its text never renders underneath the\n// toggle button. Two passes: narrowing the corner bubble can re-wrap the row\n// and change which bubble actually touches the corner.\nfunction reserveCornerSpace(items: HTMLButtonElement[], containerWidth: number, side: 'left' | 'right', reserved: number) {\n for (let pass = 0; pass < 2; pass++) {\n const corner = findCornerBubble(items, containerWidth, side, reserved);\n if (!corner) break;\n if (side === 'right') corner.style.marginRight = `${reserved}px`;\n else corner.style.marginLeft = `${reserved}px`;\n corner.style.maxWidth = `calc(100% - ${reserved}px)`;\n }\n}\n\nexport const SuggestedMessages = React.memo(function SuggestedMessages({ suggestions, language, onClick }: { suggestions: string[]; language?: string; onClick: (text: string) => void }) {\n const [expanded, setExpanded] = useState(false);\n const [hasOverflow, setHasOverflow] = useState(false);\n // Index of the first bubble that no longer fits within the max height. Every\n // bubble from this index on is hidden while collapsed so we never show a\n // partially clipped bubble.\n const [hiddenFrom, setHiddenFrom] = useState<number | null>(null);\n // Vertical position of the toggle, aligned to the bottom of the last row\n // that is actually visible (last fitting row when collapsed, last row of all\n // when expanded). Kept in state so it applies the moment the button mounts.\n const [toggleTop, setToggleTop] = useState<number | null>(null);\n const innerRef = useRef<HTMLDivElement>(null);\n const itemRefs = useRef<Array<HTMLButtonElement | null>>([]);\n const textDirection = languageTextDirection(language || 'en');\n const side = toggleSide(textDirection);\n\n const resetReservations = (items: Array<HTMLButtonElement | null>) => {\n items.forEach((b) => { if (b) { b.style.maxWidth = ''; b.style.marginRight = ''; b.style.marginLeft = ''; } });\n };\n\n // COLLAPSED: figure out which bubbles fit within the max height, then\n // reserve corner space in the last visible bubble so its text doesn't sit\n // under the toggle. Bail out while expanded so it can't clobber the\n // expanded-state adjustments below.\n useLayoutEffect(() => {\n const el = innerRef.current;\n if (!el || expanded) return;\n\n const measure = () => {\n const items = itemRefs.current;\n // Reset any previous reservation before measuring the natural\n // (unclipped) layout. Bubbles keep their layout slot even when hidden\n // (visibility, not display) so offsets stay stable across re-measures\n // and we avoid a show/hide flicker loop.\n resetReservations(items);\n\n const width = el.clientWidth;\n const maxHeight = getSuggestionsMaxHeight();\n const firstOverIndex = (): number | null => {\n for (let i = 0; i < items.length; i++) {\n const b = items[i];\n if (!b) continue;\n if (b.offsetTop + b.offsetHeight > maxHeight + 0.5) return i;\n }\n return null;\n };\n\n let firstOverflow = firstOverIndex();\n\n // Reserving room for the toggle narrows the corner bubble, which can make\n // it taller and push it past the limit. Re-measure and shrink the visible\n // set until stable, so a tall corner bubble gets hidden, never cropped.\n if (firstOverflow !== null) {\n for (let guard = 0; guard <= items.length; guard++) {\n resetReservations(items);\n const visible = items.slice(0, firstOverflow).filter((b): b is HTMLButtonElement => !!b);\n reserveCornerSpace(visible, width, side, TOGGLE_RESERVED);\n const next = firstOverIndex();\n if (next === null || next >= firstOverflow) break;\n firstOverflow = next;\n }\n }\n\n setHiddenFrom(firstOverflow);\n setHasOverflow(firstOverflow !== null);\n\n if (firstOverflow !== null) {\n const visible = items.slice(0, firstOverflow).filter((b): b is HTMLButtonElement => !!b);\n const bottom = visible.length ? Math.max(...visible.map((b) => b.offsetTop + b.offsetHeight)) : TOGGLE_SIZE;\n setToggleTop(bottom - TOGGLE_SIZE);\n } else {\n setToggleTop(null);\n }\n };\n\n measure();\n\n const ro = typeof ResizeObserver !== 'undefined' ? new ResizeObserver(measure) : null;\n ro?.observe(el);\n return () => {\n ro?.disconnect();\n resetReservations(itemRefs.current);\n };\n }, [suggestions, expanded, side]);\n\n // EXPANDED: pin the toggle circle at the corner of the last row (all bubbles\n // visible), reserving room in the corner bubble so text never sits under it.\n useLayoutEffect(() => {\n const el = innerRef.current;\n if (!el || !expanded) return;\n\n const items = itemRefs.current.filter((b): b is HTMLButtonElement => !!b);\n resetReservations(itemRefs.current);\n reserveCornerSpace(items, el.clientWidth, side, TOGGLE_RESERVED);\n\n const contentBottom = items.length ? Math.max(...items.map((b) => b.offsetTop + b.offsetHeight)) : TOGGLE_SIZE;\n setToggleTop(contentBottom - TOGGLE_SIZE);\n\n return () => {\n resetReservations(itemRefs.current);\n };\n }, [expanded, suggestions, side]);\n\n if (!suggestions.length) return null;\n\n return (\n <div className={cx('rqmii-suggested-messages', expanded && 'is-expanded', hasOverflow && 'has-overflow')} dir={textDirection}>\n <div ref={innerRef} className={cx('rqmii-suggested-messages-inner', expanded ? 'is-expanded' : 'is-collapsed')}>\n {suggestions.map((text, i) => {\n const hidden = !expanded && hiddenFrom !== null && i >= hiddenFrom;\n return (\n <button\n key={i}\n ref={(node) => { itemRefs.current[i] = node; }}\n type=\"button\"\n className=\"rqmii-suggested-message\"\n onClick={() => onClick(text)}\n style={hidden ? { visibility: 'hidden' } : undefined}\n aria-hidden={hidden || undefined}\n tabIndex={hidden ? -1 : undefined}\n >\n {text}\n </button>\n );\n })}\n {hasOverflow && (\n <button\n type=\"button\"\n className={cx('rqmii-suggested-messages-toggle', side === 'left' && 'is-start-left')}\n style={toggleTop != null ? { top: toggleTop, bottom: 'auto' } : undefined}\n onClick={() => setExpanded((v) => {\n if (v && innerRef.current) innerRef.current.scrollTop = 0;\n return !v;\n })}\n aria-label={expanded ? 'Show less' : 'Show more'}\n aria-expanded={expanded}\n >\n {expanded ? <ChevronUp size={14} /> : <ChevronDown size={14} />}\n </button>\n )}\n </div>\n </div>\n );\n});\n\nexport const TypingIndicator = React.memo(function TypingIndicator({ language }: { language?: string }) {\n const textDirection = languageTextDirection(language || 'en');\n return (\n <div className=\"rqmii-chat-message-row\">\n <div className=\"rqmii-chat-message rqmii-chat-typing-indicator\" dir={textDirection}>\n <span className=\"rqmii-chat-typing-dot\" />\n <span className=\"rqmii-chat-typing-dot\" />\n <span className=\"rqmii-chat-typing-dot\" />\n </div>\n </div>\n );\n});\n\nfunction isMultilineField(key: string): boolean {\n return key === 'message';\n}\n\n/** Map known field keys to their i18n placeholder key. */\nconst FIELD_PLACEHOLDER_KEYS: Record<string, string> = {\n name: 'leadFormName',\n email: 'leadFormEmail',\n phone: 'leadFormPhone',\n message: 'leadFormMessage',\n};\n\nexport const LeadCaptureFormMessage = React.memo(function LeadCaptureFormMessage({ messageId, form, language, textDirection, formSubmitted }: { messageId: string; form: LeadCaptureFormData; language: string; textDirection: 'rtl' | 'ltr'; formSubmitted?: boolean }) {\n const ctx = useRqmiiAgentContext();\n const [values, setValues] = useState<Record<string, string>>({});\n const [submitting, setSubmitting] = useState(false);\n const [submitted, setSubmitted] = useState(!!formSubmitted);\n const [error, setError] = useState<string | null>(null);\n\n const title = form.title || getChatText(language, 'leadFormTitle');\n\n const getPlaceholder = (field: LeadCaptureFormData['fields'][number]) => {\n const i18nKey = FIELD_PLACEHOLDER_KEYS[field.key];\n const label = i18nKey ? getChatText(language, i18nKey) : field.label;\n return `${label}${field.required ? '*' : ''}`;\n };\n\n const handleChange = (key: string, value: string) => {\n setValues((prev) => ({ ...prev, [key]: value }));\n if (error) setError(null);\n };\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n if (submitting || submitted) return;\n\n const missingRequired = form.fields.some((f) => f.required && !values[f.key]?.trim());\n if (missingRequired) {\n setError(getChatText(language, 'leadFormRequiredError'));\n return;\n }\n\n const collectedData: Record<string, string> = {};\n for (const f of form.fields) {\n const v = values[f.key]?.trim();\n if (v) collectedData[f.key] = v;\n }\n\n setSubmitting(true);\n setError(null);\n try {\n await ctx.submitLead({ agentId: form.agentId, collectedData });\n setSubmitted(true);\n // Persist the submitted flag in the provider message list so it\n // survives component remounts (e.g. session end → feedback → back).\n ctx.setMessages(\n ctx.messages.map((m) =>\n m.id === messageId ? { ...m, formSubmitted: true } : m,\n ),\n );\n } catch (err) {\n setError((err as Error)?.message || getChatText(language, 'leadFormGenericError'));\n } finally {\n setSubmitting(false);\n }\n };\n\n if (submitted) {\n return (\n <div className=\"rqmii-chat-message-row rqmii-chat-lead-form-row\">\n <div className=\"rqmii-chat-lead-form rqmii-chat-lead-form--done\" dir={textDirection}>\n <div className=\"rqmii-chat-lead-form-success\">{getChatText(language, 'leadFormSuccess')}</div>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"rqmii-chat-message-row rqmii-chat-lead-form-row\">\n <form className=\"rqmii-chat-lead-form\" dir={textDirection} onSubmit={handleSubmit}>\n <div className=\"rqmii-chat-lead-form-title\">{title}</div>\n {form.fields.map((field) => {\n const placeholder = getPlaceholder(field);\n const inputType = field.type === 'email' ? 'email' : field.type === 'date' ? 'date' : 'text';\n return isMultilineField(field.key) ? (\n <textarea\n key={field.key}\n className=\"rqmii-chat-lead-form-input rqmii-chat-lead-form-textarea\"\n placeholder={placeholder}\n value={values[field.key] || ''}\n onChange={(e) => handleChange(field.key, e.target.value)}\n disabled={submitting}\n rows={4}\n />\n ) : (\n <input\n key={field.key}\n className=\"rqmii-chat-lead-form-input\"\n type={inputType}\n placeholder={placeholder}\n value={values[field.key] || ''}\n onChange={(e) => handleChange(field.key, e.target.value)}\n disabled={submitting}\n />\n );\n })}\n {error && <div className=\"rqmii-chat-lead-form-error\">{error}</div>}\n <button type=\"submit\" className=\"rqmii-chat-lead-form-submit\" disabled={submitting}>\n {submitting ? getChatText(language, 'loading') : getChatText(language, 'submit')}\n </button>\n </form>\n </div>\n );\n});\n\nconst MessageRow = React.memo(function MessageRow({ message, textDirection, language }: { message: any; textDirection: 'rtl' | 'ltr'; language: string }) {\n if (message.role === 'lead_form' && message.form) {\n return <LeadCaptureFormMessage messageId={message.id} form={message.form} language={language} textDirection={textDirection} formSubmitted={message.formSubmitted} />;\n }\n const isUser = message.role === 'user' || message.sender === 'user';\n return (\n <div className={cx('rqmii-chat-message-row', isUser && 'is-user')}>\n <div className=\"rqmii-chat-message\" dir={textDirection}>\n <StreamingText text={message.text} streaming={message.streaming} />\n </div>\n </div>\n );\n});\n\nexport const MessageList = React.memo(function MessageList({ messages, partialTranscript, language, showTypingIndicator }: { messages: Array<{ id?: string; role?: string; sender?: string; text: string; streaming?: boolean; form?: LeadCaptureFormData }>; partialTranscript?: string; language?: string; showTypingIndicator?: boolean }) {\n const endRef = useRef<HTMLDivElement>(null);\n const textDirection = languageTextDirection(language || 'en');\n const prevMessageCountRef = useRef(messages.length);\n\n useEffect(() => {\n if (!endRef.current) return;\n const isNewMessage = messages.length !== prevMessageCountRef.current;\n prevMessageCountRef.current = messages.length;\n endRef.current.scrollIntoView({ behavior: isNewMessage ? 'smooth' : 'instant', block: 'end' });\n }, [messages, partialTranscript]);\n\n return (\n <div className=\"rqmii-chat-messages\">\n {messages.map((message) => (\n <MessageRow key={message.id || `${message.role}-${message.text}`} message={message} textDirection={textDirection} language={language || 'en'} />\n ))}\n {showTypingIndicator && <TypingIndicator language={language} />}\n {partialTranscript && (\n <div className=\"rqmii-chat-message-row is-user is-partial\">\n <div className=\"rqmii-chat-message\" dir={textDirection}>{partialTranscript}</div>\n </div>\n )}\n <div ref={endRef} />\n </div>\n );\n});\n\nexport const ErrorPanel = React.memo(function ErrorPanel({ message, onRetry, onClose, language = 'en' }: { message?: string; onRetry?: () => void; onClose?: () => void; language?: string }) {\n return (\n <div className=\"rqmii-chat-panel rqmii-chat-panel--error\">\n {onClose && <button type=\"button\" className=\"rqmii-error-close\" onClick={onClose}>×</button>}\n <p>{message || getChatText(language, 'connectionFailed')}</p>\n {onRetry && (\n <button type=\"button\" className=\"rqmii-chat-retry\" onClick={onRetry}>\n <RotateCcw size={16} />\n <span>{getChatText(language, 'retry')}</span>\n </button>\n )}\n </div>\n );\n});\n","import React, { useState } from 'react';\nimport { ChevronLeft, Loader2, Minimize2, Star } from 'lucide-react';\nimport { getChatText } from '../languages';\nimport { RqmiiAgentAvatar, RqmiiChatFooter } from './primitives';\nimport { cx, languageFontClass, languageTextDirection } from './utils';\nimport type { PublicAgent } from '../../types';\nimport type { EndedBy } from './chat-box-types';\n\nconst MAX_RATING = 5;\n\n// ---------------------------------------------------------------------------\n// Star rating row\n// ---------------------------------------------------------------------------\n\nfunction StarRow({ rating, onRate, readonly, size = 28 }: { rating: number; onRate?: (v: number) => void; readonly?: boolean; size?: number }) {\n const [hover, setHover] = useState(0);\n const active = hover || rating;\n\n return (\n <div className=\"rqmii-chat-rating-stars\" role=\"radiogroup\">\n {Array.from({ length: MAX_RATING }, (_, i) => {\n const value = i + 1;\n const filled = value <= active;\n return (\n <button\n key={value}\n type=\"button\"\n className={cx('rqmii-chat-star', filled && 'is-filled', readonly && 'is-readonly')}\n disabled={readonly}\n aria-label={`${value}`}\n aria-checked={value === rating}\n role=\"radio\"\n onMouseEnter={() => !readonly && setHover(value)}\n onMouseLeave={() => !readonly && setHover(0)}\n onClick={() => !readonly && onRate?.(value)}\n >\n <Star size={size} fill={filled ? 'currentColor' : 'none'} />\n </button>\n );\n })}\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Rating bar — embedded in the ended panel (text / text_and_voice / voice)\n// ---------------------------------------------------------------------------\n\nexport function RatingBar({\n language,\n rating,\n endedBy,\n sessionId,\n interactive,\n showTellUsMore,\n showRating = true,\n showConversationId = true,\n onRate,\n onTellUsMore,\n}: {\n language: string;\n rating: number;\n endedBy: EndedBy;\n sessionId: string | null;\n interactive: boolean;\n showTellUsMore: boolean;\n showRating?: boolean;\n showConversationId?: boolean;\n onRate: (v: number) => void;\n onTellUsMore: () => void;\n}) {\n const header = rating > 0 ? getChatText(language, 'ratingThankYou') : getChatText(language, 'ratingQuestion');\n const endedText = endedBy === 'user' ? getChatText(language, 'youEnded') : getChatText(language, 'agentEnded');\n\n return (\n <div\n className={cx('rqmii-chat-rating', !showRating && 'rqmii-chat-rating--unrated', languageFontClass(language))}\n dir={languageTextDirection(language)}\n >\n {showRating && (\n <>\n <div className=\"rqmii-chat-rating-header\">{header}</div>\n <StarRow rating={rating} onRate={onRate} readonly={!interactive} />\n {showTellUsMore && (\n <button type=\"button\" className=\"rqmii-chat-rating-more\" onClick={onTellUsMore}>\n {getChatText(language, 'tellUsMore')}\n </button>\n )}\n </>\n )}\n <div className=\"rqmii-chat-rating-meta\">\n <div>{endedText}</div>\n {showConversationId && sessionId && (\n <div>\n {getChatText(language, 'sessionIdLabel')} <span>{sessionId}</span>\n </div>\n )}\n </div>\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Feedback panel — full-screen; lets the user submit a free-text comment\n// ---------------------------------------------------------------------------\n\nexport function FeedbackPanel({\n agent,\n language,\n rating,\n onBack,\n onMinimize,\n onSubmit,\n}: {\n agent: PublicAgent;\n language: string;\n rating: number;\n onBack: () => void;\n onMinimize: () => void;\n onSubmit: (comment: string) => Promise<void> | void;\n}) {\n const [comment, setComment] = useState('');\n const [submitting, setSubmitting] = useState(false);\n const canSubmit = comment.trim().length > 0 && !submitting;\n\n const handleSubmit = async () => {\n if (!canSubmit) return;\n setSubmitting(true);\n try {\n await onSubmit(comment.trim());\n } finally {\n setSubmitting(false);\n }\n };\n\n return (\n <div className={cx('rqmii-chat-panel rqmii-chat-panel--feedback', languageFontClass(language))} dir={languageTextDirection(language)}>\n <div className=\"rqmii-chat-topbar\">\n <button type=\"button\" className=\"rqmii-chat-circle-button\" onClick={onBack} aria-label=\"Back\">\n <ChevronLeft size={20} />\n </button>\n <button type=\"button\" className=\"rqmii-chat-circle-button\" onClick={onMinimize} aria-label={getChatText(language, 'minimize')}>\n <Minimize2 size={20} />\n </button>\n </div>\n <div className=\"rqmii-chat-feedback-body\">\n <RqmiiAgentAvatar agent={agent} size=\"hero\" />\n <StarRow rating={rating} readonly />\n <div className=\"rqmii-chat-feedback-title\">{getChatText(language, 'ratingThankYou')}</div>\n <div className=\"rqmii-chat-feedback-subtitle\">{getChatText(language, 'feedbackSubtitle')}</div>\n <textarea\n className=\"rqmii-chat-feedback-input\"\n value={comment}\n dir={languageTextDirection(language)}\n placeholder={getChatText(language, 'feedbackPlaceholder')}\n onChange={(e) => setComment(e.target.value)}\n />\n <div className=\"rqmii-chat-feedback-actions\">\n <button type=\"button\" className=\"rqmii-chat-feedback-submit\" onClick={handleSubmit} disabled={!canSubmit}>\n {submitting ? <Loader2 className=\"rqmii-chat-spin\" size={18} /> : getChatText(language, 'submit')}\n </button>\n </div>\n </div>\n <RqmiiChatFooter language={language} agent={agent} />\n </div>\n );\n}\n","import React from 'react';\nimport { Loader2, Maximize2, Mic, MicOff, Minimize2, Phone, PhoneOff, X } from 'lucide-react';\nconst RqmiiCloudAvatarPlayer = React.lazy(() => import('../../components/RqmiiCloudAvatarPlayer').then((m) => ({ default: m.RqmiiCloudAvatarPlayer })));\nimport { useRqmiiAvatar } from '../../hooks/use-rqmii-avatar';\nimport { useRqmiiMessages } from '../../hooks/use-rqmii-messages';\nimport { getChatText } from '../languages';\nimport { ChatInput, LanguageSelect, MessageList, RqmiiAgentAvatar, RqmiiChatFooter, SuggestedMessages } from './primitives';\nimport { RatingBar } from './feedback';\nimport { cx, formatTime, isMobileViewport, languageFontClass } from './utils';\nimport type { PublicAgent } from '../../types';\nimport type { EndedBy } from './chat-box-types';\n\nfunction usePanelStyle(visualViewportHeight?: number | null): React.CSSProperties | undefined {\n if (visualViewportHeight == null || typeof window === 'undefined' || window.innerWidth >= 768) return undefined;\n return {\n top: `${window.innerHeight - visualViewportHeight}px`,\n bottom: 0,\n };\n}\n\n// ---------------------------------------------------------------------------\n// Shared top bar for active text/text_and_voice conversation panels\n// ---------------------------------------------------------------------------\n\nexport const StartTextPanel = React.memo(function StartTextPanel({ agent, language, languages, onLanguageChange, onClose, onSend, isVoiceEnabled = false, isAudioPlaying = false, isVoiceSetupLoading = false, onStartVoice, visualViewportHeight, disabled = false, error, suggestions, onSuggestionClick, compact = false }: { agent: PublicAgent; language: string; languages: string[]; onLanguageChange: (v: string) => void; onClose: () => void; onSend: (t: string) => void; isVoiceEnabled?: boolean; isAudioPlaying?: boolean; isVoiceSetupLoading?: boolean; onStartVoice: () => void; visualViewportHeight?: number | null; disabled?: boolean; error?: string; suggestions?: string[]; onSuggestionClick?: (t: string) => void; compact?: boolean }) {\n const panelStyle = usePanelStyle(visualViewportHeight);\n const [isMobile, setIsMobile] = React.useState(isMobileViewport);\n\n React.useEffect(() => {\n const onResize = () => setIsMobile(isMobileViewport());\n window.addEventListener('resize', onResize);\n return () => window.removeEventListener('resize', onResize);\n }, []);\n\n const isCompactLayout = compact && !isMobile;\n const avatarSize = isCompactLayout ? 'start' : 'hero';\n const hasSuggestions = suggestions && suggestions.length > 0;\n\n return (\n <div className={cx('rqmii-chat-panel rqmii-chat-panel--start', isCompactLayout && 'rqmii-chat-panel--start-compact', languageFontClass(language))} style={panelStyle}>\n <div className=\"rqmii-chat-topbar\">\n <span />\n <div className=\"rqmii-chat-topbar-actions\">\n <LanguageSelect language={language} languages={languages} onChange={onLanguageChange} />\n <button type=\"button\" className=\"rqmii-chat-circle-button\" onClick={onClose}><X size={20} /></button>\n </div>\n </div>\n <div className=\"rqmii-chat-start-body\">\n {isVoiceEnabled ? (\n <div className={cx('rqmii-chat-call-avatar-wrap', isCompactLayout && 'is-compact')}>\n <RqmiiAgentAvatar agent={agent} size={avatarSize} active={isAudioPlaying} />\n <button type=\"button\" className={cx('rqmii-chat-call-button', isCompactLayout && 'is-compact')} onClick={onStartVoice} disabled={isVoiceSetupLoading} aria-label={getChatText(language, 'startVoice')}>\n {isVoiceSetupLoading ? <Loader2 className=\"rqmii-chat-spin\" size={isCompactLayout ? 18 : 24} /> : <Phone size={isCompactLayout ? 18 : 24} />}\n </button>\n </div>\n ) : (\n <RqmiiAgentAvatar agent={agent} size={avatarSize} />\n )}\n <div className=\"rqmii-chat-agent-name\">{agent.name}</div>\n {error && <div className=\"rqmii-chat-error-text\">{error}</div>}\n </div>\n {hasSuggestions && (\n <div className=\"rqmii-chat-start-suggestions\">\n <SuggestedMessages suggestions={suggestions} language={language} onClick={(text) => onSuggestionClick?.(text)} />\n </div>\n )}\n <ChatInput language={language} onSend={onSend} disabled={disabled} />\n <RqmiiChatFooter language={language} agent={agent} />\n </div>\n );\n});\n\nexport const StartVoicePanel = React.memo(function StartVoicePanel({ agent, language, languages, onLanguageChange, onClose, onStartVoice, isVoiceSetupLoading = false, isAudioPlaying, visualViewportHeight }: { agent: PublicAgent; language: string; languages: string[]; onLanguageChange: (v: string) => void; onClose: () => void; onStartVoice: () => void; isVoiceSetupLoading?: boolean; isAudioPlaying?: boolean; visualViewportHeight?: number | null }) {\n const panelStyle = usePanelStyle(visualViewportHeight);\n\n return (\n <div className={cx('rqmii-chat-panel rqmii-chat-panel--voice-start', languageFontClass(language))} style={panelStyle}>\n <div className=\"rqmii-chat-topbar\">\n <span />\n <div className=\"rqmii-chat-topbar-actions\">\n <LanguageSelect language={language} languages={languages} onChange={onLanguageChange} />\n <button type=\"button\" className=\"rqmii-chat-circle-button\" onClick={onClose}><X size={20} /></button>\n </div>\n </div>\n <div className=\"rqmii-chat-call-body\">\n <div className=\"rqmii-chat-call-avatar-wrap\">\n <RqmiiAgentAvatar agent={agent} size=\"hero\" active={isAudioPlaying} />\n <button type=\"button\" className=\"rqmii-chat-call-button\" onClick={onStartVoice} disabled={isVoiceSetupLoading} aria-label={getChatText(language, 'startVoice')}>\n {isVoiceSetupLoading ? <Loader2 className=\"rqmii-chat-spin\" size={24} /> : <Phone size={24} />}\n </button>\n </div>\n <div className=\"rqmii-chat-agent-name\">{getChatText(language, 'call')} {agent.name}</div>\n </div>\n <RqmiiChatFooter language={language} agent={agent} />\n </div>\n );\n});\n\nexport const TextChatPanel = React.memo(function TextChatPanel({ agent, language, onEndSession, onMinimize, messages, partialTranscript, onSend, isAudioPlaying, isVoiceEnabled, onToggleVoice, isListening, isSpeaking, isLoading, isAgentThinking, isAgentSpeaking, onStartVoice, elapsed, visualViewportHeight, waitingForResponse }: { agent: PublicAgent; language: string; onEndSession: () => void; onMinimize?: () => void; messages: Array<{ id?: string; role?: string; sender?: string; text: string; streaming?: boolean }>; partialTranscript?: string; onSend: (t: string) => void; isAudioPlaying: boolean; isVoiceEnabled: boolean; onToggleVoice?: () => void; isListening?: boolean; isSpeaking?: boolean; isLoading?: boolean; isAgentThinking?: boolean; isAgentSpeaking?: boolean; onStartVoice?: () => void; elapsed: number; visualViewportHeight?: number | null; waitingForResponse?: boolean }) {\n const status = getStatusText({ language, isListening, isLoading, isSpeaking, isAudioPlaying, isAgentThinking, isAgentSpeaking, persistentListening: false });\n const panelStyle = usePanelStyle(visualViewportHeight);\n const showTopbarAvatar = agent.widget?.appearance?.show_topbar_avatar_image !== false;\n\n return (\n <div className={cx('rqmii-chat-panel rqmii-chat-panel--conversation', languageFontClass(language))} style={panelStyle}>\n <div className=\"rqmii-chat-header\">\n {showTopbarAvatar && <RqmiiAgentAvatar agent={agent} size=\"header\" active={isAudioPlaying} />}\n {isVoiceEnabled && status && (\n <div className={cx('rqmii-chat-header-status', !showTopbarAvatar && 'is-expanded')}>\n <span>{status}</span>\n </div>\n )}\n <div className=\"rqmii-chat-header-spacer\" />\n <div className=\"rqmii-chat-header-actions\">\n {onMinimize && (<button type=\"button\" className=\"rqmii-chat-circle-button\" onClick={onMinimize} aria-label={getChatText(language, 'minimize')}><Minimize2 size={20} /></button>)}\n {isVoiceEnabled && (\n <button type=\"button\" className={cx('rqmii-chat-circle-button', isSpeaking && 'is-active')} onClick={onToggleVoice} aria-label={isListening ? getChatText(language, 'stopVoice') : getChatText(language, 'startVoice')}>\n {isListening ? <Mic size={20} /> : <MicOff size={20} />}\n </button>\n )}\n <button type=\"button\" className=\"rqmii-chat-circle-button is-danger\" onClick={onEndSession} aria-label={getChatText(language, 'endCall')}><PhoneOff size={20} /></button>\n </div>\n </div>\n <MessageList messages={messages} partialTranscript={partialTranscript} language={language} showTypingIndicator={waitingForResponse} />\n {isVoiceEnabled && (<div className=\"rqmii-chat-session-counter\">{formatTime(elapsed)}</div>)}\n <ChatInput language={language} onSend={onSend} />\n <RqmiiChatFooter language={language} agent={agent} />\n </div>\n );\n});\n\nexport const VoiceCallPanel = React.memo(function VoiceCallPanel({ agent, language, onEndSession, onMinimize, isListening, isLoading, isSpeaking, isAudioPlaying, isAgentThinking, isAgentSpeaking, onToggleVoice, elapsed, visualViewportHeight }: { agent: PublicAgent; language: string; onEndSession: () => void; onMinimize?: () => void; isListening?: boolean; isLoading?: boolean; isSpeaking?: boolean; isAudioPlaying: boolean; isAgentThinking?: boolean; isAgentSpeaking?: boolean; onToggleVoice?: () => void; elapsed: number; visualViewportHeight?: number | null }) {\n const status = getStatusText({ language, isListening, isLoading, isSpeaking, isAudioPlaying, isAgentThinking, isAgentSpeaking, persistentListening: true });\n const panelStyle = usePanelStyle(visualViewportHeight);\n\n return (\n <div className={cx('rqmii-chat-panel rqmii-chat-panel--voice-call', languageFontClass(language))} style={panelStyle}>\n <div className=\"rqmii-chat-call-status\">\n <span className={cx('rqmii-chat-live-dot', isListening && 'is-live')} />\n <span>{formatTime(elapsed)}</span>\n <button type=\"button\" className=\"rqmii-chat-circle-button\" onClick={onMinimize}><Minimize2 size={20} /></button>\n </div>\n <div className=\"rqmii-chat-voice-frame\">\n <RqmiiAgentAvatar agent={agent} size=\"hero\" active={isAudioPlaying} />\n <div className=\"rqmii-chat-agent-name\">{agent.name}</div>\n <div className={cx('rqmii-chat-status-pill', !status && 'is-empty')}>{status || getChatText(language, 'listening')}</div>\n <div className=\"rqmii-chat-voice-actions\">\n <button type=\"button\" className={cx('rqmii-chat-circle-button', isSpeaking && 'is-active')} onClick={onToggleVoice}>\n {isListening ? <Mic size={20} /> : <MicOff size={20} />}\n </button>\n <button type=\"button\" className=\"rqmii-chat-circle-button is-danger\" onClick={onEndSession} aria-label={getChatText(language, 'endCall')}><PhoneOff size={20} /></button>\n </div>\n </div>\n <RqmiiChatFooter language={language} agent={agent} />\n </div>\n );\n});\n\nfunction getStatusText({ language, isListening, isLoading, isSpeaking, isAudioPlaying, isAgentThinking, isAgentSpeaking, persistentListening = false }: { language: string; isListening?: boolean; isLoading?: boolean; isSpeaking?: boolean; isAudioPlaying: boolean; isAgentThinking?: boolean; isAgentSpeaking?: boolean; persistentListening?: boolean }): string | null {\n if (isLoading) return getChatText(language, 'loading');\n if (isSpeaking) return getChatText(language, 'listening');\n if (isAudioPlaying || isAgentSpeaking) return getChatText(language, 'talkToInterrupt');\n if (isAgentThinking) return getChatText(language, 'processing');\n if (!isListening) return null;\n return persistentListening ? getChatText(language, 'listening') : null;\n}\n\nexport const MinimizedChatPill = React.memo(function MinimizedChatPill({ agent, language, onRestore, onClose, isListening, isAudioPlaying, isSpeaking, onToggleVoice, elapsed, variant = 'voice' }: { agent: PublicAgent; language: string; onRestore: () => void; onClose: () => void; isListening?: boolean; isAudioPlaying: boolean; isSpeaking?: boolean; onToggleVoice?: () => void; elapsed: number; variant?: 'voice' | 'text' }) {\n const isText = variant === 'text';\n\n return (\n <div className={cx('rqmii-chat-minimized', languageFontClass(language))}>\n <RqmiiAgentAvatar agent={agent} size=\"minimized\" active={isAudioPlaying} />\n {!isText && <span className=\"rqmii-chat-minimized-time\">{formatTime(elapsed)}</span>}\n <div className=\"rqmii-chat-minimized-actions\">\n <button type=\"button\" className=\"rqmii-chat-circle-button\" onClick={onRestore} aria-label={getChatText(language, 'maximize')}><Maximize2 size={20} /></button>\n {!isText && (\n <button type=\"button\" className={cx('rqmii-chat-circle-button', isSpeaking && 'is-active')} onClick={onToggleVoice} aria-label={isListening ? getChatText(language, 'stopVoice') : getChatText(language, 'startVoice')}>\n {isListening ? <Mic size={20} /> : <MicOff size={20} />}\n </button>\n )}\n <button type=\"button\" className=\"rqmii-chat-circle-button is-danger\" onClick={onClose} aria-label={getChatText(language, 'endCall')}><PhoneOff size={20} /></button>\n </div>\n </div>\n );\n});\n\n// ---------------------------------------------------------------------------\n// Ended session panel — shown after any terminal state across all chat kinds\n// ---------------------------------------------------------------------------\n\nexport interface EndedChatPanelProps {\n agent: PublicAgent;\n language: string;\n languages: string[];\n chatKind: 'text' | 'voice' | 'text_and_voice';\n messages: Array<{ id?: string; role?: string; sender?: string; text: string }>;\n onLanguageChange: (v: string) => void;\n onMinimize: () => void;\n /** Start a new voice (or text_and_voice) session. */\n onStartNewVoice: () => void;\n /** Start a new text session with the given first message. */\n onStartNewText: (text: string) => void;\n isVoiceSetupLoading?: boolean;\n visualViewportHeight?: number | null;\n /** Rating/feedback state for the embedded RatingBar. */\n rating: number;\n endedBy: EndedBy;\n sessionId: string | null;\n ratingInteractive: boolean;\n showTellUsMore: boolean;\n onRate: (v: number) => void;\n onTellUsMore: () => void;\n}\n\nexport const EndedChatPanel = React.memo(function EndedChatPanel({\n agent,\n language,\n languages,\n chatKind,\n messages,\n onLanguageChange,\n onMinimize,\n onStartNewVoice,\n onStartNewText,\n isVoiceSetupLoading = false,\n visualViewportHeight,\n rating,\n endedBy,\n sessionId,\n ratingInteractive,\n showTellUsMore,\n onRate,\n onTellUsMore,\n}: EndedChatPanelProps) {\n const panelStyle = usePanelStyle(visualViewportHeight);\n\n const endedScreen = agent.widget?.behavior?.conversation_ended_screen;\n const postChatRatingEnabled = !!endedScreen?.post_chat_rating_enabled;\n const showConversationId = endedScreen?.show_conversation_id ?? true;\n\n const ratingBar = (\n <RatingBar\n language={language}\n rating={rating}\n endedBy={endedBy}\n sessionId={sessionId}\n interactive={ratingInteractive}\n showTellUsMore={showTellUsMore}\n showRating={postChatRatingEnabled}\n showConversationId={showConversationId}\n onRate={onRate}\n onTellUsMore={onTellUsMore}\n />\n );\n\n // Show the call button whenever the agent supports voice — even if the last session\n // was committed to text-only mode (text_and_voice text-first). This lets the user\n // start a new text_and_voice call from the call button, or a new text session by\n // sending a message, regardless of how the previous session was started.\n const showCallButton = chatKind === 'voice' || chatKind === 'text_and_voice';\n\n // Show the text input when the agent supports text: text, text_and_voice, or\n // text_and_voice that went voice-first (user can pick either path for new session).\n const showTextInput = chatKind === 'text' || chatKind === 'text_and_voice';\n\n // Language pill uses the same markup/classes as the start screens (StartTextPanel /\n // StartVoicePanel) so its font/style matches everywhere. The circle buttons are sized\n // to match the ACTIVE session's header/call-status buttons (via the --ended modifier\n // below) rather than the larger start-screen buttons.\n const topBarActions = (\n <div className=\"rqmii-chat-topbar-actions rqmii-chat-topbar-actions--ended\">\n <LanguageSelect language={language} languages={languages} onChange={onLanguageChange} />\n <button\n type=\"button\"\n className=\"rqmii-chat-circle-button\"\n onClick={onMinimize}\n aria-label={getChatText(language, 'minimize')}\n >\n <Minimize2 size={20} />\n </button>\n {showCallButton && (\n <button\n type=\"button\"\n className=\"rqmii-chat-circle-button rqmii-chat-circle-button--call-start\"\n onClick={onStartNewVoice}\n disabled={isVoiceSetupLoading}\n aria-label={getChatText(language, 'startVoice')}\n >\n {isVoiceSetupLoading\n ? <Loader2 className=\"rqmii-chat-spin\" size={20} />\n : <Phone size={20} />}\n </button>\n )}\n </div>\n );\n\n // Voice-only ended session: no transcript. Keep the avatar + name (like the call\n // frame) but hide the status pill, mic and end-call buttons. The empty space is\n // reserved for a future feedback UI.\n if (chatKind === 'voice') {\n return (\n <div className={cx('rqmii-chat-panel rqmii-chat-panel--voice-call', languageFontClass(language))} style={panelStyle}>\n <div className=\"rqmii-chat-topbar\">\n <span />\n {topBarActions}\n </div>\n <div className=\"rqmii-chat-voice-frame\">\n <RqmiiAgentAvatar agent={agent} size=\"hero\" />\n <div className=\"rqmii-chat-agent-name\">{agent.name}</div>\n {ratingBar}\n </div>\n <RqmiiChatFooter language={language} agent={agent} />\n </div>\n );\n }\n\n const showTopbarAvatar = agent.widget?.appearance?.show_topbar_avatar_image !== false;\n\n return (\n <div className={cx('rqmii-chat-panel rqmii-chat-panel--conversation', languageFontClass(language))} style={panelStyle}>\n {/* Top bar: avatar on the left (if enabled), language menu + minimize (+ call) on the right */}\n <div className=\"rqmii-chat-topbar\">\n {showTopbarAvatar ? (\n <RqmiiAgentAvatar agent={agent} size=\"header\" />\n ) : (\n <span />\n )}\n {topBarActions}\n </div>\n\n {/* History (read-only) — shrinks to make room for the rating bar, stays scrollable */}\n <MessageList messages={messages} language={language} />\n\n {/* Rating bar pushes the history up and sits above the input */}\n {ratingBar}\n\n {/* Input — for new session; disabled while no session running */}\n {showTextInput && (\n <ChatInput language={language} onSend={onStartNewText} />\n )}\n <RqmiiChatFooter language={language} agent={agent} />\n </div>\n );\n});\n\nexport const AvatarChatPanel = React.memo(function AvatarChatPanel({ agent, language, onClose }: { agent: PublicAgent; language: string; onClose: () => void }) {\n const { streamingUrl, isCloudStreamConnected, cloudStreamError } = useRqmiiAvatar();\n const { isAvatarSpeaking } = useRqmiiAvatar();\n const { messages, sendTextMessage } = useRqmiiMessages();\n\n return (\n <div className={cx('rqmii-avatar-panel', languageFontClass(language))}>\n <div className=\"rqmii-avatar-stream\">\n <React.Suspense fallback={<div className=\"rqmii-avatar-overlay\">{getChatText(language, 'loading')}</div>}>\n <RqmiiCloudAvatarPlayer autoConnect muted={false} />\n </React.Suspense>\n {!streamingUrl && (<div className=\"rqmii-avatar-overlay\">{getChatText(language, 'loading')}</div>)}\n {cloudStreamError && (<div className=\"rqmii-avatar-overlay\">{getChatText(language, 'connectionFailed')}</div>)}\n <div className=\"rqmii-avatar-controls\">\n <RqmiiAgentAvatar agent={agent} size=\"header\" active={isAvatarSpeaking} />\n <div className=\"rqmii-chat-header-spacer\" />\n <button type=\"button\" className=\"rqmii-chat-circle-button\" disabled={!isCloudStreamConnected}><Mic size={20} /></button>\n <button type=\"button\" className=\"rqmii-chat-circle-button is-danger\" onClick={onClose}><X size={20} /></button>\n </div>\n </div>\n {agent.useText && (\n <div className=\"rqmii-avatar-sidebar\">\n <MessageList messages={messages} language={language} />\n <ChatInput language={language} onSend={sendTextMessage} variant=\"compact\" />\n <RqmiiChatFooter language={language} agent={agent} />\n </div>\n )}\n </div>\n );\n});\n","import React from 'react';\n\ninterface RqmiiMarkdownProps {\n content: string;\n className?: string;\n}\n\n/**\n * Sanitizes link URLs to prevent XSS (blocks javascript:, data:, vbscript:).\n */\nfunction sanitizeUrl(url: string): string {\n const trimmed = url.trim();\n const lower = trimmed.toLowerCase();\n if (\n lower.startsWith('javascript:') ||\n lower.startsWith('data:') ||\n lower.startsWith('vbscript:')\n ) {\n return '#';\n }\n return trimmed;\n}\n\n/**\n * Parses inline markdown tokens: bold (**text**), italic (*text*),\n * strikethrough (~~text~~), code (`code`), and links ([text](url)).\n */\nfunction parseInlineMarkdown(text: string): React.ReactNode[] {\n const nodes: React.ReactNode[] = [];\n // Tokenizer pattern matching markdown inlines\n // 1: Link [text](url)\n // 2,3: Link text and url\n // 4: Bold **text** or __text__\n // 5: Italic *text* or _text_\n // 6: Strikethrough ~~text~~\n // 7: Inline code `code`\n const pattern =\n /(\\[([^\\]]+)\\]\\(([^)]+)\\))|(\\*\\*([^*]+)\\*\\*|__([^_]+)__)|(\\*([^*]+)\\*|_([^_]+)_)|(~~([^~]+)~~)|(`([^`]+)`)/g;\n\n let lastIndex = 0;\n let match: RegExpExecArray | null;\n\n while ((match = pattern.exec(text)) !== null) {\n // Append text before match\n if (match.index > lastIndex) {\n nodes.push(text.slice(lastIndex, match.index));\n }\n\n const key = `inline-${match.index}-${match[0]}`;\n\n if (match[1]) {\n // Link [text](url)\n const linkText = match[2];\n const linkUrl = match[3];\n nodes.push(\n <a\n key={key}\n href={sanitizeUrl(linkUrl)}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"rqmii-markdown-link\"\n >\n {parseInlineMarkdown(linkText)}\n </a>\n );\n } else if (match[4]) {\n // Bold **text** or __text__\n const boldText = match[5] || match[6];\n nodes.push(\n <strong key={key} className=\"rqmii-markdown-strong\">\n {parseInlineMarkdown(boldText)}\n </strong>\n );\n } else if (match[7]) {\n // Italic *text* or _text_\n const italicText = match[8] || match[9];\n nodes.push(\n <em key={key} className=\"rqmii-markdown-em\">\n {parseInlineMarkdown(italicText)}\n </em>\n );\n } else if (match[10]) {\n // Strikethrough ~~text~~\n const delText = match[11];\n nodes.push(\n <del key={key} className=\"rqmii-markdown-del\">\n {parseInlineMarkdown(delText)}\n </del>\n );\n } else if (match[12]) {\n // Code `text`\n const codeText = match[13];\n nodes.push(\n <code key={key} className=\"rqmii-markdown-code\">\n {codeText}\n </code>\n );\n }\n\n lastIndex = pattern.lastIndex;\n }\n\n if (lastIndex < text.length) {\n nodes.push(text.slice(lastIndex));\n }\n\n return nodes;\n}\n\n/**\n * Renders inline text with line break preservation (<br />).\n */\nfunction renderInlineWithLineBreaks(text: string, keyPrefix: string): React.ReactNode {\n const lines = text.split('\\n');\n if (lines.length === 1) {\n return parseInlineMarkdown(lines[0]);\n }\n return lines.map((line, idx) => (\n <React.Fragment key={`${keyPrefix}-ln-${idx}`}>\n {idx > 0 && <br />}\n {parseInlineMarkdown(line)}\n </React.Fragment>\n ));\n}\n\n/**\n * Clean, lightweight, zero-dependency Markdown renderer for widget consent and messages.\n */\nexport function RqmiiMarkdownComponent({\n content,\n className = '',\n}: RqmiiMarkdownProps): React.ReactElement | null {\n if (!content || !content.trim()) return null;\n\n // Split into block sections by double newlines\n const rawBlocks = content.replace(/\\r\\n/g, '\\n').split(/\\n{2,}/);\n const elements: React.ReactNode[] = [];\n\n rawBlocks.forEach((rawBlock, blockIdx) => {\n const trimmed = rawBlock.trim();\n if (!trimmed) return;\n\n const blockKey = `block-${blockIdx}`;\n\n // Headings: #, ##, ###, ####\n if (trimmed.startsWith('#')) {\n const headingMatch = trimmed.match(/^(#{1,6})\\s+(.+)$/s);\n if (headingMatch) {\n const level = headingMatch[1].length;\n const headingText = headingMatch[2].trim();\n const inlineContent = parseInlineMarkdown(headingText);\n\n if (level === 1) {\n elements.push(<h3 key={blockKey} className=\"rqmii-markdown-h1\">{inlineContent}</h3>);\n } else if (level === 2) {\n elements.push(<h4 key={blockKey} className=\"rqmii-markdown-h2\">{inlineContent}</h4>);\n } else {\n elements.push(<h5 key={blockKey} className=\"rqmii-markdown-h3\">{inlineContent}</h5>);\n }\n return;\n }\n }\n\n // Blockquote: > text\n if (trimmed.startsWith('>')) {\n const quoteText = trimmed\n .split('\\n')\n .map(line => line.replace(/^>\\s?/, ''))\n .join('\\n');\n elements.push(\n <blockquote key={blockKey} className=\"rqmii-markdown-blockquote\">\n {renderInlineWithLineBreaks(quoteText, blockKey)}\n </blockquote>\n );\n return;\n }\n\n // Unordered List (- or *)\n if (/^[-*]\\s+/m.test(trimmed)) {\n const lines = trimmed.split('\\n');\n const isList = lines.every(l => /^[-*]\\s+/.test(l.trim()) || l.trim() === '');\n if (isList) {\n const items = lines\n .map(l => l.trim().replace(/^[-*]\\s+/, ''))\n .filter(Boolean);\n elements.push(\n <ul key={blockKey} className=\"rqmii-markdown-ul\">\n {items.map((item, itemIdx) => (\n <li key={`${blockKey}-li-${itemIdx}`}>\n {parseInlineMarkdown(item)}\n </li>\n ))}\n </ul>\n );\n return;\n }\n }\n\n // Ordered List (1. 2.)\n if (/^\\d+\\.\\s+/m.test(trimmed)) {\n const lines = trimmed.split('\\n');\n const isList = lines.every(l => /^\\d+\\.\\s+/.test(l.trim()) || l.trim() === '');\n if (isList) {\n const items = lines\n .map(l => l.trim().replace(/^\\d+\\.\\s+/, ''))\n .filter(Boolean);\n elements.push(\n <ol key={blockKey} className=\"rqmii-markdown-ol\">\n {items.map((item, itemIdx) => (\n <li key={`${blockKey}-li-${itemIdx}`}>\n {parseInlineMarkdown(item)}\n </li>\n ))}\n </ol>\n );\n return;\n }\n }\n\n // Regular paragraph\n elements.push(\n <p key={blockKey} className=\"rqmii-markdown-p\">\n {renderInlineWithLineBreaks(trimmed, blockKey)}\n </p>\n );\n });\n\n return <div className={`rqmii-markdown ${className}`.trim()}>{elements}</div>;\n}\n\nexport const RqmiiMarkdown: React.FC<RqmiiMarkdownProps> = React.memo(RqmiiMarkdownComponent);\n","import React from 'react';\nimport { getChatText } from '../languages';\nimport { RqmiiMarkdown } from './markdown';\nimport { cx, languageFontClass, languageTextDirection } from './utils';\nimport type { PublicAgent, RqmiiConsentConfig } from '../../types';\n\ninterface ConsentDialogProps {\n language: string;\n content?: string;\n config?: RqmiiConsentConfig;\n agent?: PublicAgent;\n onAccept: () => void;\n onDecline: () => void;\n}\n\nexport function ConsentDialog({\n language,\n content,\n config,\n agent,\n onAccept,\n onDecline,\n}: ConsentDialogProps) {\n // Determine effective markdown content:\n // 1. Explicit content string passed from widget.consent.content[language]\n // 2. Fallback to legacy config.body[language] or default consent body\n const markdownText =\n content ||\n config?.body?.[language] ||\n getChatText(language, 'consentBody') ||\n '';\n\n const acceptLabel = config?.acceptLabel?.[language] || getChatText(language, 'consentAccept');\n const declineLabel = config?.declineLabel?.[language] || getChatText(language, 'consentDecline');\n\n return (\n <div\n className={cx(\n 'rqmii-chat-panel rqmii-chat-panel--start rqmii-chat-panel--consent',\n languageFontClass(language)\n )}\n dir={languageTextDirection(language)}\n >\n <div className=\"rqmii-chat-consent-body\">\n <RqmiiMarkdown content={markdownText} />\n </div>\n\n <div className=\"rqmii-chat-consent-actions\">\n <button\n type=\"button\"\n className=\"rqmii-chat-consent-button rqmii-chat-consent-button--decline\"\n onClick={onDecline}\n >\n {declineLabel}\n </button>\n <button\n type=\"button\"\n className=\"rqmii-chat-consent-button rqmii-chat-consent-button--accept\"\n onClick={onAccept}\n >\n {acceptLabel}\n </button>\n </div>\n </div>\n );\n}\n","import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { resolveChatKind } from '../agent-data';\nimport { ErrorPanel } from './primitives';\nimport { AvatarChatPanel, MinimizedChatPill, StartTextPanel, StartVoicePanel, TextChatPanel, VoiceCallPanel } from './panels';\nimport { ConsentDialog } from './consent-dialog';\nimport { isMobileViewport, noop, useElapsed, useVisualViewportHeight } from './utils';\nimport { useRqmiiConnection } from '../../hooks/use-rqmii-connection';\nimport type { ChatBoxPanelProps, ChatKind, SdkState } from './chat-box-types';\nimport type { PublicAgent } from '../../types';\n\ntype DisplayMessage = { id?: string; role?: string; sender?: string; text: string };\n\nfunction normalizePartialTranscript(value: unknown): string {\n if (!value) return '';\n if (typeof value === 'string') return value;\n if (typeof value === 'object' && typeof (value as { text?: string }).text === 'string') return (value as { text: string }).text;\n return '';\n}\n\nfunction shouldShowMinimize(chatKind: ChatKind): boolean {\n return chatKind === 'text' || chatKind === 'voice' || chatKind === 'text_and_voice';\n}\n\ninterface RqmiiChatBoxContentProps {\n agent: PublicAgent;\n language: string;\n languages: string[];\n onLanguageChange?: (v: string) => void;\n /** Called when the user explicitly ends the session (hang-up button). */\n onEndSession?: () => void;\n /** Called when the user minimizes / closes the chat to the floating button. */\n onMinimize?: () => void;\n messages?: DisplayMessage[];\n onSendMessage?: (text: string) => void;\n isPreview?: boolean;\n chatKind?: ChatKind;\n sdk: SdkState;\n renderPanel?: (props: ChatBoxPanelProps) => React.ReactNode;\n /** Keeps the latest displayed messages so the parent can snapshot them when the session ends. */\n messagesRef?: { current: DisplayMessage[] };\n /** Auto-send this text as the first message on mount (used when starting a new session). */\n initialText?: string;\n /** Auto-start voice on mount (used when starting a new voice session). */\n autoStartVoice?: boolean;\n}\n\nexport const RqmiiChatBoxContent = React.memo(function RqmiiChatBoxContent({\n agent,\n language,\n languages,\n onLanguageChange = noop,\n onEndSession = noop,\n onMinimize,\n messages: previewMessages,\n onSendMessage,\n isPreview = false,\n chatKind: propChatKind,\n sdk,\n renderPanel,\n messagesRef,\n initialText,\n autoStartVoice,\n}: RqmiiChatBoxContentProps) {\n const consentConfig = agent.widget?.consent || agent.consent;\n const isConsentEnabled = Boolean(consentConfig?.enabled);\n const consentContent =\n consentConfig?.content?.[language] ||\n consentConfig?.body?.[language] ||\n '';\n const isOneTime = consentConfig?.one_time !== false;\n const storageKey = agent.id ? `rqmii_consent_${agent.id}` : null;\n\n const [consented, setConsented] = useState<boolean>(() => {\n if (!isConsentEnabled || !consentContent) return true;\n if (isOneTime && storageKey && typeof window !== 'undefined') {\n try {\n return window.localStorage.getItem(storageKey) === 'true';\n } catch {\n return false;\n }\n }\n return false;\n });\n\n const resolvedChatKind = propChatKind || resolveChatKind(agent);\n const [voiceStarted, setVoiceStarted] = useState(() => (resolvedChatKind === 'voice' && sdk.isSessionReady) || (resolvedChatKind === 'voice' && !!autoStartVoice));\n const [conversationStarted, setConversationStarted] = useState(() => ((resolvedChatKind === 'text' || resolvedChatKind === 'text_and_voice') && sdk.isSessionReady) || !!initialText || (resolvedChatKind === 'text_and_voice' && !!autoStartVoice));\n const [isMinimized, setIsMinimized] = useState(false);\n const [connecting, setConnecting] = useState(false);\n const [connectError, setConnectError] = useState<string | null>(null);\n const timedSessionActive = (resolvedChatKind === 'voice' && voiceStarted) || (resolvedChatKind === 'text_and_voice' && conversationStarted);\n const elapsed = useElapsed(timedSessionActive);\n const vh = useVisualViewportHeight();\n const showConsent = isConsentEnabled && Boolean(consentContent) && !consented && !isPreview;\n const canMinimize = shouldShowMinimize(resolvedChatKind);\n const { events } = useRqmiiConnection();\n\n useEffect(() => {\n if (!events) return;\n // The client tool that navigates to a page section minimizes the chat to a\n // pill so the section is visible. On desktop there's room for both, so keep\n // the chat open — the pill is a mobile-only affordance.\n const handleMinimize = () => { if (canMinimize && isMobileViewport()) setIsMinimized(true); };\n const handleMaximize = () => { if (canMinimize) setIsMinimized(false); };\n \n events.on('minimize_chat', handleMinimize);\n events.on('maximize_chat', handleMaximize);\n return () => {\n events.off('minimize_chat', handleMinimize);\n events.off('maximize_chat', handleMaximize);\n };\n }, [events, canMinimize]);\n\n const handleConsentAccept = useCallback(() => {\n if (isOneTime && storageKey && typeof window !== 'undefined') {\n try {\n window.localStorage.setItem(storageKey, 'true');\n } catch {}\n }\n setConsented(true);\n }, [isOneTime, storageKey]);\n\n const handleConsentDecline = useCallback(() => {\n if (onMinimize) onMinimize();\n else onEndSession();\n }, [onMinimize, onEndSession]);\n\n const setLanguage = (nextLanguage: string) => {\n onLanguageChange(nextLanguage);\n if (!isPreview) sdk.changeSessionLanguage(nextLanguage);\n };\n\n const send = useCallback((text: string) => {\n setConnectError(null);\n setConnecting(true);\n if (onSendMessage) { onSendMessage(text); return; }\n sdk.sendTextMessage(text);\n }, [onSendMessage, sdk]);\n\n // Keep the latest displayed messages available to the parent for snapshotting on end.\n useEffect(() => {\n if (messagesRef) messagesRef.current = sdk.messages;\n });\n\n // Auto-start a new session on mount (only when directed).\n const autoStartedRef = useRef(false);\n useEffect(() => {\n if (autoStartedRef.current) return;\n if (initialText) {\n autoStartedRef.current = true;\n send(initialText);\n } else if (autoStartVoice) {\n autoStartedRef.current = true;\n setConnectError(null);\n setConnecting(true);\n if (!sdk.isVoiceActive) sdk.startVoice();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // Transition to conversation panel when the session is ready\n useEffect(() => {\n if (connecting && sdk.isSessionReady) {\n setConnecting(false);\n if (resolvedChatKind === 'voice') setVoiceStarted(true);\n else setConversationStarted(true);\n }\n }, [connecting, sdk.isSessionReady, resolvedChatKind]);\n\n // Stay on start screen if session init fails instead of jumping to error panel\n useEffect(() => {\n if (connecting && sdk.error) {\n setConnecting(false);\n setConnectError(sdk.error);\n }\n }, [connecting, sdk.error]);\n\n const initiateVoice = useCallback(() => {\n setConnectError(null);\n setConnecting(true);\n if (!sdk.isVoiceActive) sdk.startVoice();\n }, [sdk]);\n\n if (sdk.error && !isPreview && (conversationStarted || voiceStarted)) return <ErrorPanel message={sdk.error} language={language} onClose={onEndSession} />;\n\n if (showConsent) {\n return (\n <ConsentDialog\n language={language}\n content={consentContent}\n config={agent.consent}\n agent={agent}\n onAccept={handleConsentAccept}\n onDecline={handleConsentDecline}\n />\n );\n }\n\n const panelProps: ChatBoxPanelProps = {\n agent,\n language,\n languages,\n chatKind: resolvedChatKind,\n sdk,\n isPreview,\n onLanguageChange: setLanguage,\n onClose: onEndSession,\n onMinimize: canMinimize ? () => setIsMinimized(true) : undefined,\n onRestore: canMinimize ? () => setIsMinimized(false) : undefined,\n onSend: send,\n voiceStarted,\n conversationStarted,\n isMinimized,\n elapsed,\n setVoiceStarted,\n setConversationStarted,\n };\n\n if (renderPanel) {\n return <>{renderPanel(panelProps)}</>;\n }\n\n return <DefaultPanelRenderer {...panelProps} connecting={connecting} connectError={connectError} visualViewportHeight={vh} onCloseWidget={onMinimize ?? onEndSession} initiateVoice={initiateVoice} onSendSuggestion={(text) => { setConnectError(null); setConnecting(true); sdk.sendSuggestion?.(text); }} />;\n});\n\nconst DefaultPanelRenderer = React.memo(function DefaultPanelRenderer({ agent, language, languages, chatKind, sdk, onLanguageChange, onClose, onMinimize, onRestore, onSend, voiceStarted, conversationStarted, isMinimized, elapsed, setVoiceStarted, setConversationStarted, visualViewportHeight, connecting = false, connectError = null, onCloseWidget, initiateVoice, onSendSuggestion }: ChatBoxPanelProps & { visualViewportHeight: number | null; connecting?: boolean; connectError?: string | null; onCloseWidget: () => void; initiateVoice: () => void; onSendSuggestion: (text: string) => void }) {\n const typingIndicatorEnabled = agent.widget?.behavior?.typing_indicator_enabled ?? true;\n const effectiveWaitingForResponse = chatKind === 'text' ? sdk.waitingForResponse && typingIndicatorEnabled : false;\n const displayMessages = sdk.messages;\n\n if (chatKind === 'avatar') return <AvatarChatPanel agent={agent} language={language} onClose={onClose} />;\n\n if (isMinimized) {\n return (\n <MinimizedChatPill agent={agent} language={language} onRestore={onRestore!} onClose={onClose} isListening={sdk.isVoiceActive} isAudioPlaying={sdk.isAudioPlaying} isSpeaking={sdk.vad.isSpeaking} onToggleVoice={sdk.toggleVoice} elapsed={elapsed} variant={chatKind === 'text' ? 'text' : 'voice'} />\n );\n }\n\n if (chatKind === 'voice' && voiceStarted) {\n return (\n <VoiceCallPanel agent={agent} language={language} onEndSession={onClose} onMinimize={onMinimize!} isListening={sdk.isVoiceActive} isLoading={sdk.vad.isLoading} isSpeaking={sdk.vad.isSpeaking} isAudioPlaying={sdk.isAudioPlaying} isAgentThinking={sdk.isAgentThinking} isAgentSpeaking={sdk.isAgentSpeaking} onToggleVoice={sdk.toggleVoice} elapsed={elapsed} visualViewportHeight={visualViewportHeight} />\n );\n }\n\n if (chatKind === 'voice') {\n return (\n <StartVoicePanel agent={agent} language={language} languages={languages} onLanguageChange={onLanguageChange} onClose={onCloseWidget} isAudioPlaying={sdk.isAudioPlaying} isVoiceSetupLoading={sdk.isVoiceSetupLoading || connecting} onStartVoice={initiateVoice} visualViewportHeight={visualViewportHeight} />\n );\n }\n\n if (!conversationStarted && (sdk.messages.length === 0 || connecting)) {\n const suggestions = (\n agent.widget?.behavior?.suggested_messages?.[language] ||\n agent.conversation?.suggested_messages?.[language]\n )?.filter(s => s.trim()) || undefined;\n\n const handleSuggestionClick = (text: string) => {\n if (sdk.sendSuggestion) {\n onSendSuggestion(text);\n } else {\n onSend?.(text);\n }\n };\n\n const isVoiceEnabled = chatKind === 'text_and_voice' || resolveChatKind(agent) === 'text_and_voice';\n\n return (\n <StartTextPanel agent={agent} language={language} languages={languages} onLanguageChange={onLanguageChange} onClose={onCloseWidget} onSend={onSend!} isVoiceEnabled={isVoiceEnabled} isAudioPlaying={sdk.isAudioPlaying} isVoiceSetupLoading={sdk.isVoiceSetupLoading || connecting} onStartVoice={initiateVoice} visualViewportHeight={visualViewportHeight} disabled={connecting} error={connectError || undefined} suggestions={suggestions} onSuggestionClick={handleSuggestionClick} compact={!!suggestions} />\n );\n }\n\n return (\n <TextChatPanel agent={agent} language={language} onEndSession={onClose} messages={displayMessages} partialTranscript={normalizePartialTranscript(sdk.partialTranscript)} onSend={onSend!} isAudioPlaying={sdk.isAudioPlaying} isVoiceEnabled={chatKind === 'text_and_voice'} isListening={sdk.isVoiceActive} isSpeaking={sdk.vad.isSpeaking} isLoading={sdk.vad.isLoading} isAgentThinking={sdk.isAgentThinking} isAgentSpeaking={sdk.isAgentSpeaking} onToggleVoice={sdk.toggleVoice} onStartVoice={sdk.startVoice} onMinimize={onMinimize!} elapsed={elapsed} visualViewportHeight={visualViewportHeight} waitingForResponse={effectiveWaitingForResponse} />\n );\n});\n","import { useCallback, useEffect, useRef, useState } from 'react';\nimport type { PublicAgent } from '../../types';\n\nexport function normalizePartialTranscript(value: unknown): string {\n if (!value) return '';\n if (typeof value === 'string') return value;\n if (typeof value === 'object' && typeof (value as { text?: string }).text === 'string') return (value as { text: string }).text;\n return '';\n}\n\nexport const DUMMY_VAD = { isListening: false, isLoading: false, isSpeaking: false, toggle: async () => false };\n\nexport function useWelcomeTextHandling({ isSessionReady, sendTextMessage, messages }: { isSessionReady: boolean; sendTextMessage: (text: string) => void; messages: Array<{ id?: string; role?: string; sender?: string; text: string }> }) {\n const [pendingWelcomeText, setPendingWelcomeText] = useState<string | null>(null);\n const [pendingMessage, setPendingMessage] = useState<string | null>(null);\n\n const sendPendingWelcomeText = useCallback(() => {\n setPendingWelcomeText((prev) => {\n if (!prev) return null;\n if (isSessionReady) {\n sendTextMessage(prev);\n } else {\n setPendingMessage(prev);\n }\n return null;\n });\n }, [isSessionReady, sendTextMessage]);\n\n useEffect(() => {\n if (!pendingWelcomeText) return;\n if (messages.length === 0) return;\n sendPendingWelcomeText();\n }, [messages, pendingWelcomeText, sendPendingWelcomeText]);\n\n useEffect(() => {\n if (!pendingWelcomeText) return;\n const timer = setTimeout(sendPendingWelcomeText, 5000);\n return () => clearTimeout(timer);\n }, [pendingWelcomeText, sendPendingWelcomeText]);\n\n useEffect(() => {\n if (!pendingMessage || !isSessionReady) return;\n sendTextMessage(pendingMessage);\n setPendingMessage(null);\n }, [isSessionReady, pendingMessage, sendTextMessage]);\n\n return { pendingWelcomeText, pendingMessage, setPendingWelcomeText, setPendingMessage, sendPendingWelcomeText };\n}\n\nexport function useDeferredClientReady({ isSessionReady, signalClientReady }: { isSessionReady: boolean; signalClientReady: (payload?: Record<string, unknown>) => void }) {\n const [pending, setPending] = useState(false);\n const [pendingPayload, setPendingPayload] = useState<Record<string, unknown> | undefined>(undefined);\n const emittedRef = useRef(false);\n\n useEffect(() => {\n if (!isSessionReady || emittedRef.current || !pending) return;\n emittedRef.current = true;\n signalClientReady(pendingPayload);\n setPending(false);\n }, [isSessionReady, pending, pendingPayload, signalClientReady]);\n\n const emitClientReady = useCallback((payload?: Record<string, unknown>) => {\n if (isSessionReady) {\n emittedRef.current = true;\n signalClientReady(payload);\n } else {\n setPendingPayload(payload);\n setPending(true);\n }\n }, [isSessionReady, signalClientReady]);\n\n return { emitClientReady };\n}\n\n\nexport function useWelcomeMessage({ agent, language, messages }: {\n agent: PublicAgent;\n language: string;\n messages: Array<{ role?: string; sender?: string; text: string }>;\n}): { id: string; role: 'assistant'; text: string } | null {\n const userHasSent = messages.some(m => m.role === 'user' || m.sender === 'user'); // R7.3 freeze\n const raw = agent.welcomeMessages?.[language] ?? '';\n const text = raw.trim(); // R7.5 whitespace-only = empty\n if (!text) return null; // R7.4 no welcome message\n if (userHasSent) return null; // R7.3 frozen after first user message\n // Text tracks the selected language before user sends (R7.2).\n return { id: 'welcome', role: 'assistant', text };\n}\n","import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { useRqmiiConnection, useRqmiiEvents, useRqmiiMessages } from '../../hooks';import { RqmiiChatBoxContent } from './chat-box-content';\nimport { DUMMY_VAD } from './chat-box-shared';\nimport { noop } from './utils';\nimport type { ChatBoxEventHandlers, ChatBoxSdkActions, RqmiiChatBoxProps, SdkState } from './chat-box-types';\n\n// Short safeguard delay between client_ready (welcome) and the user's first message\n// (response) so the backend welcome arrives before the response to the user message.\nconst WELCOME_SAFEGUARD_MS = 300;\n\nexport function RqmiiTextChatBox(props: RqmiiChatBoxProps & ChatBoxEventHandlers) {\n const { isPreview = false, ...restProps } = props;\n const { messages, sendTextMessage, emitUserMessage, addLocalMessage, clearMessages } = useRqmiiMessages();\n const { changeSessionLanguage, clearSessionHistory, signalClientReady, error, isSessionReady, isAgentThinking, isAgentSpeaking } = useRqmiiConnection();\n\n const startedRef = useRef(false);\n const pendingFirstTextRef = useRef<string | null>(null);\n const welcomeFlowDoneRef = useRef(false);\n const [pendingFlag, setPendingFlag] = useState(false);\n // The first user message is kept in local state (not provider state) so it survives the\n // provider's HARD_RESET during session initialization and appears immediately.\n const [firstUserText, setFirstUserText] = useState<string | null>(null);\n const [waitingForResponse, setWaitingForResponse] = useState(false);\n const prevMsgCountRef = useRef(messages.length);\n\n useEffect(() => {\n if (messages.length > prevMsgCountRef.current) {\n const lastMsg = messages[messages.length - 1];\n const isAssistant = lastMsg.role === 'assistant';\n if (isAssistant && lastMsg.streaming) {\n setWaitingForResponse(false);\n }\n }\n prevMsgCountRef.current = messages.length;\n }, [messages]);\n\n // A rate-limited message never yields an agent response, so release the\n // typing indicator instead of leaving it spinning forever.\n useRqmiiEvents('message_rate_limited', useCallback(() => {\n setWaitingForResponse(false);\n }, []));\n\n // First-message backend welcome flow: once the session is ready, emit client_ready\n // (backend produces the welcome message), then after a short safeguard delay emit the\n // user's message to the backend (which produces the response). The user's message is\n // already shown via `firstUserText`. The pending text is held in a ref (not state) so the\n // delayed send is not cancelled by a re-render clearing the effect's timeout.\n useEffect(() => {\n if (!isSessionReady || !pendingFlag || welcomeFlowDoneRef.current) return;\n const text = pendingFirstTextRef.current;\n if (text === null) return;\n welcomeFlowDoneRef.current = true;\n pendingFirstTextRef.current = null;\n // Persist the first user message to provider state (durable history) and drop the\n // optimistic local copy. The backend welcome (from client_ready) arrives after, so\n // provider order stays [user, welcome, response].\n addLocalMessage('user', text);\n setFirstUserText(null);\n const welcomeText = props.agent.welcomeMessages?.[props.language];\n signalClientReady(welcomeText ? { welcomeMessage: welcomeText } : undefined);\n const timer = setTimeout(() => { emitUserMessage(text); setWaitingForResponse(true); }, WELCOME_SAFEGUARD_MS);\n return () => clearTimeout(timer);\n }, [isSessionReady, pendingFlag, signalClientReady, emitUserMessage, addLocalMessage]);\n\n // The first user message shows first, followed by the backend welcome and response.\n const displayMessages = useMemo(() => (\n firstUserText\n ? [{ id: 'first-user', role: 'user', text: firstUserText }, ...messages]\n : messages\n ), [firstUserText, messages]);\n\n // Refresh clears both the optimistic first message and the provider messages.\n const clearAll = useCallback(() => {\n setFirstUserText(null);\n clearMessages();\n }, [clearMessages]);\n\n const actions: ChatBoxSdkActions = {\n emitClientReady: signalClientReady,\n sendMessage: (text) => {\n sendTextMessage(text);\n },\n queueForWelcome: noop,\n enableVoice: noop,\n disableVoice: noop,\n language: props.language,\n isSessionReady,\n supportsVoice: false,\n isVoiceActive: false,\n chatKind: 'text',\n };\n\n const defaultTextSend = (text: string, a: ChatBoxSdkActions) => {\n props.onSessionStart?.();\n if (!startedRef.current) {\n // First message: show it immediately (local state), then run the backend welcome\n // flow once the session is ready (see the effect above).\n startedRef.current = true;\n setFirstUserText(text);\n pendingFirstTextRef.current = text;\n setPendingFlag(true);\n setWaitingForResponse(true);\n } else {\n setWaitingForResponse(true);\n a.sendMessage(text);\n }\n };\n\n const handleTextSend = (text: string) => {\n if (props.onTextSend) {\n props.onTextSend(text, actions);\n } else {\n defaultTextSend(text, actions);\n }\n };\n\n const sdk: SdkState = {\n messages: displayMessages,\n sendTextMessage: handleTextSend,\n clearMessages: clearAll,\n clearSessionHistory,\n isAudioPlaying: false,\n partialTranscript: null,\n changeSessionLanguage,\n error,\n isAgentThinking,\n isAgentSpeaking,\n isVoiceSetupLoading: false,\n isVoiceActive: false,\n isSessionReady,\n vad: DUMMY_VAD,\n startVoice: noop,\n prepareVoice: noop,\n toggleVoice: noop,\n signalClientReady,\n waitingForResponse,\n sendSuggestion: handleTextSend,\n };\n\n return (\n <RqmiiChatBoxContent\n {...restProps}\n isPreview={isPreview}\n chatKind=\"text\"\n sdk={sdk}\n />\n );\n}\n","import { useEffect, useState } from 'react';\nimport { useRqmiiConnection, useRqmiiMessages, useRqmiiVAD, useRqmiiVoice } from '../../hooks';\nimport { RqmiiChatBoxContent } from './chat-box-content';\nimport { useDeferredClientReady, useWelcomeTextHandling } from './chat-box-shared';\nimport type { ChatBoxEventHandlers, ChatBoxSdkActions, RqmiiChatBoxProps, SdkState } from './chat-box-types';\n\nexport function RqmiiVoiceChatBox(props: RqmiiChatBoxProps & ChatBoxEventHandlers) {\n const { isPreview = false, ...restProps } = props;\n const { messages, sendTextMessage, clearMessages } = useRqmiiMessages();\n const { isAudioPlaying, partialTranscript } = useRqmiiVoice();\n const { changeSessionLanguage, clearSessionHistory, signalClientReady, error, isSessionReady, isAgentThinking, isAgentSpeaking } = useRqmiiConnection();\n const { pendingWelcomeText: _pwt, pendingMessage: _pm, setPendingWelcomeText, setPendingMessage } = useWelcomeTextHandling({ isSessionReady, sendTextMessage, messages });\n const { emitClientReady: deferredClientReady } = useDeferredClientReady({ isSessionReady, signalClientReady });\n const [voiceRequested, setVoiceRequested] = useState(false);\n\n // Barge-in is owned entirely by the backend now. It interrupts the agent only\n // when the first confirmed partial transcript arrives and emits `interrupted`,\n // which stops playback via the socket handler. We intentionally do NOT pause\n // playback locally on VAD speech-start: that fired on coughs / background\n // noise and cut the agent off on false positives.\n const vad = useRqmiiVAD({\n enabled: true,\n preloadStream: false,\n });\n const { isLoading: isVadLoading, isListening, toggle: toggleListening } = vad;\n const isVoiceSetupLoading = isVadLoading;\n const isVoiceActive = isListening || voiceRequested;\n\n useEffect(() => {\n if (!voiceRequested || !isSessionReady || isVadLoading || isListening) return;\n void toggleListening();\n }, [voiceRequested, isSessionReady, isVadLoading, isListening, toggleListening]);\n\n const startSession = () => { props.onSessionStart?.(); };\n\n const actions: ChatBoxSdkActions = {\n emitClientReady: deferredClientReady,\n sendMessage: (text) => {\n if (isSessionReady) {\n sendTextMessage(text);\n } else {\n setPendingMessage(text);\n }\n },\n queueForWelcome: (text) => setPendingWelcomeText(text),\n enableVoice: () => setVoiceRequested(true),\n disableVoice: () => { setVoiceRequested(false); if (isListening) void toggleListening(); },\n language: props.language,\n isSessionReady,\n supportsVoice: true,\n isVoiceActive,\n chatKind: 'voice',\n };\n\n const defaultVoiceStart = (a: ChatBoxSdkActions) => {\n startSession();\n a.enableVoice();\n const welcomeText = props.agent.welcomeMessages?.[props.language];\n a.emitClientReady(welcomeText ? { welcomeMessage: welcomeText } : undefined);\n };\n\n const defaultVoiceToggle = (a: ChatBoxSdkActions) => {\n if (a.isVoiceActive) {\n a.disableVoice();\n } else {\n a.enableVoice();\n }\n };\n\n const handleVoiceStart = () => {\n if (props.onVoiceStart) {\n props.onVoiceStart(actions);\n } else {\n defaultVoiceStart(actions);\n }\n };\n\n const handleVoiceToggle = () => {\n if (props.onVoiceToggle) {\n props.onVoiceToggle(actions);\n } else {\n defaultVoiceToggle(actions);\n }\n };\n\n const sdk: SdkState = {\n messages,\n sendTextMessage: () => {},\n clearMessages,\n clearSessionHistory,\n isAudioPlaying,\n partialTranscript,\n changeSessionLanguage,\n error,\n isAgentThinking,\n isAgentSpeaking,\n isVoiceSetupLoading,\n isVoiceActive,\n isSessionReady,\n vad,\n startVoice: handleVoiceStart,\n prepareVoice: () => {},\n toggleVoice: handleVoiceToggle,\n signalClientReady,\n };\n\n return (\n <RqmiiChatBoxContent\n {...restProps}\n isPreview={isPreview}\n chatKind=\"voice\"\n sdk={sdk}\n />\n );\n}\n","import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { useRqmiiConnection, useRqmiiEvents, useRqmiiMessages, useRqmiiVAD, useRqmiiVoice } from '../../hooks';\nimport { RqmiiChatBoxContent } from './chat-box-content';\nimport { useDeferredClientReady } from './chat-box-shared';\nimport type { ChatBoxEventHandlers, ChatBoxSdkActions, RqmiiChatBoxProps, SdkState } from './chat-box-types';\n\n// Safeguard delay between client_ready (welcome) and the user's first text message (response)\n// on the text-first path, so the backend welcome arrives before the response.\nconst WELCOME_SAFEGUARD_MS = 300;\n\nexport function RqmiiTextAndVoiceChatBox(props: RqmiiChatBoxProps & ChatBoxEventHandlers) {\n const { isPreview = false, ...restProps } = props;\n const { messages, sendTextMessage, emitUserMessage, addLocalMessage, clearMessages } = useRqmiiMessages();\n const { isAudioPlaying, partialTranscript } = useRqmiiVoice();\n const { changeSessionLanguage, clearSessionHistory, signalClientReady, error, isSessionReady, isAgentThinking, isAgentSpeaking } = useRqmiiConnection();\n const { emitClientReady: deferredClientReady } = useDeferredClientReady({ isSessionReady, signalClientReady });\n const [voiceRequested, setVoiceRequested] = useState(false);\n // First message from the text-first path is queued until the session is ready (backend welcome flow).\n const pendingTextRef = useRef<string | null>(null);\n const [pendingFlag, setPendingFlag] = useState(false);\n // A suggestion click starts voice + text together, so its message is queued separately\n // from the text-first welcome flow above (no client_ready is emitted for suggestions).\n const pendingSuggestionRef = useRef<string | null>(null);\n const [pendingSuggestionFlag, setPendingSuggestionFlag] = useState(false);\n const suggestionFlowDoneRef = useRef(false);\n const textStartedRef = useRef(false);\n const welcomeFlowDoneRef = useRef(false);\n // The first text-first user message is kept in local state so it survives the provider's\n // HARD_RESET during session initialization and appears immediately.\n const [firstUserText, setFirstUserText] = useState<string | null>(null);\n const [waitingForResponse, setWaitingForResponse] = useState(false);\n const prevMsgCountRef = useRef(messages.length);\n\n useEffect(() => {\n if (messages.length > prevMsgCountRef.current) {\n const lastMsg = messages[messages.length - 1];\n const isAssistant = lastMsg.role === 'assistant';\n if (isAssistant && lastMsg.streaming) {\n setWaitingForResponse(false);\n }\n }\n prevMsgCountRef.current = messages.length;\n }, [messages]);\n\n // A rate-limited message never yields an agent response, so release the\n // typing indicator instead of leaving it spinning forever.\n useRqmiiEvents('message_rate_limited', useCallback(() => {\n setWaitingForResponse(false);\n }, []));\n\n // Barge-in is owned entirely by the backend now. It interrupts the agent only\n // when the first confirmed partial transcript arrives and emits `interrupted`,\n // which stops playback via the socket handler. We intentionally do NOT pause\n // playback locally on VAD speech-start: that fired on coughs / background\n // noise and cut the agent off on false positives.\n const vad = useRqmiiVAD({\n enabled: true,\n preloadStream: false,\n });\n const { isLoading: isVadLoading, isListening, toggle: toggleListening } = vad;\n const isVoiceSetupLoading = isVadLoading;\n const isVoiceActive = isListening || voiceRequested;\n\n useEffect(() => {\n if (!voiceRequested || !isSessionReady || isVadLoading || isListening) return;\n void toggleListening();\n }, [voiceRequested, isSessionReady, isVadLoading, isListening, toggleListening]);\n\n // Text-first backend welcome flow: once the session is ready, emit client_ready (backend\n // produces the welcome), then after a short safeguard delay emit the user's message\n // (backend responds). The user's message is already shown via `firstUserText`. The pending\n // text is held in a ref so the delayed send is not cancelled by a re-render.\n useEffect(() => {\n if (!isSessionReady || !pendingFlag || welcomeFlowDoneRef.current) return;\n const text = pendingTextRef.current;\n if (text === null) return;\n welcomeFlowDoneRef.current = true;\n pendingTextRef.current = null;\n // Persist the first user message to provider state (durable history) and drop the\n // optimistic local copy.\n addLocalMessage('user', text);\n setFirstUserText(null);\n const welcomeText = props.agent.welcomeMessages?.[props.language];\n signalClientReady(welcomeText ? { welcomeMessage: welcomeText } : undefined);\n const timer = setTimeout(() => { emitUserMessage(text); setWaitingForResponse(true); }, WELCOME_SAFEGUARD_MS);\n return () => clearTimeout(timer);\n }, [isSessionReady, pendingFlag, signalClientReady, emitUserMessage, addLocalMessage]);\n\n // Suggestion click flow: the session is only just starting (socket not connected yet), so the\n // message is held until the session is ready, then displayed locally and emitted to the\n // backend. No client_ready is emitted here — the suggestion IS the user's first message.\n useEffect(() => {\n if (!isSessionReady || !pendingSuggestionFlag || suggestionFlowDoneRef.current) return;\n const text = pendingSuggestionRef.current;\n if (text === null) return;\n suggestionFlowDoneRef.current = true;\n pendingSuggestionRef.current = null;\n addLocalMessage('user', text);\n emitUserMessage(text);\n setWaitingForResponse(true);\n setPendingSuggestionFlag(false);\n }, [isSessionReady, pendingSuggestionFlag, emitUserMessage, addLocalMessage]);\n\n // The first user message shows first, followed by the backend welcome and response.\n const displayMessages = useMemo(() => (\n firstUserText\n ? [{ id: 'first-user', role: 'user', text: firstUserText }, ...messages]\n : messages\n ), [firstUserText, messages]);\n\n // Refresh clears both the optimistic first message and the provider messages.\n const clearAll = useCallback(() => {\n setFirstUserText(null);\n textStartedRef.current = false;\n welcomeFlowDoneRef.current = false;\n clearMessages();\n }, [clearMessages]);\n\n const startSession = () => { props.onSessionStart?.(); };\n\n const actions: ChatBoxSdkActions = {\n emitClientReady: (payload) => {\n welcomeFlowDoneRef.current = true;\n textStartedRef.current = true;\n deferredClientReady(payload);\n },\n sendMessage: (text) => {\n sendTextMessage(text);\n },\n queueForWelcome: () => {},\n enableVoice: () => setVoiceRequested(true),\n disableVoice: () => { setVoiceRequested(false); if (isListening) void toggleListening(); },\n language: props.language,\n isSessionReady,\n supportsVoice: true,\n isVoiceActive,\n chatKind: 'text_and_voice',\n };\n\n const defaultTextSend = (text: string, a: ChatBoxSdkActions) => {\n startSession();\n if (!textStartedRef.current && !welcomeFlowDoneRef.current) {\n // First text message chooses the text-only path and runs the backend welcome flow:\n // display locally now, then client_ready + delayed backend send once the session is ready.\n textStartedRef.current = true;\n props.onStartText?.();\n setFirstUserText(text);\n pendingTextRef.current = text;\n setPendingFlag(true);\n setWaitingForResponse(true);\n } else {\n // Subsequent messages in the established text-only session send normally.\n textStartedRef.current = true;\n setWaitingForResponse(true);\n a.sendMessage(text);\n }\n };\n\n const defaultVoiceStart = (a: ChatBoxSdkActions) => {\n startSession();\n textStartedRef.current = true;\n welcomeFlowDoneRef.current = true;\n props.onStartVoice?.();\n a.enableVoice();\n const welcomeText = props.agent.welcomeMessages?.[props.language];\n a.emitClientReady(welcomeText ? { welcomeMessage: welcomeText } : undefined);\n };\n\n const defaultVoiceToggle = (a: ChatBoxSdkActions) => {\n if (a.isVoiceActive) {\n a.disableVoice();\n } else {\n a.enableVoice();\n }\n };\n\n const handleTextSend = (text: string) => {\n if (props.onTextSend) {\n props.onTextSend(text, actions);\n } else {\n defaultTextSend(text, actions);\n }\n };\n\n const handleVoiceStart = () => {\n if (props.onVoiceStart) {\n props.onVoiceStart(actions);\n } else {\n defaultVoiceStart(actions);\n }\n };\n\n const handleVoiceToggle = () => {\n if (props.onVoiceToggle) {\n props.onVoiceToggle(actions);\n } else {\n defaultVoiceToggle(actions);\n }\n };\n\n const sdk: SdkState = {\n messages: displayMessages,\n sendTextMessage: handleTextSend,\n clearMessages: clearAll,\n clearSessionHistory,\n isAudioPlaying,\n partialTranscript,\n changeSessionLanguage,\n error,\n isAgentThinking,\n isAgentSpeaking,\n isVoiceSetupLoading,\n isVoiceActive,\n isSessionReady,\n vad,\n startVoice: handleVoiceStart,\n prepareVoice: () => {},\n toggleVoice: handleVoiceToggle,\n signalClientReady,\n waitingForResponse,\n sendSuggestion: (text) => {\n startSession();\n textStartedRef.current = true;\n welcomeFlowDoneRef.current = true;\n props.onStartVoice?.();\n setVoiceRequested(true);\n pendingSuggestionRef.current = text;\n setPendingSuggestionFlag(true);\n },\n };\n\n return (\n <RqmiiChatBoxContent\n {...restProps}\n isPreview={isPreview}\n chatKind={props.textOnly ? 'text' : 'text_and_voice'}\n sdk={sdk}\n />\n );\n}\n","import React from 'react';\nimport { useRqmiiConnection, useRqmiiMessages } from '../../hooks';\nimport { AvatarChatPanel } from './panels';\nimport { ErrorPanel } from './primitives';\nimport { DUMMY_VAD, useDeferredClientReady, useWelcomeTextHandling } from './chat-box-shared';\nimport { noop } from './utils';\nimport type { ChatBoxEventHandlers, ChatBoxSdkActions, RqmiiChatBoxProps, SdkState } from './chat-box-types';\n\nexport function RqmiiAvatarChatBox(props: RqmiiChatBoxProps & ChatBoxEventHandlers) {\n const { isPreview = false, agent, language, languages, onLanguageChange, onEndSession, onMinimize, messages: previewMessages, onSendMessage } = props;\n const onClose = onEndSession || onMinimize || noop;\n const { messages, sendTextMessage, clearMessages } = useRqmiiMessages();\n const { changeSessionLanguage, clearSessionHistory, signalClientReady, error, isSessionReady, isAgentThinking, isAgentSpeaking } = useRqmiiConnection();\n const { pendingWelcomeText: _pwt, pendingMessage: _pm, setPendingWelcomeText, setPendingMessage } = useWelcomeTextHandling({ isSessionReady, sendTextMessage, messages });\n const { emitClientReady: deferredClientReady } = useDeferredClientReady({ isSessionReady, signalClientReady });\n\n const startSession = () => { props.onSessionStart?.(); };\n\n const actions: ChatBoxSdkActions = {\n emitClientReady: deferredClientReady,\n sendMessage: (text) => {\n if (isSessionReady) {\n sendTextMessage(text);\n } else {\n setPendingMessage(text);\n }\n },\n queueForWelcome: (text) => setPendingWelcomeText(text),\n enableVoice: noop,\n disableVoice: noop,\n language,\n isSessionReady,\n supportsVoice: false,\n isVoiceActive: false,\n chatKind: 'avatar',\n };\n\n const defaultTextSend = (text: string, a: ChatBoxSdkActions) => {\n startSession();\n const welcomeText = props.agent.welcomeMessages?.[props.language];\n a.emitClientReady(welcomeText ? { welcomeMessage: welcomeText } : undefined);\n a.queueForWelcome(text);\n };\n\n const handleTextSend = (text: string) => {\n if (props.onTextSend) {\n props.onTextSend(text, actions);\n } else {\n defaultTextSend(text, actions);\n }\n };\n\n const sdk: SdkState = {\n messages,\n sendTextMessage: handleTextSend,\n clearMessages,\n clearSessionHistory,\n isAudioPlaying: false,\n partialTranscript: null,\n changeSessionLanguage,\n error,\n isAgentThinking,\n isAgentSpeaking,\n isVoiceSetupLoading: false,\n isVoiceActive: false,\n isSessionReady,\n vad: DUMMY_VAD,\n startVoice: noop,\n prepareVoice: noop,\n toggleVoice: noop,\n signalClientReady,\n };\n\n if (error && !isPreview) return <ErrorPanel message={error} language={language} onClose={onClose} />;\n\n return <AvatarChatPanel agent={agent} language={language} onClose={onClose} />;\n}\n","import React, { useMemo } from 'react';\nimport { normalizeChatLanguages } from '../languages';\nimport { RqmiiChatOpenButton } from './primitives';\nimport { cx, resolveWidgetThemeStyles } from './utils';\nimport type { PublicAgent } from '../../types';\n\nexport { RqmiiTextChatBox } from './chat-box-text';\nexport { RqmiiVoiceChatBox } from './chat-box-voice';\nexport { RqmiiTextAndVoiceChatBox } from './chat-box-text-and-voice';\nexport { RqmiiAvatarChatBox } from './chat-box-avatar';\n\nexport type { ChatKind, ChatBoxSdkActions, ChatBoxEventHandlers, ChatBoxPanelProps, SdkState, RqmiiChatBoxProps, SessionEndedInfo, EndedBy, EndedReason } from './chat-box-types';\n\nexport function RqmiiChatSurface({ agent, defaultOpen, className = '', preview = false, ChatBoxComponent }: { agent: PublicAgent; defaultOpen?: boolean; className?: string; preview?: boolean; ChatBoxComponent: React.ComponentType<{ agent: PublicAgent; language: string; languages: string[]; onLanguageChange?: (v: string) => void; onClose?: () => void; isPreview?: boolean }> }) {\n const effectiveDefaultOpen = defaultOpen !== undefined ? defaultOpen : (agent.widget?.behavior?.default_open ?? false);\n const [open, setOpen] = React.useState(effectiveDefaultOpen);\n const [language, setLanguage] = React.useState(agent.defaultLanguage);\n const languages = useMemo(() => normalizeChatLanguages(agent.languages, agent.defaultLanguage), [agent.defaultLanguage, agent.languages]);\n\n React.useEffect(() => { setLanguage(agent.defaultLanguage); }, [agent.defaultLanguage]);\n React.useEffect(() => { setOpen(effectiveDefaultOpen); }, [effectiveDefaultOpen]);\n\n const themeMode = agent.widget?.appearance?.theme?.mode === 'light' ? 'light' : 'dark';\n const surfaceStyles = useMemo(() => resolveWidgetThemeStyles(agent.widget?.appearance), [agent.widget?.appearance]);\n\n return (\n <div\n className={cx('rqmii-chat-surface', `rqmii-theme-${themeMode}`, preview && 'is-preview', className)}\n data-theme={themeMode}\n style={surfaceStyles}\n >\n {!open && (<RqmiiChatOpenButton agent={agent} onClick={() => setOpen(true)} position={preview ? 'static' : 'fixed'} />)}\n {open && (<ChatBoxComponent agent={agent} language={language} languages={languages} onLanguageChange={setLanguage} onClose={() => setOpen(false)} isPreview={preview} />)}\n </div>\n );\n}\n","import React, { useEffect, useMemo, useState, useRef } from 'react';\nimport { RqmiiAgentProvider } from '../provider/RqmiiAgentProvider';\nimport { RqmiiAgentRoom } from '../components/RqmiiAgentRoom';\nimport { useRqmiiConnection } from '../hooks/use-rqmii-connection';\nimport { useRqmiiMessages } from '../hooks/use-rqmii-messages';\nimport { fetchAgentCustomization, normalizePublicAgent, resolveChatKind, applyAgentConfigOverrides } from './agent-data';\nimport { RqmiiTextChatBox, RqmiiVoiceChatBox, RqmiiTextAndVoiceChatBox, RqmiiAvatarChatBox, RqmiiChatOpenButton, WelcomeBubble } from './chat/components';\nimport { EndedChatPanel } from './chat/panels';\nimport { FeedbackPanel } from './chat/feedback';\nimport { normalizeChatLanguages } from './languages';\nimport { cx, ensureGoogleFontLoaded, resolveWidgetThemeStyles } from './chat/utils';\nimport type { RqmiiAgentChatProps, RqmiiAgentChatPreviewProps, PublicAgent } from '../types';\nimport type { SessionEndedInfo, EndedBy, EndedReason } from './chat/chat-box-types';\n\ntype DisplayMessage = { id?: string; role?: string; sender?: string; text: string };\ntype StartMode = 'idle' | 'voice' | 'text';\ntype NewSessionDirective = { mode: 'text'; text: string } | { mode: 'voice' } | null;\n\n// ---------------------------------------------------------------------------\n// Agent loader\n// ---------------------------------------------------------------------------\n\nfunction PublicAgentLoader({ restUrl, identifier, fallbackAgent, withCredentials = false, children, onError }: { restUrl: string; identifier?: string; fallbackAgent?: Partial<PublicAgent> | Record<string, unknown>; withCredentials?: boolean; children: (agent: PublicAgent) => React.ReactNode; onError?: (error: unknown) => void }) {\n const [agent, setAgent] = useState<PublicAgent | null>(() => fallbackAgent ? normalizePublicAgent(fallbackAgent) : null);\n const [error, setError] = useState<Error | null>(null);\n\n useEffect(() => {\n if (!fallbackAgent) return;\n setAgent(normalizePublicAgent(fallbackAgent));\n setError(null);\n }, [fallbackAgent]);\n\n useEffect(() => {\n // If a complete agent object is provided (e.g. in platform live preview),\n // skip the remote fetch to keep live unsaved form state intact.\n if (!identifier || fallbackAgent) return undefined;\n const controller = new AbortController();\n setError(null);\n fetchAgentCustomization({ restUrl, identifier, withCredentials, signal: controller.signal })\n .then(setAgent)\n .catch((nextError) => {\n if (controller.signal.aborted) return;\n if (!fallbackAgent) {\n setError(nextError);\n }\n onError?.(nextError);\n });\n return () => controller.abort();\n }, [fallbackAgent, identifier, onError, restUrl, withCredentials]);\n\n if (error) return <div className=\"rqmii-chat-panel rqmii-chat-panel--error\">{error.message || 'Could not load agent'}</div>;\n if (!agent) return <div className=\"rqmii-chat-panel rqmii-chat-panel--error\">Loading</div>;\n\n return <>{children(agent)}</>;\n}\n\n// ---------------------------------------------------------------------------\n// Active-session dispatcher (before session ends)\n// ---------------------------------------------------------------------------\n\nfunction ChatBoxDispatcher({ agent, language, languages, onLanguageChange, onEndSession, onMinimize, onStartText, onStartVoice, textOnly, messages, onSendMessage, isPreview, onSessionStart, initialText, autoStartVoice }: { agent: PublicAgent; language: string; languages: string[]; onLanguageChange?: (v: string) => void; onEndSession?: () => void; onMinimize?: () => void; onStartText?: () => void; onStartVoice?: () => void; textOnly?: boolean; messages?: DisplayMessage[]; onSendMessage?: (text: string) => void; isPreview?: boolean; onSessionStart?: () => void; initialText?: string; autoStartVoice?: boolean }) {\n const chatKind = resolveChatKind(agent);\n const props = { agent, language, languages, onLanguageChange, onEndSession, onMinimize, messages, onSendMessage, isPreview, onSessionStart, initialText, autoStartVoice };\n\n switch (chatKind) {\n case 'avatar': return <RqmiiAvatarChatBox {...props} />;\n case 'voice': return <RqmiiVoiceChatBox {...props} />;\n case 'text_and_voice': return <RqmiiTextAndVoiceChatBox {...props} onStartText={onStartText} onStartVoice={onStartVoice} textOnly={textOnly} />;\n case 'text': default: return <RqmiiTextChatBox {...props} />;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Chat shell — always mounted inside the provider. Owns the ended-state latch,\n// renders the floating button when closed, active chat when open, and the ended\n// panel once the session terminates.\n// ---------------------------------------------------------------------------\n\ninterface ChatShellProps {\n agent: PublicAgent;\n language: string;\n languages: string[];\n startMode: StartMode;\n directive: NewSessionDirective;\n open: boolean;\n onOpen: () => void;\n onLanguageChange: (v: string) => void;\n onMinimize: () => void;\n onStartNewSession: (mode: 'voice' | 'text', firstText?: string) => void;\n onSessionStart: () => void;\n onStartText: () => void;\n onStartVoice: () => void;\n}\n\nfunction ChatShell({\n agent,\n language,\n languages,\n startMode,\n directive,\n open,\n onOpen,\n onLanguageChange,\n onMinimize,\n onStartNewSession,\n onSessionStart,\n onStartText,\n onStartVoice,\n}: ChatShellProps) {\n const { connectionState, isConnected, isSessionTerminated, creditExhausted, session, endSession, submitFeedback, interrupt } = useRqmiiConnection();\n const { messages } = useRqmiiMessages();\n\n const hasConnectedRef = useRef(false);\n const endedByRef = useRef<EndedBy | null>(null);\n\n // Latched internal ended-session info (kept for future feedback UI).\n const [endedInfo, setEndedInfo] = useState<SessionEndedInfo | null>(null);\n\n // Rating/feedback flow state (persists across minimize; reset on new session via remount).\n const [rating, setRating] = useState(0);\n const [feedbackSubmitted, setFeedbackSubmitted] = useState(false);\n const [showFeedbackScreen, setShowFeedbackScreen] = useState(false);\n const [ratedOnce, setRatedOnce] = useState(false);\n\n useEffect(() => {\n if (isConnected) hasConnectedRef.current = true;\n }, [isConnected]);\n\n useEffect(() => {\n if (endedInfo) return; // already latched\n\n let reason: EndedReason | null = null;\n if (isSessionTerminated) {\n reason = endedByRef.current === 'user' ? 'user_ended' : 'terminated';\n } else if (connectionState === 'ended') {\n reason = endedByRef.current === 'user' ? 'user_ended' : 'terminated';\n } else if (connectionState === 'failed') {\n if (creditExhausted) reason = 'credits_exhausted';\n else if (hasConnectedRef.current) reason = 'connection_lost';\n else reason = 'failed';\n } else if (creditExhausted) {\n reason = 'credits_exhausted';\n }\n\n if (!reason) return;\n\n setEndedInfo({\n sessionId: session.sessionId,\n endedBy: endedByRef.current ?? 'agent',\n reason,\n });\n }, [isSessionTerminated, connectionState, creditExhausted, session.sessionId, endedInfo]);\n\n const handleUserEndSession = () => {\n endedByRef.current = 'user';\n interrupt();\n endSession();\n };\n\n const sessionId = endedInfo?.sessionId ?? null;\n\n // Star selected in the ended panel. Persists the rating; opens the feedback screen only\n // on the first rating (subsequent star changes just re-send the rating and stay).\n const handleRate = (value: number) => {\n if (feedbackSubmitted) return;\n setRating(value);\n if (sessionId) {\n submitFeedback({ sessionId, rating: value, endedBy: endedInfo?.endedBy }).catch(() => {});\n }\n if (!ratedOnce) {\n setRatedOnce(true);\n setShowFeedbackScreen(true);\n }\n };\n\n const handleSubmitFeedback = async (comment: string) => {\n if (sessionId) {\n try {\n await submitFeedback({ sessionId, feedback: comment, endedBy: endedInfo?.endedBy });\n } catch {\n // ignore network errors; still lock locally\n }\n }\n setFeedbackSubmitted(true);\n setShowFeedbackScreen(false);\n };\n\n // Closed → floating button (state persists so reopening restores the same screen).\n if (!open) {\n return <RqmiiChatOpenButton agent={agent} onClick={onOpen} active={connectionState === 'connected'} />;\n }\n\n const chatKind = resolveChatKind(agent);\n const isAvatarAgent = agent.agentType === 'cloud_avatar' || agent.agentType === 'desktop_avatar';\n const textOnly = startMode === 'text';\n\n // Avatar agents keep their current behavior (no ended panel / new-session controls).\n if (isAvatarAgent) {\n return (\n <ChatBoxDispatcher\n agent={agent}\n language={language}\n languages={languages}\n onLanguageChange={onLanguageChange}\n onEndSession={handleUserEndSession}\n onMinimize={onMinimize}\n onSessionStart={onSessionStart}\n onStartText={onStartText}\n onStartVoice={onStartVoice}\n textOnly={textOnly}\n />\n );\n }\n\n // Ended state — show durable provider history + rating/feedback affordances.\n if (endedInfo) {\n // Full-screen feedback (comment) view — opened after the first rating or \"Tell us more\".\n if (showFeedbackScreen && sessionId) {\n return (\n <FeedbackPanel\n agent={agent}\n language={language}\n rating={rating}\n onBack={() => setShowFeedbackScreen(false)}\n onMinimize={onMinimize}\n onSubmit={handleSubmitFeedback}\n />\n );\n }\n\n return (\n <EndedChatPanel\n agent={agent}\n language={language}\n languages={languages}\n chatKind={chatKind === 'avatar' ? 'text' : chatKind}\n messages={messages}\n onLanguageChange={onLanguageChange}\n onMinimize={onMinimize}\n onStartNewVoice={() => onStartNewSession('voice')}\n onStartNewText={(text) => onStartNewSession('text', text)}\n rating={rating}\n endedBy={endedInfo.endedBy}\n sessionId={sessionId}\n ratingInteractive={!feedbackSubmitted}\n showTellUsMore={ratedOnce && !feedbackSubmitted}\n onRate={handleRate}\n onTellUsMore={() => setShowFeedbackScreen(true)}\n />\n );\n }\n\n // Active session.\n return (\n <ChatBoxDispatcher\n agent={agent}\n language={language}\n languages={languages}\n onLanguageChange={onLanguageChange}\n onEndSession={handleUserEndSession}\n onMinimize={onMinimize}\n onSessionStart={onSessionStart}\n onStartText={onStartText}\n onStartVoice={onStartVoice}\n textOnly={textOnly}\n initialText={directive?.mode === 'text' ? directive.text : undefined}\n autoStartVoice={directive?.mode === 'voice'}\n />\n );\n}\n\n// ---------------------------------------------------------------------------\n// Main connected chat component\n// ---------------------------------------------------------------------------\n\nexport function RqmiiAgentChat(props: RqmiiAgentChatProps) {\n const {\n wsUrl,\n restUrl,\n apiKey,\n agentId,\n agent,\n language,\n defaultOpen,\n open,\n className = '',\n debug = false,\n withCredentials = false,\n onError,\n onInitialized,\n config,\n promptOverrides,\n clientTools,\n onMinimize,\n onOpen,\n } = props;\n const identifiers = [!!apiKey, !!agentId].filter(Boolean).length;\n if (identifiers > 1) {\n throw new Error('RqmiiAgentChat: only one of apiKey, or agentId may be provided');\n }\n const identifier = apiKey || agentId;\n\n return (\n <PublicAgentLoader restUrl={restUrl} identifier={identifier} fallbackAgent={agent} withCredentials={withCredentials} onError={onError}>\n {(loadedAgent) => (\n <ConnectedAgentChat\n wsUrl={wsUrl}\n restUrl={restUrl}\n apiKey={apiKey}\n agentId={agentId}\n agent={loadedAgent}\n language={language}\n defaultOpen={defaultOpen}\n open={open}\n className={className}\n debug={debug}\n withCredentials={withCredentials}\n onError={onError}\n onInitialized={onInitialized}\n config={config}\n promptOverrides={promptOverrides}\n clientTools={clientTools}\n onMinimize={onMinimize}\n onOpen={onOpen}\n />\n )}\n </PublicAgentLoader>\n );\n}\n\nfunction ConnectedAgentChat({ wsUrl, restUrl, apiKey, agentId, agent, language: defaultLanguage, defaultOpen, open: controlledOpen, className, debug, withCredentials, onError, onInitialized, config, promptOverrides, clientTools, onMinimize, onOpen }: { wsUrl: string; restUrl: string; apiKey?: string; agentId?: string; agent: PublicAgent; language?: string; defaultOpen?: boolean; open?: boolean; className: string; debug: boolean; withCredentials: boolean; onError?: (error: unknown) => void; onInitialized?: (data: unknown) => void; config?: Record<string, unknown>; promptOverrides?: import(\"../types\").RqmiiPromptOverrides; clientTools?: Record<string, import(\"../types\").ClientToolHandler>; onMinimize?: () => void; onOpen?: () => void; }) {\n const effectiveDefaultOpen =\n defaultOpen !== undefined\n ? defaultOpen\n : (agent.widget?.behavior?.default_open ?? false);\n const [internalOpen, setInternalOpen] = useState(effectiveDefaultOpen);\n const open = controlledOpen !== undefined ? controlledOpen : internalOpen;\n\n useEffect(() => {\n if (controlledOpen === undefined) {\n setInternalOpen(effectiveDefaultOpen);\n }\n }, [effectiveDefaultOpen, controlledOpen]);\n\n const [sessionStarted, setSessionStarted] = useState(false);\n const [language, setLanguage] = useState(defaultLanguage || agent.defaultLanguage);\n const [startMode, setStartMode] = useState<StartMode>('idle');\n // Bumping this remounts RqmiiAgentRoom (fresh provider + session) for a clean new session.\n const [sessionAttempt, setSessionAttempt] = useState(0);\n // Directive that auto-starts a freshly-started session (first text message / voice call).\n const [directive, setDirective] = useState<NewSessionDirective>(null);\n const [bubbleDismissed, setBubbleDismissed] = useState(false);\n\n const connectsOnOpen = agent.agentType === 'cloud_avatar' || agent.agentType === 'desktop_avatar';\n const isAvatarAgent = connectsOnOpen;\n const welcomeBubble = agent.widget?.behavior?.welcome_bubble;\n const bubbleMessage = agent.welcomeMessages?.[language] || '';\n const showWelcomeBubble =\n !open &&\n !bubbleDismissed &&\n !isAvatarAgent &&\n !!welcomeBubble?.enabled &&\n !!bubbleMessage.trim();\n const languages = useMemo(() => normalizeChatLanguages(agent.languages, agent.defaultLanguage), [agent.defaultLanguage, agent.languages]);\n\n useEffect(() => {\n ensureGoogleFontLoaded(agent.widget?.appearance?.font);\n }, [agent.widget?.appearance?.font]);\n\n // Text-first path disables voice for the whole session.\n const effectiveConfig = useMemo(() => {\n if (startMode === 'text') return { ...(config ?? {}), use_voice: false, use_text: true };\n return config;\n }, [config, startMode]);\n\n const effectiveAgent = useMemo(\n () => applyAgentConfigOverrides(agent, effectiveConfig),\n [agent, effectiveConfig],\n );\n\n const audioEnabled = !isAvatarAgent && effectiveAgent.useVoice;\n\n // Non-avatar: connect = sessionStarted (decoupled from `open`) so minimizing to the\n // floating button does NOT tear down the provider and wipe history.\n // Avatar: connect when open (unchanged).\n const shouldConnect = connectsOnOpen ? open : sessionStarted;\n\n const roomSession = useMemo(() => ({\n\n ...(apiKey ? { apiKey } : {}),\n ...(agentId ? { agentId } : {}),\n language,\n config: effectiveConfig,\n ...(promptOverrides ? { promptOverrides } : {}),\n }), [agentId, apiKey, language, effectiveConfig, promptOverrides]);\n\n // Freeze the session object once started so mid-session state changes (e.g. language)\n // don't rebuild the session reference and trigger a teardown that wipes messages.\n // Re-freeze when the session attempt changes (new session) since sessionStarted stays true.\n const frozenSessionRef = useRef<typeof roomSession | null>(null);\n const prevSessionStartedRef = useRef(false);\n const prevAttemptRef = useRef(sessionAttempt);\n const attemptChanged = prevAttemptRef.current !== sessionAttempt;\n prevAttemptRef.current = sessionAttempt;\n if (sessionStarted && (!prevSessionStartedRef.current || attemptChanged)) {\n frozenSessionRef.current = roomSession;\n }\n prevSessionStartedRef.current = sessionStarted;\n if (!sessionStarted) frozenSessionRef.current = null;\n const activeSession = (sessionStarted && frozenSessionRef.current) ? frozenSessionRef.current : roomSession;\n\n useEffect(() => { setLanguage(defaultLanguage || agent.defaultLanguage); }, [agent.defaultLanguage, defaultLanguage]);\n\n const handleError = useMemo(() => {\n if (!onError) return (_error: unknown) => { setStartMode('idle'); };\n return (error: unknown) => {\n setStartMode('idle');\n onError(error);\n };\n }, [onError]);\n\n const handleStartText = () => { setStartMode('text'); setSessionStarted(true); };\n const handleStartVoice = () => { setStartMode('voice'); setSessionStarted(true); };\n\n // Minimize / close the panel to the floating button — session + history stay intact.\n const handleMinimize = () => { if (controlledOpen === undefined) setInternalOpen(false); onMinimize?.(); };\n const handleOpen = () => { if (controlledOpen === undefined) setInternalOpen(true); setBubbleDismissed(true); onOpen?.(); };\n\n // Start a brand-new session from the ended state (clears history via provider remount).\n const handleStartNewSession = (mode: 'voice' | 'text', firstText?: string) => {\n setDirective(mode === 'text' ? { mode: 'text', text: firstText ?? '' } : { mode: 'voice' });\n setStartMode(mode);\n setSessionStarted(true);\n setSessionAttempt((prev) => prev + 1);\n };\n\n const themeMode = agent.widget?.appearance?.theme?.mode === 'light' ? 'light' : 'dark';\n const surfaceStyles = useMemo(() => resolveWidgetThemeStyles(agent.widget?.appearance), [agent.widget?.appearance]);\n\n return (\n <RqmiiAgentRoom\n key={sessionAttempt}\n wsUrl={wsUrl}\n restUrl={restUrl}\n session={activeSession}\n connect={shouldConnect}\n enableAudio={audioEnabled}\n debug={debug}\n withCredentials={withCredentials}\n onError={handleError}\n onInitialized={onInitialized}\n clientTools={clientTools}\n >\n <div\n className={cx(\n 'rqmii-chat-surface',\n `rqmii-theme-${themeMode}`,\n agent.widget?.appearance?.position === 'left' && 'rqmii-position-left',\n className\n )}\n data-theme={themeMode}\n style={surfaceStyles}\n dir=\"ltr\"\n >\n {showWelcomeBubble && (\n <WelcomeBubble\n message={bubbleMessage}\n delaySeconds={welcomeBubble?.delay_seconds ?? 3}\n soundEnabled={!!welcomeBubble?.sound_enabled}\n language={language}\n buttonPosition={agent.widget?.appearance?.position === 'left' ? 'left' : 'right'}\n onClick={() => setBubbleDismissed(true)}\n />\n )}\n <ChatShell\n agent={agent}\n language={language}\n languages={languages}\n startMode={startMode}\n directive={directive}\n open={open}\n onOpen={handleOpen}\n onLanguageChange={setLanguage}\n onMinimize={handleMinimize}\n onStartNewSession={handleStartNewSession}\n onSessionStart={() => setSessionStarted(true)}\n onStartText={handleStartText}\n onStartVoice={handleStartVoice}\n />\n </div>\n </RqmiiAgentRoom>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Preview component (unchanged behavior)\n// ---------------------------------------------------------------------------\n\nexport function RqmiiAgentChatPreview(props: RqmiiAgentChatPreviewProps) {\n const { agent, language, open = true, className = '', messages, onSendMessage, onClose } = props;\n const normalizedAgent = useMemo(() => normalizePublicAgent(agent), [agent]);\n const [isOpen, setIsOpen] = useState(open);\n const [currentLanguage, setCurrentLanguage] = useState(language || normalizedAgent.defaultLanguage);\n const languages = useMemo(() => normalizeChatLanguages(normalizedAgent.languages, normalizedAgent.defaultLanguage), [normalizedAgent.defaultLanguage, normalizedAgent.languages]);\n const themeMode = normalizedAgent.widget?.appearance?.theme?.mode === 'light' ? 'light' : 'dark';\n const surfaceStyles = useMemo(() => resolveWidgetThemeStyles(normalizedAgent.widget?.appearance), [normalizedAgent.widget?.appearance]);\n\n useEffect(() => { if (language) setCurrentLanguage(language); }, [language]);\n useEffect(() => { setIsOpen(open); }, [open]);\n useEffect(() => {\n ensureGoogleFontLoaded(normalizedAgent.widget?.appearance?.font);\n }, [normalizedAgent.widget?.appearance?.font]);\n\n return (\n <RqmiiAgentProvider wsUrl=\"\" restUrl=\"\" enableAudio={false}>\n <div\n className={cx('rqmii-chat-surface is-preview', `rqmii-theme-${themeMode}`, className)}\n data-theme={themeMode}\n style={surfaceStyles}\n dir=\"ltr\"\n >\n {isOpen ? (\n <ChatBoxDispatcher\n agent={normalizedAgent}\n language={currentLanguage}\n languages={languages}\n onLanguageChange={setCurrentLanguage}\n onEndSession={() => { setIsOpen(false); onClose?.(); }}\n onMinimize={() => { setIsOpen(false); onClose?.(); }}\n messages={messages}\n onSendMessage={onSendMessage}\n isPreview\n />\n ) : null}\n </div>\n </RqmiiAgentProvider>\n );\n}\n"],"names":["af","sq","ar","az","eu","be","bn","bs","bg","ca","zh","hr","cs","da","nl","en","et","fi","fr","gl","de","el","gu","hi","hu","id","it","ja","kn","kk","ko","lv","lt","mk","ms","ml","mr","no","fa","pl","pt","pa","ro","ru","sr","sk","sl","es","sw","sv","tl","ta","te","th","tr","uk","ur","vi","cy","TEXT","arEg","arSa","RQMII_CHAT_LANGUAGES","RQMII_CHAT_LANGUAGE_VALUES","language","getChatLanguage","value","getChatText","key","normalizeChatLanguages","languages","fallback","clean","DEFAULT_AGENT","AGENT_TYPES","normalizePublicAgent","rawAgent","r","agentType","useText","useVoice","conversation","speech","defaultLanguage","rawWidgetSource","rawAppearance","rawBehavior","rawWidget","showBranding","showTopbarAvatarImage","rawSuggested","rawDefaultOpen","rawFont","normalizedFont","val","rawConsentSource","rawConsentEnabled","rawConsentOneTime","rawConsentContent","rawEndedScreen","conversationEndedScreen","rawBubble","welcomeBubble","rawTheme","theme","widget","rawConsent","rawWelcome","welcomeMessages","v","k","allowInterrupt","allowWelcomeMessageInterrupt","faceImage","fetchAgentCustomization","restUrl","identifier","withCredentials","signal","response","data","fetchAgentConfig","apiKey","agentId","detail","d","applyAgentConfigOverrides","agent","config","resolveChatKind","mergeClasses","classes","className","index","array","toKebabCase","string","toCamelCase","match","p1","p2","toPascalCase","camelCase","defaultAttributes","hasA11yProp","props","prop","LucideContext","createContext","useLucideContext","useContext","Icon","forwardRef","color","size","strokeWidth","absoluteStrokeWidth","children","iconNode","rest","ref","contextSize","contextStrokeWidth","contextAbsoluteStrokeWidth","contextColor","contextClass","calculatedStrokeWidth","createElement","tag","attrs","createLucideIcon","iconName","Component","__iconNode","ArrowUp","ChevronLeft","ChevronDown","ChevronUp","LoaderCircle","Maximize2","MicOff","Mic","Minimize2","PhoneOff","Phone","RotateCcw","Star","X","noop","MOBILE_BREAKPOINT","isMobileViewport","cx","resolveWidgetFontFamily","font","normalized","getContrastTextColor","hexColor","hex","fullHex","c","g","b","resolveWidgetThemeStyles","appearance","styles","accentColor","accentTextColor","endCallColor","endCallTextColor","getGoogleFontUrl","ensureGoogleFontLoaded","href","link","languageFontClass","_language","languageTextDirection","formatTime","seconds","minutes","useElapsed","active","elapsed","setElapsed","useState","useEffect","interval","useVisualViewportHeight","height","setHeight","vv","update","useStreamingText","text","streaming","wordsRef","useRef","wordCount","setWordCount","prev","timer","RqmiiOrb","React","m","LanguageSelect","onChange","open","setOpen","selected","options","handler","event","jsxs","jsx","option","RqmiiChatFooter","brand","footerContent","hasFooterContent","RqmiiAgentAvatar","isOrb","RqmiiChatOpenButton","onClick","position","playNotificationSound","Ctx","ctx","now","osc","gain","WelcomeBubble","message","delaySeconds","soundEnabled","buttonPosition","visible","setVisible","trimmed","sideClass","ChatInput","placeholder","onSend","disabled","variant","setMessage","textareaRef","maxTextareaHeight","send","textarea","StreamingText","displayText","SUGGESTIONS_MAX_HEIGHT","SUGGESTIONS_MAX_HEIGHT_MOBILE","TOGGLE_SIZE","TOGGLE_GAP","TOGGLE_RESERVED","getSuggestionsMaxHeight","toggleSide","textDirection","findCornerBubble","items","containerWidth","side","reserved","lastRowTop","rowItems","reserveCornerSpace","pass","corner","SuggestedMessages","suggestions","expanded","setExpanded","hasOverflow","setHasOverflow","hiddenFrom","setHiddenFrom","toggleTop","setToggleTop","innerRef","itemRefs","resetReservations","useLayoutEffect","measure","width","maxHeight","firstOverIndex","i","firstOverflow","guard","next","bottom","contentBottom","hidden","node","TypingIndicator","isMultilineField","FIELD_PLACEHOLDER_KEYS","LeadCaptureFormMessage","messageId","form","formSubmitted","useRqmiiAgentContext","values","setValues","submitting","setSubmitting","submitted","setSubmitted","error","setError","title","getPlaceholder","field","i18nKey","handleChange","handleSubmit","e","f","collectedData","err","inputType","MessageRow","isUser","MessageList","messages","partialTranscript","showTypingIndicator","endRef","prevMessageCountRef","isNewMessage","ErrorPanel","onRetry","onClose","MAX_RATING","StarRow","rating","onRate","readonly","hover","setHover","_","filled","RatingBar","endedBy","sessionId","interactive","showTellUsMore","showRating","showConversationId","onTellUsMore","header","endedText","Fragment","FeedbackPanel","onBack","onMinimize","onSubmit","comment","setComment","canSubmit","Loader2","RqmiiCloudAvatarPlayer","n","usePanelStyle","visualViewportHeight","StartTextPanel","onLanguageChange","isVoiceEnabled","isAudioPlaying","isVoiceSetupLoading","onStartVoice","onSuggestionClick","compact","panelStyle","isMobile","setIsMobile","onResize","isCompactLayout","avatarSize","hasSuggestions","StartVoicePanel","TextChatPanel","onEndSession","onToggleVoice","isListening","isSpeaking","isLoading","isAgentThinking","isAgentSpeaking","waitingForResponse","status","getStatusText","showTopbarAvatar","VoiceCallPanel","persistentListening","MinimizedChatPill","onRestore","isText","EndedChatPanel","chatKind","onStartNewVoice","onStartNewText","ratingInteractive","endedScreen","postChatRatingEnabled","ratingBar","showCallButton","showTextInput","topBarActions","AvatarChatPanel","streamingUrl","isCloudStreamConnected","cloudStreamError","useRqmiiAvatar","isAvatarSpeaking","sendTextMessage","useRqmiiMessages","sanitizeUrl","url","lower","parseInlineMarkdown","nodes","pattern","lastIndex","linkText","linkUrl","boldText","italicText","delText","codeText","renderInlineWithLineBreaks","keyPrefix","lines","line","idx","RqmiiMarkdownComponent","content","rawBlocks","elements","rawBlock","blockIdx","blockKey","headingMatch","level","headingText","inlineContent","quoteText","l","item","itemIdx","RqmiiMarkdown","ConsentDialog","onAccept","onDecline","markdownText","acceptLabel","declineLabel","normalizePartialTranscript","shouldShowMinimize","RqmiiChatBoxContent","previewMessages","onSendMessage","isPreview","propChatKind","sdk","renderPanel","messagesRef","initialText","autoStartVoice","consentConfig","isConsentEnabled","consentContent","isOneTime","storageKey","consented","setConsented","resolvedChatKind","voiceStarted","setVoiceStarted","conversationStarted","setConversationStarted","isMinimized","setIsMinimized","connecting","setConnecting","connectError","setConnectError","vh","showConsent","canMinimize","events","useRqmiiConnection","handleMinimize","handleMaximize","handleConsentAccept","useCallback","handleConsentDecline","setLanguage","nextLanguage","autoStartedRef","initiateVoice","panelProps","DefaultPanelRenderer","onCloseWidget","onSendSuggestion","typingIndicatorEnabled","effectiveWaitingForResponse","displayMessages","s","handleSuggestionClick","DUMMY_VAD","useWelcomeTextHandling","isSessionReady","pendingWelcomeText","setPendingWelcomeText","pendingMessage","setPendingMessage","sendPendingWelcomeText","useDeferredClientReady","signalClientReady","pending","setPending","pendingPayload","setPendingPayload","emittedRef","payload","WELCOME_SAFEGUARD_MS","RqmiiTextChatBox","restProps","emitUserMessage","addLocalMessage","clearMessages","changeSessionLanguage","clearSessionHistory","startedRef","pendingFirstTextRef","welcomeFlowDoneRef","pendingFlag","setPendingFlag","firstUserText","setFirstUserText","setWaitingForResponse","prevMsgCountRef","lastMsg","useRqmiiEvents","welcomeText","useMemo","clearAll","actions","defaultTextSend","a","handleTextSend","RqmiiVoiceChatBox","useRqmiiVoice","deferredClientReady","voiceRequested","setVoiceRequested","vad","useRqmiiVAD","isVadLoading","toggleListening","isVoiceActive","startSession","defaultVoiceStart","defaultVoiceToggle","RqmiiTextAndVoiceChatBox","pendingTextRef","pendingSuggestionRef","pendingSuggestionFlag","setPendingSuggestionFlag","suggestionFlowDoneRef","textStartedRef","RqmiiAvatarChatBox","RqmiiChatSurface","defaultOpen","preview","ChatBoxComponent","effectiveDefaultOpen","themeMode","surfaceStyles","PublicAgentLoader","fallbackAgent","onError","setAgent","controller","nextError","ChatBoxDispatcher","onStartText","textOnly","onSessionStart","ChatShell","startMode","directive","onOpen","onStartNewSession","connectionState","isConnected","isSessionTerminated","creditExhausted","session","endSession","submitFeedback","interrupt","hasConnectedRef","endedByRef","endedInfo","setEndedInfo","setRating","feedbackSubmitted","setFeedbackSubmitted","showFeedbackScreen","setShowFeedbackScreen","ratedOnce","setRatedOnce","reason","handleUserEndSession","handleRate","handleSubmitFeedback","isAvatarAgent","RqmiiAgentChat","wsUrl","debug","onInitialized","promptOverrides","clientTools","loadedAgent","ConnectedAgentChat","controlledOpen","internalOpen","setInternalOpen","sessionStarted","setSessionStarted","setStartMode","sessionAttempt","setSessionAttempt","setDirective","bubbleDismissed","setBubbleDismissed","connectsOnOpen","bubbleMessage","showWelcomeBubble","effectiveConfig","effectiveAgent","audioEnabled","shouldConnect","roomSession","frozenSessionRef","prevSessionStartedRef","prevAttemptRef","attemptChanged","activeSession","handleError","_error","handleStartText","handleStartVoice","handleOpen","handleStartNewSession","mode","firstText","RqmiiAgentRoom","RqmiiAgentChatPreview","normalizedAgent","isOpen","setIsOpen","currentLanguage","setCurrentLanguage","RqmiiAgentProvider"],"mappings":"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","x_google_ignoreList":[65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87]}
1
+ {"version":3,"file":"ui.cjs","sources":["../src/ui/languages/translations/af.ts","../src/ui/languages/translations/sq.ts","../src/ui/languages/translations/ar-eg.ts","../src/ui/languages/translations/ar-sa.ts","../src/ui/languages/translations/az.ts","../src/ui/languages/translations/eu.ts","../src/ui/languages/translations/be.ts","../src/ui/languages/translations/bn.ts","../src/ui/languages/translations/bs.ts","../src/ui/languages/translations/bg.ts","../src/ui/languages/translations/ca.ts","../src/ui/languages/translations/zh.ts","../src/ui/languages/translations/hr.ts","../src/ui/languages/translations/cs.ts","../src/ui/languages/translations/da.ts","../src/ui/languages/translations/nl.ts","../src/ui/languages/translations/en.ts","../src/ui/languages/translations/et.ts","../src/ui/languages/translations/fi.ts","../src/ui/languages/translations/fr.ts","../src/ui/languages/translations/gl.ts","../src/ui/languages/translations/de.ts","../src/ui/languages/translations/el.ts","../src/ui/languages/translations/gu.ts","../src/ui/languages/translations/hi.ts","../src/ui/languages/translations/hu.ts","../src/ui/languages/translations/id.ts","../src/ui/languages/translations/it.ts","../src/ui/languages/translations/ja.ts","../src/ui/languages/translations/kn.ts","../src/ui/languages/translations/kk.ts","../src/ui/languages/translations/ko.ts","../src/ui/languages/translations/lv.ts","../src/ui/languages/translations/lt.ts","../src/ui/languages/translations/mk.ts","../src/ui/languages/translations/ms.ts","../src/ui/languages/translations/ml.ts","../src/ui/languages/translations/mr.ts","../src/ui/languages/translations/no.ts","../src/ui/languages/translations/fa.ts","../src/ui/languages/translations/pl.ts","../src/ui/languages/translations/pt.ts","../src/ui/languages/translations/pa.ts","../src/ui/languages/translations/ro.ts","../src/ui/languages/translations/ru.ts","../src/ui/languages/translations/sr.ts","../src/ui/languages/translations/sk.ts","../src/ui/languages/translations/sl.ts","../src/ui/languages/translations/es.ts","../src/ui/languages/translations/sw.ts","../src/ui/languages/translations/sv.ts","../src/ui/languages/translations/tl.ts","../src/ui/languages/translations/ta.ts","../src/ui/languages/translations/te.ts","../src/ui/languages/translations/th.ts","../src/ui/languages/translations/tr.ts","../src/ui/languages/translations/uk.ts","../src/ui/languages/translations/ur.ts","../src/ui/languages/translations/vi.ts","../src/ui/languages/translations/cy.ts","../src/ui/languages/text.ts","../src/ui/languages/list.ts","../src/ui/languages/utils.ts","../src/ui/agent-data.ts","../node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.mjs","../node_modules/lucide-react/dist/esm/shared/src/utils/toKebabCase.mjs","../node_modules/lucide-react/dist/esm/shared/src/utils/toCamelCase.mjs","../node_modules/lucide-react/dist/esm/shared/src/utils/toPascalCase.mjs","../node_modules/lucide-react/dist/esm/defaultAttributes.mjs","../node_modules/lucide-react/dist/esm/shared/src/utils/hasA11yProp.mjs","../node_modules/lucide-react/dist/esm/context.mjs","../node_modules/lucide-react/dist/esm/Icon.mjs","../node_modules/lucide-react/dist/esm/createLucideIcon.mjs","../node_modules/lucide-react/dist/esm/icons/arrow-up.mjs","../node_modules/lucide-react/dist/esm/icons/chevron-left.mjs","../node_modules/lucide-react/dist/esm/icons/chevron-down.mjs","../node_modules/lucide-react/dist/esm/icons/chevron-up.mjs","../node_modules/lucide-react/dist/esm/icons/loader-circle.mjs","../node_modules/lucide-react/dist/esm/icons/maximize-2.mjs","../node_modules/lucide-react/dist/esm/icons/mic-off.mjs","../node_modules/lucide-react/dist/esm/icons/mic.mjs","../node_modules/lucide-react/dist/esm/icons/minimize-2.mjs","../node_modules/lucide-react/dist/esm/icons/phone-off.mjs","../node_modules/lucide-react/dist/esm/icons/phone.mjs","../node_modules/lucide-react/dist/esm/icons/rotate-ccw.mjs","../node_modules/lucide-react/dist/esm/icons/star.mjs","../node_modules/lucide-react/dist/esm/icons/x.mjs","../src/ui/chat/utils.ts","../src/ui/chat/primitives.tsx","../src/ui/chat/feedback.tsx","../src/ui/chat/panels.tsx","../src/ui/chat/markdown.tsx","../src/ui/chat/consent-dialog.tsx","../src/ui/chat/chat-box-content.tsx","../src/ui/chat/chat-box-shared.ts","../src/ui/chat/chat-box-text.tsx","../src/ui/chat/chat-box-voice.tsx","../src/ui/chat/chat-box-text-and-voice.tsx","../src/ui/chat/chat-box-avatar.tsx","../src/ui/chat/ChatBox.tsx","../src/ui/RqmiiAgentChat.tsx"],"sourcesContent":["import type { UiTextKeys } from '../types';\n\nconst af: UiTextKeys = {\n sendMessage: 'Stuur \\'n boodskap',\n send: 'Stuur',\n close: 'Sluit',\n minimize: 'Minimaliseer',\n maximize: 'Maksimaliseer',\n call: 'Bel',\n listening: 'Luister',\n processing: 'Verwerk',\n talkToInterrupt: 'Praat om te onderbreek',\n startVoice: 'Begin stem',\n stopVoice: 'Stop stem',\n endCall: 'Beëindig oproep',\n openChat: 'Maak klets oop',\n connectionFailed: 'Verbinding het misluk',\n retry: 'Probeer weer',\n loading: 'Laai',\n creditsExhausted: 'Krediete is opgebruik',\n creditsExhaustedDetail: 'Hierdie sessie se krediete is opgebruik.',\n consentTitle: 'Privaatheidstoestemming',\n consentBody: 'Deur voort te gaan, stem jy in tot die versameling en verwerking van jou data soos beskryf in ons',\n consentAccept: 'Aanvaar',\n consentDecline: 'Weier',\n consentTermsLink: 'Diensbepalings',\n consentPrivacyLink: 'Privaatheidsbeleid',\n refresh: 'Verfris',\n ratingQuestion: 'Hoe was hierdie gesprek?',\n ratingThankYou: 'Dankie vir jou terugvoer!',\n youEnded: 'Jy het die gesprek beëindig',\n agentEnded: 'Die agent het die gesprek beëindig',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Vertel ons meer',\n feedbackSubtitle: 'Jou terugvoer help ons om ons diens te verbeter en jou in die toekoms beter te ondersteun.',\n feedbackPlaceholder: 'Vertel ons meer oor jou ervaring…',\n submit: 'Dien in',\n leadFormTitle: 'Kontakinligting',\n leadFormSuccess: 'Dankie! Jou besonderhede is ingedien.',\n leadFormRequiredError: 'Vul asseblief al die verpligte velde in.',\n leadFormGenericError: 'Iets het verkeerd geloop. Probeer asseblief weer.',\n leadFormName: 'Naam',\n leadFormEmail: 'E-pos',\n leadFormPhone: 'Foon',\n leadFormMessage: 'Jou boodskap',\n poweredBy: 'Aangedryf deur {brand}',\n};\n\nexport default af;\n","import type { UiTextKeys } from '../types';\n\nconst sq: UiTextKeys = {\n sendMessage: 'Dërgo një mesazh',\n send: 'Dërgo',\n close: 'Mbyll',\n minimize: 'Minimizo',\n maximize: 'Maksimizo',\n call: 'Thirr',\n listening: 'Duke dëgjuar',\n processing: 'Duke përpunuar',\n talkToInterrupt: 'Flisni për të ndërprerë',\n startVoice: 'Fillo zërin',\n stopVoice: 'Ndalo zërin',\n endCall: 'Përfundo thirrjen',\n openChat: 'Hap bisedën',\n connectionFailed: 'Lidhja dështoi',\n retry: 'Riprovo',\n loading: 'Duke u ngarkuar',\n creditsExhausted: 'Kreditë e mbaruara',\n creditsExhaustedDetail: 'Kreditë e këtij sesioni kanë mbaruar.',\n consentTitle: 'Pëlqimi për Privatësi',\n consentBody: 'Duke vazhduar, ju pranoni mbledhjen dhe përpunimin e të dhënave tuaja siç përshkruhet në',\n consentAccept: 'Prano',\n consentDecline: 'Refuzo',\n consentTermsLink: 'Kushtet e Shërbimit',\n consentPrivacyLink: 'Rregullat e Privatësisë',\n refresh: 'Rifresko',\n ratingQuestion: 'Si ishte kjo bisedë?',\n ratingThankYou: 'Faleminderit për komentin tuaj!',\n youEnded: 'Ju e përfunduat bisedën',\n agentEnded: 'Agjenti e përfundoi bisedën',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Na tregoni më shumë',\n feedbackSubtitle: 'Komenti juaj na ndihmon të përmirësojmë shërbimin tonë dhe t’ju mbështesim më mirë në të ardhmen.',\n feedbackPlaceholder: 'Na tregoni më shumë rreth përvojës suaj…',\n submit: 'Dërgo',\n leadFormTitle: 'Informacioni i kontaktit',\n leadFormSuccess: 'Faleminderit! Të dhënat tuaja u dërguan.',\n leadFormRequiredError: 'Ju lutemi plotësoni të gjitha fushat e kërkuara.',\n leadFormGenericError: 'Ndodhi një gabim. Ju lutemi provoni përsëri.',\n leadFormName: 'Emri',\n leadFormEmail: 'Email',\n leadFormPhone: 'Telefoni',\n leadFormMessage: 'Mesazhi juaj',\n poweredBy: 'Mundësuar nga {brand}',\n};\n\nexport default sq;\n","import type { UiTextKeys } from '../types';\n\nconst ar: UiTextKeys = {\n sendMessage: 'اكتب رسالة',\n send: 'إرسال',\n close: 'إغلاق',\n minimize: 'تصغير',\n maximize: 'تكبير',\n call: 'اتصل',\n listening: 'يستمع',\n processing: 'يعالج',\n talkToInterrupt: 'تحدث للمقاطعة',\n startVoice: 'بدء الصوت',\n stopVoice: 'إيقاف الصوت',\n endCall: 'إنهاء المكالمة',\n openChat: 'فتح المحادثة',\n connectionFailed: 'فشل الاتصال',\n retry: 'إعادة المحاولة',\n loading: 'جار التحميل',\n creditsExhausted: 'نفذ الرصيد',\n creditsExhaustedDetail: 'نفذ رصيد هذه الجلسة.',\n consentTitle: 'الموافقة على الخصوصية',\n consentBody: 'بالمتابعة، أنت توافق على جمع ومعالجة بياناتك كما هو موضح في',\n consentAccept: 'قبول',\n consentDecline: 'رفض',\n consentTermsLink: 'شروط الخدمة',\n consentPrivacyLink: 'سياسة الخصوصية',\n refresh: 'تحديث',\n ratingQuestion: 'كيف كانت هذه المحادثة؟',\n ratingThankYou: 'شكرًا على ملاحظاتك!',\n youEnded: 'لقد أنهيت المحادثة',\n agentEnded: 'أنهى الوكيل المحادثة',\n sessionIdLabel: 'المعرّف:',\n tellUsMore: 'أخبرنا المزيد',\n feedbackSubtitle: 'تساعدنا ملاحظاتك في تحسين خدمتنا ودعمك بشكل أفضل في المستقبل.',\n feedbackPlaceholder: 'أخبرنا المزيد عن تجربتك…',\n submit: 'إرسال',\n leadFormTitle: 'معلومات التواصل',\n leadFormSuccess: 'شكرًا لك! تم إرسال بياناتك.',\n leadFormRequiredError: 'يرجى تعبئة جميع الحقول المطلوبة.',\n leadFormGenericError: 'حدث خطأ ما. حاول مرة أخرى.',\n leadFormName: 'الاسم',\n leadFormEmail: 'البريد الإلكتروني',\n leadFormPhone: 'رقم الهاتف',\n leadFormMessage: 'رسالتك',\n poweredBy: 'بواسطة {brand}',\n};\n\nexport default ar;\n","import type { UiTextKeys } from '../types';\n\nconst ar: UiTextKeys = {\n sendMessage: 'اكتب رسالة',\n send: 'إرسال',\n close: 'إغلاق',\n minimize: 'تصغير',\n maximize: 'تكبير',\n call: 'اتصل',\n listening: 'يستمع',\n processing: 'يعالج',\n talkToInterrupt: 'تحدث للمقاطعة',\n startVoice: 'بدء الصوت',\n stopVoice: 'إيقاف الصوت',\n endCall: 'إنهاء المكالمة',\n openChat: 'فتح المحادثة',\n connectionFailed: 'فشل الاتصال',\n retry: 'إعادة المحاولة',\n loading: 'جار التحميل',\n creditsExhausted: 'نفذ الرصيد',\n creditsExhaustedDetail: 'نفذ رصيد هذه الجلسة.',\n consentTitle: 'الموافقة على الخصوصية',\n consentBody: 'بالمتابعة، أنت توافق على جمع ومعالجة بياناتك كما هو موضح في',\n consentAccept: 'قبول',\n consentDecline: 'رفض',\n consentTermsLink: 'شروط الخدمة',\n consentPrivacyLink: 'سياسة الخصوصية',\n refresh: 'تحديث',\n ratingQuestion: 'كيف كانت هذه المحادثة؟',\n ratingThankYou: 'شكرًا على ملاحظاتك!',\n youEnded: 'لقد أنهيت المحادثة',\n agentEnded: 'أنهى الوكيل المحادثة',\n sessionIdLabel: 'المعرّف:',\n tellUsMore: 'أخبرنا المزيد',\n feedbackSubtitle: 'تساعدنا ملاحظاتك في تحسين خدمتنا ودعمك بشكل أفضل في المستقبل.',\n feedbackPlaceholder: 'أخبرنا المزيد عن تجربتك…',\n submit: 'إرسال',\n leadFormTitle: 'معلومات التواصل',\n leadFormSuccess: 'شكرًا لك! تم إرسال بياناتك.',\n leadFormRequiredError: 'يرجى تعبئة جميع الحقول المطلوبة.',\n leadFormGenericError: 'حدث خطأ ما. حاول مرة أخرى.',\n leadFormName: 'الاسم',\n leadFormEmail: 'البريد الإلكتروني',\n leadFormPhone: 'رقم الهاتف',\n leadFormMessage: 'رسالتك',\n poweredBy: 'بواسطة {brand}',\n};\n\nexport default ar;\n","import type { UiTextKeys } from '../types';\n\nconst az: UiTextKeys = {\n sendMessage: 'Mesaj göndər',\n send: 'Göndər',\n close: 'Bağla',\n minimize: 'Kiçilt',\n maximize: 'Böyüt',\n call: 'Zəng et',\n listening: 'Dinləyir',\n processing: 'Emal edilir',\n talkToInterrupt: 'Dayandırmaq üçün danışın',\n startVoice: 'Səsi başlat',\n stopVoice: 'Səsi dayandır',\n endCall: 'Zəngi bitir',\n openChat: 'Çatı aç',\n connectionFailed: 'Əlaqə uğursuz oldu',\n retry: 'Yenidən cəhd et',\n loading: 'Yüklənir',\n creditsExhausted: 'Kreditlər bitdi',\n creditsExhaustedDetail: 'Bu sessiyanın kreditləri bitdi.',\n consentTitle: 'Məxfilik Razılığı',\n consentBody: 'Davam etməklə, məlumatlarınızın toplanması və emalına icazə verdiyinizi təsdiq edirsiniz',\n consentAccept: 'Qəbul et',\n consentDecline: 'Rədd et',\n consentTermsLink: 'Xidmət Şərtləri',\n consentPrivacyLink: 'Məxfilik Siyasəti',\n refresh: 'Yenilə',\n ratingQuestion: 'Bu söhbət necə idi?',\n ratingThankYou: 'Rəyiniz üçün təşəkkür edirik!',\n youEnded: 'Söhbəti siz bitirdiniz',\n agentEnded: 'Agent söhbəti bitirdi',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Bizə daha çox danışın',\n feedbackSubtitle: 'Rəyiniz xidmətimizi təkmilləşdirməyə və gələcəkdə sizə daha yaxşı dəstək olmağa kömək edir.',\n feedbackPlaceholder: 'Təcrübəniz haqqında bizə daha çox danışın…',\n submit: 'Göndər',\n leadFormTitle: 'Əlaqə məlumatları',\n leadFormSuccess: 'Təşəkkürlər! Məlumatlarınız göndərildi.',\n leadFormRequiredError: 'Zəhmət olmasa bütün tələb olunan sahələri doldurun.',\n leadFormGenericError: 'Xəta baş verdi. Zəhmət olmasa yenidən cəhd edin.',\n leadFormName: 'Ad',\n leadFormEmail: 'E-poçt',\n leadFormPhone: 'Telefon',\n leadFormMessage: 'Mesajınız',\n poweredBy: 'Dəstəkləyən {brand}',\n};\n\nexport default az;\n","import type { UiTextKeys } from '../types';\n\nconst eu: UiTextKeys = {\n sendMessage: 'Bidali mezua',\n send: 'Bidali',\n close: 'Itxi',\n minimize: 'Minimizatu',\n maximize: 'Maximizatu',\n call: 'Deitu',\n listening: 'Entzuten',\n processing: 'Prozesatzen',\n talkToInterrupt: 'Hitz egin eteteko',\n startVoice: 'Hasi ahotsa',\n stopVoice: 'Gelditu ahotsa',\n endCall: 'Amaitu deia',\n openChat: 'Ireki txata',\n connectionFailed: 'Konexioak huts egin du',\n retry: 'Saiatu berriro',\n loading: 'Kargatzen',\n creditsExhausted: 'Kredituak agortuta',\n creditsExhaustedDetail: 'Saio honen kredituak agortu dira.',\n consentTitle: 'Pribatutasunaren Baimena',\n consentBody: 'Jarraitzean, zure datuak biltzea eta prozesatzea onartzen duzu gure deskribatzen den moduan',\n consentAccept: 'Onartu',\n consentDecline: 'Ukatu',\n consentTermsLink: 'Zerbitzu-baldintzak',\n consentPrivacyLink: 'Pribatutasun-politika',\n refresh: 'Freskatu',\n ratingQuestion: 'Nolakoa izan da elkarrizketa hau?',\n ratingThankYou: 'Eskerrik asko zure iritziagatik!',\n youEnded: 'Zuk amaitu duzu elkarrizketa',\n agentEnded: 'Agenteak amaitu du elkarrizketa',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Esan iezaguzu gehiago',\n feedbackSubtitle: 'Zure iritziak gure zerbitzua hobetzen eta etorkizunean hobeto laguntzen laguntzen digu.',\n feedbackPlaceholder: 'Esan iezaguzu gehiago zure esperientziari buruz…',\n submit: 'Bidali',\n leadFormTitle: 'Kontaktu informazioa',\n leadFormSuccess: 'Eskerrik asko! Zure datuak bidali dira.',\n leadFormRequiredError: 'Bete beharrezko eremu guztiak, mesedez.',\n leadFormGenericError: 'Zerbait okerra gertatu da. Saiatu berriro.',\n leadFormName: 'Izena',\n leadFormEmail: 'Helbide elektronikoa',\n leadFormPhone: 'Telefonoa',\n leadFormMessage: 'Zure mezua',\n poweredBy: 'Garapena: {brand}',\n};\n\nexport default eu;\n","import type { UiTextKeys } from '../types';\n\nconst be: UiTextKeys = {\n sendMessage: 'Адправіць паведамленне',\n send: 'Адправіць',\n close: 'Зачыніць',\n minimize: 'Згарнуць',\n maximize: 'Разгарнуць',\n call: 'Патэлефанаваць',\n listening: 'Слухае',\n processing: 'Апрацоўка',\n talkToInterrupt: 'Гаварыце, каб перапыніць',\n startVoice: 'Пачаць голас',\n stopVoice: 'Спыніць голас',\n endCall: 'Завяршыць званок',\n openChat: 'Адкрыць чат',\n connectionFailed: 'Памылка падключэння',\n retry: 'Паўтарыць',\n loading: 'Загрузка',\n creditsExhausted: 'Крэдыты скончыліся',\n creditsExhaustedDetail: 'Крэдыты гэтай сесіі скончыліся.',\n consentTitle: 'Згода на апрацоўку даных',\n consentBody: 'Працягваючы, вы згаджаецеся на збор і апрацоўку вашых даных, як апісана ў нашых',\n consentAccept: 'Прыняць',\n consentDecline: 'Адхіліць',\n consentTermsLink: 'Умовы абслугоўвання',\n consentPrivacyLink: 'Палітыка прыватнасці',\n refresh: 'Абнавіць',\n ratingQuestion: 'Як прайшла гэтая размова?',\n ratingThankYou: 'Дзякуй за ваш водгук!',\n youEnded: 'Вы завяршылі размову',\n agentEnded: 'Агент завяршыў размову',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Раскажыце падрабязней',\n feedbackSubtitle: 'Ваш водгук дапамагае нам паляпшаць сэрвіс і лепш падтрымліваць вас у будучыні.',\n feedbackPlaceholder: 'Раскажыце падрабязней пра ваш вопыт…',\n submit: 'Адправіць',\n leadFormTitle: 'Кантактная інфармацыя',\n leadFormSuccess: 'Дзякуй! Вашы дадзеныя адпраўлены.',\n leadFormRequiredError: 'Калі ласка, запаўніце ўсе абавязковыя палі.',\n leadFormGenericError: 'Нешта пайшло не так. Паспрабуйце зноў.',\n leadFormName: 'Імя',\n leadFormEmail: 'Электронная пошта',\n leadFormPhone: 'Тэлефон',\n leadFormMessage: 'Ваша паведамленне',\n poweredBy: 'Працуе на {brand}',\n};\n\nexport default be;\n","import type { UiTextKeys } from '../types';\n\nconst bn: UiTextKeys = {\n sendMessage: 'একটি বার্তা পাঠান',\n send: 'পাঠান',\n close: 'বন্ধ করুন',\n minimize: 'ছোট করুন',\n maximize: 'বড় করুন',\n call: 'কল করুন',\n listening: 'শুনছে',\n processing: 'প্রক্রিয়া হচ্ছে',\n talkToInterrupt: 'বাধা দিতে কথা বলুন',\n startVoice: 'ভয়েস শুরু করুন',\n stopVoice: 'ভয়েস বন্ধ করুন',\n endCall: 'কল শেষ করুন',\n openChat: 'চ্যাট খুলুন',\n connectionFailed: 'সংযোগ ব্যর্থ হয়েছে',\n retry: 'পুনরায় চেষ্টা করুন',\n loading: 'লোড হচ্ছে',\n creditsExhausted: 'ক্রেডিট শেষ',\n creditsExhaustedDetail: 'এই সেশনের ক্রেডিট শেষ হয়ে গেছে।',\n consentTitle: 'গোপনীয়তা সম্মতি',\n consentBody: 'এগিয়ে গেলে, আপনি আমাদের বর্ণিত হিসাবে আপনার ডেটা সংগ্রহ এবং প্রক্রিয়াকরণে সম্মত হন',\n consentAccept: 'গ্রহণ করুন',\n consentDecline: 'প্রত্যাখ্যান করুন',\n consentTermsLink: 'পরিষেবার শর্তাবলী',\n consentPrivacyLink: 'গোপনীয়তা নীতি',\n refresh: 'রিফ্রেশ করুন',\n ratingQuestion: 'এই কথোপকথনটি কেমন ছিল?',\n ratingThankYou: 'আপনার মতামতের জন্য ধন্যবাদ!',\n youEnded: 'আপনি কথোপকথনটি শেষ করেছেন',\n agentEnded: 'এজেন্ট কথোপকথনটি শেষ করেছে',\n sessionIdLabel: 'আইডি:',\n tellUsMore: 'আরও বলুন',\n feedbackSubtitle: 'আপনার মতামত আমাদের পরিষেবা উন্নত করতে এবং ভবিষ্যতে আপনাকে আরও ভালোভাবে সহায়তা করতে সাহায্য করে।',\n feedbackPlaceholder: 'আপনার অভিজ্ঞতা সম্পর্কে আরও বলুন…',\n submit: 'জমা দিন',\n leadFormTitle: 'যোগাযোগের তথ্য',\n leadFormSuccess: 'ধন্যবাদ! আপনার তথ্য জমা দেওয়া হয়েছে।',\n leadFormRequiredError: 'সমস্ত প্রয়োজনীয় ক্ষেত্র পূরণ করুন।',\n leadFormGenericError: 'কিছু ভুল হয়েছে। আবার চেষ্টা করুন।',\n leadFormName: 'নাম',\n leadFormEmail: 'ইমেইল',\n leadFormPhone: 'ফোন',\n leadFormMessage: 'আপনার বার্তা',\n poweredBy: 'পরিচালিত {brand}',\n};\n\nexport default bn;\n","import type { UiTextKeys } from '../types';\n\nconst bs: UiTextKeys = {\n sendMessage: 'Pošalji poruku',\n send: 'Pošalji',\n close: 'Zatvori',\n minimize: 'Minimiziraj',\n maximize: 'Maksimiziraj',\n call: 'Pozovi',\n listening: 'Sluša',\n processing: 'Obrađuje',\n talkToInterrupt: 'Govorite da prekinete',\n startVoice: 'Pokreni glas',\n stopVoice: 'Zaustavi glas',\n endCall: 'Završi poziv',\n openChat: 'Otvori ćaskanje',\n connectionFailed: 'Veza nije uspjela',\n retry: 'Pokušaj ponovo',\n loading: 'Učitavanje',\n creditsExhausted: 'Krediti su potrošeni',\n creditsExhaustedDetail: 'Krediti ove sesije su potrošeni.',\n consentTitle: 'Privatnost Saglasnost',\n consentBody: 'Nastavkom se slažete sa prikupljanjem i obradom vaših podataka kako je opisano u našim',\n consentAccept: 'Prihvati',\n consentDecline: 'Odbij',\n consentTermsLink: 'Uslovi korištenja',\n consentPrivacyLink: 'Politika privatnosti',\n refresh: 'Osvježi',\n ratingQuestion: 'Kako je bio ovaj razgovor?',\n ratingThankYou: 'Hvala na vašoj povratnoj informaciji!',\n youEnded: 'Vi ste završili razgovor',\n agentEnded: 'Agent je završio razgovor',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Recite nam više',\n feedbackSubtitle: 'Vaša povratna informacija nam pomaže da poboljšamo uslugu i bolje vas podržimo u budućnosti.',\n feedbackPlaceholder: 'Recite nam više o svom iskustvu…',\n submit: 'Pošalji',\n leadFormTitle: 'Kontakt informacije',\n leadFormSuccess: 'Hvala! Vaši podaci su poslani.',\n leadFormRequiredError: 'Molimo popunite sva obavezna polja.',\n leadFormGenericError: 'Nešto je pošlo po zlu. Pokušajte ponovo.',\n leadFormName: 'Ime',\n leadFormEmail: 'E-mail',\n leadFormPhone: 'Telefon',\n leadFormMessage: 'Vaša poruka',\n poweredBy: 'Pokreće {brand}',\n};\n\nexport default bs;\n","import type { UiTextKeys } from '../types';\n\nconst bg: UiTextKeys = {\n sendMessage: 'Изпрати съобщение',\n send: 'Изпрати',\n close: 'Затвори',\n minimize: 'Минимизирай',\n maximize: 'Максимизирай',\n call: 'Обади се',\n listening: 'Слуша',\n processing: 'Обработва',\n talkToInterrupt: 'Говорете за прекъсване',\n startVoice: 'Започни глас',\n stopVoice: 'Спри гласа',\n endCall: 'Край на разговора',\n openChat: 'Отвори чат',\n connectionFailed: 'Неуспешна връзка',\n retry: 'Опитай отново',\n loading: 'Зареждане',\n creditsExhausted: 'Кредитите са изчерпани',\n creditsExhaustedDetail: 'Кредитите на тази сесия са изчерпани.',\n consentTitle: 'Съгласие за поверителност',\n consentBody: 'Продължавайки, вие се съгласявате със събирането и обработката на вашите данни, както е описано в нашите',\n consentAccept: 'Приемам',\n consentDecline: 'Отказвам',\n consentTermsLink: 'Условия за ползване',\n consentPrivacyLink: 'Политика за поверителност',\n refresh: 'Обнови',\n ratingQuestion: 'Как беше този разговор?',\n ratingThankYou: 'Благодарим за обратната връзка!',\n youEnded: 'Вие приключихте разговора',\n agentEnded: 'Агентът приключи разговора',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Кажете ни повече',\n feedbackSubtitle: 'Вашата обратна връзка ни помага да подобрим услугата си и да ви подкрепяме по-добре в бъдеще.',\n feedbackPlaceholder: 'Кажете ни повече за вашето преживяване…',\n submit: 'Изпрати',\n leadFormTitle: 'Информация за контакт',\n leadFormSuccess: 'Благодарим! Вашите данни бяха изпратени.',\n leadFormRequiredError: 'Моля, попълнете всички задължителни полета.',\n leadFormGenericError: 'Нещо се обърка. Моля, опитайте отново.',\n leadFormName: 'Име',\n leadFormEmail: 'Имейл',\n leadFormPhone: 'Телефон',\n leadFormMessage: 'Вашето съобщение',\n poweredBy: 'Предоставено от {brand}',\n};\n\nexport default bg;\n","import type { UiTextKeys } from '../types';\n\nconst ca: UiTextKeys = {\n sendMessage: 'Enviar un missatge',\n send: 'Enviar',\n close: 'Tancar',\n minimize: 'Minimitzar',\n maximize: 'Maximitzar',\n call: 'Trucar',\n listening: 'Escoltant',\n processing: 'Processant',\n talkToInterrupt: 'Parleu per interrompre',\n startVoice: 'Iniciar veu',\n stopVoice: 'Aturar veu',\n endCall: 'Finalitzar trucada',\n openChat: 'Obrir xat',\n connectionFailed: 'Connexió fallida',\n retry: 'Tornar a intentar',\n loading: 'Carregant',\n creditsExhausted: 'Crèdits esgotats',\n creditsExhaustedDetail: 'Aquesta sessió ha esgotat els crèdits.',\n consentTitle: 'Consentiment de Privacitat',\n consentBody: 'En continuar, accepteu la recollida i el processament de les vostres dades tal com es descriu als nostres',\n consentAccept: 'Acceptar',\n consentDecline: 'Rebutjar',\n consentTermsLink: 'Termes del servei',\n consentPrivacyLink: 'Política de privacitat',\n refresh: 'Actualitza',\n ratingQuestion: 'Com ha anat aquesta conversa?',\n ratingThankYou: 'Gràcies pel teu comentari!',\n youEnded: 'Has finalitzat la conversa',\n agentEnded: 'L’agent ha finalitzat la conversa',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Explica’ns més',\n feedbackSubtitle: 'El teu comentari ens ajuda a millorar el servei i a donar-te un millor suport en el futur.',\n feedbackPlaceholder: 'Explica’ns més sobre la teva experiència…',\n submit: 'Envia',\n leadFormTitle: 'Informació de contacte',\n leadFormSuccess: 'Gràcies! Les teves dades s\\'han enviat.',\n leadFormRequiredError: 'Si us plau, ompliu tots els camps obligatoris.',\n leadFormGenericError: 'Alguna cosa ha anat malament. Torneu-ho a provar.',\n leadFormName: 'Nom',\n leadFormEmail: 'Correu electrònic',\n leadFormPhone: 'Telèfon',\n leadFormMessage: 'El teu missatge',\n poweredBy: 'Desenvolupat per {brand}',\n};\n\nexport default ca;\n","import type { UiTextKeys } from '../types';\n\nconst zh: UiTextKeys = {\n sendMessage: '发送消息',\n send: '发送',\n close: '关闭',\n minimize: '最小化',\n maximize: '最大化',\n call: '呼叫',\n listening: '正在聆听',\n processing: '处理中',\n talkToInterrupt: '说话以打断',\n startVoice: '开始语音',\n stopVoice: '停止语音',\n endCall: '结束通话',\n openChat: '打开聊天',\n connectionFailed: '连接失败',\n retry: '重试',\n loading: '正在加载',\n creditsExhausted: '额度已用完',\n creditsExhaustedDetail: '此会话的额度已用完。',\n consentTitle: '隐私同意',\n consentBody: '继续操作即表示您同意我们按照所述方式收集和处理您的数据',\n consentAccept: '接受',\n consentDecline: '拒绝',\n consentTermsLink: '服务条款',\n consentPrivacyLink: '隐私政策',\n refresh: '刷新',\n ratingQuestion: '这次对话怎么样?',\n ratingThankYou: '感谢您的反馈!',\n youEnded: '您结束了对话',\n agentEnded: '智能体结束了对话',\n sessionIdLabel: 'ID:',\n tellUsMore: '告诉我们更多',\n feedbackSubtitle: '您的反馈有助于我们改进服务,并在未来为您提供更好的支持。',\n feedbackPlaceholder: '告诉我们更多关于您的体验…',\n submit: '提交',\n leadFormTitle: '联系信息',\n leadFormSuccess: '谢谢!您的信息已提交。',\n leadFormRequiredError: '请填写所有必填字段。',\n leadFormGenericError: '出现错误,请重试。',\n leadFormName: '姓名',\n leadFormEmail: '电子邮箱',\n leadFormPhone: '电话',\n leadFormMessage: '您的留言',\n poweredBy: '技术支持:{brand}',\n};\n\nexport default zh;\n","import type { UiTextKeys } from '../types';\n\nconst hr: UiTextKeys = {\n sendMessage: 'Pošalji poruku',\n send: 'Pošalji',\n close: 'Zatvori',\n minimize: 'Minimiziraj',\n maximize: 'Maksimiziraj',\n call: 'Nazovi',\n listening: 'Sluša',\n processing: 'Obrađuje',\n talkToInterrupt: 'Govorite za prekidanje',\n startVoice: 'Pokreni glas',\n stopVoice: 'Zaustavi glas',\n endCall: 'Završi poziv',\n openChat: 'Otvori chat',\n connectionFailed: 'Veza nije uspjela',\n retry: 'Pokušaj ponovno',\n loading: 'Učitavanje',\n creditsExhausted: 'Krediti iscrpljeni',\n creditsExhaustedDetail: 'Krediti ove sesije su iscrpljeni.',\n consentTitle: 'Privola za privatnost',\n consentBody: 'Nastavkom pristajete na prikupljanje i obradu vaših podataka kako je opisano u našim',\n consentAccept: 'Prihvati',\n consentDecline: 'Odbij',\n consentTermsLink: 'Uvjeti korištenja',\n consentPrivacyLink: 'Pravila privatnosti',\n refresh: 'Osvježi',\n ratingQuestion: 'Kakav je bio ovaj razgovor?',\n ratingThankYou: 'Hvala na povratnoj informaciji!',\n youEnded: 'Vi ste završili razgovor',\n agentEnded: 'Agent je završio razgovor',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Recite nam više',\n feedbackSubtitle: 'Vaša povratna informacija pomaže nam poboljšati uslugu i bolje vas podržati u budućnosti.',\n feedbackPlaceholder: 'Recite nam više o svom iskustvu…',\n submit: 'Pošalji',\n leadFormTitle: 'Podaci za kontakt',\n leadFormSuccess: 'Hvala! Vaši podaci su poslani.',\n leadFormRequiredError: 'Ispunite sva obavezna polja.',\n leadFormGenericError: 'Nešto je pošlo po zlu. Pokušajte ponovo.',\n leadFormName: 'Ime',\n leadFormEmail: 'E-mail',\n leadFormPhone: 'Telefon',\n leadFormMessage: 'Vaša poruka',\n poweredBy: 'Pokreće {brand}',\n};\n\nexport default hr;\n","import type { UiTextKeys } from '../types';\n\nconst cs: UiTextKeys = {\n sendMessage: 'Poslat zprávu',\n send: 'Odeslat',\n close: 'Zavřít',\n minimize: 'Minimalizovat',\n maximize: 'Maximalizovat',\n call: 'Volat',\n listening: 'Poslouchá',\n processing: 'Zpracovává',\n talkToInterrupt: 'Mluvte pro přerušení',\n startVoice: 'Spustit hlas',\n stopVoice: 'Zastavit hlas',\n endCall: 'Ukončit hovor',\n openChat: 'Otevřít chat',\n connectionFailed: 'Připojení selhalo',\n retry: 'Zkusit znovu',\n loading: 'Načítání',\n creditsExhausted: 'Kredity vyčerpány',\n creditsExhaustedDetail: 'Kredity této relace byly vyčerpány.',\n consentTitle: 'Souhlas se soukromím',\n consentBody: 'Pokračováním souhlasíte se shromažďováním a zpracováním vašich údajů, jak je popsáno v našich',\n consentAccept: 'Přijmout',\n consentDecline: 'Odmítnout',\n consentTermsLink: 'Podmínky služby',\n consentPrivacyLink: 'Zásady ochrany soukromí',\n refresh: 'Obnovit',\n ratingQuestion: 'Jaká byla tato konverzace?',\n ratingThankYou: 'Děkujeme za vaši zpětnou vazbu!',\n youEnded: 'Konverzaci jste ukončili vy',\n agentEnded: 'Konverzaci ukončil agent',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Řekněte nám více',\n feedbackSubtitle: 'Vaše zpětná vazba nám pomáhá zlepšovat naše služby a lépe vás v budoucnu podporovat.',\n feedbackPlaceholder: 'Řekněte nám více o své zkušenosti…',\n submit: 'Odeslat',\n leadFormTitle: 'Kontaktní údaje',\n leadFormSuccess: 'Děkujeme! Vaše údaje byly odeslány.',\n leadFormRequiredError: 'Vyplňte prosím všechna povinná pole.',\n leadFormGenericError: 'Něco se pokazilo. Zkuste to znovu.',\n leadFormName: 'Jméno',\n leadFormEmail: 'E-mail',\n leadFormPhone: 'Telefon',\n leadFormMessage: 'Vaše zpráva',\n poweredBy: 'Běží na {brand}',\n};\n\nexport default cs;\n","import type { UiTextKeys } from '../types';\n\nconst da: UiTextKeys = {\n sendMessage: 'Send en besked',\n send: 'Send',\n close: 'Luk',\n minimize: 'Minimer',\n maximize: 'Maksimer',\n call: 'Ring',\n listening: 'Lytter',\n processing: 'Behandler',\n talkToInterrupt: 'Tal for at afbryde',\n startVoice: 'Start stemme',\n stopVoice: 'Stop stemme',\n endCall: 'Afslut opkald',\n openChat: 'Åbn chat',\n connectionFailed: 'Forbindelse mislykkedes',\n retry: 'Prøv igen',\n loading: 'Indlæser',\n creditsExhausted: 'Kreditter opbrugt',\n creditsExhaustedDetail: 'Denne sessions kreditter er opbrugt.',\n consentTitle: 'Samtykke til privatliv',\n consentBody: 'Ved at fortsætte accepterer du indsamling og behandling af dine data som beskrevet i vores',\n consentAccept: 'Acceptér',\n consentDecline: 'Afvis',\n consentTermsLink: 'Servicevilkår',\n consentPrivacyLink: 'Privatlivspolitik',\n refresh: 'Opdater',\n ratingQuestion: 'Hvordan var denne samtale?',\n ratingThankYou: 'Tak for din feedback!',\n youEnded: 'Du afsluttede samtalen',\n agentEnded: 'Agenten afsluttede samtalen',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Fortæl os mere',\n feedbackSubtitle: 'Din feedback hjælper os med at forbedre vores service og støtte dig bedre i fremtiden.',\n feedbackPlaceholder: 'Fortæl os mere om din oplevelse…',\n submit: 'Send',\n leadFormTitle: 'Kontaktinfo',\n leadFormSuccess: 'Tak! Dine oplysninger er indsendt.',\n leadFormRequiredError: 'Udfyld venligst alle obligatoriske felter.',\n leadFormGenericError: 'Noget gik galt. Prøv igen.',\n leadFormName: 'Navn',\n leadFormEmail: 'E-mail',\n leadFormPhone: 'Telefon',\n leadFormMessage: 'Din besked',\n poweredBy: 'Drevet af {brand}',\n};\n\nexport default da;\n","import type { UiTextKeys } from '../types';\n\nconst nl: UiTextKeys = {\n sendMessage: 'Stuur een bericht',\n send: 'Verzenden',\n close: 'Sluiten',\n minimize: 'Minimaliseren',\n maximize: 'Maximaliseren',\n call: 'Bel',\n listening: 'Luistert',\n processing: 'Verwerken',\n talkToInterrupt: 'Praat om te onderbreken',\n startVoice: 'Start spraak',\n stopVoice: 'Stop spraak',\n endCall: 'Gesprek beëindigen',\n openChat: 'Chat openen',\n connectionFailed: 'Verbinding mislukt',\n retry: 'Opnieuw proberen',\n loading: 'Laden',\n creditsExhausted: 'Credits opgebruikt',\n creditsExhaustedDetail: 'De credits van deze sessie zijn opgebruikt.',\n consentTitle: 'Toestemming privacy',\n consentBody: 'Door verder te gaan, gaat u akkoord met het verzamelen en verwerken van uw gegevens zoals beschreven in onze',\n consentAccept: 'Accepteren',\n consentDecline: 'Weigeren',\n consentTermsLink: 'Servicevoorwaarden',\n consentPrivacyLink: 'Privacybeleid',\n refresh: 'Vernieuwen',\n ratingQuestion: 'Hoe was dit gesprek?',\n ratingThankYou: 'Bedankt voor je feedback!',\n youEnded: 'Je hebt het gesprek beëindigd',\n agentEnded: 'De agent heeft het gesprek beëindigd',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Vertel ons meer',\n feedbackSubtitle: 'Je feedback helpt ons onze service te verbeteren en je in de toekomst beter te ondersteunen.',\n feedbackPlaceholder: 'Vertel ons meer over je ervaring…',\n submit: 'Verzenden',\n leadFormTitle: 'Contactgegevens',\n leadFormSuccess: 'Bedankt! Je gegevens zijn verzonden.',\n leadFormRequiredError: 'Vul alle verplichte velden in.',\n leadFormGenericError: 'Er is iets misgegaan. Probeer het opnieuw.',\n leadFormName: 'Naam',\n leadFormEmail: 'E-mail',\n leadFormPhone: 'Telefoon',\n leadFormMessage: 'Uw bericht',\n poweredBy: 'Mogelijk gemaakt door {brand}',\n};\n\nexport default nl;\n","import type { UiTextKeys } from '../types';\n\nconst en: UiTextKeys = {\n sendMessage: 'Send a message',\n send: 'Send',\n close: 'Close',\n minimize: 'Minimize',\n maximize: 'Maximize',\n call: 'Call',\n listening: 'Listening',\n processing: 'Processing',\n talkToInterrupt: 'Talk to interrupt',\n startVoice: 'Start voice',\n stopVoice: 'Stop voice',\n endCall: 'End call',\n openChat: 'Open chat',\n connectionFailed: 'Connection failed',\n retry: 'Retry',\n loading: 'Loading',\n creditsExhausted: 'Credits Exhausted',\n creditsExhaustedDetail: 'This session has run out of credits.',\n consentTitle: 'Privacy Consent',\n consentBody: 'By proceeding, you agree to the collection and processing of your data as described in our',\n consentAccept: 'Accept',\n consentDecline: 'Decline',\n consentTermsLink: 'Terms of Service',\n consentPrivacyLink: 'Privacy Policy',\n refresh: 'Refresh',\n ratingQuestion: 'How was this conversation?',\n ratingThankYou: 'Thank you for your feedback!',\n youEnded: 'You ended the conversation',\n agentEnded: 'The agent ended the conversation',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Tell us more',\n feedbackSubtitle: 'Your feedback helps us improve our service and better support you in the future.',\n feedbackPlaceholder: 'Tell us more about your experience…',\n submit: 'Submit',\n leadFormTitle: 'Contact info',\n leadFormSuccess: 'Thanks! Your details have been submitted.',\n leadFormRequiredError: 'Please fill in all required fields.',\n leadFormGenericError: 'Something went wrong. Please try again.',\n leadFormName: 'Name',\n leadFormEmail: 'Email',\n leadFormPhone: 'Phone',\n leadFormMessage: 'Your message',\n poweredBy: 'Powered by {brand}',\n};\n\nexport default en;\n","import type { UiTextKeys } from '../types';\n\nconst et: UiTextKeys = {\n sendMessage: 'Saada sõnum',\n send: 'Saada',\n close: 'Sulge',\n minimize: 'Minimeeri',\n maximize: 'Maksimeeri',\n call: 'Helista',\n listening: 'Kuulab',\n processing: 'Töötleb',\n talkToInterrupt: 'Katkestamiseks räägi',\n startVoice: 'Alusta häält',\n stopVoice: 'Peata hääl',\n endCall: 'Lõpeta kõne',\n openChat: 'Ava vestlus',\n connectionFailed: 'Ühendus ebaõnnestus',\n retry: 'Proovi uuesti',\n loading: 'Laadimine',\n creditsExhausted: 'Krediidid otsas',\n creditsExhaustedDetail: 'Selle seansi krediidid on otsas.',\n consentTitle: 'Privaatsusnõusolek',\n consentBody: 'Jätkates nõustute oma andmete kogumise ja töötlemisega, nagu on kirjeldatud meie',\n consentAccept: 'Nõustu',\n consentDecline: 'Keeldu',\n consentTermsLink: 'Teenusetingimused',\n consentPrivacyLink: 'Privaatsuspoliitika',\n refresh: 'Värskenda',\n ratingQuestion: 'Milline see vestlus oli?',\n ratingThankYou: 'Täname tagasiside eest!',\n youEnded: 'Sina lõpetasid vestluse',\n agentEnded: 'Agent lõpetas vestluse',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Räägi meile rohkem',\n feedbackSubtitle: 'Sinu tagasiside aitab meil teenust parandada ja sind tulevikus paremini toetada.',\n feedbackPlaceholder: 'Räägi meile rohkem oma kogemusest…',\n submit: 'Saada',\n leadFormTitle: 'Kontaktandmed',\n leadFormSuccess: 'Aitäh! Teie andmed on esitatud.',\n leadFormRequiredError: 'Palun täitke kõik kohustuslikud väljad.',\n leadFormGenericError: 'Midagi läks valesti. Palun proovige uuesti.',\n leadFormName: 'Nimi',\n leadFormEmail: 'E-post',\n leadFormPhone: 'Telefon',\n leadFormMessage: 'Teie sõnum',\n poweredBy: 'Toetab {brand}',\n};\n\nexport default et;\n","import type { UiTextKeys } from '../types';\n\nconst fi: UiTextKeys = {\n sendMessage: 'Lähetä viesti',\n send: 'Lähetä',\n close: 'Sulje',\n minimize: 'Pienennä',\n maximize: 'Suurenna',\n call: 'Soita',\n listening: 'Kuuntelee',\n processing: 'Käsittelee',\n talkToInterrupt: 'Puhu keskeyttääksesi',\n startVoice: 'Aloita puhe',\n stopVoice: 'Lopeta puhe',\n endCall: 'Lopeta puhelu',\n openChat: 'Avaa chat',\n connectionFailed: 'Yhteys epäonnistui',\n retry: 'Yritä uudelleen',\n loading: 'Ladataan',\n creditsExhausted: 'Krediitit loppu',\n creditsExhaustedDetail: 'Tämän istunnon krediitit ovat loppuneet.',\n consentTitle: 'Yksityisyyden suostumus',\n consentBody: 'Jatkamalla hyväksyt tietojesi keräämisen ja käsittelyn kuten on kuvattu',\n consentAccept: 'Hyväksy',\n consentDecline: 'Hylkää',\n consentTermsLink: 'Käyttöehdot',\n consentPrivacyLink: 'Tietosuojakäytäntö',\n refresh: 'Päivitä',\n ratingQuestion: 'Millainen tämä keskustelu oli?',\n ratingThankYou: 'Kiitos palautteestasi!',\n youEnded: 'Sinä lopetit keskustelun',\n agentEnded: 'Agentti lopetti keskustelun',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Kerro lisää',\n feedbackSubtitle: 'Palautteesi auttaa meitä parantamaan palveluamme ja tukemaan sinua paremmin tulevaisuudessa.',\n feedbackPlaceholder: 'Kerro lisää kokemuksestasi…',\n submit: 'Lähetä',\n leadFormTitle: 'Yhteystiedot',\n leadFormSuccess: 'Kiitos! Tietosi on lähetetty.',\n leadFormRequiredError: 'Täytä kaikki pakolliset kentät.',\n leadFormGenericError: 'Jokin menikin pieleen. Yritä uudelleen.',\n leadFormName: 'Nimi',\n leadFormEmail: 'Sähköposti',\n leadFormPhone: 'Puhelin',\n leadFormMessage: 'Viestisi',\n poweredBy: 'Palvelun tarjoaa {brand}',\n};\n\nexport default fi;\n","import type { UiTextKeys } from '../types';\n\nconst fr: UiTextKeys = {\n sendMessage: 'Envoyer un message',\n send: 'Envoyer',\n close: 'Fermer',\n minimize: 'Réduire',\n maximize: 'Agrandir',\n call: 'Appeler',\n listening: 'Écoute',\n processing: 'Traitement',\n talkToInterrupt: 'Parlez pour interrompre',\n startVoice: 'Démarrer la voix',\n stopVoice: 'Arrêter la voix',\n endCall: \"Terminer l'appel\",\n openChat: 'Ouvrir le chat',\n connectionFailed: 'Connexion échouée',\n retry: 'Réessayer',\n loading: 'Chargement',\n creditsExhausted: 'Crédits épuisés',\n creditsExhaustedDetail: 'Cette session a épuisé ses crédits.',\n consentTitle: 'Consentement à la confidentialité',\n consentBody: 'En continuant, vous acceptez la collecte et le traitement de vos données comme décrit dans nos',\n consentAccept: 'Accepter',\n consentDecline: 'Refuser',\n consentTermsLink: 'Conditions d\\'utilisation',\n consentPrivacyLink: 'Politique de confidentialité',\n refresh: 'Actualiser',\n ratingQuestion: 'Comment s’est passée cette conversation ?',\n ratingThankYou: 'Merci pour votre retour !',\n youEnded: 'Vous avez terminé la conversation',\n agentEnded: 'L’agent a terminé la conversation',\n sessionIdLabel: 'ID :',\n tellUsMore: 'Dites-nous en plus',\n feedbackSubtitle: 'Votre retour nous aide à améliorer notre service et à mieux vous accompagner à l’avenir.',\n feedbackPlaceholder: 'Dites-nous en plus sur votre expérience…',\n submit: 'Envoyer',\n leadFormTitle: 'Coordonnées',\n leadFormSuccess: 'Merci ! Vos informations ont été envoyées.',\n leadFormRequiredError: 'Veuillez remplir tous les champs obligatoires.',\n leadFormGenericError: 'Une erreur est survenue. Veuillez réessayer.',\n leadFormName: 'Nom',\n leadFormEmail: 'E-mail',\n leadFormPhone: 'Téléphone',\n leadFormMessage: 'Votre message',\n poweredBy: 'Propulsé par {brand}',\n};\n\nexport default fr;\n","import type { UiTextKeys } from '../types';\n\nconst gl: UiTextKeys = {\n sendMessage: 'Enviar unha mensaxe',\n send: 'Enviar',\n close: 'Pechar',\n minimize: 'Minimizar',\n maximize: 'Maximizar',\n call: 'Chamar',\n listening: 'Escoitando',\n processing: 'Procesando',\n talkToInterrupt: 'Fale para interromper',\n startVoice: 'Iniciar voz',\n stopVoice: 'Deter voz',\n endCall: 'Finalizar chamada',\n openChat: 'Abrir chat',\n connectionFailed: 'Fallou a conexión',\n retry: 'Tentar de novo',\n loading: 'Cargando',\n creditsExhausted: 'Créditos esgotados',\n creditsExhaustedDetail: 'Esta sesión esgotou os seus créditos.',\n consentTitle: 'Consentimento de Privacidade',\n consentBody: 'Ao continuar, acepta a recollida e o procesamento dos seus datos tal como se describe nos nosos',\n consentAccept: 'Aceptar',\n consentDecline: 'Rexeitar',\n consentTermsLink: 'Termos do servizo',\n consentPrivacyLink: 'Política de privacidade',\n refresh: 'Actualizar',\n ratingQuestion: 'Como foi esta conversa?',\n ratingThankYou: 'Grazas polos teus comentarios!',\n youEnded: 'Ti finalizaches a conversa',\n agentEnded: 'O axente finalizou a conversa',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Cóntanos máis',\n feedbackSubtitle: 'Os teus comentarios axúdannos a mellorar o servizo e a apoiarte mellor no futuro.',\n feedbackPlaceholder: 'Cóntanos máis sobre a túa experiencia…',\n submit: 'Enviar',\n leadFormTitle: 'Información de contacto',\n leadFormSuccess: 'Grazas! Os teus datos foron enviados.',\n leadFormRequiredError: 'Cubra todos os campos obrigatorios.',\n leadFormGenericError: 'Algo saíu mal. Téntao de novo.',\n leadFormName: 'Nome',\n leadFormEmail: 'Correo electrónico',\n leadFormPhone: 'Teléfono',\n leadFormMessage: 'A túa mensaxe',\n poweredBy: 'Desenvolvido por {brand}',\n};\n\nexport default gl;\n","import type { UiTextKeys } from '../types';\n\nconst de: UiTextKeys = {\n sendMessage: 'Nachricht senden',\n send: 'Senden',\n close: 'Schließen',\n minimize: 'Minimieren',\n maximize: 'Maximieren',\n call: 'Anrufen',\n listening: 'Hört zu',\n processing: 'Verarbeitung',\n talkToInterrupt: 'Sprechen zum Unterbrechen',\n startVoice: 'Sprache starten',\n stopVoice: 'Sprache stoppen',\n endCall: 'Anruf beenden',\n openChat: 'Chat öffnen',\n connectionFailed: 'Verbindung fehlgeschlagen',\n retry: 'Erneut versuchen',\n loading: 'Wird geladen',\n creditsExhausted: 'Guthaben aufgebraucht',\n creditsExhaustedDetail: 'Das Guthaben dieser Sitzung ist aufgebraucht.',\n consentTitle: 'Datenschutz-Einwilligung',\n consentBody: 'Wenn Sie fortfahren, stimmen Sie der Erhebung und Verarbeitung Ihrer Daten wie in unseren beschrieben zu',\n consentAccept: 'Akzeptieren',\n consentDecline: 'Ablehnen',\n consentTermsLink: 'Nutzungsbedingungen',\n consentPrivacyLink: 'Datenschutzerklärung',\n refresh: 'Aktualisieren',\n ratingQuestion: 'Wie war dieses Gespräch?',\n ratingThankYou: 'Danke für dein Feedback!',\n youEnded: 'Du hast das Gespräch beendet',\n agentEnded: 'Der Agent hat das Gespräch beendet',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Erzähl uns mehr',\n feedbackSubtitle: 'Dein Feedback hilft uns, unseren Service zu verbessern und dich in Zukunft besser zu unterstützen.',\n feedbackPlaceholder: 'Erzähl uns mehr über deine Erfahrung…',\n submit: 'Senden',\n leadFormTitle: 'Kontaktinformationen',\n leadFormSuccess: 'Danke! Ihre Angaben wurden übermittelt.',\n leadFormRequiredError: 'Bitte füllen Sie alle Pflichtfelder aus.',\n leadFormGenericError: 'Etwas ist schiefgelaufen. Bitte versuchen Sie es erneut.',\n leadFormName: 'Name',\n leadFormEmail: 'E-Mail',\n leadFormPhone: 'Telefon',\n leadFormMessage: 'Ihre Nachricht',\n poweredBy: 'Bereitgestellt von {brand}',\n};\n\nexport default de;\n","import type { UiTextKeys } from '../types';\n\nconst el: UiTextKeys = {\n sendMessage: 'Αποστολή μηνύματος',\n send: 'Αποστολή',\n close: 'Κλείσιμο',\n minimize: 'Ελαχιστοποίηση',\n maximize: 'Μεγιστοποίηση',\n call: 'Κλήση',\n listening: 'Ακούει',\n processing: 'Επεξεργασία',\n talkToInterrupt: 'Μιλήστε για διακοπή',\n startVoice: 'Έναρξη φωνής',\n stopVoice: 'Διακοπή φωνής',\n endCall: 'Τερματισμός κλήσης',\n openChat: 'Άνοιγμα συνομιλίας',\n connectionFailed: 'Η σύνδεση απέτυχε',\n retry: 'Επανάληψη',\n loading: 'Φόρτωση',\n creditsExhausted: 'Οι πιστώσεις εξαντλήθηκαν',\n creditsExhaustedDetail: 'Οι πιστώσεις αυτής της συνεδρίας εξαντλήθηκαν.',\n consentTitle: 'Συγκατάθεση Απορρήτου',\n consentBody: 'Με τη συνέχιση, συμφωνείτε με τη συλλογή και επεξεργασία των δεδομένων σας όπως περιγράφεται στους',\n consentAccept: 'Αποδοχή',\n consentDecline: 'Απόρριψη',\n consentTermsLink: 'Όροι Υπηρεσίας',\n consentPrivacyLink: 'Πολιτική Απορρήτου',\n refresh: 'Ανανέωση',\n ratingQuestion: 'Πώς ήταν αυτή η συνομιλία;',\n ratingThankYou: 'Ευχαριστούμε για τα σχόλιά σας!',\n youEnded: 'Εσείς τερματίσατε τη συνομιλία',\n agentEnded: 'Ο πράκτορας τερμάτισε τη συνομιλία',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Πείτε μας περισσότερα',\n feedbackSubtitle: 'Τα σχόλιά σας μας βοηθούν να βελτιώσουμε την υπηρεσία μας και να σας υποστηρίξουμε καλύτερα στο μέλλον.',\n feedbackPlaceholder: 'Πείτε μας περισσότερα για την εμπειρία σας…',\n submit: 'Υποβολή',\n leadFormTitle: 'Στοιχεία επικοινωνίας',\n leadFormSuccess: 'Ευχαριστούμε! Τα στοιχεία σας υποβλήθηκαν.',\n leadFormRequiredError: 'Συμπληρώστε όλα τα υποχρεωτικά πεδία.',\n leadFormGenericError: 'Κάτι πήγε στραβά. Δοκιμάστε ξανά.',\n leadFormName: 'Όνομα',\n leadFormEmail: 'E-mail',\n leadFormPhone: 'Τηλέφωνο',\n leadFormMessage: 'Το μήνυμά σας',\n poweredBy: 'Με την υποστήриξη του {brand}',\n};\n\nexport default el;\n","import type { UiTextKeys } from '../types';\n\nconst gu: UiTextKeys = {\n sendMessage: 'સંદેશ મોકલો',\n send: 'મોકલો',\n close: 'બંધ કરો',\n minimize: 'નાનું કરો',\n maximize: 'મોટું કરો',\n call: 'કૉલ કરો',\n listening: 'સાંભળી રહ્યું છે',\n processing: 'પ્રક્રિયા ચાલુ છે',\n talkToInterrupt: 'રોકવા માટે બોલો',\n startVoice: 'વૉઇસ શરૂ કરો',\n stopVoice: 'વૉઇસ બંધ કરો',\n endCall: 'કૉલ સમાપ્ત કરો',\n openChat: 'ચેટ ખોલો',\n connectionFailed: 'કનેક્શન નિષ્ફળ',\n retry: 'ફરી પ્રયાસ કરો',\n loading: 'લોડ થઈ રહ્યું છે',\n creditsExhausted: 'ક્રેડિટ સમાપ્ત',\n creditsExhaustedDetail: 'આ સત્રની ક્રેડિટ સમાપ્ત થઈ ગઈ છે.',\n consentTitle: 'ગોપનીયતા સંમતિ',\n consentBody: 'આગળ વધીને, તમે અમારા દ્વારા વર્ણવ્યા મુજબ તમારા ડેટાના સંગ્રહ અને પ્રક્રિયા માટે સંમત થાઓ છો',\n consentAccept: 'સ્વીકારો',\n consentDecline: 'નકારો',\n consentTermsLink: 'સેવાની શરતો',\n consentPrivacyLink: 'ગોપનીયતા નીતિ',\n refresh: 'રિફ્રેશ કરો',\n ratingQuestion: 'આ વાતચીત કેવી રહી?',\n ratingThankYou: 'તમારા પ્રતિસાદ બદલ આભાર!',\n youEnded: 'તમે વાતચીત સમાપ્ત કરી',\n agentEnded: 'એજન્ટે વાતચીત સમાપ્ત કરી',\n sessionIdLabel: 'ID:',\n tellUsMore: 'અમને વધુ જણાવો',\n feedbackSubtitle: 'તમારો પ્રતિસાદ અમને અમારી સેવા સુધારવામાં અને ભવિષ્યમાં તમને વધુ સારી રીતે સહાય કરવામાં મદદ કરે છે.',\n feedbackPlaceholder: 'તમારા અનુભવ વિશે અમને વધુ જણાવો…',\n submit: 'સબમિટ કરો',\n leadFormTitle: 'સંપર્ક માહિતી',\n leadFormSuccess: 'આભાર! તમારી વિગતો સબમિટ થઈ ગઈ છે.',\n leadFormRequiredError: 'કૃપા કરીને બધા જરૂરી ફીલ્ડ ભરો.',\n leadFormGenericError: 'કંઈક ખોટું થયું. કૃપા કરી ફરી પ્રયાસ કરો.',\n leadFormName: 'નામ',\n leadFormEmail: 'ઇમેઇલ',\n leadFormPhone: 'ફોન',\n leadFormMessage: 'તમારો સંદેશ',\n poweredBy: 'સંચાલિત {brand}',\n};\n\nexport default gu;\n","import type { UiTextKeys } from '../types';\n\nconst hi: UiTextKeys = {\n sendMessage: 'संदेश भेजें',\n send: 'भेजें',\n close: 'बंद करें',\n minimize: 'छोटा करें',\n maximize: 'बड़ा करें',\n call: 'कॉल करें',\n listening: 'सुन रहा है',\n processing: 'प्रोसेस हो रहा है',\n talkToInterrupt: 'रोकने के लिए बोलें',\n startVoice: 'वॉइस शुरू करें',\n stopVoice: 'वॉइस रोकें',\n endCall: 'कॉल समाप्त करें',\n openChat: 'चैट खोलें',\n connectionFailed: 'कनेक्शन विफल',\n retry: 'फिर कोशिश करें',\n loading: 'लोड हो रहा है',\n creditsExhausted: 'क्रेडिट समाप्त',\n creditsExhaustedDetail: 'इस सत्र के क्रेडिट समाप्त हो गए हैं।',\n consentTitle: 'गोपनीयता सहमति',\n consentBody: 'आगे बढ़ने पर, आप हमारे द्वारा वर्णित अनुसार अपने डेटा के संग्रह और प्रसंस्करण के लिए सहमत होते हैं',\n consentAccept: 'स्वीकार करें',\n consentDecline: 'अस्वीकार करें',\n consentTermsLink: 'सेवा की शर्तें',\n consentPrivacyLink: 'गोपनीयता नीति',\n refresh: 'रिफ्रेश करें',\n ratingQuestion: 'यह बातचीत कैसी रही?',\n ratingThankYou: 'आपकी प्रतिक्रिया के लिए धन्यवाद!',\n youEnded: 'आपने बातचीत समाप्त की',\n agentEnded: 'एजेंट ने बातचीत समाप्त की',\n sessionIdLabel: 'आईडी:',\n tellUsMore: 'हमें और बताएं',\n feedbackSubtitle: 'आपकी प्रतिक्रिया हमें अपनी सेवा बेहतर बनाने और भविष्य में आपकी बेहतर सहायता करने में मदद करती है।',\n feedbackPlaceholder: 'अपने अनुभव के बारे में हमें और बताएं…',\n submit: 'सबमिट करें',\n leadFormTitle: 'संपर्क जानकारी',\n leadFormSuccess: 'धन्यवाद! आपकी जानकारी सबमिट कर दी गई है।',\n leadFormRequiredError: 'कृपया सभी आवश्यक फ़ील्ड भरें।',\n leadFormGenericError: 'कुछ गलत हो गया। कृपया पुनः प्रयास करें।',\n leadFormName: 'नाम',\n leadFormEmail: 'ईमेल',\n leadFormPhone: 'फ़ोन',\n leadFormMessage: 'आपका संदेश',\n poweredBy: 'द्वारा संचालित {brand}',\n};\n\nexport default hi;\n","import type { UiTextKeys } from '../types';\n\nconst hu: UiTextKeys = {\n sendMessage: 'Üzenet küldése',\n send: 'Küldés',\n close: 'Bezárás',\n minimize: 'Kis méret',\n maximize: 'Teljes méret',\n call: 'Hívás',\n listening: 'Figyel',\n processing: 'Feldolgozás',\n talkToInterrupt: 'Beszéljen a megszakításhoz',\n startVoice: 'Hang indítása',\n stopVoice: 'Hang leállítása',\n endCall: 'Hívás befejezése',\n openChat: 'Csevegés megnyitása',\n connectionFailed: 'A kapcsolat sikertelen',\n retry: 'Újrapróbálkozás',\n loading: 'Betöltés',\n creditsExhausted: 'Kreditek elfogytak',\n creditsExhaustedDetail: 'Ennek a munkamenetnek a kreditjei elfogytak.',\n consentTitle: 'Adatvédelmi hozzájárulás',\n consentBody: 'A folytatással Ön hozzájárul adatainak gyűjtéséhez és feldolgozásához a mi',\n consentAccept: 'Elfogadás',\n consentDecline: 'Elutasítás',\n consentTermsLink: 'Szolgáltatási feltételek',\n consentPrivacyLink: 'Adatvédelmi irányelvek',\n refresh: 'Frissítés',\n ratingQuestion: 'Milyen volt ez a beszélgetés?',\n ratingThankYou: 'Köszönjük a visszajelzését!',\n youEnded: 'Ön fejezte be a beszélgetést',\n agentEnded: 'Az ügynök fejezte be a beszélgetést',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Mondjon többet',\n feedbackSubtitle: 'Visszajelzése segít nekünk fejleszteni szolgáltatásunkat, és a jövőben jobban támogatni Önt.',\n feedbackPlaceholder: 'Mondjon többet az élményéről…',\n submit: 'Küldés',\n leadFormTitle: 'Elérhetőségi adatok',\n leadFormSuccess: 'Köszönjük! Az adatait elküldtük.',\n leadFormRequiredError: 'Kérjük, töltse ki az összes kötelező mezőt.',\n leadFormGenericError: 'Valami hiba történt. Kérjük, próbálja újra.',\n leadFormName: 'Név',\n leadFormEmail: 'E-mail',\n leadFormPhone: 'Telefon',\n leadFormMessage: 'Üzenete',\n poweredBy: 'Működteti a(z) {brand}',\n};\n\nexport default hu;\n","import type { UiTextKeys } from '../types';\n\nconst id: UiTextKeys = {\n sendMessage: 'Kirim pesan',\n send: 'Kirim',\n close: 'Tutup',\n minimize: 'Minimalkan',\n maximize: 'Maksimalkan',\n call: 'Panggil',\n listening: 'Mendengarkan',\n processing: 'Memproses',\n talkToInterrupt: 'Bicara untuk menyela',\n startVoice: 'Mulai suara',\n stopVoice: 'Hentikan suara',\n endCall: 'Akhiri panggilan',\n openChat: 'Buka obrolan',\n connectionFailed: 'Koneksi gagal',\n retry: 'Coba lagi',\n loading: 'Memuat',\n creditsExhausted: 'Kredit Habis',\n creditsExhaustedDetail: 'Kredit sesi ini telah habis.',\n consentTitle: 'Persetujuan Privasi',\n consentBody: 'Dengan melanjutkan, Anda menyetujui pengumpulan dan pemrosesan data Anda seperti yang dijelaskan dalam',\n consentAccept: 'Terima',\n consentDecline: 'Tolak',\n consentTermsLink: 'Ketentuan Layanan',\n consentPrivacyLink: 'Kebijakan Privasi',\n refresh: 'Segarkan',\n ratingQuestion: 'Bagaimana percakapan ini?',\n ratingThankYou: 'Terima kasih atas masukan Anda!',\n youEnded: 'Anda mengakhiri percakapan',\n agentEnded: 'Agen mengakhiri percakapan',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Ceritakan lebih banyak',\n feedbackSubtitle: 'Masukan Anda membantu kami meningkatkan layanan dan mendukung Anda lebih baik di masa depan.',\n feedbackPlaceholder: 'Ceritakan lebih banyak tentang pengalaman Anda…',\n submit: 'Kirim',\n leadFormTitle: 'Informasi kontak',\n leadFormSuccess: 'Terima kasih! Detail Anda telah dikirim.',\n leadFormRequiredError: 'Harap isi semua kolom yang wajib diisi.',\n leadFormGenericError: 'Terjadi kesalahan. Silakan coba lagi.',\n leadFormName: 'Nama',\n leadFormEmail: 'Email',\n leadFormPhone: 'Telepon',\n leadFormMessage: 'Pesan Anda',\n poweredBy: 'Didukung oleh {brand}',\n};\n\nexport default id;\n","import type { UiTextKeys } from '../types';\n\nconst it: UiTextKeys = {\n sendMessage: 'Invia un messaggio',\n send: 'Invia',\n close: 'Chiudi',\n minimize: 'Riduci',\n maximize: 'Ingrandisci',\n call: 'Chiama',\n listening: 'In ascolto',\n processing: 'Elaborazione',\n talkToInterrupt: 'Parla per interrompere',\n startVoice: 'Avvia voce',\n stopVoice: 'Ferma voce',\n endCall: 'Termina chiamata',\n openChat: 'Apri chat',\n connectionFailed: 'Connessione non riuscita',\n retry: 'Riprova',\n loading: 'Caricamento',\n creditsExhausted: 'Crediti esauriti',\n creditsExhaustedDetail: 'Questa sessione ha esaurito i crediti.',\n consentTitle: 'Consenso alla privacy',\n consentBody: 'Proseguendo, accetti la raccolta e il trattamento dei tuoi dati come descritto nei nostri',\n consentAccept: 'Accetta',\n consentDecline: 'Rifiuta',\n consentTermsLink: 'Termini di servizio',\n consentPrivacyLink: 'Informativa sulla privacy',\n refresh: 'Aggiorna',\n ratingQuestion: 'Com’è andata questa conversazione?',\n ratingThankYou: 'Grazie per il tuo feedback!',\n youEnded: 'Hai terminato tu la conversazione',\n agentEnded: 'L’agente ha terminato la conversazione',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Dicci di più',\n feedbackSubtitle: 'Il tuo feedback ci aiuta a migliorare il servizio e a supportarti meglio in futuro.',\n feedbackPlaceholder: 'Raccontaci di più sulla tua esperienza…',\n submit: 'Invia',\n leadFormTitle: 'Informazioni di contatto',\n leadFormSuccess: 'Grazie! I tuoi dati sono stati inviati.',\n leadFormRequiredError: 'Compila tutti i campi obbligatori.',\n leadFormGenericError: 'Qualcosa è andato storto. Riprova.',\n leadFormName: 'Nome',\n leadFormEmail: 'E-mail',\n leadFormPhone: 'Telefono',\n leadFormMessage: 'Il tuo messaggio',\n poweredBy: 'Offerto da {brand}',\n};\n\nexport default it;\n","import type { UiTextKeys } from '../types';\n\nconst ja: UiTextKeys = {\n sendMessage: 'メッセージを送信',\n send: '送信',\n close: '閉じる',\n minimize: '最小化',\n maximize: '最大化',\n call: '通話',\n listening: '聞き取り中',\n processing: '処理中',\n talkToInterrupt: '話して中断',\n startVoice: '音声を開始',\n stopVoice: '音声を停止',\n endCall: '通話終了',\n openChat: 'チャットを開く',\n connectionFailed: '接続に失敗しました',\n retry: '再試行',\n loading: '読み込み中',\n creditsExhausted: 'クレジット切れ',\n creditsExhaustedDetail: 'このセッションのクレジットがなくなりました。',\n consentTitle: 'プライバシー同意',\n consentBody: '続行すると、当社に記載されているように、お客様のデータの収集と処理に同意したことになります。',\n consentAccept: '同意する',\n consentDecline: '拒否する',\n consentTermsLink: '利用規約',\n consentPrivacyLink: 'プライバシーポリシー',\n refresh: 'リフレッシュ',\n ratingQuestion: 'この会話はいかがでしたか?',\n ratingThankYou: 'フィードバックをありがとうございます!',\n youEnded: 'あなたが会話を終了しました',\n agentEnded: 'エージェントが会話を終了しました',\n sessionIdLabel: 'ID:',\n tellUsMore: '詳しく教えてください',\n feedbackSubtitle: 'いただいたフィードバックは、サービスの改善と今後のより良いサポートに役立ちます。',\n feedbackPlaceholder: 'ご体験について詳しくお聞かせください…',\n submit: '送信',\n leadFormTitle: '連絡先情報',\n leadFormSuccess: 'ありがとうございます!情報が送信されました。',\n leadFormRequiredError: '必須項目をすべて入力してください。',\n leadFormGenericError: '問題が発生しました。もう一度お試しください。',\n leadFormName: 'お名前',\n leadFormEmail: 'メールアドレス',\n leadFormPhone: '電話番号',\n leadFormMessage: 'メッセージ',\n poweredBy: '提供: {brand}',\n};\n\nexport default ja;\n","import type { UiTextKeys } from '../types';\n\nconst kn: UiTextKeys = {\n sendMessage: 'ಸಂದೇಶ ಕಳುಹಿಸಿ',\n send: 'ಕಳುಹಿಸಿ',\n close: 'ಮುಚ್ಚಿ',\n minimize: 'ಚಿಕ್ಕದಾಗಿಸು',\n maximize: 'ದೊಡ್ಡದಾಗಿಸು',\n call: 'ಕರೆ ಮಾಡಿ',\n listening: 'ಕೇಳುತ್ತಿದೆ',\n processing: 'ಪ್ರಕ್ರಿಯೆಗೊಳಿಸುತ್ತಿದೆ',\n talkToInterrupt: 'ತಡೆಯಲು ಮಾತನಾಡಿ',\n startVoice: 'ಧ್ವನಿ ಪ್ರಾರಂಭಿಸಿ',\n stopVoice: 'ಧ್ವನಿ ನಿಲ್ಲಿಸಿ',\n endCall: 'ಕರೆ ಕೊನೆಗೊಳಿಸಿ',\n openChat: 'ಚಾಟ್ ತೆರೆಯಿರಿ',\n connectionFailed: 'ಸಂಪರ್ಕ ವಿಫಲವಾಗಿದೆ',\n retry: 'ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ',\n loading: 'ಲೋಡ್ ಆಗುತ್ತಿದೆ',\n creditsExhausted: 'ಕ್ರೆಡಿಟ್‌ಗಳು ಮುಗಿದಿವೆ',\n creditsExhaustedDetail: 'ಈ ಸೆಷನ್‌ನ ಕ್ರೆಡಿಟ್‌ಗಳು ಮುಗಿದಿವೆ.',\n consentTitle: 'ಗೌಪ್ಯತೆ ಒಪ್ಪಿಗೆ',\n consentBody: 'ಮುಂದುವರಿಯುವ ಮೂಲಕ, ನಮ್ಮಲ್ಲಿ ವಿವರಿಸಿದಂತೆ ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಸಂಗ್ರಹಿಸುವುದು ಮತ್ತು ಸಂಸ್ಕರಿಸುವುದನ್ನು ನೀವು ಒಪ್ಪುತ್ತೀರಿ',\n consentAccept: 'ಸ್ವೀಕರಿಸಿ',\n consentDecline: 'ನಿರಾಕರಿಸಿ',\n consentTermsLink: 'ಸೇವೆಯ ನಿಯಮಗಳು',\n consentPrivacyLink: 'ಗೌಪ್ಯತೆ ನೀತಿ',\n refresh: 'ರಿಫ್ರೆಶ್ ಮಾಡಿ',\n ratingQuestion: 'ಈ ಸಂಭಾಷಣೆ ಹೇಗಿತ್ತು?',\n ratingThankYou: 'ನಿಮ್ಮ ಪ್ರತಿಕ್ರಿಯೆಗೆ ಧನ್ಯವಾದಗಳು!',\n youEnded: 'ನೀವು ಸಂಭಾಷಣೆಯನ್ನು ಕೊನೆಗೊಳಿಸಿದ್ದೀರಿ',\n agentEnded: 'ಏಜೆಂಟ್ ಸಂಭಾಷಣೆಯನ್ನು ಕೊನೆಗೊಳಿಸಿದ್ದಾರೆ',\n sessionIdLabel: 'ID:',\n tellUsMore: 'ನಮಗೆ ಇನ್ನಷ್ಟು ತಿಳಿಸಿ',\n feedbackSubtitle: 'ನಿಮ್ಮ ಪ್ರತಿಕ್ರಿಯೆ ನಮ್ಮ ಸೇವೆಯನ್ನು ಸುಧಾರಿಸಲು ಮತ್ತು ಭವಿಷ್ಯದಲ್ಲಿ ನಿಮಗೆ ಉತ್ತಮ ಬೆಂಬಲ ನೀಡಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ.',\n feedbackPlaceholder: 'ನಿಮ್ಮ ಅನುಭವದ ಬಗ್ಗೆ ನಮಗೆ ಇನ್ನಷ್ಟು ತಿಳಿಸಿ…',\n submit: 'ಸಲ್ಲಿಸಿ',\n leadFormTitle: 'ಸಂಪರ್ಕ ಮಾಹಿತಿ',\n leadFormSuccess: 'ಧನ್ಯವಾದಗಳು! ನಿಮ್ಮ ವಿವರಗಳನ್ನು ಸಲ್ಲಿಸಲಾಗಿದೆ.',\n leadFormRequiredError: 'ದಯವಿಟ್ಟು ಎಲ್ಲಾ ಅಗತ್ಯ ಕ್ಷೇತ್ರಗಳನ್ನು ಭರ್ತಿ ಮಾಡಿ.',\n leadFormGenericError: 'ಏನೋ ತಪ್ಪಾಗಿದೆ. ದಯವಿಟ್ಟು ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ.',\n leadFormName: 'ಹೆಸರು',\n leadFormEmail: 'ಇಮೇಲ್',\n leadFormPhone: 'ಫೋನ್',\n leadFormMessage: 'ನಿಮ್ಮ ಸಂದೇಶ',\n poweredBy: 'ನಡೆಸುವವರು {brand}',\n};\n\nexport default kn;\n","import type { UiTextKeys } from '../types';\n\nconst kk: UiTextKeys = {\n sendMessage: 'Хабарлама жіберу',\n send: 'Жіберу',\n close: 'Жабу',\n minimize: 'Кішірейту',\n maximize: 'Үлкейту',\n call: 'Қоңырау шалу',\n listening: 'Тыңдауда',\n processing: 'Өңдеу',\n talkToInterrupt: 'Үзу үшін сөйлеңіз',\n startVoice: 'Дауысты бастау',\n stopVoice: 'Дауысты тоқтату',\n endCall: 'Қоңырауды аяқтау',\n openChat: 'Чатты ашу',\n connectionFailed: 'Қосылым сәтсіз аяқталды',\n retry: 'Қайталау',\n loading: 'Жүктелуде',\n creditsExhausted: 'Кредиттер таусылды',\n creditsExhaustedDetail: 'Бұл сессияның кредиттері таусылды.',\n consentTitle: 'Құпиялылық келісімі',\n consentBody: 'Жалғастыру арқылы сіз деректеріңізді жинауға және өңдеуге келісім бересіз',\n consentAccept: 'Қабылдау',\n consentDecline: 'Қабылдамау',\n consentTermsLink: 'Қызмет көрсету шарттары',\n consentPrivacyLink: 'Құпиялылық саясаты',\n refresh: 'Жаңарту',\n ratingQuestion: 'Бұл әңгіме қалай өтті?',\n ratingThankYou: 'Пікіріңіз үшін рахмет!',\n youEnded: 'Әңгімені сіз аяқтадыңыз',\n agentEnded: 'Агент әңгімені аяқтады',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Бізге көбірек айтыңыз',\n feedbackSubtitle: 'Пікіріңіз бізге қызметімізді жақсартуға және болашақта сізге жақсырақ қолдау көрсетуге көмектеседі.',\n feedbackPlaceholder: 'Тәжірибеңіз туралы бізге көбірек айтыңыз…',\n submit: 'Жіберу',\n leadFormTitle: 'Байланыс ақпараты',\n leadFormSuccess: 'Рахмет! Сіздің деректеріңіз жіберілді.',\n leadFormRequiredError: 'Барлық міндетті жолдарды толтырыңыз.',\n leadFormGenericError: 'Бірдеңе қате кетті. Қайталап көріңіз.',\n leadFormName: 'Аты',\n leadFormEmail: 'Электрондық пошта',\n leadFormPhone: 'Телефон',\n leadFormMessage: 'Сіздің хабарламаңыз',\n poweredBy: 'Қолдаушы {brand}',\n};\n\nexport default kk;\n","import type { UiTextKeys } from '../types';\n\nconst ko: UiTextKeys = {\n sendMessage: '메시지 보내기',\n send: '보내기',\n close: '닫기',\n minimize: '최소화',\n maximize: '최대화',\n call: '전화',\n listening: '듣는 중',\n processing: '처리 중',\n talkToInterrupt: '말해서 중단',\n startVoice: '음성 시작',\n stopVoice: '음성 중지',\n endCall: '통화 종료',\n openChat: '채팅 열기',\n connectionFailed: '연결 실패',\n retry: '다시 시도',\n loading: '로딩 중',\n creditsExhausted: '크레딧 소진',\n creditsExhaustedDetail: '이 세션의 크레딧이 모두 소진되었습니다.',\n consentTitle: '개인정보 동의',\n consentBody: '계속 진행하면 당사에 설명된 대로 데이터 수집 및 처리에 동의하게 됩니다.',\n consentAccept: '동의',\n consentDecline: '거부',\n consentTermsLink: '서비스 이용약관',\n consentPrivacyLink: '개인정보 처리방침',\n refresh: '새로고침',\n ratingQuestion: '이 대화는 어떠셨나요?',\n ratingThankYou: '의견 주셔서 감사합니다!',\n youEnded: '회원님이 대화를 종료했습니다',\n agentEnded: '상담원이 대화를 종료했습니다',\n sessionIdLabel: 'ID:',\n tellUsMore: '더 알려주세요',\n feedbackSubtitle: '의견은 서비스를 개선하고 앞으로 더 나은 지원을 제공하는 데 도움이 됩니다.',\n feedbackPlaceholder: '경험에 대해 더 알려주세요…',\n submit: '제출',\n leadFormTitle: '연락처 정보',\n leadFormSuccess: '감사합니다! 정보가 제출되었습니다.',\n leadFormRequiredError: '필수 항목을 모두 입력해 주세요.',\n leadFormGenericError: '문제가 발생했습니다. 다시 시도해 주세요.',\n leadFormName: '이름',\n leadFormEmail: '이메일',\n leadFormPhone: '전화번호',\n leadFormMessage: '메시지',\n poweredBy: '제공: {brand}',\n};\n\nexport default ko;\n","import type { UiTextKeys } from '../types';\n\nconst lv: UiTextKeys = {\n sendMessage: 'Sūtīt ziņojumu',\n send: 'Sūtīt',\n close: 'Aizvērt',\n minimize: 'Minimizēt',\n maximize: 'Maksimizēt',\n call: 'Zvanīt',\n listening: 'Klausās',\n processing: 'Apstrādā',\n talkToInterrupt: 'Runājiet, lai pārtrauktu',\n startVoice: 'Sākt balsi',\n stopVoice: 'Pārtraukt balsi',\n endCall: 'Beigt zvanu',\n openChat: 'Atvērt tērzēšanu',\n connectionFailed: 'Savienojums neizdevās',\n retry: 'Mēģināt vēlreiz',\n loading: 'Ielādē',\n creditsExhausted: 'Kredīti izsmelti',\n creditsExhaustedDetail: 'Šīs sesijas kredīti ir izsmelti.',\n consentTitle: 'Piekrišana privātumam',\n consentBody: 'Turpinot, jūs piekrītat savu datu vākšanai un apstrādei, kā aprakstīts mūsu',\n consentAccept: 'Piekrist',\n consentDecline: 'Noraidīt',\n consentTermsLink: 'Pakalpojuma noteikumi',\n consentPrivacyLink: 'Privātuma politika',\n refresh: 'Atjaunot',\n ratingQuestion: 'Kāda bija šī saruna?',\n ratingThankYou: 'Paldies par jūsu atsauksmi!',\n youEnded: 'Jūs pabeidzāt sarunu',\n agentEnded: 'Aģents pabeidza sarunu',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Pastāstiet mums vairāk',\n feedbackSubtitle: 'Jūsu atsauksme palīdz mums uzlabot pakalpojumu un nākotnē jūs labāk atbalstīt.',\n feedbackPlaceholder: 'Pastāstiet mums vairāk par savu pieredzi…',\n submit: 'Iesniegt',\n leadFormTitle: 'Kontaktinformācija',\n leadFormSuccess: 'Paldies! Jūsu dati ir iesniegti.',\n leadFormRequiredError: 'Lūdzu, aizpildiet visus obligātos laukus.',\n leadFormGenericError: 'Kaut kas noticis nepareizi. Lūdzu, mēģiniet vēlreiz.',\n leadFormName: 'Vārds',\n leadFormEmail: 'E-pasts',\n leadFormPhone: 'Tālrunis',\n leadFormMessage: 'Jūsu ziņojums',\n poweredBy: 'Nodrošina {brand}',\n};\n\nexport default lv;\n","import type { UiTextKeys } from '../types';\n\nconst lt: UiTextKeys = {\n sendMessage: 'Siųsti žinutę',\n send: 'Siųsti',\n close: 'Uždaryti',\n minimize: 'Sumažinti',\n maximize: 'Padidinti',\n call: 'Skambinti',\n listening: 'Klausosi',\n processing: 'Apdorojama',\n talkToInterrupt: 'Kalbėkite, kad pertrauktumėte',\n startVoice: 'Pradėti balsą',\n stopVoice: 'Sustabdyti balsą',\n endCall: 'Baigti skambutį',\n openChat: 'Atidaryti pokalbį',\n connectionFailed: 'Ryšys nepavyko',\n retry: 'Bandyti dar kartą',\n loading: 'Įkeliama',\n creditsExhausted: 'Kreditai išnaudoti',\n creditsExhaustedDetail: 'Šios sesijos kreditai išnaudoti.',\n consentTitle: 'Sutikimas dėl privatumo',\n consentBody: 'Tęsdami sutinkate, kad jūsų duomenys būtų renkami ir tvarkomi, kaip aprašyta mūsų',\n consentAccept: 'Sutikti',\n consentDecline: 'Atmesti',\n consentTermsLink: 'Paslaugų teikimo sąlygos',\n consentPrivacyLink: 'Privatumo politika',\n refresh: 'Atnaujinti',\n ratingQuestion: 'Kokie buvo šie pokalbiai?',\n ratingThankYou: 'Ačiū už jūsų atsiliepimą!',\n youEnded: 'Jūs užbaigėte pokalbį',\n agentEnded: 'Agentas užbaigė pokalbį',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Papasakokite daugiau',\n feedbackSubtitle: 'Jūsų atsiliepimas padeda mums tobulinti paslaugą ir ateityje geriau jus aptarnauti.',\n feedbackPlaceholder: 'Papasakokite daugiau apie savo patirtį…',\n submit: 'Pateikti',\n leadFormTitle: 'Kontaktinė informacija',\n leadFormSuccess: 'Dėkojame! Jūsų duomenys buvo pateikti.',\n leadFormRequiredError: 'Užpildykite visus privalomus laukus.',\n leadFormGenericError: 'Kažkas nutiko negerai. Bandykite dar kartą.',\n leadFormName: 'Vardas',\n leadFormEmail: 'El. paštas',\n leadFormPhone: 'Telefonas',\n leadFormMessage: 'Jūsų žinutė',\n poweredBy: 'Palaiko {brand}',\n};\n\nexport default lt;\n","import type { UiTextKeys } from '../types';\n\nconst mk: UiTextKeys = {\n sendMessage: 'Испрати порака',\n send: 'Испрати',\n close: 'Затвори',\n minimize: 'Минимизирај',\n maximize: 'Максимизирај',\n call: 'Повикај',\n listening: 'Слуша',\n processing: 'Обработува',\n talkToInterrupt: 'Зборувајте за прекинување',\n startVoice: 'Започни глас',\n stopVoice: 'Запри глас',\n endCall: 'Заврши повик',\n openChat: 'Отвори чет',\n connectionFailed: 'Поврзувањето не успеа',\n retry: 'Обиди се повторно',\n loading: 'Се вчитува',\n creditsExhausted: 'Кредитите се потрошени',\n creditsExhaustedDetail: 'Кредитите на оваа сесија се потрошени.',\n consentTitle: 'Согласност за приватност',\n consentBody: 'Продолжувајќи, се согласувате со собирањето и обработката на вашите податоци како што е опишано во нашите',\n consentAccept: 'Прифати',\n consentDecline: 'Одбиј',\n consentTermsLink: 'Услови за користење',\n consentPrivacyLink: 'Политика за приватност',\n refresh: 'Обнови',\n ratingQuestion: 'Каков беше овој разговор?',\n ratingThankYou: 'Ви благодариме за вашата повратна информација!',\n youEnded: 'Вие го завршивте разговорот',\n agentEnded: 'Агентот го заврши разговорот',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Кажете ни повеќе',\n feedbackSubtitle: 'Вашата повратна информација ни помага да ја подобриме услугата и подобро да ве поддржиме во иднина.',\n feedbackPlaceholder: 'Кажете ни повеќе за вашето искуство…',\n submit: 'Испрати',\n leadFormTitle: 'Информации за контакт',\n leadFormSuccess: 'Ви благодариме! Вашите податоци се испратени.',\n leadFormRequiredError: 'Пополнете ги сите задолжителни полиња.',\n leadFormGenericError: 'Нешто тргна наопаку. Пробајте повторно.',\n leadFormName: 'Име',\n leadFormEmail: 'Е-пошта',\n leadFormPhone: 'Телефон',\n leadFormMessage: 'Вашата порака',\n poweredBy: 'Овозможено од {brand}',\n};\n\nexport default mk;\n","import type { UiTextKeys } from '../types';\n\nconst ms: UiTextKeys = {\n sendMessage: 'Hantar mesej',\n send: 'Hantar',\n close: 'Tutup',\n minimize: 'Minimumkan',\n maximize: 'Maksimumkan',\n call: 'Panggil',\n listening: 'Mendengar',\n processing: 'Memproses',\n talkToInterrupt: 'Bercakap untuk mengganggu',\n startVoice: 'Mulakan suara',\n stopVoice: 'Hentikan suara',\n endCall: 'Tamatkan panggilan',\n openChat: 'Buka sembang',\n connectionFailed: 'Sambungan gagal',\n retry: 'Cuba lagi',\n loading: 'Memuatkan',\n creditsExhausted: 'Kredit Habis',\n creditsExhaustedDetail: 'Kredit sesi ini telah habis.',\n consentTitle: 'Persetujuan Privasi',\n consentBody: 'Dengan meneruskan, anda bersetuju dengan pengumpulan dan pemprosesan data anda seperti yang diterangkan dalam',\n consentAccept: 'Terima',\n consentDecline: 'Tolak',\n consentTermsLink: 'Terma Perkhidmatan',\n consentPrivacyLink: 'Dasar Privasi',\n refresh: 'Muat semula',\n ratingQuestion: 'Bagaimana perbualan ini?',\n ratingThankYou: 'Terima kasih atas maklum balas anda!',\n youEnded: 'Anda menamatkan perbualan',\n agentEnded: 'Ejen menamatkan perbualan',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Beritahu kami lebih lanjut',\n feedbackSubtitle: 'Maklum balas anda membantu kami menambah baik perkhidmatan dan menyokong anda dengan lebih baik pada masa depan.',\n feedbackPlaceholder: 'Beritahu kami lebih lanjut tentang pengalaman anda…',\n submit: 'Hantar',\n leadFormTitle: 'Maklumat hubungan',\n leadFormSuccess: 'Terima kasih! Butiran anda telah dihantar.',\n leadFormRequiredError: 'Sila isi semua ruangan yang diperlukan.',\n leadFormGenericError: 'Sesuatu tidak kena. Sila cuba lagi.',\n leadFormName: 'Nama',\n leadFormEmail: 'E-mel',\n leadFormPhone: 'Telefon',\n leadFormMessage: 'Mesej anda',\n poweredBy: 'Dikuasakan oleh {brand}',\n};\n\nexport default ms;\n","import type { UiTextKeys } from '../types';\n\nconst ml: UiTextKeys = {\n sendMessage: 'ഒരു സന്ദേശം അയയ്‌ക്കുക',\n send: 'അയയ്‌ക്കുക',\n close: 'അടയ്‌ക്കുക',\n minimize: 'ചെറുതാക്കുക',\n maximize: 'വലുതാക്കുക',\n call: 'വിളിക്കുക',\n listening: 'ശ്രദ്ധിക്കുന്നു',\n processing: 'പ്രോസസ്സ് ചെയ്യുന്നു',\n talkToInterrupt: 'തടസ്സപ്പെടുത്താൻ സംസാരിക്കുക',\n startVoice: 'ശബ്ദം ആരംഭിക്കുക',\n stopVoice: 'ശബ്ദം നിർത്തുക',\n endCall: 'കോൾ അവസാനിപ്പിക്കുക',\n openChat: 'ചാറ്റ് തുറക്കുക',\n connectionFailed: 'കണക്ഷൻ പരാജയപ്പെട്ടു',\n retry: 'വീണ്ടും ശ്രമിക്കുക',\n loading: 'ലോഡുചെയ്യുന്നു',\n creditsExhausted: 'ക്രെഡിറ്റുകൾ തീർന്നു',\n creditsExhaustedDetail: 'ഈ സെഷന്റെ ക്രെഡിറ്റുകൾ തീർന്നിരിക്കുന്നു.',\n consentTitle: 'സ്വകാര്യത സമ്മതം',\n consentBody: 'തുടരുന്നതിലൂടെ, ഞങ്ങളിൽ വിവരിച്ചിരിക്കുന്ന പ്രകാരം നിങ്ങളുടെ ഡാറ്റ ശേഖരിക്കുന്നതിനും പ്രോസസ്സ് ചെയ്യുന്നതിനും നിങ്ങൾ സമ്മതിക്കുന്നു',\n consentAccept: 'സ്വീകരിക്കുക',\n consentDecline: 'നിരസിക്കുക',\n consentTermsLink: 'സേവന നിബന്ധനകൾ',\n consentPrivacyLink: 'സ്വകാര്യതാ നയം',\n refresh: 'പുതുക്കുക',\n ratingQuestion: 'ഈ സംഭാഷണം എങ്ങനെയായിരുന്നു?',\n ratingThankYou: 'നിങ്ങളുടെ പ്രതികരണത്തിന് നന്ദി!',\n youEnded: 'നിങ്ങൾ സംഭാഷണം അവസാനിപ്പിച്ചു',\n agentEnded: 'ഏജന്റ് സംഭാഷണം അവസാനിപ്പിച്ചു',\n sessionIdLabel: 'ID:',\n tellUsMore: 'ഞങ്ങളോട് കൂടുതൽ പറയൂ',\n feedbackSubtitle: 'നിങ്ങളുടെ പ്രതികരണം ഞങ്ങളുടെ സേവനം മെച്ചപ്പെടുത്താനും ഭാവിയിൽ നിങ്ങളെ മികച്ച രീതിയിൽ പിന്തുണയ്ക്കാനും സഹായിക്കുന്നു.',\n feedbackPlaceholder: 'നിങ്ങളുടെ അനുഭവത്തെക്കുറിച്ച് കൂടുതൽ പറയൂ…',\n submit: 'സമർപ്പിക്കുക',\n leadFormTitle: 'ബന്ധപ്പെടാനുള്ള വിവരങ്ങൾ',\n leadFormSuccess: 'നന്ദി! നിങ്ങളുടെ വിവരങ്ങൾ സമർപ്പിച്ചു.',\n leadFormRequiredError: 'ദയവായി എല്ലാ ആവശ്യമായ ഫീൽഡുകളും പൂരിപ്പിക്കുക.',\n leadFormGenericError: 'എന്തോ കുഴപ്പം സംഭവിച്ചു. വീണ്ടും ശ്രമിക്കുക.',\n leadFormName: 'പേര്',\n leadFormEmail: 'ഇമെയിൽ',\n leadFormPhone: 'ഫോൺ',\n leadFormMessage: 'നിങ്ങളുടെ സന്ദേശം',\n poweredBy: 'നൽകുന്നത് {brand}',\n};\n\nexport default ml;\n","import type { UiTextKeys } from '../types';\n\nconst mr: UiTextKeys = {\n sendMessage: 'संदेश पाठवा',\n send: 'पाठवा',\n close: 'बंद करा',\n minimize: 'लहान करा',\n maximize: 'मोठे करा',\n call: 'कॉल करा',\n listening: 'ऐकत आहे',\n processing: 'प्रक्रिया होत आहे',\n talkToInterrupt: 'थांबवण्यासाठी बोला',\n startVoice: 'व्हॉइस सुरू करा',\n stopVoice: 'व्हॉइस थांबवा',\n endCall: 'कॉल समाप्त करा',\n openChat: 'चॅट उघडा',\n connectionFailed: 'कनेक्शन अयशस्वी',\n retry: 'पुन्हा प्रयत्न करा',\n loading: 'लोड होत आहे',\n creditsExhausted: 'क्रेडिट्स संपली',\n creditsExhaustedDetail: 'या सत्राची क्रेडिट्स संपली आहेत.',\n consentTitle: 'गोपनीयता संमती',\n consentBody: 'पुढे जाऊन, आमच्यामध्ये वर्णन केल्याप्रमाणे तुम्ही तुमच्या डेटाच्या संकलन आणि प्रक्रियेस सहमती देता',\n consentAccept: 'स्वीकारा',\n consentDecline: 'नकार द्या',\n consentTermsLink: 'सेवेच्या अटी',\n consentPrivacyLink: 'गोपनीयता धोरण',\n refresh: 'रिफ्रेश करा',\n ratingQuestion: 'हे संभाषण कसे होते?',\n ratingThankYou: 'तुमच्या अभिप्रायाबद्दल धन्यवाद!',\n youEnded: 'तुम्ही संभाषण संपवले',\n agentEnded: 'एजंटने संभाषण संपवले',\n sessionIdLabel: 'ID:',\n tellUsMore: 'आम्हाला अधिक सांगा',\n feedbackSubtitle: 'तुमचा अभिप्राय आम्हाला आमची सेवा सुधारण्यात आणि भविष्यात तुम्हाला अधिक चांगली मदत करण्यात मदत करतो.',\n feedbackPlaceholder: 'तुमच्या अनुभवाबद्दल आम्हाला अधिक सांगा…',\n submit: 'सबमिट करा',\n leadFormTitle: 'संपर्क माहिती',\n leadFormSuccess: 'धन्यवाद! तुमची माहिती सबमिट केली आहे.',\n leadFormRequiredError: 'कृपया सर्व आवश्यक फील्ड भरा.',\n leadFormGenericError: 'काहीतरी चुकले. कृपया पुन्हा प्रयत्न करा.',\n leadFormName: 'नाव',\n leadFormEmail: 'ईमेल',\n leadFormPhone: 'फोन',\n leadFormMessage: 'तुमचा संदेश',\n poweredBy: 'समर्थित {brand}',\n};\n\nexport default mr;\n","import type { UiTextKeys } from '../types';\n\nconst no: UiTextKeys = {\n sendMessage: 'Send en melding',\n send: 'Send',\n close: 'Lukk',\n minimize: 'Minimer',\n maximize: 'Maksimer',\n call: 'Ring',\n listening: 'Lytter',\n processing: 'Behandler',\n talkToInterrupt: 'Snakk for å avbryte',\n startVoice: 'Start tale',\n stopVoice: 'Stopp tale',\n endCall: 'Avslutt samtale',\n openChat: 'Åpne chat',\n connectionFailed: 'Tilkobling mislyktes',\n retry: 'Prøv igjen',\n loading: 'Laster',\n creditsExhausted: 'Kreditter oppbrukt',\n creditsExhaustedDetail: 'Denne øktens kreditter er oppbrukt.',\n consentTitle: 'Personvernerklæring',\n consentBody: 'Ved å fortsette godtar du innsamling og behandling av dataene dine som beskrevet i våre',\n consentAccept: 'Godta',\n consentDecline: 'Avslå',\n consentTermsLink: 'Vilkår for bruk',\n consentPrivacyLink: 'Personvernpolicy',\n refresh: 'Oppdater',\n ratingQuestion: 'Hvordan var denne samtalen?',\n ratingThankYou: 'Takk for tilbakemeldingen din!',\n youEnded: 'Du avsluttet samtalen',\n agentEnded: 'Agenten avsluttet samtalen',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Fortell oss mer',\n feedbackSubtitle: 'Tilbakemeldingen din hjelper oss med å forbedre tjenesten og støtte deg bedre i fremtiden.',\n feedbackPlaceholder: 'Fortell oss mer om opplevelsen din…',\n submit: 'Send inn',\n leadFormTitle: 'Kontaktinfo',\n leadFormSuccess: 'Takk! Dine opplysninger er sendt.',\n leadFormRequiredError: 'Fyll ut alle obligatoriske felt.',\n leadFormGenericError: 'Noe gikk galt. Prøv igjen.',\n leadFormName: 'Navn',\n leadFormEmail: 'E-post',\n leadFormPhone: 'Telefon',\n leadFormMessage: 'Din melding',\n poweredBy: 'Drevet av {brand}',\n};\n\nexport default no;\n","import type { UiTextKeys } from '../types';\n\nconst fa: UiTextKeys = {\n sendMessage: 'پیامی بنویسید',\n send: 'ارسال',\n close: 'بستن',\n minimize: 'کوچک کردن',\n maximize: 'بزرگ کردن',\n call: 'تماس بگیر',\n listening: 'در حال شنیدن',\n processing: 'در حال پردازش',\n talkToInterrupt: 'برای قطع کردن صحبت کنید',\n startVoice: 'شروع صدا',\n stopVoice: 'توقف صدا',\n endCall: 'پایان تماس',\n openChat: 'باز کردن گفتگو',\n connectionFailed: 'اتصال ناموفق بود',\n retry: 'تلاش دوباره',\n loading: 'در حال بارگذاری',\n creditsExhausted: 'اعتبار تمام شد',\n creditsExhaustedDetail: 'اعتبار این جلسه تمام شده است.',\n consentTitle: 'رضایت حریم خصوصی',\n consentBody: 'با ادامه، شما با جمع‌آوری و پردازش داده‌های خود همانطور که در شرح داده شده است موافقت می‌کنید',\n consentAccept: 'پذیرش',\n consentDecline: 'رد',\n consentTermsLink: 'شرایط خدمات',\n consentPrivacyLink: 'سیاست حفظ حریم خصوصی',\n refresh: 'بازنشانی',\n ratingQuestion: 'این گفتگو چطور بود؟',\n ratingThankYou: 'از بازخورد شما سپاسگزاریم!',\n youEnded: 'شما گفتگو را پایان دادید',\n agentEnded: 'دستیار گفتگو را پایان داد',\n sessionIdLabel: 'شناسه:',\n tellUsMore: 'بیشتر بگویید',\n feedbackSubtitle: 'بازخورد شما به ما کمک می‌کند خدماتمان را بهبود دهیم و در آینده بهتر از شما پشتیبانی کنیم.',\n feedbackPlaceholder: 'درباره تجربه خود بیشتر بگویید…',\n submit: 'ارسال',\n leadFormTitle: 'اطلاعات تماس',\n leadFormSuccess: 'متشکریم! اطلاعات شما ارسال شد.',\n leadFormRequiredError: 'لطفاً همه فیلدهای ضروری را تکمیل کنید.',\n leadFormGenericError: 'مشکلی پیش آمد. لطفاً دوباره تلاش کنید.',\n leadFormName: 'نام',\n leadFormEmail: 'ایمیل',\n leadFormPhone: 'تلفن',\n leadFormMessage: 'پیام شما',\n poweredBy: 'با پشتیبانی {brand}',\n};\n\nexport default fa;\n","import type { UiTextKeys } from '../types';\n\nconst pl: UiTextKeys = {\n sendMessage: 'Wyślij wiadomość',\n send: 'Wyślij',\n close: 'Zamknij',\n minimize: 'Minimalizuj',\n maximize: 'Maksymalizuj',\n call: 'Zadzwoń',\n listening: 'Słucha',\n processing: 'Przetwarzanie',\n talkToInterrupt: 'Mów, aby przerwać',\n startVoice: 'Rozpocznij głos',\n stopVoice: 'Zatrzymaj głos',\n endCall: 'Zakończ połączenie',\n openChat: 'Otwórz chat',\n connectionFailed: 'Połączenie nieudane',\n retry: 'Spróbuj ponownie',\n loading: 'Ładowanie',\n creditsExhausted: 'Kredyty wyczerpane',\n creditsExhaustedDetail: 'Ta sesja wykorzystała wszystkie kredyty.',\n consentTitle: 'Zgoda na prywatność',\n consentBody: 'Kontynuując, wyrażasz zgodę na gromadzenie i przetwarzanie swoich danych, jak opisano w naszych',\n consentAccept: 'Akceptuj',\n consentDecline: 'Odrzuć',\n consentTermsLink: 'Warunki korzystania z usługi',\n consentPrivacyLink: 'Polityka prywatności',\n refresh: 'Odśwież',\n ratingQuestion: 'Jak przebiegła ta rozmowa?',\n ratingThankYou: 'Dziękujemy za opinię!',\n youEnded: 'To Ty zakończyłeś rozmowę',\n agentEnded: 'Agent zakończył rozmowę',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Powiedz nam więcej',\n feedbackSubtitle: 'Twoja opinia pomaga nam ulepszać usługę i lepiej wspierać Cię w przyszłości.',\n feedbackPlaceholder: 'Powiedz nam więcej o swoim doświadczeniu…',\n submit: 'Wyślij',\n leadFormTitle: 'Dane kontaktowe',\n leadFormSuccess: 'Dziękujemy! Twoje dane zostały wysłane.',\n leadFormRequiredError: 'Wypełnij wszystkie wymagane pola.',\n leadFormGenericError: 'Coś poszło nie tak. Spróbuj ponownie.',\n leadFormName: 'Imię',\n leadFormEmail: 'E-mail',\n leadFormPhone: 'Telefon',\n leadFormMessage: 'Twoja wiadomość',\n poweredBy: 'Obsługiwane przez {brand}',\n};\n\nexport default pl;\n","import type { UiTextKeys } from '../types';\n\nconst pt: UiTextKeys = {\n sendMessage: 'Enviar mensagem',\n send: 'Enviar',\n close: 'Fechar',\n minimize: 'Minimizar',\n maximize: 'Maximizar',\n call: 'Ligar',\n listening: 'Ouvindo',\n processing: 'Processando',\n talkToInterrupt: 'Fale para interromper',\n startVoice: 'Iniciar voz',\n stopVoice: 'Parar voz',\n endCall: 'Encerrar chamada',\n openChat: 'Abrir chat',\n connectionFailed: 'Falha na conexão',\n retry: 'Tentar novamente',\n loading: 'Carregando',\n creditsExhausted: 'Créditos esgotados',\n creditsExhaustedDetail: 'Esta sessão esgotou os créditos.',\n consentTitle: 'Consentimento de Privacidade',\n consentBody: 'Ao prosseguir, você concorda com a coleta e o processamento dos seus dados conforme descrito em nossos',\n consentAccept: 'Aceitar',\n consentDecline: 'Recusar',\n consentTermsLink: 'Termos de Serviço',\n consentPrivacyLink: 'Política de Privacidade',\n refresh: 'Atualizar',\n ratingQuestion: 'Como foi esta conversa?',\n ratingThankYou: 'Obrigado pelo seu feedback!',\n youEnded: 'Você encerrou a conversa',\n agentEnded: 'O agente encerrou a conversa',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Conte-nos mais',\n feedbackSubtitle: 'Seu feedback nos ajuda a melhorar nosso serviço e a apoiar você melhor no futuro.',\n feedbackPlaceholder: 'Conte-nos mais sobre a sua experiência…',\n submit: 'Enviar',\n leadFormTitle: 'Informações de contacto',\n leadFormSuccess: 'Obrigado! Os seus dados foram enviados.',\n leadFormRequiredError: 'Preencha todos os campos obrigatórios.',\n leadFormGenericError: 'Algo correu mal. Tente novamente.',\n leadFormName: 'Nome',\n leadFormEmail: 'E-mail',\n leadFormPhone: 'Telefone',\n leadFormMessage: 'Sua mensagem',\n poweredBy: 'Desenvolvido por {brand}',\n};\n\nexport default pt;\n","import type { UiTextKeys } from '../types';\n\nconst pa: UiTextKeys = {\n sendMessage: 'ਇੱਕ ਸੁਨੇਹਾ ਭੇਜੋ',\n send: 'ਭੇਜੋ',\n close: 'ਬੰਦ ਕਰੋ',\n minimize: 'ਛੋਟਾ ਕਰੋ',\n maximize: 'ਵੱਡਾ ਕਰੋ',\n call: 'ਕਾਲ ਕਰੋ',\n listening: 'ਸੁਣ ਰਿਹਾ ਹੈ',\n processing: 'ਪ੍ਰਕਿਰਿਆ ਹੋ ਰਹੀ ਹੈ',\n talkToInterrupt: 'ਰੋਕਣ ਲਈ ਬੋਲੋ',\n startVoice: 'ਵੌਇਸ ਸ਼ੁਰੂ ਕਰੋ',\n stopVoice: 'ਵੌਇਸ ਬੰਦ ਕਰੋ',\n endCall: 'ਕਾਲ ਖਤਮ ਕਰੋ',\n openChat: 'ਚੈਟ ਖੋਲ੍ਹੋ',\n connectionFailed: 'ਕੁਨੈਕਸ਼ਨ ਅਸਫਲ',\n retry: 'ਮੁੜ ਕੋਸ਼ਿਸ਼ ਕਰੋ',\n loading: 'ਲੋਡ ਹੋ ਰਿਹਾ ਹੈ',\n creditsExhausted: 'ਕ੍ਰੈਡਿਟ ਖਤਮ',\n creditsExhaustedDetail: 'ਇਸ ਸੈਸ਼ਨ ਦੇ ਕ੍ਰੈਡਿਟ ਖਤਮ ਹੋ ਗਏ ਹਨ।',\n consentTitle: 'ਗੋਪਨੀਯਤਾ ਸਹਿਮਤੀ',\n consentBody: 'ਅੱਗੇ ਵਧਣ ਨਾਲ, ਤੁਸੀਂ ਸਾਡੇ ਵਿੱਚ ਦੱਸੇ ਅਨੁਸਾਰ ਆਪਣੇ ਡੇਟਾ ਦੇ ਸੰਗ੍ਰਹਿ ਅਤੇ ਪ੍ਰਕਿਰਿਆ ਲਈ ਸਹਿਮਤ ਹੁੰਦੇ ਹੋ',\n consentAccept: 'ਸਵੀਕਾਰ ਕਰੋ',\n consentDecline: 'ਅਸਵੀਕਾਰ ਕਰੋ',\n consentTermsLink: 'ਸੇਵਾ ਦੀਆਂ ਸ਼ਰਤਾਂ',\n consentPrivacyLink: 'ਗੋਪਨੀਯਤਾ ਨੀਤੀ',\n refresh: 'ਰਿਫ੍ਰੈਸ਼ ਕਰੋ',\n ratingQuestion: 'ਇਹ ਗੱਲਬਾਤ ਕਿਵੇਂ ਰਹੀ?',\n ratingThankYou: 'ਤੁਹਾਡੇ ਸੁਝਾਅ ਲਈ ਧੰਨਵਾਦ!',\n youEnded: 'ਤੁਸੀਂ ਗੱਲਬਾਤ ਖ਼ਤਮ ਕੀਤੀ',\n agentEnded: 'ਏਜੰਟ ਨੇ ਗੱਲਬਾਤ ਖ਼ਤਮ ਕੀਤੀ',\n sessionIdLabel: 'ID:',\n tellUsMore: 'ਸਾਨੂੰ ਹੋਰ ਦੱਸੋ',\n feedbackSubtitle: 'ਤੁਹਾਡਾ ਸੁਝਾਅ ਸਾਨੂੰ ਸਾਡੀ ਸੇਵਾ ਸੁਧਾਰਨ ਅਤੇ ਭਵਿੱਖ ਵਿੱਚ ਤੁਹਾਡੀ ਬਿਹਤਰ ਮਦਦ ਕਰਨ ਵਿੱਚ ਸਹਾਇਤਾ ਕਰਦਾ ਹੈ।',\n feedbackPlaceholder: 'ਆਪਣੇ ਅਨੁਭਵ ਬਾਰੇ ਸਾਨੂੰ ਹੋਰ ਦੱਸੋ…',\n submit: 'ਜਮ੍ਹਾਂ ਕਰੋ',\n leadFormTitle: 'ਸੰਪਰਕ ਜਾਣਕਾਰੀ',\n leadFormSuccess: 'ਧੰਨਵਾਦ! ਤੁਹਾਡੀ ਜਾਣਕਾਰੀ ਭੇਜ ਦਿੱਤੀ ਗਈ ਹੈ।',\n leadFormRequiredError: 'ਕਿਰਪਾ ਕਰਕੇ ਸਾਰੇ ਲੋੜੀਂਦੇ ਖੇਤਰ ਭਰੋ।',\n leadFormGenericError: 'ਕੁਝ ਗਲਤ ਹੋ ਗਿਆ। ਕਿਰਪਾ ਕਰਕੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।',\n leadFormName: 'ਨਾਮ',\n leadFormEmail: 'ਈਮੇਲ',\n leadFormPhone: 'ਫ਼ੋਨ',\n leadFormMessage: 'ਤੁਹਾਡਾ ਸੁਨੇਹਾ',\n poweredBy: 'ਦੁਆਰਾ ਸੰਚਾਲਿਤ {brand}',\n};\n\nexport default pa;\n","import type { UiTextKeys } from '../types';\n\nconst ro: UiTextKeys = {\n sendMessage: 'Trimite un mesaj',\n send: 'Trimite',\n close: 'Închide',\n minimize: 'Minimizează',\n maximize: 'Maximizează',\n call: 'Apelează',\n listening: 'Ascultă',\n processing: 'Procesare',\n talkToInterrupt: 'Vorbiți pentru a întrerupe',\n startVoice: 'Pornește vocea',\n stopVoice: 'Oprește vocea',\n endCall: 'Încheie apelul',\n openChat: 'Deschide chatul',\n connectionFailed: 'Conexiune eșuată',\n retry: 'Reîncercați',\n loading: 'Se încarcă',\n creditsExhausted: 'Credite epuizate',\n creditsExhaustedDetail: 'Creditele acestei sesiuni s-au epuizat.',\n consentTitle: 'Consimțământ pentru confidențialitate',\n consentBody: 'Continuând, sunteți de acord cu colectarea și procesarea datelor dvs. așa cum este descris în',\n consentAccept: 'Acceptă',\n consentDecline: 'Respinge',\n consentTermsLink: 'Termeni și condiții',\n consentPrivacyLink: 'Politica de confidențialitate',\n refresh: 'Reîmprospătează',\n ratingQuestion: 'Cum a fost această conversație?',\n ratingThankYou: 'Mulțumim pentru feedback!',\n youEnded: 'Tu ai încheiat conversația',\n agentEnded: 'Agentul a încheiat conversația',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Spune-ne mai multe',\n feedbackSubtitle: 'Feedbackul tău ne ajută să ne îmbunătățim serviciul și să te sprijinim mai bine în viitor.',\n feedbackPlaceholder: 'Spune-ne mai multe despre experiența ta…',\n submit: 'Trimite',\n leadFormTitle: 'Informații de contact',\n leadFormSuccess: 'Mulțumim! Datele dumneavoastră au fost trimise.',\n leadFormRequiredError: 'Completați toate câmpurile obligatorii.',\n leadFormGenericError: 'Ceva nu a funcționat. Încercați din nou.',\n leadFormName: 'Nume',\n leadFormEmail: 'E-mail',\n leadFormPhone: 'Telefon',\n leadFormMessage: 'Mesajul dumneavoastră',\n poweredBy: 'Dezvoltat de {brand}',\n};\n\nexport default ro;\n","import type { UiTextKeys } from '../types';\n\nconst ru: UiTextKeys = {\n sendMessage: 'Отправить сообщение',\n send: 'Отправить',\n close: 'Закрыть',\n minimize: 'Свернуть',\n maximize: 'Развернуть',\n call: 'Позвонить',\n listening: 'Слушает',\n processing: 'Обработка',\n talkToInterrupt: 'Говорите, чтобы прервать',\n startVoice: 'Начать голос',\n stopVoice: 'Остановить голос',\n endCall: 'Завершить звонок',\n openChat: 'Открыть чат',\n connectionFailed: 'Ошибка подключения',\n retry: 'Повторить',\n loading: 'Загрузка',\n creditsExhausted: 'Кредиты исчерпаны',\n creditsExhaustedDetail: 'В этой сессии закончились кредиты.',\n consentTitle: 'Согласие на обработку данных',\n consentBody: 'Продолжая, вы соглашаетесь на сбор и обработку ваших данных, как описано в наших',\n consentAccept: 'Принять',\n consentDecline: 'Отклонить',\n consentTermsLink: 'Условия обслуживания',\n consentPrivacyLink: 'Политика конфиденциальности',\n refresh: 'Обновить',\n ratingQuestion: 'Как прошёл этот разговор?',\n ratingThankYou: 'Спасибо за ваш отзыв!',\n youEnded: 'Вы завершили разговор',\n agentEnded: 'Агент завершил разговор',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Расскажите подробнее',\n feedbackSubtitle: 'Ваш отзыв помогает нам улучшать сервис и лучше поддерживать вас в будущем.',\n feedbackPlaceholder: 'Расскажите подробнее о вашем опыте…',\n submit: 'Отправить',\n leadFormTitle: 'Контактная информация',\n leadFormSuccess: 'Спасибо! Ваши данные отправлены.',\n leadFormRequiredError: 'Заполните все обязательные поля.',\n leadFormGenericError: 'Что-то пошло не так. Попробуйте снова.',\n leadFormName: 'Имя',\n leadFormEmail: 'Электронная почта',\n leadFormPhone: 'Телефон',\n leadFormMessage: 'Ваше сообщение',\n poweredBy: 'Работает на {brand}',\n};\n\nexport default ru;\n","import type { UiTextKeys } from '../types';\n\nconst sr: UiTextKeys = {\n sendMessage: 'Пошаљи поруку',\n send: 'Пошаљи',\n close: 'Затвори',\n minimize: 'Минимизуј',\n maximize: 'Максимизуј',\n call: 'Позови',\n listening: 'Слуша',\n processing: 'Обрађује',\n talkToInterrupt: 'Говорите за прекидање',\n startVoice: 'Покрени глас',\n stopVoice: 'Заустави глас',\n endCall: 'Заврши позив',\n openChat: 'Отвори чет',\n connectionFailed: 'Веза није успела',\n retry: 'Покушај поново',\n loading: 'Учитавање',\n creditsExhausted: 'Кредити су потрошени',\n creditsExhaustedDetail: 'Кредити ове сесије су потрошени.',\n consentTitle: 'Пристанак на приватност',\n consentBody: 'Наставком пристајете на прикупљање и обраду ваших података како је описано у нашим',\n consentAccept: 'Прихвати',\n consentDecline: 'Одбиј',\n consentTermsLink: 'Услови коришћења',\n consentPrivacyLink: 'Политика приватности',\n refresh: 'Освежи',\n ratingQuestion: 'Какав је био овај разговор?',\n ratingThankYou: 'Хвала на повратним информацијама!',\n youEnded: 'Ви сте завршили разговор',\n agentEnded: 'Агент је завршио разговор',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Реците нам више',\n feedbackSubtitle: 'Ваше повратне информације нам помажу да побољшамо услугу и боље вас подржимо у будућности.',\n feedbackPlaceholder: 'Реците нам више о свом искуству…',\n submit: 'Пошаљи',\n leadFormTitle: 'Контакт информације',\n leadFormSuccess: 'Хвала! Ваши подаци су послати.',\n leadFormRequiredError: 'Попуните сва обавезна поља.',\n leadFormGenericError: 'Нешто је пошло по злу. Покушајте поново.',\n leadFormName: 'Име',\n leadFormEmail: 'Имејл',\n leadFormPhone: 'Телефон',\n leadFormMessage: 'Ваша порука',\n poweredBy: 'Омогућио {brand}',\n};\n\nexport default sr;\n","import type { UiTextKeys } from '../types';\n\nconst sk: UiTextKeys = {\n sendMessage: 'Poslať správu',\n send: 'Odoslať',\n close: 'Zavrieť',\n minimize: 'Minimalizovať',\n maximize: 'Maximalizovať',\n call: 'Volaj',\n listening: 'Počúva',\n processing: 'Spracováva',\n talkToInterrupt: 'Hovorte pre prerušenie',\n startVoice: 'Spustiť hlas',\n stopVoice: 'Zastaviť hlas',\n endCall: 'Ukončiť hovor',\n openChat: 'Otvoriť chat',\n connectionFailed: 'Pripojenie zlyhalo',\n retry: 'Skúsiť znova',\n loading: 'Načítava sa',\n creditsExhausted: 'Kredity vyčerpané',\n creditsExhaustedDetail: 'Kredity tejto relácie boli vyčerpané.',\n consentTitle: 'Súhlas so súkromím',\n consentBody: 'Pokračovaním súhlasíte so zhromažďovaním a spracovaním vašich údajov, ako je popísané v našich',\n consentAccept: 'Prijať',\n consentDecline: 'Odmietnuť',\n consentTermsLink: 'Podmienky služby',\n consentPrivacyLink: 'Zásady ochrany súkromia',\n refresh: 'Obnoviť',\n ratingQuestion: 'Aká bola táto konverzácia?',\n ratingThankYou: 'Ďakujeme za vašu spätnú väzbu!',\n youEnded: 'Konverzáciu ste ukončili vy',\n agentEnded: 'Konverzáciu ukončil agent',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Povedzte nám viac',\n feedbackSubtitle: 'Vaša spätná väzba nám pomáha zlepšovať službu a lepšie vás v budúcnosti podporovať.',\n feedbackPlaceholder: 'Povedzte nám viac o svojej skúsenosti…',\n submit: 'Odoslať',\n leadFormTitle: 'Kontaktné údaje',\n leadFormSuccess: 'Ďakujeme! Vaše údaje boli odoslané.',\n leadFormRequiredError: 'Vyplňte všetky povinné polia.',\n leadFormGenericError: 'Niečo sa pokazilo. Skúste znova.',\n leadFormName: 'Meno',\n leadFormEmail: 'E-mail',\n leadFormPhone: 'Telefón',\n leadFormMessage: 'Vaša správa',\n poweredBy: 'Poháňané systémom {brand}',\n};\n\nexport default sk;\n","import type { UiTextKeys } from '../types';\n\nconst sl: UiTextKeys = {\n sendMessage: 'Pošlji sporočilo',\n send: 'Pošlji',\n close: 'Zapri',\n minimize: 'Minimiziraj',\n maximize: 'Maksimiziraj',\n call: 'Pokliči',\n listening: 'Posluša',\n processing: 'Obdeluje',\n talkToInterrupt: 'Govorite za prekinitev',\n startVoice: 'Zaženi glas',\n stopVoice: 'Ustavi glas',\n endCall: 'Končaj klic',\n openChat: 'Odpri klepet',\n connectionFailed: 'Povezava ni uspela',\n retry: 'Poskusi znova',\n loading: 'Nalaganje',\n creditsExhausted: 'Krediti so porabljeni',\n creditsExhaustedDetail: 'Krediti te seje so porabljeni.',\n consentTitle: 'Soglasje za zasebnost',\n consentBody: 'Z nadaljevanjem se strinjate z zbiranjem in obdelavo vaših podatkov, kot je opisano v naših',\n consentAccept: 'Sprejmi',\n consentDecline: 'Zavrni',\n consentTermsLink: 'Pogoji storitve',\n consentPrivacyLink: 'Pravilnik o zasebnosti',\n refresh: 'Osveži',\n ratingQuestion: 'Kakšen je bil ta pogovor?',\n ratingThankYou: 'Hvala za vaše mnenje!',\n youEnded: 'Pogovor ste končali vi',\n agentEnded: 'Agent je končal pogovor',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Povejte nam več',\n feedbackSubtitle: 'Vaše mnenje nam pomaga izboljšati storitev in vas v prihodnje bolje podpirati.',\n feedbackPlaceholder: 'Povejte nam več o svoji izkušnji…',\n submit: 'Pošlji',\n leadFormTitle: 'Kontaktni podatki',\n leadFormSuccess: 'Hvala! Vaši podatki so bili posredovani.',\n leadFormRequiredError: 'Izpolnite vsa obvezna polja.',\n leadFormGenericError: 'Nekaj je šlo narobe. Poskusite znova.',\n leadFormName: 'Ime',\n leadFormEmail: 'E-pošta',\n leadFormPhone: 'Telefon',\n leadFormMessage: 'Vaše sporočilo',\n poweredBy: 'Poganja {brand}',\n};\n\nexport default sl;\n","import type { UiTextKeys } from '../types';\n\nconst es: UiTextKeys = {\n sendMessage: 'Enviar un mensaje',\n send: 'Enviar',\n close: 'Cerrar',\n minimize: 'Minimizar',\n maximize: 'Maximizar',\n call: 'Llamar',\n listening: 'Escuchando',\n processing: 'Procesando',\n talkToInterrupt: 'Habla para interrumpir',\n startVoice: 'Iniciar voz',\n stopVoice: 'Detener voz',\n endCall: 'Finalizar llamada',\n openChat: 'Abrir chat',\n connectionFailed: 'Error de conexión',\n retry: 'Reintentar',\n loading: 'Cargando',\n creditsExhausted: 'Créditos agotados',\n creditsExhaustedDetail: 'Esta sesión ha agotado sus créditos.',\n consentTitle: 'Consentimiento de Privacidad',\n consentBody: 'Al continuar, acepta la recopilación y el procesamiento de sus datos según se describe en nuestros',\n consentAccept: 'Aceptar',\n consentDecline: 'Rechazar',\n consentTermsLink: 'Términos del servicio',\n consentPrivacyLink: 'Política de privacidad',\n refresh: 'Actualizar',\n ratingQuestion: '¿Qué tal esta conversación?',\n ratingThankYou: '¡Gracias por tus comentarios!',\n youEnded: 'Tú finalizaste la conversación',\n agentEnded: 'El agente finalizó la conversación',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Cuéntanos más',\n feedbackSubtitle: 'Tus comentarios nos ayudan a mejorar nuestro servicio y a apoyarte mejor en el futuro.',\n feedbackPlaceholder: 'Cuéntanos más sobre tu experiencia…',\n submit: 'Enviar',\n leadFormTitle: 'Información de contacto',\n leadFormSuccess: '¡Gracias! Tus datos han sido enviados.',\n leadFormRequiredError: 'Por favor completa todos los campos obligatorios.',\n leadFormGenericError: 'Algo salió mal. Inténtalo de nuevo.',\n leadFormName: 'Nombre',\n leadFormEmail: 'Correo electrónico',\n leadFormPhone: 'Teléfono',\n leadFormMessage: 'Tu mensaje',\n poweredBy: 'Desarrollado por {brand}',\n};\n\nexport default es;\n","import type { UiTextKeys } from '../types';\n\nconst sw: UiTextKeys = {\n sendMessage: 'Tuma ujumbe',\n send: 'Tuma',\n close: 'Funga',\n minimize: 'Punguza',\n maximize: 'Panua',\n call: 'Piga simu',\n listening: 'Anasikiliza',\n processing: 'Inachakata',\n talkToInterrupt: 'Ongea ili kukatiza',\n startVoice: 'Anzisha sauti',\n stopVoice: 'Simamisha sauti',\n endCall: 'Maliza simu',\n openChat: 'Fungua mazungumzo',\n connectionFailed: 'Muunganisho umeshindwa',\n retry: 'Jaribu tena',\n loading: 'Inapakia',\n creditsExhausted: 'Salio limeisha',\n creditsExhaustedDetail: 'Salio la kikao hiki limeisha.',\n consentTitle: 'Idhini ya Faragha',\n consentBody: 'Kwa kuendelea, unakubali ukusanyaji na usindikaji wa data yako kama ilivyoelezwa katika',\n consentAccept: 'Kubali',\n consentDecline: 'Kataa',\n consentTermsLink: 'Sheria na Masharti',\n consentPrivacyLink: 'Sera ya Faragha',\n refresh: 'Onyesha upya',\n ratingQuestion: 'Mazungumzo haya yalikuwaje?',\n ratingThankYou: 'Asante kwa maoni yako!',\n youEnded: 'Wewe ulimaliza mazungumzo',\n agentEnded: 'Wakala alimaliza mazungumzo',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Tuambie zaidi',\n feedbackSubtitle: 'Maoni yako yanatusaidia kuboresha huduma yetu na kukusaidia vizuri zaidi siku zijazo.',\n feedbackPlaceholder: 'Tuambie zaidi kuhusu tajriba yako…',\n submit: 'Wasilisha',\n leadFormTitle: 'Maelezo ya mawasiliano',\n leadFormSuccess: 'Asante! Maelezo yako yamewasilishwa.',\n leadFormRequiredError: 'Tafadhali jaza sehemu zote zinazohitajika.',\n leadFormGenericError: 'Hitilafu imetokea. Tafadhali jaribu tena.',\n leadFormName: 'Jina',\n leadFormEmail: 'Barua pepe',\n leadFormPhone: 'Simu',\n leadFormMessage: 'Ujumbe wako',\n poweredBy: 'Inaendeshwa na {brand}',\n};\n\nexport default sw;\n","import type { UiTextKeys } from '../types';\n\nconst sv: UiTextKeys = {\n sendMessage: 'Skicka ett meddelande',\n send: 'Skicka',\n close: 'Stäng',\n minimize: 'Minimera',\n maximize: 'Maximera',\n call: 'Ring',\n listening: 'Lyssnar',\n processing: 'Bearbetar',\n talkToInterrupt: 'Prata för att avbryta',\n startVoice: 'Starta röst',\n stopVoice: 'Stoppa röst',\n endCall: 'Avsluta samtal',\n openChat: 'Öppna chatt',\n connectionFailed: 'Anslutning misslyckades',\n retry: 'Försök igen',\n loading: 'Laddar',\n creditsExhausted: 'Krediter slut',\n creditsExhaustedDetail: 'Den här sessionens krediter är slut.',\n consentTitle: 'Samtycke till integritet',\n consentBody: 'Genom att fortsätta godkänner du insamling och behandling av dina uppgifter enligt vad som beskrivs i våra',\n consentAccept: 'Godkänn',\n consentDecline: 'Avvisa',\n consentTermsLink: 'Användarvillkor',\n consentPrivacyLink: 'Integritetspolicy',\n refresh: 'Uppdatera',\n ratingQuestion: 'Hur var det här samtalet?',\n ratingThankYou: 'Tack för din feedback!',\n youEnded: 'Du avslutade samtalet',\n agentEnded: 'Agenten avslutade samtalet',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Berätta mer',\n feedbackSubtitle: 'Din feedback hjälper oss att förbättra vår tjänst och stötta dig bättre i framtiden.',\n feedbackPlaceholder: 'Berätta mer om din upplevelse…',\n submit: 'Skicka',\n leadFormTitle: 'Kontaktinformation',\n leadFormSuccess: 'Tack! Dina uppgifter har skickats.',\n leadFormRequiredError: 'Fyll i alla obligatoriska fält.',\n leadFormGenericError: 'Något gick fel. Försök igen.',\n leadFormName: 'Namn',\n leadFormEmail: 'E-post',\n leadFormPhone: 'Telefon',\n leadFormMessage: 'Ditt meddelande',\n poweredBy: 'Drivs av {brand}',\n};\n\nexport default sv;\n","import type { UiTextKeys } from '../types';\n\nconst tl: UiTextKeys = {\n sendMessage: 'Magpadala ng mensahe',\n send: 'Ipadala',\n close: 'Isara',\n minimize: 'Minimize',\n maximize: 'Maximize',\n call: 'Tawag',\n listening: 'Nakikinig',\n processing: 'Pinoproseso',\n talkToInterrupt: 'Magsalita para humadlang',\n startVoice: 'Simulan ang boses',\n stopVoice: 'Itigil ang boses',\n endCall: 'Tapusin ang tawag',\n openChat: 'Buksan ang chat',\n connectionFailed: 'Nabigo ang koneksyon',\n retry: 'Subukan muli',\n loading: 'Naglo-load',\n creditsExhausted: 'Naubos ang Kredito',\n creditsExhaustedDetail: 'Naubos na ang mga kredito ng sesyong ito.',\n consentTitle: 'Pahintulot sa Pagkapribado',\n consentBody: 'Sa pamamagitan ng pagpapatuloy, sumasang-ayon ka sa pagkolekta at pagproseso ng iyong data tulad ng inilarawan sa aming',\n consentAccept: 'Tanggapin',\n consentDecline: 'Tanggihan',\n consentTermsLink: 'Mga Tuntunin ng Serbisyo',\n consentPrivacyLink: 'Patakaran sa Pagkapribado',\n refresh: 'I-refresh',\n ratingQuestion: 'Kumusta ang usapang ito?',\n ratingThankYou: 'Salamat sa iyong feedback!',\n youEnded: 'Ikaw ang nagtapos ng usapan',\n agentEnded: 'Tinapos ng ahente ang usapan',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Magkuwento pa',\n feedbackSubtitle: 'Nakakatulong ang iyong feedback para mapahusay ang aming serbisyo at masuportahan ka nang mas mabuti sa hinaharap.',\n feedbackPlaceholder: 'Magkuwento pa tungkol sa iyong karanasan…',\n submit: 'Ipasa',\n leadFormTitle: 'Impormasyon ng contact',\n leadFormSuccess: 'Salamat! Naisumite na ang iyong mga detalye.',\n leadFormRequiredError: 'Pakipunan ang lahat ng kinakailangang field.',\n leadFormGenericError: 'Nagkaroon ng problema. Pakisubukan ulit.',\n leadFormName: 'Pangalan',\n leadFormEmail: 'Email',\n leadFormPhone: 'Telepono',\n leadFormMessage: 'Ang iyong mensahe',\n poweredBy: 'Pinapagana ng {brand}',\n};\n\nexport default tl;\n","import type { UiTextKeys } from '../types';\n\nconst ta: UiTextKeys = {\n sendMessage: 'ஒரு செய்தி அனுப்பவும்',\n send: 'அனுப்பு',\n close: 'மூடு',\n minimize: 'சிறியதாக்கு',\n maximize: 'பெரியதாக்கு',\n call: 'அழை',\n listening: 'கேட்கிறது',\n processing: 'செயலாக்குகிறது',\n talkToInterrupt: 'தடுக்க பேசவும்',\n startVoice: 'குரலைத் தொடங்கு',\n stopVoice: 'குரலை நிறுத்து',\n endCall: 'அழைப்பை முடி',\n openChat: 'அரட்டையைத் திற',\n connectionFailed: 'இணைப்பு தோல்வியடைந்தது',\n retry: 'மீண்டும் முயற்சி செய்',\n loading: 'ஏற்றுகிறது',\n creditsExhausted: 'கிரெடிட்கள் தீர்ந்துவிட்டன',\n creditsExhaustedDetail: 'இந்த அமர்வின் கிரெடிட்கள் தீர்ந்துவிட்டன.',\n consentTitle: 'தனியுரிமை ஒப்புதல்',\n consentBody: 'தொடர்வதன் மூலம், எங்களில் விவரிக்கப்பட்டுள்ளபடி உங்கள் தரவு சேகரிப்பு மற்றும் செயலாக்கத்திற்கு நீங்கள் ஒப்புக்கொள்கிறீர்கள்',\n consentAccept: 'ஏற்க',\n consentDecline: 'நிராகரி',\n consentTermsLink: 'சேவை விதிமுறைகள்',\n consentPrivacyLink: 'தனியுரிமைக் கொள்கை',\n refresh: 'புதுப்பி',\n ratingQuestion: 'இந்த உரையாடல் எப்படி இருந்தது?',\n ratingThankYou: 'உங்கள் கருத்துக்கு நன்றி!',\n youEnded: 'நீங்கள் உரையாடலை முடித்தீர்கள்',\n agentEnded: 'முகவர் உரையாடலை முடித்தார்',\n sessionIdLabel: 'ID:',\n tellUsMore: 'மேலும் சொல்லுங்கள்',\n feedbackSubtitle: 'உங்கள் கருத்து எங்கள் சேவையை மேம்படுத்தவும் எதிர்காலத்தில் உங்களை சிறப்பாக ஆதரிக்கவும் உதவுகிறது.',\n feedbackPlaceholder: 'உங்கள் அனுபவம் குறித்து மேலும் சொல்லுங்கள்…',\n submit: 'சமர்ப்பிக்கவும்',\n leadFormTitle: 'தொடர்பு தகவல்',\n leadFormSuccess: 'நன்றி! உங்கள் விவரங்கள் சமர்ப்பிக்கப்பட்டன.',\n leadFormRequiredError: 'தேவையான அனைத்து புலங்களையும் நிரப்பவும்.',\n leadFormGenericError: 'ஏதோ தவறு ஏற்பட்டது. மீண்டும் முயற்சிக்கவும்.',\n leadFormName: 'பெயர்',\n leadFormEmail: 'மின்னஞ்சல்',\n leadFormPhone: 'தொலைபேசி',\n leadFormMessage: 'உங்கள் செய்தி',\n poweredBy: 'இயக்குபவர் {brand}',\n};\n\nexport default ta;\n","import type { UiTextKeys } from '../types';\n\nconst te: UiTextKeys = {\n sendMessage: 'సందేశం పంపండి',\n send: 'పంపు',\n close: 'మూసివేయండి',\n minimize: 'చిన్నదిగా చేయి',\n maximize: 'పెద్దదిగా చేయి',\n call: 'కాల్ చేయండి',\n listening: 'వింటోంది',\n processing: 'ప్రాసెస్ చేస్తోంది',\n talkToInterrupt: 'అంతరాయం కలిగించడానికి మాట్లాడండి',\n startVoice: 'వాయిస్ ప్రారంభించండి',\n stopVoice: 'వాయిస్ ఆపండి',\n endCall: 'కాల్‌ను ముగించండి',\n openChat: 'చాట్ తెరవండి',\n connectionFailed: 'కనెక్షన్ విఫలమైంది',\n retry: 'మళ్లీ ప్రయత్నించండి',\n loading: 'లోడ్ అవుతోంది',\n creditsExhausted: 'క్రెడిట్లు ముగిశాయి',\n creditsExhaustedDetail: 'ఈ సెషన్ యొక్క క్రెడిట్లు ముగిశాయి.',\n consentTitle: 'గోప్యతా సమ్మతి',\n consentBody: 'కొనసాగించడం ద్వారా, మాలో వివరించిన విధంగా మీ డేటా సేకరణ మరియు ప్రాసెసింగ్‌కు మీరు అంగీకరిస్తున్నారు',\n consentAccept: 'అంగీకరించు',\n consentDecline: 'తిరస్కరించు',\n consentTermsLink: 'సేవా నిబంధనలు',\n consentPrivacyLink: 'గోప్యతా విధానం',\n refresh: 'రిఫ్రెష్ చేయండి',\n ratingQuestion: 'ఈ సంభాషణ ఎలా ఉంది?',\n ratingThankYou: 'మీ అభిప్రాయానికి ధన్యవాదాలు!',\n youEnded: 'మీరు సంభాషణను ముగించారు',\n agentEnded: 'ఏజెంట్ సంభాషణను ముగించారు',\n sessionIdLabel: 'ID:',\n tellUsMore: 'మాకు మరింత చెప్పండి',\n feedbackSubtitle: 'మీ అభిప్రాయం మా సేవను మెరుగుపరచడానికి మరియు భవిష్యత్తులో మిమ్మల్ని మెరుగ్గా మద్దతు ఇవ్వడానికి సహాయపడుతుంది.',\n feedbackPlaceholder: 'మీ అనుభవం గురించి మాకు మరింత చెప్పండి…',\n submit: 'సమర్పించండి',\n leadFormTitle: 'సంప్రదింపు సమాచారం',\n leadFormSuccess: 'ధన్యవాదాలు! మీ వివరాలు సమర్పించబడ్డాయి.',\n leadFormRequiredError: 'దయచేసి అన్ని అవసరమైన ఫీల్డ్‌లను నింపండి.',\n leadFormGenericError: 'ఏదో తప్పు జరిగింది. దయచేసి మళ్లీ ప్రయత్నించండి.',\n leadFormName: 'పేరు',\n leadFormEmail: 'ఇమెయిల్',\n leadFormPhone: 'ఫోన్',\n leadFormMessage: 'మీ సందేశం',\n poweredBy: 'అందించేవారు {brand}',\n};\n\nexport default te;\n","import type { UiTextKeys } from '../types';\n\nconst th: UiTextKeys = {\n sendMessage: 'ส่งข้อความ',\n send: 'ส่ง',\n close: 'ปิด',\n minimize: 'ย่อ',\n maximize: 'ขยาย',\n call: 'โทร',\n listening: 'กำลังฟัง',\n processing: 'กำลังประมวลผล',\n talkToInterrupt: 'พูดเพื่อขัดจังหวะ',\n startVoice: 'เริ่มเสียง',\n stopVoice: 'หยุดเสียง',\n endCall: 'วางสาย',\n openChat: 'เปิดแชท',\n connectionFailed: 'การเชื่อมต่อล้มเหลว',\n retry: 'ลองอีกครั้ง',\n loading: 'กำลังโหลด',\n creditsExhausted: 'เครดิตหมด',\n creditsExhaustedDetail: 'เครดิตของเซสชันนี้หมดแล้ว',\n consentTitle: 'ความยินยอมด้านความเป็นส่วนตัว',\n consentBody: 'โดยดำเนินการต่อ คุณยินยอมให้มีการรวบรวมและประมวลผลข้อมูลของคุณตามที่อธิบายไว้ใน',\n consentAccept: 'ยอมรับ',\n consentDecline: 'ปฏิเสธ',\n consentTermsLink: 'ข้อกำหนดในการให้บริการ',\n consentPrivacyLink: 'นโยบายความเป็นส่วนตัว',\n refresh: 'รีเฟรช',\n ratingQuestion: 'การสนทนานี้เป็นอย่างไรบ้าง?',\n ratingThankYou: 'ขอบคุณสำหรับความคิดเห็นของคุณ!',\n youEnded: 'คุณเป็นผู้จบการสนทนา',\n agentEnded: 'ตัวแทนจบการสนทนา',\n sessionIdLabel: 'ID:',\n tellUsMore: 'บอกเราเพิ่มเติม',\n feedbackSubtitle: 'ความคิดเห็นของคุณช่วยให้เราปรับปรุงบริการและสนับสนุนคุณได้ดียิ่งขึ้นในอนาคต',\n feedbackPlaceholder: 'บอกเราเพิ่มเติมเกี่ยวกับประสบการณ์ของคุณ…',\n submit: 'ส่ง',\n leadFormTitle: 'ข้อมูลติดต่อ',\n leadFormSuccess: 'ขอบคุณ! ข้อมูลของคุณถูกส่งแล้ว',\n leadFormRequiredError: 'กรุณากรอกข้อมูลในช่องที่จำเป็นทั้งหมด',\n leadFormGenericError: 'เกิดข้อผิดพลาด กรุณาลองใหม่อีกครั้ง',\n leadFormName: 'ชื่อ',\n leadFormEmail: 'อีเมล',\n leadFormPhone: 'โทรศัพท์',\n leadFormMessage: 'ข้อความของคุณ',\n poweredBy: 'ขับเคลื่อนโดย {brand}',\n};\n\nexport default th;\n","import type { UiTextKeys } from '../types';\n\nconst tr: UiTextKeys = {\n sendMessage: 'Mesaj gönder',\n send: 'Gönder',\n close: 'Kapat',\n minimize: 'Küçült',\n maximize: 'Büyüt',\n call: 'Ara',\n listening: 'Dinliyor',\n processing: 'İşleniyor',\n talkToInterrupt: 'Kesmek için konuşun',\n startVoice: 'Sesi başlat',\n stopVoice: 'Sesi durdur',\n endCall: 'Aramayı bitir',\n openChat: 'Sohbeti aç',\n connectionFailed: 'Bağlantı başarısız',\n retry: 'Tekrar dene',\n loading: 'Yükleniyor',\n creditsExhausted: 'Krediler Tükendi',\n creditsExhaustedDetail: 'Bu oturumun kredileri tükendi.',\n consentTitle: 'Gizlilik Onayı',\n consentBody: 'Devam ederek, verilerinizin toplanması ve işlenmesini kabul etmiş olursunuz',\n consentAccept: 'Kabul Et',\n consentDecline: 'Reddet',\n consentTermsLink: 'Hizmet Şartları',\n consentPrivacyLink: 'Gizlilik Politikası',\n refresh: 'Yenile',\n ratingQuestion: 'Bu görüşme nasıldı?',\n ratingThankYou: 'Geri bildiriminiz için teşekkürler!',\n youEnded: 'Görüşmeyi siz sonlandırdınız',\n agentEnded: 'Görüşmeyi temsilci sonlandırdı',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Bize daha fazla anlatın',\n feedbackSubtitle: 'Geri bildiriminiz hizmetimizi geliştirmemize ve gelecekte size daha iyi destek olmamıza yardımcı olur.',\n feedbackPlaceholder: 'Deneyiminiz hakkında bize daha fazla anlatın…',\n submit: 'Gönder',\n leadFormTitle: 'İletişim bilgileri',\n leadFormSuccess: 'Teşekkürler! Bilgileriniz gönderildi.',\n leadFormRequiredError: 'Lütfen tüm zorunlu alanları doldurun.',\n leadFormGenericError: 'Bir sorun oluştu. Lütfen tekrar deneyin.',\n leadFormName: 'Ad',\n leadFormEmail: 'E-posta',\n leadFormPhone: 'Telefon',\n leadFormMessage: 'Mesajınız',\n poweredBy: 'Destekleyen: {brand}',\n};\n\nexport default tr;\n","import type { UiTextKeys } from '../types';\n\nconst uk: UiTextKeys = {\n sendMessage: 'Надіслати повідомлення',\n send: 'Надіслати',\n close: 'Закрити',\n minimize: 'Згорнути',\n maximize: 'Розгорнути',\n call: 'Зателефонувати',\n listening: 'Слухає',\n processing: 'Обробка',\n talkToInterrupt: 'Говоріть, щоб перервати',\n startVoice: 'Запустити голос',\n stopVoice: 'Зупинити голос',\n endCall: 'Завершити дзвінок',\n openChat: 'Відкрити чат',\n connectionFailed: 'Помилка підключення',\n retry: 'Повторити',\n loading: 'Завантаження',\n creditsExhausted: 'Кредити вичерпано',\n creditsExhaustedDetail: 'Кредити цієї сесії вичерпано.',\n consentTitle: 'Згода на обробку даних',\n consentBody: 'Продовжуючи, ви погоджуєтеся на збір та обробку ваших даних, як описано в наших',\n consentAccept: 'Прийняти',\n consentDecline: 'Відхилити',\n consentTermsLink: 'Умови обслуговування',\n consentPrivacyLink: 'Політика конфіденційності',\n refresh: 'Оновити',\n ratingQuestion: 'Якою була ця розмова?',\n ratingThankYou: 'Дякуємо за ваш відгук!',\n youEnded: 'Ви завершили розмову',\n agentEnded: 'Агент завершив розмову',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Розкажіть докладніше',\n feedbackSubtitle: 'Ваш відгук допомагає нам покращувати сервіс і краще підтримувати вас у майбутньому.',\n feedbackPlaceholder: 'Розкажіть докладніше про ваш досвід…',\n submit: 'Надіслати',\n leadFormTitle: 'Контактна інформація',\n leadFormSuccess: 'Дякуємо! Ваші дані відправлено.',\n leadFormRequiredError: \"Будь ласка, заповніть усі обов\\u2019язкові поля.\",\n leadFormGenericError: 'Щось пішло не так. Спробуйте ще раз.',\n leadFormName: \"\\u0406\\u043C\\u2019\\u044F\",\n leadFormEmail: 'Електронна пошта',\n leadFormPhone: 'Телефон',\n leadFormMessage: 'Ваше повідомлення',\n poweredBy: 'Працює на базі {brand}',\n};\n\nexport default uk;\n","import type { UiTextKeys } from '../types';\n\nconst ur: UiTextKeys = {\n sendMessage: 'پیغام بھیجیں',\n send: 'بھیجیں',\n close: 'بند کریں',\n minimize: 'چھوٹا کریں',\n maximize: 'بڑا کریں',\n call: 'کال کریں',\n listening: 'سن رہا ہے',\n processing: 'پروسیسنگ',\n talkToInterrupt: 'روکنے کے لیے بولیں',\n startVoice: 'آواز شروع کریں',\n stopVoice: 'آواز بند کریں',\n endCall: 'کال ختم کریں',\n openChat: 'چیٹ کھولیں',\n connectionFailed: 'کنکشن ناکام',\n retry: 'دوبارہ کوشش کریں',\n loading: 'لوڈ ہو رہا ہے',\n creditsExhausted: 'کریڈٹس ختم',\n creditsExhaustedDetail: 'اس سیشن کے کریڈٹس ختم ہو گئے ہیں۔',\n consentTitle: 'رازداری کی رضامندی',\n consentBody: 'آگے بڑھ کر، آپ اپنے ڈیٹا کی جمع آوری اور پروسیسنگ سے اتفاق کرتے ہیں جیسا کہ ہماری میں بیان کیا گیا ہے',\n consentAccept: 'قبول کریں',\n consentDecline: 'مسترد کریں',\n consentTermsLink: 'خدمات کی شرائط',\n consentPrivacyLink: 'رازداری کی پالیسی',\n refresh: 'ریفریش کریں',\n ratingQuestion: 'یہ گفتگو کیسی رہی؟',\n ratingThankYou: 'آپ کی رائے کا شکریہ!',\n youEnded: 'آپ نے گفتگو ختم کی',\n agentEnded: 'ایجنٹ نے گفتگو ختم کی',\n sessionIdLabel: 'شناخت:',\n tellUsMore: 'مزید بتائیں',\n feedbackSubtitle: 'آپ کی رائے ہمیں اپنی خدمات بہتر بنانے اور مستقبل میں آپ کی بہتر مدد کرنے میں مدد دیتی ہے۔',\n feedbackPlaceholder: 'اپنے تجربے کے بارے میں مزید بتائیں…',\n submit: 'جمع کرائیں',\n leadFormTitle: 'رابطہ کی معلومات',\n leadFormSuccess: 'شکریہ! آپ کی تفصیلات جمع کر دی گئی ہیں۔',\n leadFormRequiredError: 'براہ کرم تمام ضروری خانے پُر کریں۔',\n leadFormGenericError: 'کچھ غلط ہو گیا۔ براہ کرم دوبارہ کوشش کریں۔',\n leadFormName: 'نام',\n leadFormEmail: 'ای میل',\n leadFormPhone: 'فون',\n leadFormMessage: 'آپ کا پیغام',\n poweredBy: 'بذریعہ {brand}',\n};\n\nexport default ur;\n","import type { UiTextKeys } from '../types';\n\nconst vi: UiTextKeys = {\n sendMessage: 'Gửi tin nhắn',\n send: 'Gửi',\n close: 'Đóng',\n minimize: 'Thu nhỏ',\n maximize: 'Phóng to',\n call: 'Gọi',\n listening: 'Đang nghe',\n processing: 'Đang xử lý',\n talkToInterrupt: 'Nói để ngắt',\n startVoice: 'Bắt đầu giọng nói',\n stopVoice: 'Dừng giọng nói',\n endCall: 'Kết thúc cuộc gọi',\n openChat: 'Mở trò chuyện',\n connectionFailed: 'Kết nối thất bại',\n retry: 'Thử lại',\n loading: 'Đang tải',\n creditsExhausted: 'Đã hết tín dụng',\n creditsExhaustedDetail: 'Tín dụng của phiên này đã hết.',\n consentTitle: 'Đồng ý về Quyền riêng tư',\n consentBody: 'Bằng cách tiếp tục, bạn đồng ý với việc thu thập và xử lý dữ liệu của bạn như được mô tả trong',\n consentAccept: 'Chấp nhận',\n consentDecline: 'Từ chối',\n consentTermsLink: 'Điều khoản Dịch vụ',\n consentPrivacyLink: 'Chính sách Bảo mật',\n refresh: 'Làm mới',\n ratingQuestion: 'Cuộc trò chuyện này thế nào?',\n ratingThankYou: 'Cảm ơn phản hồi của bạn!',\n youEnded: 'Bạn đã kết thúc cuộc trò chuyện',\n agentEnded: 'Trợ lý đã kết thúc cuộc trò chuyện',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Cho chúng tôi biết thêm',\n feedbackSubtitle: 'Phản hồi của bạn giúp chúng tôi cải thiện dịch vụ và hỗ trợ bạn tốt hơn trong tương lai.',\n feedbackPlaceholder: 'Cho chúng tôi biết thêm về trải nghiệm của bạn…',\n submit: 'Gửi',\n leadFormTitle: 'Thông tin liên hệ',\n leadFormSuccess: 'Cảm ơn! Thông tin của bạn đã được gửi.',\n leadFormRequiredError: 'Vui lòng điền vào tất cả các trường bắt buộc.',\n leadFormGenericError: 'Đã xảy ra lỗi. Vui lòng thử lại.',\n leadFormName: 'Tên',\n leadFormEmail: 'Email',\n leadFormPhone: 'Điện thoại',\n leadFormMessage: 'Tin nhắn của bạn',\n poweredBy: 'Được cung cấp bởi {brand}',\n};\n\nexport default vi;\n","import type { UiTextKeys } from '../types';\n\nconst cy: UiTextKeys = {\n sendMessage: 'Anfon neges',\n send: 'Anfon',\n close: 'Cau',\n minimize: 'Lleihau',\n maximize: 'Mwyhau',\n call: 'Galw',\n listening: 'Gwrando',\n processing: 'Prosesu',\n talkToInterrupt: 'Siaradwch i dorri ar draws',\n startVoice: 'Dechrau llais',\n stopVoice: 'Stopio llais',\n endCall: 'Diweddu galwad',\n openChat: 'Agor sgwrs',\n connectionFailed: 'Methwyd cysylltu',\n retry: 'Ceisio eto',\n loading: 'Llwytho',\n creditsExhausted: 'Credydau wedi dod i ben',\n creditsExhaustedDetail: 'Mae credydau\\'r sesiwn hon wedi dod i ben.',\n consentTitle: 'Cydsyniad Preifatrwydd',\n consentBody: 'Drwy fynd ymlaen, rydych yn cytuno i gasglu a phrosesu eich data fel y disgrifir yn ein',\n consentAccept: 'Derbyn',\n consentDecline: 'Gwrthod',\n consentTermsLink: 'Telerau Gwasanaeth',\n consentPrivacyLink: 'Polisi Preifatrwydd',\n refresh: 'Adnewyddu',\n ratingQuestion: 'Sut oedd y sgwrs hon?',\n ratingThankYou: 'Diolch am eich adborth!',\n youEnded: 'Chi ddaeth â’r sgwrs i ben',\n agentEnded: 'Daeth yr asiant â’r sgwrs i ben',\n sessionIdLabel: 'ID:',\n tellUsMore: 'Dywedwch fwy wrthym',\n feedbackSubtitle: 'Mae eich adborth yn ein helpu i wella ein gwasanaeth a’ch cefnogi’n well yn y dyfodol.',\n feedbackPlaceholder: 'Dywedwch fwy wrthym am eich profiad…',\n submit: 'Cyflwyno',\n leadFormTitle: 'Manylion cyswllt',\n leadFormSuccess: 'Diolch! Mae eich manylion wedi cael eu cyflwyno.',\n leadFormRequiredError: 'Llenwch bob maes gofynnol.',\n leadFormGenericError: 'Aeth rhywbeth o chwith. Rhowch gynnig arall arni.',\n leadFormName: 'Enw',\n leadFormEmail: 'E-bost',\n leadFormPhone: 'Ffôn',\n leadFormMessage: 'Eich neges',\n poweredBy: 'Wedi\\'i bweru gan {brand}',\n};\n\nexport default cy;\n","import af from './translations/af';\nimport sq from './translations/sq';\nimport arEg from './translations/ar-eg';\nimport arSa from './translations/ar-sa';\nimport az from './translations/az';\nimport eu from './translations/eu';\nimport be from './translations/be';\nimport bn from './translations/bn';\nimport bs from './translations/bs';\nimport bg from './translations/bg';\nimport ca from './translations/ca';\nimport zh from './translations/zh';\nimport hr from './translations/hr';\nimport cs from './translations/cs';\nimport da from './translations/da';\nimport nl from './translations/nl';\nimport en from './translations/en';\nimport et from './translations/et';\nimport fi from './translations/fi';\nimport fr from './translations/fr';\nimport gl from './translations/gl';\nimport de from './translations/de';\nimport el from './translations/el';\nimport gu from './translations/gu';\nimport hi from './translations/hi';\nimport hu from './translations/hu';\nimport id from './translations/id';\nimport it from './translations/it';\nimport ja from './translations/ja';\nimport kn from './translations/kn';\nimport kk from './translations/kk';\nimport ko from './translations/ko';\nimport lv from './translations/lv';\nimport lt from './translations/lt';\nimport mk from './translations/mk';\nimport ms from './translations/ms';\nimport ml from './translations/ml';\nimport mr from './translations/mr';\nimport no from './translations/no';\nimport fa from './translations/fa';\nimport pl from './translations/pl';\nimport pt from './translations/pt';\nimport pa from './translations/pa';\nimport ro from './translations/ro';\nimport ru from './translations/ru';\nimport sr from './translations/sr';\nimport sk from './translations/sk';\nimport sl from './translations/sl';\nimport es from './translations/es';\nimport sw from './translations/sw';\nimport sv from './translations/sv';\nimport tl from './translations/tl';\nimport ta from './translations/ta';\nimport te from './translations/te';\nimport th from './translations/th';\nimport tr from './translations/tr';\nimport uk from './translations/uk';\nimport ur from './translations/ur';\nimport vi from './translations/vi';\nimport cy from './translations/cy';\nimport type { UiTextKeys } from './types';\n\nexport const TEXT: Record<string, UiTextKeys> = {\n af, sq, 'ar-eg': arEg, 'ar-sa': arSa, az, eu, be, bn, bs, bg,\n ca, zh, hr, cs, da, nl, en, et, fi,\n fr, gl, de, el, gu, hi, hu, id,\n it, ja, kn, kk, ko, lv, lt, mk, ms,\n ml, mr, no, fa, pl, pt, pa, ro, ru,\n sr, sk, sl, es, sw, sv, tl, ta, te,\n th, tr, uk, ur, vi, cy,\n};\n","export const RQMII_CHAT_LANGUAGES = [\n { value: 'af', label: 'Afrikaans', dir: 'ltr' },\n { value: 'sq', label: 'Shqip', dir: 'ltr' },\n { value: 'ar-eg', label: 'العربية (مصر)', dir: 'rtl' },\n { value: 'ar-sa', label: 'العربية (السعودية)', dir: 'rtl' },\n { value: 'az', label: 'Azərbaycan', dir: 'ltr' },\n { value: 'eu', label: 'Euskara', dir: 'ltr' },\n { value: 'be', label: 'Беларуская', dir: 'ltr' },\n { value: 'bn', label: 'বাংলা', dir: 'ltr' },\n { value: 'bs', label: 'Bosanski', dir: 'ltr' },\n { value: 'bg', label: 'Български', dir: 'ltr' },\n { value: 'ca', label: 'Català', dir: 'ltr' },\n { value: 'zh', label: '中文', dir: 'ltr' },\n { value: 'hr', label: 'Hrvatski', dir: 'ltr' },\n { value: 'cs', label: 'Čeština', dir: 'ltr' },\n { value: 'da', label: 'Dansk', dir: 'ltr' },\n { value: 'nl', label: 'Nederlands', dir: 'ltr' },\n { value: 'en', label: 'English', dir: 'ltr' },\n { value: 'et', label: 'Eesti', dir: 'ltr' },\n { value: 'fi', label: 'Suomi', dir: 'ltr' },\n { value: 'fr', label: 'Français', dir: 'ltr' },\n { value: 'gl', label: 'Galego', dir: 'ltr' },\n { value: 'de', label: 'Deutsch', dir: 'ltr' },\n { value: 'el', label: 'Ελληνικά', dir: 'ltr' },\n { value: 'gu', label: 'ગુજરાતી', dir: 'ltr' },\n { value: 'hi', label: 'हिन्दी', dir: 'ltr' },\n { value: 'hu', label: 'Magyar', dir: 'ltr' },\n { value: 'id', label: 'Bahasa Indonesia', dir: 'ltr' },\n { value: 'it', label: 'Italiano', dir: 'ltr' },\n { value: 'ja', label: '日本語', dir: 'ltr' },\n { value: 'kn', label: 'ಕನ್ನಡ', dir: 'ltr' },\n { value: 'kk', label: 'Қазақша', dir: 'ltr' },\n { value: 'ko', label: '한국어', dir: 'ltr' },\n { value: 'lv', label: 'Latviešu', dir: 'ltr' },\n { value: 'lt', label: 'Lietuvių', dir: 'ltr' },\n { value: 'mk', label: 'Македонски', dir: 'ltr' },\n { value: 'ms', label: 'Bahasa Melayu', dir: 'ltr' },\n { value: 'ml', label: 'മലയാളം', dir: 'ltr' },\n { value: 'mr', label: 'मराठी', dir: 'ltr' },\n { value: 'no', label: 'Norsk', dir: 'ltr' },\n { value: 'fa', label: 'فارسی', dir: 'rtl' },\n { value: 'pl', label: 'Polski', dir: 'ltr' },\n { value: 'pt', label: 'Português', dir: 'ltr' },\n { value: 'pa', label: 'ਪੰਜਾਬੀ', dir: 'ltr' },\n { value: 'ro', label: 'Română', dir: 'ltr' },\n { value: 'ru', label: 'Русский', dir: 'ltr' },\n { value: 'sr', label: 'Српски', dir: 'ltr' },\n { value: 'sk', label: 'Slovenčina', dir: 'ltr' },\n { value: 'sl', label: 'Slovenščina', dir: 'ltr' },\n { value: 'es', label: 'Español', dir: 'ltr' },\n { value: 'sw', label: 'Kiswahili', dir: 'ltr' },\n { value: 'sv', label: 'Svenska', dir: 'ltr' },\n { value: 'tl', label: 'Tagalog', dir: 'ltr' },\n { value: 'ta', label: 'தமிழ்', dir: 'ltr' },\n { value: 'te', label: 'తెలుగు', dir: 'ltr' },\n { value: 'th', label: 'ไทย', dir: 'ltr' },\n { value: 'tr', label: 'Türkçe', dir: 'ltr' },\n { value: 'uk', label: 'Українська', dir: 'ltr' },\n { value: 'ur', label: 'اردو', dir: 'rtl' },\n { value: 'vi', label: 'Tiếng Việt', dir: 'ltr' },\n { value: 'cy', label: 'Cymraeg', dir: 'ltr' },\n];\n\nexport const RQMII_CHAT_LANGUAGE_VALUES = RQMII_CHAT_LANGUAGES.map(\n (language) => language.value\n);\n","import { RQMII_CHAT_LANGUAGES, RQMII_CHAT_LANGUAGE_VALUES } from './list';\nimport { TEXT } from './text';\n\nexport function getChatLanguage(value: string): (typeof RQMII_CHAT_LANGUAGES)[number] | undefined {\n return (\n RQMII_CHAT_LANGUAGES.find((language) => language.value === value) ||\n RQMII_CHAT_LANGUAGES.find((language) => language.value === 'en')\n );\n}\n\nexport function getChatText(language: string, key: string): string {\n return (TEXT as Record<string, Record<string, string>>)[language]?.[key]\n || (TEXT.en as Record<string, string>)[key]\n || key;\n}\n\nexport function normalizeChatLanguages(languages: string[] | undefined, fallback = 'en'): string[] {\n const clean = Array.isArray(languages)\n ? languages.filter((language) => RQMII_CHAT_LANGUAGE_VALUES.includes(language))\n : [];\n\n if (!clean.includes(fallback) && RQMII_CHAT_LANGUAGE_VALUES.includes(fallback)) {\n clean.unshift(fallback);\n }\n\n return clean.length ? [...new Set(clean)] : ['ar-sa'];\n}\n","\nimport { AGENT_TYPES } from '../core/constants';\nimport { normalizeChatLanguages } from './languages';\nimport type { PublicAgent, AgentType, WidgetWelcomeBubble, WidgetConversationEndedScreen, WidgetTheme } from '../types';\n\nconst DEFAULT_AGENT: PublicAgent = {\n id: null,\n\n name: 'Agent',\n agentType: AGENT_TYPES.TEXT,\n useText: true,\n useVoice: false,\n faceImage: null,\n languages: ['ar-sa'],\n defaultLanguage: 'ar-sa',\n allowInterrupt: true,\n allowWelcomeMessageInterrupt: false,\n welcomeMessages: {},\n conversation: { default_language: 'ar-sa', languages: ['ar-sa'], suggested_messages: {} },\n widget: {\n appearance: {\n position: 'right',\n show_branding: true,\n show_topbar_avatar_image: true,\n font: 'Cairo',\n footer_content: {},\n theme: { mode: 'dark', accent_color: null, end_call_button_color: null },\n },\n behavior: {\n default_open: false,\n conversation_ended_screen: {\n post_chat_rating_enabled: false,\n show_conversation_id: true,\n },\n welcome_bubble: {\n enabled: false,\n delay_seconds: 3,\n sound_enabled: false,\n },\n typing_indicator_enabled: true,\n suggested_messages: {},\n },\n consent: {\n enabled: false,\n one_time: true,\n content: {},\n },\n },\n};\n\nexport function normalizePublicAgent(rawAgent: Partial<PublicAgent> | Record<string, unknown> | null | undefined): PublicAgent {\n if (!rawAgent) return DEFAULT_AGENT;\n const r = rawAgent as Record<string, unknown>;\n\n const agentType = (r.agent_type || r.agentType || AGENT_TYPES.TEXT) as AgentType;\n const useText =\n typeof r.use_text === 'boolean'\n ? r.use_text\n : typeof r.useText === 'boolean'\n ? r.useText\n : agentType !== AGENT_TYPES.VOICE;\n const useVoice =\n typeof r.use_voice === 'boolean'\n ? r.use_voice\n : typeof r.useVoice === 'boolean'\n ? r.useVoice\n : agentType === AGENT_TYPES.TEXT_AND_VOICE ||\n agentType === AGENT_TYPES.CLOUD_AVATAR ||\n agentType === AGENT_TYPES.DESKTOP_AVATAR;\n const conversation =\n (r.conversation as Record<string, unknown> | undefined) ||\n ((r.agent_customization as Record<string, unknown> | undefined)?.conversation as Record<string, unknown> | undefined) ||\n {};\n const speech =\n (r.speech as Record<string, unknown> | undefined) ||\n ((r.agent_customization as Record<string, unknown> | undefined)?.speech as Record<string, unknown> | undefined) ||\n {};\n const defaultLanguage = (conversation.default_language as string) || 'ar-sa';\n const languages = normalizeChatLanguages(conversation.languages as string[] | undefined, defaultLanguage);\n\n // Try top-level widget first, then fall back to agent_customization.widget\n // or widget_customization for paths that pass raw backend JSON.\n const rawWidgetSource =\n (r.widget as Record<string, unknown> | undefined) ||\n ((r.agent_customization as Record<string, unknown> | undefined)?.widget as Record<string, unknown> | undefined) ||\n (r.widget_customization as Record<string, unknown> | undefined) ||\n null;\n const rawAppearance = rawWidgetSource?.appearance as Record<string, unknown> | undefined;\n const rawBehavior = rawWidgetSource?.behavior as Record<string, unknown> | undefined;\n const rawWidget = rawWidgetSource;\n\n // Map hide_branding (from API) -> show_branding (SDK convention).\n // When both are present, hide_branding takes precedence.\n const showBranding =\n typeof rawAppearance?.hide_branding === 'boolean'\n ? !rawAppearance.hide_branding\n : typeof rawAppearance?.show_branding === 'boolean'\n ? rawAppearance.show_branding\n : true;\n\n const showTopbarAvatarImage =\n typeof rawAppearance?.show_topbar_avatar_image === 'boolean'\n ? rawAppearance.show_topbar_avatar_image\n : typeof rawAppearance?.showTopbarAvatarImage === 'boolean'\n ? rawAppearance.showTopbarAvatarImage\n : typeof (rawWidgetSource as Record<string, unknown> | null)?.show_topbar_avatar_image === 'boolean'\n ? (rawWidgetSource as Record<string, unknown>).show_topbar_avatar_image as boolean\n : typeof (rawWidgetSource as Record<string, unknown> | null)?.showTopbarAvatarImage === 'boolean'\n ? (rawWidgetSource as Record<string, unknown>).showTopbarAvatarImage as boolean\n : typeof r.show_topbar_avatar_image === 'boolean'\n ? r.show_topbar_avatar_image\n : typeof r.showTopbarAvatarImage === 'boolean'\n ? r.showTopbarAvatarImage\n : true;\n\n const rawSuggested =\n (rawBehavior?.suggested_messages as Record<string, string[]> | undefined) ||\n (rawWidgetSource?.suggested_messages as Record<string, string[]> | undefined) ||\n (conversation.suggested_messages as Record<string, string[]> | undefined) ||\n (conversation.suggestedMessages as Record<string, string[]> | undefined) ||\n {};\n\n const rawDefaultOpen =\n typeof rawBehavior?.default_open === 'boolean'\n ? rawBehavior.default_open\n : typeof rawBehavior?.defaultOpen === 'boolean'\n ? rawBehavior.defaultOpen\n : typeof (rawWidgetSource as Record<string, unknown> | null)?.default_open === 'boolean'\n ? (rawWidgetSource as Record<string, unknown>).default_open as boolean\n : typeof (rawWidgetSource as Record<string, unknown> | null)?.defaultOpen === 'boolean'\n ? (rawWidgetSource as Record<string, unknown>).defaultOpen as boolean\n : typeof r.default_open === 'boolean'\n ? r.default_open\n : typeof r.defaultOpen === 'boolean'\n ? r.defaultOpen\n : false;\n\n const rawFont =\n typeof rawAppearance?.font === 'string'\n ? rawAppearance.font\n : typeof (rawWidgetSource as Record<string, unknown> | null)?.font === 'string'\n ? (rawWidgetSource as Record<string, unknown>).font as string\n : typeof r.font === 'string'\n ? r.font\n : 'Cairo';\n\n const normalizedFont = (() => {\n const val = (rawFont || '').trim().toLowerCase().replace(/[-_]/g, ' ');\n if (val === 'readex pro' || val === 'readex') return 'Readex Pro';\n if (val === 'noto sans' || val === 'noto' || val === 'noto sans arabic') return 'Noto Sans';\n return 'Cairo';\n })();\n\n const rawConsentSource =\n (rawWidgetSource?.consent as Record<string, unknown> | undefined) ||\n (r.consent as Record<string, unknown> | undefined) ||\n (r.consent_config as Record<string, unknown> | undefined) ||\n null;\n\n const rawConsentEnabled =\n typeof rawConsentSource?.enabled === 'boolean'\n ? rawConsentSource.enabled\n : false;\n\n const rawConsentOneTime =\n typeof rawConsentSource?.one_time === 'boolean'\n ? rawConsentSource.one_time\n : typeof rawConsentSource?.oneTime === 'boolean'\n ? rawConsentSource.oneTime\n : true;\n\n const rawConsentContent =\n (rawConsentSource?.content as Record<string, string> | undefined) ||\n (rawConsentSource?.body as Record<string, string> | undefined) ||\n {};\n\n const rawEndedScreen = rawBehavior?.conversation_ended_screen as Record<string, unknown> | undefined;\n const conversationEndedScreen: WidgetConversationEndedScreen = {\n post_chat_rating_enabled:\n typeof rawEndedScreen?.post_chat_rating_enabled === 'boolean'\n ? rawEndedScreen.post_chat_rating_enabled\n : typeof (rawBehavior as Record<string, unknown>)?.post_chat_rating_enabled === 'boolean'\n ? (rawBehavior as Record<string, unknown>).post_chat_rating_enabled as boolean\n : false,\n show_conversation_id:\n typeof rawEndedScreen?.show_conversation_id === 'boolean'\n ? rawEndedScreen.show_conversation_id\n : typeof rawEndedScreen?.showConversationId === 'boolean'\n ? rawEndedScreen.showConversationId\n : true,\n };\n\n const rawBubble = rawBehavior?.welcome_bubble as Record<string, unknown> | undefined;\n const welcomeBubble: WidgetWelcomeBubble = {\n enabled: typeof rawBubble?.enabled === 'boolean' ? rawBubble.enabled : false,\n delay_seconds: typeof rawBubble?.delay_seconds === 'number' ? rawBubble.delay_seconds : 3,\n sound_enabled: typeof rawBubble?.sound_enabled === 'boolean' ? rawBubble.sound_enabled : false,\n };\n\n const rawTheme = rawAppearance?.theme as Record<string, unknown> | undefined;\n const theme: WidgetTheme = {\n mode: rawTheme?.mode === 'light' ? 'light' : 'dark',\n accent_color: typeof rawTheme?.accent_color === 'string' ? rawTheme.accent_color : null,\n end_call_button_color:\n typeof rawTheme?.end_call_button_color === 'string' ? rawTheme.end_call_button_color : null,\n };\n\n const widget: PublicAgent['widget'] | undefined = rawWidget\n ? {\n appearance: {\n position: (rawAppearance?.position as 'left' | 'right') || 'right',\n show_branding: showBranding,\n show_topbar_avatar_image: showTopbarAvatarImage,\n font: normalizedFont,\n footer_content: (rawAppearance?.footer_content as Record<string, string>) || {},\n theme,\n },\n behavior: {\n default_open: rawDefaultOpen,\n conversation_ended_screen: conversationEndedScreen,\n welcome_bubble: welcomeBubble,\n typing_indicator_enabled:\n typeof rawBehavior?.typing_indicator_enabled === 'boolean'\n ? rawBehavior.typing_indicator_enabled\n : true,\n suggested_messages: rawSuggested,\n },\n consent: {\n enabled: rawConsentEnabled,\n one_time: rawConsentOneTime,\n content: rawConsentContent,\n },\n }\n : undefined;\n\n const rawConsent = (r.consent || r.consent_config || null) as Record<string, unknown> | null;\n\n // The public API nests the welcome message under `conversation.welcome_message`.\n // Fall back to top-level (camelCase or snake_case) for compatibility.\n const rawWelcome = (conversation.welcome_message || conversation.welcomeMessage || r.welcome_message || r.welcomeMessage || {}) as Record<string, unknown>;\n const welcomeMessages: Record<string, string> = Object.fromEntries(\n Object.entries(rawWelcome)\n .filter(([, v]) => typeof v === 'string')\n .map(([k, v]) => [k, (v as string).slice(0, 1000)]),\n );\n\n const allowInterrupt =\n typeof r.allow_interrupt === 'boolean'\n ? r.allow_interrupt\n : typeof speech.allow_interrupt === 'boolean'\n ? speech.allow_interrupt\n : true;\n\n const allowWelcomeMessageInterrupt =\n typeof r.allow_welcome_message_interrupt === 'boolean'\n ? r.allow_welcome_message_interrupt\n : typeof speech.allow_welcome_message_interrupt === 'boolean'\n ? speech.allow_welcome_message_interrupt\n : false;\n\n const faceImage =\n (typeof r.face_image === 'string' ? r.face_image : null) ||\n (typeof r.faceImage === 'string' ? r.faceImage : null) ||\n null;\n\n return {\n id: (r.id as string) || null,\n name: (r.name as string) || DEFAULT_AGENT.name,\n agentType,\n useText,\n useVoice,\n faceImage,\n allowInterrupt,\n allowWelcomeMessageInterrupt,\n welcomeMessages,\n languages,\n defaultLanguage: languages.includes(defaultLanguage)\n ? defaultLanguage\n : languages[0],\n conversation: {\n default_language: defaultLanguage,\n languages,\n suggested_messages: rawSuggested,\n },\n widget: widget || undefined,\n consent: rawConsent ? {\n enabled: (rawConsent.enabled as boolean) ?? false,\n title: (rawConsent.title as Record<string, string>) || undefined,\n body: (rawConsent.body as Record<string, string>) || undefined,\n acceptLabel: (rawConsent.accept_label as Record<string, string>) || (rawConsent.acceptLabel as Record<string, string>) || undefined,\n declineLabel: (rawConsent.decline_label as Record<string, string>) || (rawConsent.declineLabel as Record<string, string>) || undefined,\n termsUrl: (rawConsent.terms_url as Record<string, string>) || (rawConsent.termsUrl as Record<string, string>) || undefined,\n privacyUrl: (rawConsent.privacy_url as Record<string, string>) || (rawConsent.privacyUrl as Record<string, string>) || undefined,\n } : undefined,\n };\n}\n\n/**\n * Fetch the slim, public-safe agent customization (name, face, languages,\n * chat kind) used to render the floating chat button and start-session screen\n * BEFORE a session is initialized. Returns a normalized PublicAgent.\n *\n * `identifier` may be an agent_id or api_key. Pass\n * `withCredentials` for authenticated (agent_id) contexts like the platform.\n */\nexport async function fetchAgentCustomization({\n restUrl,\n identifier,\n withCredentials = false,\n signal,\n}: {\n restUrl: string;\n identifier: string;\n withCredentials?: boolean;\n signal?: AbortSignal;\n}): Promise<PublicAgent> {\n if (!restUrl) throw new Error('Missing restUrl');\n if (!identifier) throw new Error('Missing identifier (agent_id or api_key)');\n\n const response = await fetch(`${restUrl}/agent/${identifier}/customization`, {\n method: 'GET',\n mode: 'cors',\n credentials: withCredentials ? 'include' : 'omit',\n headers: {\n Accept: 'application/json',\n },\n signal,\n });\n\n if (!response.ok) {\n throw new Error(`Failed to load agent customization: ${response.status}`);\n }\n\n const data = (await response.json()) as Record<string, unknown>;\n return normalizePublicAgent({\n id: data.id,\n name: data.name,\n company_name: data.company_name,\n agent_type: data.agent_type,\n use_voice: data.use_voice,\n use_text: data.use_text,\n face_image: data.face_image,\n conversation: data.conversation,\n widget: data.widget,\n allow_interrupt: data.allow_interrupt,\n allow_welcome_message_interrupt: data.allow_welcome_message_interrupt,\n welcome_message: data.welcome_message,\n });\n}\n\n\nexport async function fetchAgentConfig({ restUrl, apiKey, agentId, signal }: { restUrl: string; apiKey?: string; agentId?: string; signal?: AbortSignal }): Promise<PublicAgent> {\n if (!restUrl) throw new Error('Missing restUrl');\n const identifier = apiKey || agentId;\n if (!identifier) throw new Error('Provide one of apiKey or agentId');\n\n const response = await fetch(`${restUrl}/agent/${identifier}`, {\n method: 'GET',\n mode: 'cors',\n credentials: 'omit',\n headers: {\n Accept: 'application/json',\n },\n signal,\n });\n\n if (!response.ok) {\n let detail = `HTTP ${response.status}`;\n try {\n const data = await response.json();\n const d = data as Record<string, string>;\n detail = d?.detail || d?.message || detail;\n } catch {\n // keep fallback\n }\n throw new Error(detail);\n }\n\n return normalizePublicAgent(await response.json());\n}\n\n/**\n * Derive an effective agent from a base agent and a session config override.\n * The override may toggle `use_voice` / `use_text` which affect `useVoice` / `useText`\n * on the returned agent, changing the resolved chat kind and audio behavior.\n */\nexport function applyAgentConfigOverrides(\n agent: PublicAgent,\n config: Record<string, unknown> | undefined | null,\n): PublicAgent {\n if (!config) return agent;\n\n let { useVoice, useText } = agent;\n\n if (typeof config.use_voice === 'boolean') {\n useVoice = config.use_voice;\n }\n if (typeof config.use_text === 'boolean') {\n useText = config.use_text;\n }\n\n if (useVoice === agent.useVoice && useText === agent.useText) {\n return agent;\n }\n\n return { ...agent, useVoice, useText };\n}\n\nexport function resolveChatKind(agent: PublicAgent): 'avatar' | 'text_and_voice' | 'voice' | 'text' {\n if (\n agent.agentType === AGENT_TYPES.CLOUD_AVATAR ||\n agent.agentType === AGENT_TYPES.DESKTOP_AVATAR\n ) {\n return 'avatar';\n }\n if (agent.useText && agent.useVoice) return 'text_and_voice';\n if (agent.useVoice) return 'voice';\n return 'text';\n}\n","/**\n * @license lucide-react v1.24.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst mergeClasses = (...classes) => classes.filter((className, index, array) => {\n return Boolean(className) && className.trim() !== \"\" && array.indexOf(className) === index;\n}).join(\" \").trim();\n\nexport { mergeClasses };\n//# sourceMappingURL=mergeClasses.mjs.map\n","/**\n * @license lucide-react v1.24.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\n\nexport { toKebabCase };\n//# sourceMappingURL=toKebabCase.mjs.map\n","/**\n * @license lucide-react v1.24.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toCamelCase = (string) => string.replace(\n /^([A-Z])|[\\s-_]+(\\w)/g,\n (match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase()\n);\n\nexport { toCamelCase };\n//# sourceMappingURL=toCamelCase.mjs.map\n","/**\n * @license lucide-react v1.24.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { toCamelCase } from './toCamelCase.mjs';\n\nconst toPascalCase = (string) => {\n const camelCase = toCamelCase(string);\n return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);\n};\n\nexport { toPascalCase };\n//# sourceMappingURL=toPascalCase.mjs.map\n","/**\n * @license lucide-react v1.24.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nvar defaultAttributes = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n};\n\nexport { defaultAttributes as default };\n//# sourceMappingURL=defaultAttributes.mjs.map\n","/**\n * @license lucide-react v1.24.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst hasA11yProp = (props) => {\n for (const prop in props) {\n if (prop.startsWith(\"aria-\") || prop === \"role\" || prop === \"title\") {\n return true;\n }\n }\n return false;\n};\n\nexport { hasA11yProp };\n//# sourceMappingURL=hasA11yProp.mjs.map\n","\"use strict\";\n\"use client\";\n/**\n * @license lucide-react v1.24.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { createContext, useContext, useMemo, createElement } from 'react';\n\nconst LucideContext = createContext({});\nfunction LucideProvider({\n children,\n size,\n color,\n strokeWidth,\n absoluteStrokeWidth,\n className\n}) {\n const value = useMemo(\n () => ({\n size,\n color,\n strokeWidth,\n absoluteStrokeWidth,\n className\n }),\n [size, color, strokeWidth, absoluteStrokeWidth, className]\n );\n return createElement(LucideContext.Provider, { value }, children);\n}\nconst useLucideContext = () => useContext(LucideContext);\n\nexport { LucideProvider, useLucideContext };\n//# sourceMappingURL=context.mjs.map\n","\"use strict\";\n\"use client\";\n/**\n * @license lucide-react v1.24.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport defaultAttributes from './defaultAttributes.mjs';\nimport { hasA11yProp } from './shared/src/utils/hasA11yProp.mjs';\nimport { mergeClasses } from './shared/src/utils/mergeClasses.mjs';\nimport { useLucideContext } from './context.mjs';\n\nconst Icon = forwardRef(\n ({ color, size, strokeWidth, absoluteStrokeWidth, className = \"\", children, iconNode, ...rest }, ref) => {\n const {\n size: contextSize = 24,\n strokeWidth: contextStrokeWidth = 2,\n absoluteStrokeWidth: contextAbsoluteStrokeWidth = false,\n color: contextColor = \"currentColor\",\n className: contextClass = \"\"\n } = useLucideContext() ?? {};\n const calculatedStrokeWidth = absoluteStrokeWidth ?? contextAbsoluteStrokeWidth ? Number(strokeWidth ?? contextStrokeWidth) * 24 / Number(size ?? contextSize) : strokeWidth ?? contextStrokeWidth;\n return createElement(\n \"svg\",\n {\n ref,\n ...defaultAttributes,\n width: size ?? contextSize ?? defaultAttributes.width,\n height: size ?? contextSize ?? defaultAttributes.height,\n stroke: color ?? contextColor,\n strokeWidth: calculatedStrokeWidth,\n className: mergeClasses(\"lucide\", contextClass, className),\n ...!children && !hasA11yProp(rest) && { \"aria-hidden\": \"true\" },\n ...rest\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...Array.isArray(children) ? children : [children]\n ]\n );\n }\n);\n\nexport { Icon as default };\n//# sourceMappingURL=Icon.mjs.map\n","/**\n * @license lucide-react v1.24.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport { mergeClasses } from './shared/src/utils/mergeClasses.mjs';\nimport { toKebabCase } from './shared/src/utils/toKebabCase.mjs';\nimport { toPascalCase } from './shared/src/utils/toPascalCase.mjs';\nimport Icon from './Icon.mjs';\n\nconst createLucideIcon = (iconName, iconNode) => {\n const Component = forwardRef(\n ({ className, ...props }, ref) => createElement(Icon, {\n ref,\n iconNode,\n className: mergeClasses(\n `lucide-${toKebabCase(toPascalCase(iconName))}`,\n `lucide-${iconName}`,\n className\n ),\n ...props\n })\n );\n Component.displayName = toPascalCase(iconName);\n return Component;\n};\n\nexport { createLucideIcon as default };\n//# sourceMappingURL=createLucideIcon.mjs.map\n","/**\n * @license lucide-react v1.24.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"m5 12 7-7 7 7\", key: \"hav0vg\" }],\n [\"path\", { d: \"M12 19V5\", key: \"x0mq9r\" }]\n];\nconst ArrowUp = createLucideIcon(\"arrow-up\", __iconNode);\n\nexport { __iconNode, ArrowUp as default };\n//# sourceMappingURL=arrow-up.mjs.map\n","/**\n * @license lucide-react v1.24.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [[\"path\", { d: \"m15 18-6-6 6-6\", key: \"1wnfg3\" }]];\nconst ChevronLeft = createLucideIcon(\"chevron-left\", __iconNode);\n\nexport { __iconNode, ChevronLeft as default };\n//# sourceMappingURL=chevron-left.mjs.map\n","/**\n * @license lucide-react v1.24.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [[\"path\", { d: \"m6 9 6 6 6-6\", key: \"qrunsl\" }]];\nconst ChevronDown = createLucideIcon(\"chevron-down\", __iconNode);\n\nexport { __iconNode, ChevronDown as default };\n//# sourceMappingURL=chevron-down.mjs.map\n","/**\n * @license lucide-react v1.24.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [[\"path\", { d: \"m18 15-6-6-6 6\", key: \"153udz\" }]];\nconst ChevronUp = createLucideIcon(\"chevron-up\", __iconNode);\n\nexport { __iconNode, ChevronUp as default };\n//# sourceMappingURL=chevron-up.mjs.map\n","/**\n * @license lucide-react v1.24.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [[\"path\", { d: \"M21 12a9 9 0 1 1-6.219-8.56\", key: \"13zald\" }]];\nconst LoaderCircle = createLucideIcon(\"loader-circle\", __iconNode);\n\nexport { __iconNode, LoaderCircle as default };\n//# sourceMappingURL=loader-circle.mjs.map\n","/**\n * @license lucide-react v1.24.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"M15 3h6v6\", key: \"1q9fwt\" }],\n [\"path\", { d: \"m21 3-7 7\", key: \"1l2asr\" }],\n [\"path\", { d: \"m3 21 7-7\", key: \"tjx5ai\" }],\n [\"path\", { d: \"M9 21H3v-6\", key: \"wtvkvv\" }]\n];\nconst Maximize2 = createLucideIcon(\"maximize-2\", __iconNode);\n\nexport { __iconNode, Maximize2 as default };\n//# sourceMappingURL=maximize-2.mjs.map\n","/**\n * @license lucide-react v1.24.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"M12 19v3\", key: \"npa21l\" }],\n [\"path\", { d: \"M15 9.34V5a3 3 0 0 0-5.68-1.33\", key: \"1gzdoj\" }],\n [\"path\", { d: \"M16.95 16.95A7 7 0 0 1 5 12v-2\", key: \"cqa7eg\" }],\n [\"path\", { d: \"M18.89 13.23A7 7 0 0 0 19 12v-2\", key: \"16hl24\" }],\n [\"path\", { d: \"m2 2 20 20\", key: \"1ooewy\" }],\n [\"path\", { d: \"M9 9v3a3 3 0 0 0 5.12 2.12\", key: \"r2i35w\" }]\n];\nconst MicOff = createLucideIcon(\"mic-off\", __iconNode);\n\nexport { __iconNode, MicOff as default };\n//# sourceMappingURL=mic-off.mjs.map\n","/**\n * @license lucide-react v1.24.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"M12 19v3\", key: \"npa21l\" }],\n [\"path\", { d: \"M19 10v2a7 7 0 0 1-14 0v-2\", key: \"1vc78b\" }],\n [\"rect\", { x: \"9\", y: \"2\", width: \"6\", height: \"13\", rx: \"3\", key: \"s6n7sd\" }]\n];\nconst Mic = createLucideIcon(\"mic\", __iconNode);\n\nexport { __iconNode, Mic as default };\n//# sourceMappingURL=mic.mjs.map\n","/**\n * @license lucide-react v1.24.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"m14 10 7-7\", key: \"oa77jy\" }],\n [\"path\", { d: \"M20 10h-6V4\", key: \"mjg0md\" }],\n [\"path\", { d: \"m3 21 7-7\", key: \"tjx5ai\" }],\n [\"path\", { d: \"M4 14h6v6\", key: \"rmj7iw\" }]\n];\nconst Minimize2 = createLucideIcon(\"minimize-2\", __iconNode);\n\nexport { __iconNode, Minimize2 as default };\n//# sourceMappingURL=minimize-2.mjs.map\n","/**\n * @license lucide-react v1.24.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M10.1 13.9a14 14 0 0 0 3.732 2.668 1 1 0 0 0 1.213-.303l.355-.465A2 2 0 0 1 17 15h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2 18 18 0 0 1-12.728-5.272\",\n key: \"1wngk7\"\n }\n ],\n [\"path\", { d: \"M22 2 2 22\", key: \"y4kqgn\" }],\n [\n \"path\",\n {\n d: \"M4.76 13.582A18 18 0 0 1 2 4a2 2 0 0 1 2-2h3a2 2 0 0 1 2 2v3a2 2 0 0 1-.8 1.6l-.468.351a1 1 0 0 0-.292 1.233 14 14 0 0 0 .244.473\",\n key: \"10hv5p\"\n }\n ]\n];\nconst PhoneOff = createLucideIcon(\"phone-off\", __iconNode);\n\nexport { __iconNode, PhoneOff as default };\n//# sourceMappingURL=phone-off.mjs.map\n","/**\n * @license lucide-react v1.24.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M13.832 16.568a1 1 0 0 0 1.213-.303l.355-.465A2 2 0 0 1 17 15h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2A18 18 0 0 1 2 4a2 2 0 0 1 2-2h3a2 2 0 0 1 2 2v3a2 2 0 0 1-.8 1.6l-.468.351a1 1 0 0 0-.292 1.233 14 14 0 0 0 6.392 6.384\",\n key: \"9njp5v\"\n }\n ]\n];\nconst Phone = createLucideIcon(\"phone\", __iconNode);\n\nexport { __iconNode, Phone as default };\n//# sourceMappingURL=phone.mjs.map\n","/**\n * @license lucide-react v1.24.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\", key: \"1357e3\" }],\n [\"path\", { d: \"M3 3v5h5\", key: \"1xhq8a\" }]\n];\nconst RotateCcw = createLucideIcon(\"rotate-ccw\", __iconNode);\n\nexport { __iconNode, RotateCcw as default };\n//# sourceMappingURL=rotate-ccw.mjs.map\n","/**\n * @license lucide-react v1.24.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z\",\n key: \"r04s7s\"\n }\n ]\n];\nconst Star = createLucideIcon(\"star\", __iconNode);\n\nexport { __iconNode, Star as default };\n//# sourceMappingURL=star.mjs.map\n","/**\n * @license lucide-react v1.24.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"M18 6 6 18\", key: \"1bl5f8\" }],\n [\"path\", { d: \"m6 6 12 12\", key: \"d8bk6v\" }]\n];\nconst X = createLucideIcon(\"x\", __iconNode);\n\nexport { __iconNode, X as default };\n//# sourceMappingURL=x.mjs.map\n","import { useEffect, useRef, useState } from 'react';\n\nexport const noop = () => {};\n\n// Matches the `@media (max-width: 767px)` mobile breakpoint used across styles.css\n// and the MOBILE_BREAKPOINT constant in primitives.tsx.\nexport const MOBILE_BREAKPOINT = 767;\n\n/** True when the current viewport is a mobile-sized screen. SSR-safe. */\nexport function isMobileViewport(): boolean {\n return typeof window !== 'undefined' && window.innerWidth <= MOBILE_BREAKPOINT;\n}\n\nexport function cx(...classes: (string | boolean | undefined | null)[]): string {\n return classes.filter(Boolean).join(' ');\n}\n\nexport function resolveWidgetFontFamily(font?: string): string {\n const normalized = (font || '').trim().toLowerCase().replace(/[-_]/g, ' ');\n if (normalized === 'readex pro' || normalized === 'readex') {\n return \"'Readex Pro', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif\";\n }\n if (normalized === 'noto sans' || normalized === 'noto' || normalized === 'noto sans arabic') {\n return \"'Noto Sans', 'Noto Sans Arabic', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif\";\n }\n return \"'Cairo', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif\";\n}\n\n/**\n * Takes a hex color and returns '#000000' or '#ffffff' based on contrast.\n */\nexport function getContrastTextColor(hexColor?: string | null): string {\n if (!hexColor) return '#ffffff';\n const hex = hexColor.replace('#', '').trim();\n\n let fullHex = hex;\n if (hex.length === 3) {\n fullHex = hex.split('').map((c) => c + c).join('');\n }\n if (fullHex.length < 6) return '#ffffff';\n\n const r = parseInt(fullHex.substring(0, 2), 16);\n const g = parseInt(fullHex.substring(2, 4), 16);\n const b = parseInt(fullHex.substring(4, 6), 16);\n\n if (Number.isNaN(r) || Number.isNaN(g) || Number.isNaN(b)) return '#ffffff';\n\n // Calculate the YIQ brightness ratio\n const yiq = ((r * 299) + (g * 587) + (b * 114)) / 1000;\n\n // If the background is light (yiq >= 128), return black text. Otherwise, white.\n return yiq >= 128 ? '#000000' : '#ffffff';\n}\n\n/**\n * Builds CSS custom property styles for the widget surface based on appearance and theme options.\n */\nexport function resolveWidgetThemeStyles(appearance?: {\n font?: string;\n theme?: { accent_color?: string | null; end_call_button_color?: string | null };\n}): React.CSSProperties {\n const styles: Record<string, string> = {\n '--rqmii-font-family': resolveWidgetFontFamily(appearance?.font),\n };\n\n const accentColor = appearance?.theme?.accent_color?.trim();\n if (accentColor) {\n const accentTextColor = getContrastTextColor(accentColor);\n styles['--rqmii-accent'] = accentColor;\n styles['--rqmii-accent-text'] = accentTextColor;\n styles['--rqmii-message-user'] = accentColor;\n styles['--rqmii-message-user-text'] = accentTextColor;\n }\n\n const endCallColor = appearance?.theme?.end_call_button_color?.trim();\n if (endCallColor) {\n const endCallTextColor = getContrastTextColor(endCallColor);\n styles['--rqmii-end-call-bg'] = endCallColor;\n styles['--rqmii-end-call-text'] = endCallTextColor;\n }\n\n return styles as React.CSSProperties;\n}\n\nexport function getGoogleFontUrl(font?: string): string {\n const normalized = (font || '').trim().toLowerCase().replace(/[-_]/g, ' ');\n if (normalized === 'readex pro' || normalized === 'readex') {\n return 'https://fonts.googleapis.com/css2?family=Readex+Pro:wght@400;500;600;700&display=swap';\n }\n if (normalized === 'noto sans' || normalized === 'noto' || normalized === 'noto sans arabic') {\n return 'https://fonts.googleapis.com/css2?family=Noto+Sans:wght@400;500;600;700&family=Noto+Sans+Arabic:wght@400;500;600;700&display=swap';\n }\n return 'https://fonts.googleapis.com/css2?family=Cairo:wght@400;500;600;700&display=swap';\n}\n\nexport function ensureGoogleFontLoaded(font?: string): void {\n if (typeof document === 'undefined') return;\n const href = getGoogleFontUrl(font);\n const existing = document.querySelector(`link[data-rqmii-font=\"${href}\"]`);\n if (existing) return;\n const link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = href;\n link.setAttribute('data-rqmii-font', href);\n document.head.appendChild(link);\n}\n\nexport function languageFontClass(_language?: string): string {\n return '';\n}\n\nexport function languageMenuFontClass(_value?: string): string {\n return '';\n}\n\nexport function languageTextDirection(language: string): 'rtl' | 'ltr' {\n return language.startsWith('ar') || ['fa', 'ur', 'he'].includes(language) ? 'rtl' : 'ltr';\n}\n\nexport function formatTime(seconds: number): string {\n const minutes = Math.floor(seconds / 60).toString().padStart(2, '0');\n const rest = (seconds % 60).toString().padStart(2, '0');\n return `${minutes}:${rest}`;\n}\n\nexport function useElapsed(active = true): number {\n const [elapsed, setElapsed] = useState(0);\n\n useEffect(() => {\n if (!active) return undefined;\n const interval = setInterval(() => setElapsed((value) => value + 1), 1000);\n return () => clearInterval(interval);\n }, [active]);\n\n return elapsed;\n}\n\nexport function useVisualViewportHeight(): number | null {\n const [height, setHeight] = useState<number | null>(null);\n\n useEffect(() => {\n const vv = window.visualViewport;\n if (!vv) return;\n\n const update = () => setHeight(vv.height);\n update();\n\n vv.addEventListener('resize', update);\n vv.addEventListener('scroll', update);\n return () => {\n vv.removeEventListener('resize', update);\n vv.removeEventListener('scroll', update);\n };\n }, []);\n\n return height;\n}\n\nexport function useStreamingText(text: string, streaming?: boolean): string {\n const wordsRef = useRef<string[]>([]);\n wordsRef.current = text.match(/\\S+\\s*/g) || [text];\n\n const [wordCount, setWordCount] = useState(() =>\n streaming ? Math.min(1, wordsRef.current.length) : wordsRef.current.length,\n );\n\n useEffect(() => {\n if (!streaming || !text) {\n setWordCount(wordsRef.current.length);\n return;\n }\n setWordCount((prev) => Math.max(1, prev));\n\n if (wordsRef.current.length <= 1) return;\n\n const timer = setInterval(() => {\n setWordCount((prev) => {\n if (prev >= wordsRef.current.length) {\n clearInterval(timer);\n return prev;\n }\n return prev + 1;\n });\n }, 50);\n\n return () => clearInterval(timer);\n }, [text, streaming]);\n\n return wordsRef.current.slice(0, wordCount).join('');\n}\n","import React, { useEffect, useLayoutEffect, useRef, useState } from 'react';\nimport { ArrowUp, ChevronDown, ChevronUp, RotateCcw } from 'lucide-react';\nimport { getChatLanguage, getChatText, normalizeChatLanguages } from '../languages';\nconst RqmiiOrb = React.lazy(() => import('../Orb').then(m => ({ default: m.RqmiiOrb })));\nimport { cx, languageFontClass, languageTextDirection, useStreamingText } from './utils';\nimport type { PublicAgent, LeadCaptureForm as LeadCaptureFormData } from '../../types';\nimport { useRqmiiAgentContext } from '../../provider/RqmiiAgentProvider';\n\nexport const LanguageSelect = React.memo(function LanguageSelect({ language, languages, onChange }: { language: string; languages: string[]; onChange: (v: string) => void }) {\n const [open, setOpen] = useState(false);\n const ref = useRef<HTMLDivElement>(null);\n const selected = getChatLanguage(language);\n const options = normalizeChatLanguages(languages, language)\n .map((value) => getChatLanguage(value))\n .filter(Boolean);\n\n useEffect(() => {\n if (!open) return undefined;\n const handler = (event: MouseEvent) => {\n if (!ref.current?.contains(event.target as Node)) setOpen(false);\n };\n document.addEventListener('mousedown', handler);\n return () => document.removeEventListener('mousedown', handler);\n }, [open]);\n\n return (\n <div className=\"rqmii-chat-language\" ref={ref}>\n <button type=\"button\" className=\"rqmii-chat-pill\" onClick={() => setOpen((value) => !value)}>\n <span>{selected?.label || language}</span>\n <ChevronDown size={16} />\n </button>\n {open && options.length > 1 && (\n <div className=\"rqmii-chat-language-menu\">\n {options.map((option) => (\n <button\n key={option!.value}\n type=\"button\"\n className={cx('rqmii-chat-language-item', option!.value === language && 'is-selected')}\n onClick={() => { onChange(option!.value); setOpen(false); }}\n >\n {option!.label}\n </button>\n ))}\n </div>\n )}\n </div>\n );\n});\n\nexport const RqmiiChatFooter = React.memo(function RqmiiChatFooter({ language = 'en', brand = 'rqmii', agent }: { language?: string; brand?: string; agent?: PublicAgent | null }) {\n const appearance = agent?.widget?.appearance;\n const showBranding = appearance?.show_branding !== false;\n const footerContent = appearance?.footer_content?.[language];\n const hasFooterContent = !!footerContent?.trim();\n\n if (!showBranding && !hasFooterContent) return <div style={{ padding: 11 }} />;\n\n const template = getChatText(language, 'poweredBy');\n const dir = languageTextDirection(language);\n\n const renderBranding = () => {\n if (template.includes('{brand}')) {\n const parts = template.split('{brand}');\n return (\n <p dir={dir}>\n {parts[0]}\n <strong>{brand}</strong>\n {parts[1]}\n </p>\n );\n }\n return (\n <p dir={dir}>\n {template} <strong>{brand}</strong>\n </p>\n );\n };\n\n return (\n <div className=\"rqmii-chat-footer\" dir={dir}>\n {showBranding && renderBranding()}\n {hasFooterContent && <p dir={dir}>{footerContent}</p>}\n </div>\n );\n});\n\nexport const RqmiiAgentAvatar = React.memo(function RqmiiAgentAvatar({\n agent,\n size = 'large',\n active = false,\n className = '',\n}: {\n agent: PublicAgent | null;\n size?: string;\n active?: boolean;\n className?: string;\n}) {\n const faceImage = agent?.faceImage;\n const isOrb = !faceImage || faceImage === 'orb';\n\n return (\n <div\n className={cx(\n 'rqmii-agent-avatar',\n `rqmii-agent-avatar--${size}`,\n active && 'is-active',\n isOrb && 'is-orb',\n className\n )}\n >\n {isOrb ? (\n <React.Suspense fallback={null}>\n <RqmiiOrb className=\"rqmii-agent-avatar-orb\" />\n </React.Suspense>\n ) : (\n <img\n src={faceImage}\n alt={agent?.name || 'Agent'}\n />\n )}\n </div>\n );\n});\n\nexport const RqmiiChatOpenButton = React.memo(function RqmiiChatOpenButton({ agent, onClick, className = '', position = 'fixed', active = false }: { agent: PublicAgent | null; onClick: () => void; className?: string; position?: 'fixed' | 'static'; active?: boolean }) {\n return (\n <button type=\"button\" className={cx('rqmii-chat-open-button', position === 'fixed' && 'is-fixed', className)} onClick={onClick} aria-label=\"Open chat\">\n <RqmiiAgentAvatar agent={agent} size=\"button\" active={active} />\n </button>\n );\n});\n\n// Plays a short, synthesized notification tone (no external asset needed).\nfunction playNotificationSound(): void {\n try {\n const Ctx = window.AudioContext || (window as unknown as { webkitAudioContext?: typeof AudioContext }).webkitAudioContext;\n if (!Ctx) return;\n const ctx = new Ctx();\n const now = ctx.currentTime;\n const osc = ctx.createOscillator();\n const gain = ctx.createGain();\n osc.type = 'sine';\n osc.frequency.setValueAtTime(880, now);\n osc.frequency.setValueAtTime(1180, now + 0.12);\n gain.gain.setValueAtTime(0.0001, now);\n gain.gain.exponentialRampToValueAtTime(0.18, now + 0.02);\n gain.gain.exponentialRampToValueAtTime(0.0001, now + 0.32);\n osc.connect(gain);\n gain.connect(ctx.destination);\n osc.start(now);\n osc.stop(now + 0.34);\n osc.onended = () => { void ctx.close(); };\n } catch {\n // Autoplay/permission errors are non-fatal — silently ignore.\n }\n}\n\n/**\n * Welcome message bubble shown next to the floating open button before the chat\n * opens. Appears after `delaySeconds`, optionally plays a notification sound, and\n * is dismissed by the parent when clicked or when the chat opens.\n * `buttonPosition` is where the chat button is anchored ('right' or 'left').\n * The bubble appears on the OPPOSITE side so it doesn't overlap the button.\n */\nexport const WelcomeBubble = React.memo(function WelcomeBubble({ message, delaySeconds, soundEnabled, language, buttonPosition = 'right', onClick }: {\n message: string;\n delaySeconds: number;\n soundEnabled: boolean;\n language: string;\n /** Side where the floating chat button sits. Bubble appears on the opposite side. */\n buttonPosition?: 'left' | 'right';\n onClick: () => void;\n}) {\n const [visible, setVisible] = useState(false);\n const trimmed = message.trim();\n\n useEffect(() => {\n if (!trimmed) return undefined;\n const timer = setTimeout(() => {\n setVisible(true);\n if (soundEnabled) playNotificationSound();\n }, Math.max(0, delaySeconds) * 1000);\n return () => clearTimeout(timer);\n }, [trimmed, delaySeconds, soundEnabled]);\n\n if (!visible || !trimmed) return null;\n\n // Bubble is pinned above the floating button on the same side, growing left (button right)\n // or right (button left) up to max-width, then growing up.\n const sideClass = buttonPosition === 'right' ? 'is-right' : 'is-left';\n\n return (\n <button\n type=\"button\"\n className={cx('rqmii-chat-welcome-bubble', sideClass, languageFontClass(language))}\n dir={languageTextDirection(language)}\n onClick={onClick}\n aria-label={trimmed}\n >\n {trimmed}\n </button>\n );\n});\n\nexport const ChatInput = React.memo(function ChatInput({ language, placeholder, onSend, disabled = false, variant = 'text' }: { language: string; placeholder?: string; onSend: (text: string) => void; disabled?: boolean; variant?: 'text' | 'compact' | 'voice' }) {\n const [message, setMessage] = useState('');\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n const maxTextareaHeight = 7 * 24;\n\n const send = () => {\n const text = message.trim();\n if (!text || disabled) return;\n onSend(text);\n setMessage('');\n if (textareaRef.current) textareaRef.current.style.height = 'auto';\n };\n\n return (\n <div className={cx('rqmii-chat-input', languageFontClass(language), variant === 'voice' && 'is-voice')}>\n <textarea\n ref={textareaRef}\n value={message}\n disabled={disabled}\n rows={variant === 'compact' ? 2 : 3}\n dir={languageTextDirection(language)}\n placeholder={placeholder || getChatText(language, 'sendMessage')}\n onChange={(event) => {\n setMessage(event.target.value);\n const textarea = textareaRef.current;\n if (!textarea) return;\n textarea.style.height = 'auto';\n textarea.style.height = `${Math.min(textarea.scrollHeight, maxTextareaHeight)}px`;\n }}\n onKeyDown={(event) => {\n if (event.key === 'Enter' && !event.shiftKey) { event.preventDefault(); send(); }\n }}\n />\n <button type=\"button\" onClick={send} disabled={!message.trim() || disabled} aria-label={getChatText(language, 'send')}>\n <ArrowUp size={20} />\n </button>\n </div>\n );\n});\n\nconst StreamingText = React.memo(function StreamingText({ text, streaming }: { text: string; streaming?: boolean }) {\n const displayText = useStreamingText(text, streaming);\n return <>{displayText}</>;\n});\n\nconst SUGGESTIONS_MAX_HEIGHT = 133;\n// On mobile the panel is a full-screen takeover (see the 767px breakpoint in\n// styles.css), so there's extra vertical room to give the suggestions list.\nconst SUGGESTIONS_MAX_HEIGHT_MOBILE = SUGGESTIONS_MAX_HEIGHT + 44;\nconst MOBILE_BREAKPOINT = 767;\nconst TOGGLE_SIZE = 36;\nconst TOGGLE_GAP = 8;\nconst TOGGLE_RESERVED = TOGGLE_SIZE + TOGGLE_GAP;\n\nfunction getSuggestionsMaxHeight(): number {\n if (typeof window === 'undefined') return SUGGESTIONS_MAX_HEIGHT;\n return window.innerWidth <= MOBILE_BREAKPOINT ? SUGGESTIONS_MAX_HEIGHT_MOBILE : SUGGESTIONS_MAX_HEIGHT;\n}\n\n// The toggle sits on the reading-start side: right in RTL, left in LTR\n// (mirrors CSS `inset-inline-start`).\nfunction toggleSide(textDirection: string): 'left' | 'right' {\n return textDirection === 'rtl' ? 'right' : 'left';\n}\n\n// Finds whichever bubble sits in the toggle's corner of `items`' last row.\nfunction findCornerBubble(items: HTMLButtonElement[], containerWidth: number, side: 'left' | 'right', reserved: number) {\n if (!items.length) return null;\n const lastRowTop = Math.max(...items.map((b) => b.offsetTop));\n const rowItems = items.filter((b) => b.offsetTop >= lastRowTop - 0.5);\n return side === 'right'\n ? rowItems.find((b) => b.offsetLeft + b.offsetWidth > containerWidth - reserved) || null\n : rowItems.find((b) => b.offsetLeft < reserved) || null;\n}\n\n// Reserves room in the corner bubble so its text never renders underneath the\n// toggle button. Two passes: narrowing the corner bubble can re-wrap the row\n// and change which bubble actually touches the corner.\nfunction reserveCornerSpace(items: HTMLButtonElement[], containerWidth: number, side: 'left' | 'right', reserved: number) {\n for (let pass = 0; pass < 2; pass++) {\n const corner = findCornerBubble(items, containerWidth, side, reserved);\n if (!corner) break;\n if (side === 'right') corner.style.marginRight = `${reserved}px`;\n else corner.style.marginLeft = `${reserved}px`;\n corner.style.maxWidth = `calc(100% - ${reserved}px)`;\n }\n}\n\nexport const SuggestedMessages = React.memo(function SuggestedMessages({ suggestions, language, onClick }: { suggestions: string[]; language?: string; onClick: (text: string) => void }) {\n const [expanded, setExpanded] = useState(false);\n const [hasOverflow, setHasOverflow] = useState(false);\n // Index of the first bubble that no longer fits within the max height. Every\n // bubble from this index on is hidden while collapsed so we never show a\n // partially clipped bubble.\n const [hiddenFrom, setHiddenFrom] = useState<number | null>(null);\n // Vertical position of the toggle, aligned to the bottom of the last row\n // that is actually visible (last fitting row when collapsed, last row of all\n // when expanded). Kept in state so it applies the moment the button mounts.\n const [toggleTop, setToggleTop] = useState<number | null>(null);\n const innerRef = useRef<HTMLDivElement>(null);\n const itemRefs = useRef<Array<HTMLButtonElement | null>>([]);\n const textDirection = languageTextDirection(language || 'en');\n const side = toggleSide(textDirection);\n\n const resetReservations = (items: Array<HTMLButtonElement | null>) => {\n items.forEach((b) => { if (b) { b.style.maxWidth = ''; b.style.marginRight = ''; b.style.marginLeft = ''; } });\n };\n\n // COLLAPSED: figure out which bubbles fit within the max height, then\n // reserve corner space in the last visible bubble so its text doesn't sit\n // under the toggle. Bail out while expanded so it can't clobber the\n // expanded-state adjustments below.\n useLayoutEffect(() => {\n const el = innerRef.current;\n if (!el || expanded) return;\n\n const measure = () => {\n const items = itemRefs.current;\n // Reset any previous reservation before measuring the natural\n // (unclipped) layout. Bubbles keep their layout slot even when hidden\n // (visibility, not display) so offsets stay stable across re-measures\n // and we avoid a show/hide flicker loop.\n resetReservations(items);\n\n const width = el.clientWidth;\n const maxHeight = getSuggestionsMaxHeight();\n const firstOverIndex = (): number | null => {\n for (let i = 0; i < items.length; i++) {\n const b = items[i];\n if (!b) continue;\n if (b.offsetTop + b.offsetHeight > maxHeight + 0.5) return i;\n }\n return null;\n };\n\n let firstOverflow = firstOverIndex();\n\n // Reserving room for the toggle narrows the corner bubble, which can make\n // it taller and push it past the limit. Re-measure and shrink the visible\n // set until stable, so a tall corner bubble gets hidden, never cropped.\n if (firstOverflow !== null) {\n for (let guard = 0; guard <= items.length; guard++) {\n resetReservations(items);\n const visible = items.slice(0, firstOverflow).filter((b): b is HTMLButtonElement => !!b);\n reserveCornerSpace(visible, width, side, TOGGLE_RESERVED);\n const next = firstOverIndex();\n if (next === null || next >= firstOverflow) break;\n firstOverflow = next;\n }\n }\n\n setHiddenFrom(firstOverflow);\n setHasOverflow(firstOverflow !== null);\n\n if (firstOverflow !== null) {\n const visible = items.slice(0, firstOverflow).filter((b): b is HTMLButtonElement => !!b);\n const bottom = visible.length ? Math.max(...visible.map((b) => b.offsetTop + b.offsetHeight)) : TOGGLE_SIZE;\n setToggleTop(bottom - TOGGLE_SIZE);\n } else {\n setToggleTop(null);\n }\n };\n\n measure();\n\n const ro = typeof ResizeObserver !== 'undefined' ? new ResizeObserver(measure) : null;\n ro?.observe(el);\n return () => {\n ro?.disconnect();\n resetReservations(itemRefs.current);\n };\n }, [suggestions, expanded, side]);\n\n // EXPANDED: pin the toggle circle at the corner of the last row (all bubbles\n // visible), reserving room in the corner bubble so text never sits under it.\n useLayoutEffect(() => {\n const el = innerRef.current;\n if (!el || !expanded) return;\n\n const items = itemRefs.current.filter((b): b is HTMLButtonElement => !!b);\n resetReservations(itemRefs.current);\n reserveCornerSpace(items, el.clientWidth, side, TOGGLE_RESERVED);\n\n const contentBottom = items.length ? Math.max(...items.map((b) => b.offsetTop + b.offsetHeight)) : TOGGLE_SIZE;\n setToggleTop(contentBottom - TOGGLE_SIZE);\n\n return () => {\n resetReservations(itemRefs.current);\n };\n }, [expanded, suggestions, side]);\n\n if (!suggestions.length) return null;\n\n return (\n <div className={cx('rqmii-suggested-messages', expanded && 'is-expanded', hasOverflow && 'has-overflow')} dir={textDirection}>\n <div ref={innerRef} className={cx('rqmii-suggested-messages-inner', expanded ? 'is-expanded' : 'is-collapsed')}>\n {suggestions.map((text, i) => {\n const hidden = !expanded && hiddenFrom !== null && i >= hiddenFrom;\n return (\n <button\n key={i}\n ref={(node) => { itemRefs.current[i] = node; }}\n type=\"button\"\n className=\"rqmii-suggested-message\"\n onClick={() => onClick(text)}\n style={hidden ? { visibility: 'hidden' } : undefined}\n aria-hidden={hidden || undefined}\n tabIndex={hidden ? -1 : undefined}\n >\n {text}\n </button>\n );\n })}\n {hasOverflow && (\n <button\n type=\"button\"\n className={cx('rqmii-suggested-messages-toggle', side === 'left' && 'is-start-left')}\n style={toggleTop != null ? { top: toggleTop, bottom: 'auto' } : undefined}\n onClick={() => setExpanded((v) => {\n if (v && innerRef.current) innerRef.current.scrollTop = 0;\n return !v;\n })}\n aria-label={expanded ? 'Show less' : 'Show more'}\n aria-expanded={expanded}\n >\n {expanded ? <ChevronUp size={14} /> : <ChevronDown size={14} />}\n </button>\n )}\n </div>\n </div>\n );\n});\n\nexport const TypingIndicator = React.memo(function TypingIndicator({ language }: { language?: string }) {\n const textDirection = languageTextDirection(language || 'en');\n return (\n <div className=\"rqmii-chat-message-row\">\n <div className=\"rqmii-chat-message rqmii-chat-typing-indicator\" dir={textDirection}>\n <span className=\"rqmii-chat-typing-dot\" />\n <span className=\"rqmii-chat-typing-dot\" />\n <span className=\"rqmii-chat-typing-dot\" />\n </div>\n </div>\n );\n});\n\nfunction isMultilineField(key: string): boolean {\n return key === 'message';\n}\n\n/** Map known field keys to their i18n placeholder key. */\nconst FIELD_PLACEHOLDER_KEYS: Record<string, string> = {\n name: 'leadFormName',\n email: 'leadFormEmail',\n phone: 'leadFormPhone',\n message: 'leadFormMessage',\n};\n\nexport const LeadCaptureFormMessage = React.memo(function LeadCaptureFormMessage({ messageId, form, language, textDirection, formSubmitted }: { messageId: string; form: LeadCaptureFormData; language: string; textDirection: 'rtl' | 'ltr'; formSubmitted?: boolean }) {\n const ctx = useRqmiiAgentContext();\n const [values, setValues] = useState<Record<string, string>>({});\n const [submitting, setSubmitting] = useState(false);\n const [submitted, setSubmitted] = useState(!!formSubmitted);\n const [error, setError] = useState<string | null>(null);\n\n const title = form.title || getChatText(language, 'leadFormTitle');\n\n const getPlaceholder = (field: LeadCaptureFormData['fields'][number]) => {\n const i18nKey = FIELD_PLACEHOLDER_KEYS[field.key];\n const label = i18nKey ? getChatText(language, i18nKey) : field.label;\n return `${label}${field.required ? '*' : ''}`;\n };\n\n const handleChange = (key: string, value: string) => {\n setValues((prev) => ({ ...prev, [key]: value }));\n if (error) setError(null);\n };\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n if (submitting || submitted) return;\n\n const missingRequired = form.fields.some((f) => f.required && !values[f.key]?.trim());\n if (missingRequired) {\n setError(getChatText(language, 'leadFormRequiredError'));\n return;\n }\n\n const collectedData: Record<string, string> = {};\n for (const f of form.fields) {\n const v = values[f.key]?.trim();\n if (v) collectedData[f.key] = v;\n }\n\n setSubmitting(true);\n setError(null);\n try {\n await ctx.submitLead({ agentId: form.agentId, collectedData });\n setSubmitted(true);\n // Persist the submitted flag in the provider message list so it\n // survives component remounts (e.g. session end → feedback → back).\n ctx.setMessages(\n ctx.messages.map((m) =>\n m.id === messageId ? { ...m, formSubmitted: true } : m,\n ),\n );\n } catch (err) {\n setError((err as Error)?.message || getChatText(language, 'leadFormGenericError'));\n } finally {\n setSubmitting(false);\n }\n };\n\n if (submitted) {\n return (\n <div className=\"rqmii-chat-message-row rqmii-chat-lead-form-row\">\n <div className=\"rqmii-chat-lead-form rqmii-chat-lead-form--done\" dir={textDirection}>\n <div className=\"rqmii-chat-lead-form-success\">{getChatText(language, 'leadFormSuccess')}</div>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"rqmii-chat-message-row rqmii-chat-lead-form-row\">\n <form className=\"rqmii-chat-lead-form\" dir={textDirection} onSubmit={handleSubmit}>\n <div className=\"rqmii-chat-lead-form-title\">{title}</div>\n {form.fields.map((field) => {\n const placeholder = getPlaceholder(field);\n const inputType = field.type === 'email' ? 'email' : field.type === 'date' ? 'date' : 'text';\n return isMultilineField(field.key) ? (\n <textarea\n key={field.key}\n className=\"rqmii-chat-lead-form-input rqmii-chat-lead-form-textarea\"\n placeholder={placeholder}\n value={values[field.key] || ''}\n onChange={(e) => handleChange(field.key, e.target.value)}\n disabled={submitting}\n rows={4}\n />\n ) : (\n <input\n key={field.key}\n className=\"rqmii-chat-lead-form-input\"\n type={inputType}\n placeholder={placeholder}\n value={values[field.key] || ''}\n onChange={(e) => handleChange(field.key, e.target.value)}\n disabled={submitting}\n />\n );\n })}\n {error && <div className=\"rqmii-chat-lead-form-error\">{error}</div>}\n <button type=\"submit\" className=\"rqmii-chat-lead-form-submit\" disabled={submitting}>\n {submitting ? getChatText(language, 'loading') : getChatText(language, 'submit')}\n </button>\n </form>\n </div>\n );\n});\n\nconst MessageRow = React.memo(function MessageRow({ message, textDirection, language }: { message: any; textDirection: 'rtl' | 'ltr'; language: string }) {\n if (message.role === 'lead_form' && message.form) {\n return <LeadCaptureFormMessage messageId={message.id} form={message.form} language={language} textDirection={textDirection} formSubmitted={message.formSubmitted} />;\n }\n const isUser = message.role === 'user' || message.sender === 'user';\n return (\n <div className={cx('rqmii-chat-message-row', isUser && 'is-user')}>\n <div className=\"rqmii-chat-message\" dir={textDirection}>\n <StreamingText text={message.text} streaming={message.streaming} />\n </div>\n </div>\n );\n});\n\nexport const MessageList = React.memo(function MessageList({ messages, partialTranscript, language, showTypingIndicator }: { messages: Array<{ id?: string; role?: string; sender?: string; text: string; streaming?: boolean; form?: LeadCaptureFormData }>; partialTranscript?: string; language?: string; showTypingIndicator?: boolean }) {\n const endRef = useRef<HTMLDivElement>(null);\n const textDirection = languageTextDirection(language || 'en');\n const prevMessageCountRef = useRef(messages.length);\n\n useEffect(() => {\n if (!endRef.current) return;\n const isNewMessage = messages.length !== prevMessageCountRef.current;\n prevMessageCountRef.current = messages.length;\n endRef.current.scrollIntoView({ behavior: isNewMessage ? 'smooth' : 'instant', block: 'end' });\n }, [messages, partialTranscript]);\n\n return (\n <div className=\"rqmii-chat-messages\">\n {messages.map((message) => (\n <MessageRow key={message.id || `${message.role}-${message.text}`} message={message} textDirection={textDirection} language={language || 'en'} />\n ))}\n {showTypingIndicator && <TypingIndicator language={language} />}\n {partialTranscript && (\n <div className=\"rqmii-chat-message-row is-user is-partial\">\n <div className=\"rqmii-chat-message\" dir={textDirection}>{partialTranscript}</div>\n </div>\n )}\n <div ref={endRef} />\n </div>\n );\n});\n\nexport const ErrorPanel = React.memo(function ErrorPanel({ message, onRetry, onClose, language = 'en' }: { message?: string; onRetry?: () => void; onClose?: () => void; language?: string }) {\n return (\n <div className=\"rqmii-chat-panel rqmii-chat-panel--error\">\n {onClose && <button type=\"button\" className=\"rqmii-error-close\" onClick={onClose}>×</button>}\n <p>{message || getChatText(language, 'connectionFailed')}</p>\n {onRetry && (\n <button type=\"button\" className=\"rqmii-chat-retry\" onClick={onRetry}>\n <RotateCcw size={16} />\n <span>{getChatText(language, 'retry')}</span>\n </button>\n )}\n </div>\n );\n});\n","import React, { useState } from 'react';\nimport { ChevronLeft, Loader2, Minimize2, Star } from 'lucide-react';\nimport { getChatText } from '../languages';\nimport { RqmiiAgentAvatar, RqmiiChatFooter } from './primitives';\nimport { cx, languageFontClass, languageTextDirection } from './utils';\nimport type { PublicAgent } from '../../types';\nimport type { EndedBy } from './chat-box-types';\n\nconst MAX_RATING = 5;\n\n// ---------------------------------------------------------------------------\n// Star rating row\n// ---------------------------------------------------------------------------\n\nfunction StarRow({ rating, onRate, readonly, size = 28 }: { rating: number; onRate?: (v: number) => void; readonly?: boolean; size?: number }) {\n const [hover, setHover] = useState(0);\n const active = hover || rating;\n\n return (\n <div className=\"rqmii-chat-rating-stars\" role=\"radiogroup\">\n {Array.from({ length: MAX_RATING }, (_, i) => {\n const value = i + 1;\n const filled = value <= active;\n return (\n <button\n key={value}\n type=\"button\"\n className={cx('rqmii-chat-star', filled && 'is-filled', readonly && 'is-readonly')}\n disabled={readonly}\n aria-label={`${value}`}\n aria-checked={value === rating}\n role=\"radio\"\n onMouseEnter={() => !readonly && setHover(value)}\n onMouseLeave={() => !readonly && setHover(0)}\n onClick={() => !readonly && onRate?.(value)}\n >\n <Star size={size} fill={filled ? 'currentColor' : 'none'} />\n </button>\n );\n })}\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Rating bar — embedded in the ended panel (text / text_and_voice / voice)\n// ---------------------------------------------------------------------------\n\nexport function RatingBar({\n language,\n rating,\n endedBy,\n sessionId,\n interactive,\n showTellUsMore,\n showRating = true,\n showConversationId = true,\n onRate,\n onTellUsMore,\n}: {\n language: string;\n rating: number;\n endedBy: EndedBy;\n sessionId: string | null;\n interactive: boolean;\n showTellUsMore: boolean;\n showRating?: boolean;\n showConversationId?: boolean;\n onRate: (v: number) => void;\n onTellUsMore: () => void;\n}) {\n const header = rating > 0 ? getChatText(language, 'ratingThankYou') : getChatText(language, 'ratingQuestion');\n const endedText = endedBy === 'user' ? getChatText(language, 'youEnded') : getChatText(language, 'agentEnded');\n\n return (\n <div\n className={cx('rqmii-chat-rating', !showRating && 'rqmii-chat-rating--unrated', languageFontClass(language))}\n dir={languageTextDirection(language)}\n >\n {showRating && (\n <>\n <div className=\"rqmii-chat-rating-header\">{header}</div>\n <StarRow rating={rating} onRate={onRate} readonly={!interactive} />\n {showTellUsMore && (\n <button type=\"button\" className=\"rqmii-chat-rating-more\" onClick={onTellUsMore}>\n {getChatText(language, 'tellUsMore')}\n </button>\n )}\n </>\n )}\n <div className=\"rqmii-chat-rating-meta\">\n <div>{endedText}</div>\n {showConversationId && sessionId && (\n <div>\n {getChatText(language, 'sessionIdLabel')} <span>{sessionId}</span>\n </div>\n )}\n </div>\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Feedback panel — full-screen; lets the user submit a free-text comment\n// ---------------------------------------------------------------------------\n\nexport function FeedbackPanel({\n agent,\n language,\n rating,\n onBack,\n onMinimize,\n onSubmit,\n}: {\n agent: PublicAgent;\n language: string;\n rating: number;\n onBack: () => void;\n onMinimize: () => void;\n onSubmit: (comment: string) => Promise<void> | void;\n}) {\n const [comment, setComment] = useState('');\n const [submitting, setSubmitting] = useState(false);\n const canSubmit = comment.trim().length > 0 && !submitting;\n\n const handleSubmit = async () => {\n if (!canSubmit) return;\n setSubmitting(true);\n try {\n await onSubmit(comment.trim());\n } finally {\n setSubmitting(false);\n }\n };\n\n return (\n <div className={cx('rqmii-chat-panel rqmii-chat-panel--feedback', languageFontClass(language))} dir={languageTextDirection(language)}>\n <div className=\"rqmii-chat-topbar\">\n <button type=\"button\" className=\"rqmii-chat-circle-button\" onClick={onBack} aria-label=\"Back\">\n <ChevronLeft size={20} />\n </button>\n <button type=\"button\" className=\"rqmii-chat-circle-button\" onClick={onMinimize} aria-label={getChatText(language, 'minimize')}>\n <Minimize2 size={20} />\n </button>\n </div>\n <div className=\"rqmii-chat-feedback-body\">\n <RqmiiAgentAvatar agent={agent} size=\"hero\" />\n <StarRow rating={rating} readonly />\n <div className=\"rqmii-chat-feedback-title\">{getChatText(language, 'ratingThankYou')}</div>\n <div className=\"rqmii-chat-feedback-subtitle\">{getChatText(language, 'feedbackSubtitle')}</div>\n <textarea\n className=\"rqmii-chat-feedback-input\"\n value={comment}\n dir={languageTextDirection(language)}\n placeholder={getChatText(language, 'feedbackPlaceholder')}\n onChange={(e) => setComment(e.target.value)}\n />\n <div className=\"rqmii-chat-feedback-actions\">\n <button type=\"button\" className=\"rqmii-chat-feedback-submit\" onClick={handleSubmit} disabled={!canSubmit}>\n {submitting ? <Loader2 className=\"rqmii-chat-spin\" size={18} /> : getChatText(language, 'submit')}\n </button>\n </div>\n </div>\n <RqmiiChatFooter language={language} agent={agent} />\n </div>\n );\n}\n","import React from 'react';\nimport { Loader2, Maximize2, Mic, MicOff, Minimize2, Phone, PhoneOff, X } from 'lucide-react';\nconst RqmiiCloudAvatarPlayer = React.lazy(() => import('../../components/RqmiiCloudAvatarPlayer').then((m) => ({ default: m.RqmiiCloudAvatarPlayer })));\nimport { useRqmiiAvatar } from '../../hooks/use-rqmii-avatar';\nimport { useRqmiiMessages } from '../../hooks/use-rqmii-messages';\nimport { getChatText } from '../languages';\nimport { ChatInput, LanguageSelect, MessageList, RqmiiAgentAvatar, RqmiiChatFooter, SuggestedMessages } from './primitives';\nimport { RatingBar } from './feedback';\nimport { cx, formatTime, isMobileViewport, languageFontClass } from './utils';\nimport type { PublicAgent } from '../../types';\nimport type { EndedBy } from './chat-box-types';\n\nfunction usePanelStyle(visualViewportHeight?: number | null): React.CSSProperties | undefined {\n if (visualViewportHeight == null || typeof window === 'undefined' || window.innerWidth >= 768) return undefined;\n return {\n top: `${window.innerHeight - visualViewportHeight}px`,\n bottom: 0,\n };\n}\n\n// ---------------------------------------------------------------------------\n// Shared top bar for active text/text_and_voice conversation panels\n// ---------------------------------------------------------------------------\n\nexport const StartTextPanel = React.memo(function StartTextPanel({ agent, language, languages, onLanguageChange, onClose, onSend, isVoiceEnabled = false, isAudioPlaying = false, isVoiceSetupLoading = false, onStartVoice, visualViewportHeight, disabled = false, error, suggestions, onSuggestionClick, compact = false }: { agent: PublicAgent; language: string; languages: string[]; onLanguageChange: (v: string) => void; onClose: () => void; onSend: (t: string) => void; isVoiceEnabled?: boolean; isAudioPlaying?: boolean; isVoiceSetupLoading?: boolean; onStartVoice: () => void; visualViewportHeight?: number | null; disabled?: boolean; error?: string; suggestions?: string[]; onSuggestionClick?: (t: string) => void; compact?: boolean }) {\n const panelStyle = usePanelStyle(visualViewportHeight);\n const [isMobile, setIsMobile] = React.useState(isMobileViewport);\n\n React.useEffect(() => {\n const onResize = () => setIsMobile(isMobileViewport());\n window.addEventListener('resize', onResize);\n return () => window.removeEventListener('resize', onResize);\n }, []);\n\n const isCompactLayout = compact && !isMobile;\n const avatarSize = isCompactLayout ? 'start' : 'hero';\n const hasSuggestions = suggestions && suggestions.length > 0;\n\n return (\n <div className={cx('rqmii-chat-panel rqmii-chat-panel--start', isCompactLayout && 'rqmii-chat-panel--start-compact', languageFontClass(language))} style={panelStyle}>\n <div className=\"rqmii-chat-topbar\">\n <span />\n <div className=\"rqmii-chat-topbar-actions\">\n <LanguageSelect language={language} languages={languages} onChange={onLanguageChange} />\n <button type=\"button\" className=\"rqmii-chat-circle-button\" onClick={onClose}><X size={20} /></button>\n </div>\n </div>\n <div className=\"rqmii-chat-start-body\">\n {isVoiceEnabled ? (\n <div className={cx('rqmii-chat-call-avatar-wrap', isCompactLayout && 'is-compact')}>\n <RqmiiAgentAvatar agent={agent} size={avatarSize} active={isAudioPlaying} />\n <button type=\"button\" className={cx('rqmii-chat-call-button', isCompactLayout && 'is-compact')} onClick={onStartVoice} disabled={isVoiceSetupLoading} aria-label={getChatText(language, 'startVoice')}>\n {isVoiceSetupLoading ? <Loader2 className=\"rqmii-chat-spin\" size={isCompactLayout ? 18 : 24} /> : <Phone size={isCompactLayout ? 18 : 24} />}\n </button>\n </div>\n ) : (\n <RqmiiAgentAvatar agent={agent} size={avatarSize} />\n )}\n <div className=\"rqmii-chat-agent-name\">{agent.name}</div>\n {error && <div className=\"rqmii-chat-error-text\">{error}</div>}\n </div>\n {hasSuggestions && (\n <div className=\"rqmii-chat-start-suggestions\">\n <SuggestedMessages suggestions={suggestions} language={language} onClick={(text) => onSuggestionClick?.(text)} />\n </div>\n )}\n <ChatInput language={language} onSend={onSend} disabled={disabled} />\n <RqmiiChatFooter language={language} agent={agent} />\n </div>\n );\n});\n\nexport const StartVoicePanel = React.memo(function StartVoicePanel({ agent, language, languages, onLanguageChange, onClose, onStartVoice, isVoiceSetupLoading = false, isAudioPlaying, visualViewportHeight }: { agent: PublicAgent; language: string; languages: string[]; onLanguageChange: (v: string) => void; onClose: () => void; onStartVoice: () => void; isVoiceSetupLoading?: boolean; isAudioPlaying?: boolean; visualViewportHeight?: number | null }) {\n const panelStyle = usePanelStyle(visualViewportHeight);\n\n return (\n <div className={cx('rqmii-chat-panel rqmii-chat-panel--voice-start', languageFontClass(language))} style={panelStyle}>\n <div className=\"rqmii-chat-topbar\">\n <span />\n <div className=\"rqmii-chat-topbar-actions\">\n <LanguageSelect language={language} languages={languages} onChange={onLanguageChange} />\n <button type=\"button\" className=\"rqmii-chat-circle-button\" onClick={onClose}><X size={20} /></button>\n </div>\n </div>\n <div className=\"rqmii-chat-call-body\">\n <div className=\"rqmii-chat-call-avatar-wrap\">\n <RqmiiAgentAvatar agent={agent} size=\"hero\" active={isAudioPlaying} />\n <button type=\"button\" className=\"rqmii-chat-call-button\" onClick={onStartVoice} disabled={isVoiceSetupLoading} aria-label={getChatText(language, 'startVoice')}>\n {isVoiceSetupLoading ? <Loader2 className=\"rqmii-chat-spin\" size={24} /> : <Phone size={24} />}\n </button>\n </div>\n <div className=\"rqmii-chat-agent-name\">{getChatText(language, 'call')} {agent.name}</div>\n </div>\n <RqmiiChatFooter language={language} agent={agent} />\n </div>\n );\n});\n\nexport const TextChatPanel = React.memo(function TextChatPanel({ agent, language, onEndSession, onMinimize, messages, partialTranscript, onSend, isAudioPlaying, isVoiceEnabled, onToggleVoice, isListening, isSpeaking, isLoading, isAgentThinking, isAgentSpeaking, onStartVoice, elapsed, visualViewportHeight, waitingForResponse }: { agent: PublicAgent; language: string; onEndSession: () => void; onMinimize?: () => void; messages: Array<{ id?: string; role?: string; sender?: string; text: string; streaming?: boolean }>; partialTranscript?: string; onSend: (t: string) => void; isAudioPlaying: boolean; isVoiceEnabled: boolean; onToggleVoice?: () => void; isListening?: boolean; isSpeaking?: boolean; isLoading?: boolean; isAgentThinking?: boolean; isAgentSpeaking?: boolean; onStartVoice?: () => void; elapsed: number; visualViewportHeight?: number | null; waitingForResponse?: boolean }) {\n const status = getStatusText({ language, isListening, isLoading, isSpeaking, isAudioPlaying, isAgentThinking, isAgentSpeaking, persistentListening: false });\n const panelStyle = usePanelStyle(visualViewportHeight);\n const showTopbarAvatar = agent.widget?.appearance?.show_topbar_avatar_image !== false;\n\n return (\n <div className={cx('rqmii-chat-panel rqmii-chat-panel--conversation', languageFontClass(language))} style={panelStyle}>\n <div className=\"rqmii-chat-header\">\n {showTopbarAvatar && <RqmiiAgentAvatar agent={agent} size=\"header\" active={isAudioPlaying} />}\n {isVoiceEnabled && status && (\n <div className={cx('rqmii-chat-header-status', !showTopbarAvatar && 'is-expanded')}>\n <span>{status}</span>\n </div>\n )}\n <div className=\"rqmii-chat-header-spacer\" />\n <div className=\"rqmii-chat-header-actions\">\n {onMinimize && (<button type=\"button\" className=\"rqmii-chat-circle-button\" onClick={onMinimize} aria-label={getChatText(language, 'minimize')}><Minimize2 size={20} /></button>)}\n {isVoiceEnabled && (\n <button type=\"button\" className={cx('rqmii-chat-circle-button', isSpeaking && 'is-active')} onClick={onToggleVoice} aria-label={isListening ? getChatText(language, 'stopVoice') : getChatText(language, 'startVoice')}>\n {isListening ? <Mic size={20} /> : <MicOff size={20} />}\n </button>\n )}\n <button type=\"button\" className=\"rqmii-chat-circle-button is-danger\" onClick={onEndSession} aria-label={getChatText(language, 'endCall')}><PhoneOff size={20} /></button>\n </div>\n </div>\n <MessageList messages={messages} partialTranscript={partialTranscript} language={language} showTypingIndicator={waitingForResponse} />\n {isVoiceEnabled && (<div className=\"rqmii-chat-session-counter\">{formatTime(elapsed)}</div>)}\n <ChatInput language={language} onSend={onSend} />\n <RqmiiChatFooter language={language} agent={agent} />\n </div>\n );\n});\n\nexport const VoiceCallPanel = React.memo(function VoiceCallPanel({ agent, language, onEndSession, onMinimize, isListening, isLoading, isSpeaking, isAudioPlaying, isAgentThinking, isAgentSpeaking, onToggleVoice, elapsed, visualViewportHeight }: { agent: PublicAgent; language: string; onEndSession: () => void; onMinimize?: () => void; isListening?: boolean; isLoading?: boolean; isSpeaking?: boolean; isAudioPlaying: boolean; isAgentThinking?: boolean; isAgentSpeaking?: boolean; onToggleVoice?: () => void; elapsed: number; visualViewportHeight?: number | null }) {\n const status = getStatusText({ language, isListening, isLoading, isSpeaking, isAudioPlaying, isAgentThinking, isAgentSpeaking, persistentListening: true });\n const panelStyle = usePanelStyle(visualViewportHeight);\n\n return (\n <div className={cx('rqmii-chat-panel rqmii-chat-panel--voice-call', languageFontClass(language))} style={panelStyle}>\n <div className=\"rqmii-chat-call-status\">\n <span className={cx('rqmii-chat-live-dot', isListening && 'is-live')} />\n <span>{formatTime(elapsed)}</span>\n <button type=\"button\" className=\"rqmii-chat-circle-button\" onClick={onMinimize}><Minimize2 size={20} /></button>\n </div>\n <div className=\"rqmii-chat-voice-frame\">\n <RqmiiAgentAvatar agent={agent} size=\"hero\" active={isAudioPlaying} />\n <div className=\"rqmii-chat-agent-name\">{agent.name}</div>\n <div className={cx('rqmii-chat-status-pill', !status && 'is-empty')}>{status || getChatText(language, 'listening')}</div>\n <div className=\"rqmii-chat-voice-actions\">\n <button type=\"button\" className={cx('rqmii-chat-circle-button', isSpeaking && 'is-active')} onClick={onToggleVoice}>\n {isListening ? <Mic size={20} /> : <MicOff size={20} />}\n </button>\n <button type=\"button\" className=\"rqmii-chat-circle-button is-danger\" onClick={onEndSession} aria-label={getChatText(language, 'endCall')}><PhoneOff size={20} /></button>\n </div>\n </div>\n <RqmiiChatFooter language={language} agent={agent} />\n </div>\n );\n});\n\nfunction getStatusText({ language, isListening, isLoading, isSpeaking, isAudioPlaying, isAgentThinking, isAgentSpeaking, persistentListening = false }: { language: string; isListening?: boolean; isLoading?: boolean; isSpeaking?: boolean; isAudioPlaying: boolean; isAgentThinking?: boolean; isAgentSpeaking?: boolean; persistentListening?: boolean }): string | null {\n if (isLoading) return getChatText(language, 'loading');\n if (isSpeaking) return getChatText(language, 'listening');\n if (isAudioPlaying || isAgentSpeaking) return getChatText(language, 'talkToInterrupt');\n if (isAgentThinking) return getChatText(language, 'processing');\n if (!isListening) return null;\n return persistentListening ? getChatText(language, 'listening') : null;\n}\n\nexport const MinimizedChatPill = React.memo(function MinimizedChatPill({ agent, language, onRestore, onClose, isListening, isAudioPlaying, isSpeaking, onToggleVoice, elapsed, variant = 'voice' }: { agent: PublicAgent; language: string; onRestore: () => void; onClose: () => void; isListening?: boolean; isAudioPlaying: boolean; isSpeaking?: boolean; onToggleVoice?: () => void; elapsed: number; variant?: 'voice' | 'text' }) {\n const isText = variant === 'text';\n\n return (\n <div className={cx('rqmii-chat-minimized', languageFontClass(language))}>\n <RqmiiAgentAvatar agent={agent} size=\"minimized\" active={isAudioPlaying} />\n {!isText && <span className=\"rqmii-chat-minimized-time\">{formatTime(elapsed)}</span>}\n <div className=\"rqmii-chat-minimized-actions\">\n <button type=\"button\" className=\"rqmii-chat-circle-button\" onClick={onRestore} aria-label={getChatText(language, 'maximize')}><Maximize2 size={20} /></button>\n {!isText && (\n <button type=\"button\" className={cx('rqmii-chat-circle-button', isSpeaking && 'is-active')} onClick={onToggleVoice} aria-label={isListening ? getChatText(language, 'stopVoice') : getChatText(language, 'startVoice')}>\n {isListening ? <Mic size={20} /> : <MicOff size={20} />}\n </button>\n )}\n <button type=\"button\" className=\"rqmii-chat-circle-button is-danger\" onClick={onClose} aria-label={getChatText(language, 'endCall')}><PhoneOff size={20} /></button>\n </div>\n </div>\n );\n});\n\n// ---------------------------------------------------------------------------\n// Ended session panel — shown after any terminal state across all chat kinds\n// ---------------------------------------------------------------------------\n\nexport interface EndedChatPanelProps {\n agent: PublicAgent;\n language: string;\n languages: string[];\n chatKind: 'text' | 'voice' | 'text_and_voice';\n messages: Array<{ id?: string; role?: string; sender?: string; text: string }>;\n onLanguageChange: (v: string) => void;\n onMinimize: () => void;\n /** Start a new voice (or text_and_voice) session. */\n onStartNewVoice: () => void;\n /** Start a new text session with the given first message. */\n onStartNewText: (text: string) => void;\n isVoiceSetupLoading?: boolean;\n visualViewportHeight?: number | null;\n /** Rating/feedback state for the embedded RatingBar. */\n rating: number;\n endedBy: EndedBy;\n sessionId: string | null;\n ratingInteractive: boolean;\n showTellUsMore: boolean;\n onRate: (v: number) => void;\n onTellUsMore: () => void;\n}\n\nexport const EndedChatPanel = React.memo(function EndedChatPanel({\n agent,\n language,\n languages,\n chatKind,\n messages,\n onLanguageChange,\n onMinimize,\n onStartNewVoice,\n onStartNewText,\n isVoiceSetupLoading = false,\n visualViewportHeight,\n rating,\n endedBy,\n sessionId,\n ratingInteractive,\n showTellUsMore,\n onRate,\n onTellUsMore,\n}: EndedChatPanelProps) {\n const panelStyle = usePanelStyle(visualViewportHeight);\n\n const endedScreen = agent.widget?.behavior?.conversation_ended_screen;\n const postChatRatingEnabled = !!endedScreen?.post_chat_rating_enabled;\n const showConversationId = endedScreen?.show_conversation_id ?? true;\n\n const ratingBar = (\n <RatingBar\n language={language}\n rating={rating}\n endedBy={endedBy}\n sessionId={sessionId}\n interactive={ratingInteractive}\n showTellUsMore={showTellUsMore}\n showRating={postChatRatingEnabled}\n showConversationId={showConversationId}\n onRate={onRate}\n onTellUsMore={onTellUsMore}\n />\n );\n\n // Show the call button whenever the agent supports voice — even if the last session\n // was committed to text-only mode (text_and_voice text-first). This lets the user\n // start a new text_and_voice call from the call button, or a new text session by\n // sending a message, regardless of how the previous session was started.\n const showCallButton = chatKind === 'voice' || chatKind === 'text_and_voice';\n\n // Show the text input when the agent supports text: text, text_and_voice, or\n // text_and_voice that went voice-first (user can pick either path for new session).\n const showTextInput = chatKind === 'text' || chatKind === 'text_and_voice';\n\n // Language pill uses the same markup/classes as the start screens (StartTextPanel /\n // StartVoicePanel) so its font/style matches everywhere. The circle buttons are sized\n // to match the ACTIVE session's header/call-status buttons (via the --ended modifier\n // below) rather than the larger start-screen buttons.\n const topBarActions = (\n <div className=\"rqmii-chat-topbar-actions rqmii-chat-topbar-actions--ended\">\n <LanguageSelect language={language} languages={languages} onChange={onLanguageChange} />\n <button\n type=\"button\"\n className=\"rqmii-chat-circle-button\"\n onClick={onMinimize}\n aria-label={getChatText(language, 'minimize')}\n >\n <Minimize2 size={20} />\n </button>\n {showCallButton && (\n <button\n type=\"button\"\n className=\"rqmii-chat-circle-button rqmii-chat-circle-button--call-start\"\n onClick={onStartNewVoice}\n disabled={isVoiceSetupLoading}\n aria-label={getChatText(language, 'startVoice')}\n >\n {isVoiceSetupLoading\n ? <Loader2 className=\"rqmii-chat-spin\" size={20} />\n : <Phone size={20} />}\n </button>\n )}\n </div>\n );\n\n // Voice-only ended session: no transcript. Keep the avatar + name (like the call\n // frame) but hide the status pill, mic and end-call buttons. The empty space is\n // reserved for a future feedback UI.\n if (chatKind === 'voice') {\n return (\n <div className={cx('rqmii-chat-panel rqmii-chat-panel--voice-call', languageFontClass(language))} style={panelStyle}>\n <div className=\"rqmii-chat-topbar\">\n <span />\n {topBarActions}\n </div>\n <div className=\"rqmii-chat-voice-frame\">\n <RqmiiAgentAvatar agent={agent} size=\"hero\" />\n <div className=\"rqmii-chat-agent-name\">{agent.name}</div>\n {ratingBar}\n </div>\n <RqmiiChatFooter language={language} agent={agent} />\n </div>\n );\n }\n\n const showTopbarAvatar = agent.widget?.appearance?.show_topbar_avatar_image !== false;\n\n return (\n <div className={cx('rqmii-chat-panel rqmii-chat-panel--conversation', languageFontClass(language))} style={panelStyle}>\n {/* Top bar: avatar on the left (if enabled), language menu + minimize (+ call) on the right */}\n <div className=\"rqmii-chat-topbar\">\n {showTopbarAvatar ? (\n <RqmiiAgentAvatar agent={agent} size=\"header\" />\n ) : (\n <span />\n )}\n {topBarActions}\n </div>\n\n {/* History (read-only) — shrinks to make room for the rating bar, stays scrollable */}\n <MessageList messages={messages} language={language} />\n\n {/* Rating bar pushes the history up and sits above the input */}\n {ratingBar}\n\n {/* Input — for new session; disabled while no session running */}\n {showTextInput && (\n <ChatInput language={language} onSend={onStartNewText} />\n )}\n <RqmiiChatFooter language={language} agent={agent} />\n </div>\n );\n});\n\nexport const AvatarChatPanel = React.memo(function AvatarChatPanel({ agent, language, onClose }: { agent: PublicAgent; language: string; onClose: () => void }) {\n const { streamingUrl, isCloudStreamConnected, cloudStreamError } = useRqmiiAvatar();\n const { isAvatarSpeaking } = useRqmiiAvatar();\n const { messages, sendTextMessage } = useRqmiiMessages();\n\n return (\n <div className={cx('rqmii-avatar-panel', languageFontClass(language))}>\n <div className=\"rqmii-avatar-stream\">\n <React.Suspense fallback={<div className=\"rqmii-avatar-overlay\">{getChatText(language, 'loading')}</div>}>\n <RqmiiCloudAvatarPlayer autoConnect muted={false} />\n </React.Suspense>\n {!streamingUrl && (<div className=\"rqmii-avatar-overlay\">{getChatText(language, 'loading')}</div>)}\n {cloudStreamError && (<div className=\"rqmii-avatar-overlay\">{getChatText(language, 'connectionFailed')}</div>)}\n <div className=\"rqmii-avatar-controls\">\n <RqmiiAgentAvatar agent={agent} size=\"header\" active={isAvatarSpeaking} />\n <div className=\"rqmii-chat-header-spacer\" />\n <button type=\"button\" className=\"rqmii-chat-circle-button\" disabled={!isCloudStreamConnected}><Mic size={20} /></button>\n <button type=\"button\" className=\"rqmii-chat-circle-button is-danger\" onClick={onClose}><X size={20} /></button>\n </div>\n </div>\n {agent.useText && (\n <div className=\"rqmii-avatar-sidebar\">\n <MessageList messages={messages} language={language} />\n <ChatInput language={language} onSend={sendTextMessage} variant=\"compact\" />\n <RqmiiChatFooter language={language} agent={agent} />\n </div>\n )}\n </div>\n );\n});\n","import React from 'react';\n\ninterface RqmiiMarkdownProps {\n content: string;\n className?: string;\n}\n\n/**\n * Sanitizes link URLs to prevent XSS (blocks javascript:, data:, vbscript:).\n */\nfunction sanitizeUrl(url: string): string {\n const trimmed = url.trim();\n const lower = trimmed.toLowerCase();\n if (\n lower.startsWith('javascript:') ||\n lower.startsWith('data:') ||\n lower.startsWith('vbscript:')\n ) {\n return '#';\n }\n return trimmed;\n}\n\n/**\n * Parses inline markdown tokens: bold (**text**), italic (*text*),\n * strikethrough (~~text~~), code (`code`), and links ([text](url)).\n */\nfunction parseInlineMarkdown(text: string): React.ReactNode[] {\n const nodes: React.ReactNode[] = [];\n // Tokenizer pattern matching markdown inlines\n // 1: Link [text](url)\n // 2,3: Link text and url\n // 4: Bold **text** or __text__\n // 5: Italic *text* or _text_\n // 6: Strikethrough ~~text~~\n // 7: Inline code `code`\n const pattern =\n /(\\[([^\\]]+)\\]\\(([^)]+)\\))|(\\*\\*([^*]+)\\*\\*|__([^_]+)__)|(\\*([^*]+)\\*|_([^_]+)_)|(~~([^~]+)~~)|(`([^`]+)`)/g;\n\n let lastIndex = 0;\n let match: RegExpExecArray | null;\n\n while ((match = pattern.exec(text)) !== null) {\n // Append text before match\n if (match.index > lastIndex) {\n nodes.push(text.slice(lastIndex, match.index));\n }\n\n const key = `inline-${match.index}-${match[0]}`;\n\n if (match[1]) {\n // Link [text](url)\n const linkText = match[2];\n const linkUrl = match[3];\n nodes.push(\n <a\n key={key}\n href={sanitizeUrl(linkUrl)}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"rqmii-markdown-link\"\n >\n {parseInlineMarkdown(linkText)}\n </a>\n );\n } else if (match[4]) {\n // Bold **text** or __text__\n const boldText = match[5] || match[6];\n nodes.push(\n <strong key={key} className=\"rqmii-markdown-strong\">\n {parseInlineMarkdown(boldText)}\n </strong>\n );\n } else if (match[7]) {\n // Italic *text* or _text_\n const italicText = match[8] || match[9];\n nodes.push(\n <em key={key} className=\"rqmii-markdown-em\">\n {parseInlineMarkdown(italicText)}\n </em>\n );\n } else if (match[10]) {\n // Strikethrough ~~text~~\n const delText = match[11];\n nodes.push(\n <del key={key} className=\"rqmii-markdown-del\">\n {parseInlineMarkdown(delText)}\n </del>\n );\n } else if (match[12]) {\n // Code `text`\n const codeText = match[13];\n nodes.push(\n <code key={key} className=\"rqmii-markdown-code\">\n {codeText}\n </code>\n );\n }\n\n lastIndex = pattern.lastIndex;\n }\n\n if (lastIndex < text.length) {\n nodes.push(text.slice(lastIndex));\n }\n\n return nodes;\n}\n\n/**\n * Renders inline text with line break preservation (<br />).\n */\nfunction renderInlineWithLineBreaks(text: string, keyPrefix: string): React.ReactNode {\n const lines = text.split('\\n');\n if (lines.length === 1) {\n return parseInlineMarkdown(lines[0]);\n }\n return lines.map((line, idx) => (\n <React.Fragment key={`${keyPrefix}-ln-${idx}`}>\n {idx > 0 && <br />}\n {parseInlineMarkdown(line)}\n </React.Fragment>\n ));\n}\n\n/**\n * Clean, lightweight, zero-dependency Markdown renderer for widget consent and messages.\n */\nexport function RqmiiMarkdownComponent({\n content,\n className = '',\n}: RqmiiMarkdownProps): React.ReactElement | null {\n if (!content || !content.trim()) return null;\n\n // Split into block sections by double newlines\n const rawBlocks = content.replace(/\\r\\n/g, '\\n').split(/\\n{2,}/);\n const elements: React.ReactNode[] = [];\n\n rawBlocks.forEach((rawBlock, blockIdx) => {\n const trimmed = rawBlock.trim();\n if (!trimmed) return;\n\n const blockKey = `block-${blockIdx}`;\n\n // Headings: #, ##, ###, ####\n if (trimmed.startsWith('#')) {\n const headingMatch = trimmed.match(/^(#{1,6})\\s+(.+)$/s);\n if (headingMatch) {\n const level = headingMatch[1].length;\n const headingText = headingMatch[2].trim();\n const inlineContent = parseInlineMarkdown(headingText);\n\n if (level === 1) {\n elements.push(<h3 key={blockKey} className=\"rqmii-markdown-h1\">{inlineContent}</h3>);\n } else if (level === 2) {\n elements.push(<h4 key={blockKey} className=\"rqmii-markdown-h2\">{inlineContent}</h4>);\n } else {\n elements.push(<h5 key={blockKey} className=\"rqmii-markdown-h3\">{inlineContent}</h5>);\n }\n return;\n }\n }\n\n // Blockquote: > text\n if (trimmed.startsWith('>')) {\n const quoteText = trimmed\n .split('\\n')\n .map(line => line.replace(/^>\\s?/, ''))\n .join('\\n');\n elements.push(\n <blockquote key={blockKey} className=\"rqmii-markdown-blockquote\">\n {renderInlineWithLineBreaks(quoteText, blockKey)}\n </blockquote>\n );\n return;\n }\n\n // Unordered List (- or *)\n if (/^[-*]\\s+/m.test(trimmed)) {\n const lines = trimmed.split('\\n');\n const isList = lines.every(l => /^[-*]\\s+/.test(l.trim()) || l.trim() === '');\n if (isList) {\n const items = lines\n .map(l => l.trim().replace(/^[-*]\\s+/, ''))\n .filter(Boolean);\n elements.push(\n <ul key={blockKey} className=\"rqmii-markdown-ul\">\n {items.map((item, itemIdx) => (\n <li key={`${blockKey}-li-${itemIdx}`}>\n {parseInlineMarkdown(item)}\n </li>\n ))}\n </ul>\n );\n return;\n }\n }\n\n // Ordered List (1. 2.)\n if (/^\\d+\\.\\s+/m.test(trimmed)) {\n const lines = trimmed.split('\\n');\n const isList = lines.every(l => /^\\d+\\.\\s+/.test(l.trim()) || l.trim() === '');\n if (isList) {\n const items = lines\n .map(l => l.trim().replace(/^\\d+\\.\\s+/, ''))\n .filter(Boolean);\n elements.push(\n <ol key={blockKey} className=\"rqmii-markdown-ol\">\n {items.map((item, itemIdx) => (\n <li key={`${blockKey}-li-${itemIdx}`}>\n {parseInlineMarkdown(item)}\n </li>\n ))}\n </ol>\n );\n return;\n }\n }\n\n // Regular paragraph\n elements.push(\n <p key={blockKey} className=\"rqmii-markdown-p\">\n {renderInlineWithLineBreaks(trimmed, blockKey)}\n </p>\n );\n });\n\n return <div className={`rqmii-markdown ${className}`.trim()}>{elements}</div>;\n}\n\nexport const RqmiiMarkdown: React.FC<RqmiiMarkdownProps> = React.memo(RqmiiMarkdownComponent);\n","import React from 'react';\nimport { getChatText } from '../languages';\nimport { RqmiiMarkdown } from './markdown';\nimport { cx, languageFontClass, languageTextDirection } from './utils';\nimport type { PublicAgent, RqmiiConsentConfig } from '../../types';\n\ninterface ConsentDialogProps {\n language: string;\n content?: string;\n config?: RqmiiConsentConfig;\n agent?: PublicAgent;\n onAccept: () => void;\n onDecline: () => void;\n}\n\nexport function ConsentDialog({\n language,\n content,\n config,\n agent,\n onAccept,\n onDecline,\n}: ConsentDialogProps) {\n // Determine effective markdown content:\n // 1. Explicit content string passed from widget.consent.content[language]\n // 2. Fallback to legacy config.body[language] or default consent body\n const markdownText =\n content ||\n config?.body?.[language] ||\n getChatText(language, 'consentBody') ||\n '';\n\n const acceptLabel = config?.acceptLabel?.[language] || getChatText(language, 'consentAccept');\n const declineLabel = config?.declineLabel?.[language] || getChatText(language, 'consentDecline');\n\n return (\n <div\n className={cx(\n 'rqmii-chat-panel rqmii-chat-panel--start rqmii-chat-panel--consent',\n languageFontClass(language)\n )}\n dir={languageTextDirection(language)}\n >\n <div className=\"rqmii-chat-consent-body\">\n <RqmiiMarkdown content={markdownText} />\n </div>\n\n <div className=\"rqmii-chat-consent-actions\">\n <button\n type=\"button\"\n className=\"rqmii-chat-consent-button rqmii-chat-consent-button--decline\"\n onClick={onDecline}\n >\n {declineLabel}\n </button>\n <button\n type=\"button\"\n className=\"rqmii-chat-consent-button rqmii-chat-consent-button--accept\"\n onClick={onAccept}\n >\n {acceptLabel}\n </button>\n </div>\n </div>\n );\n}\n","import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { resolveChatKind } from '../agent-data';\nimport { ErrorPanel } from './primitives';\nimport { AvatarChatPanel, MinimizedChatPill, StartTextPanel, StartVoicePanel, TextChatPanel, VoiceCallPanel } from './panels';\nimport { ConsentDialog } from './consent-dialog';\nimport { isMobileViewport, noop, useElapsed, useVisualViewportHeight } from './utils';\nimport { useRqmiiConnection } from '../../hooks/use-rqmii-connection';\nimport type { ChatBoxPanelProps, ChatKind, SdkState } from './chat-box-types';\nimport type { PublicAgent } from '../../types';\n\ntype DisplayMessage = { id?: string; role?: string; sender?: string; text: string };\n\nfunction normalizePartialTranscript(value: unknown): string {\n if (!value) return '';\n if (typeof value === 'string') return value;\n if (typeof value === 'object' && typeof (value as { text?: string }).text === 'string') return (value as { text: string }).text;\n return '';\n}\n\nfunction shouldShowMinimize(chatKind: ChatKind): boolean {\n return chatKind === 'text' || chatKind === 'voice' || chatKind === 'text_and_voice';\n}\n\ninterface RqmiiChatBoxContentProps {\n agent: PublicAgent;\n language: string;\n languages: string[];\n onLanguageChange?: (v: string) => void;\n /** Called when the user explicitly ends the session (hang-up button). */\n onEndSession?: () => void;\n /** Called when the user minimizes / closes the chat to the floating button. */\n onMinimize?: () => void;\n messages?: DisplayMessage[];\n onSendMessage?: (text: string) => void;\n isPreview?: boolean;\n chatKind?: ChatKind;\n sdk: SdkState;\n renderPanel?: (props: ChatBoxPanelProps) => React.ReactNode;\n /** Keeps the latest displayed messages so the parent can snapshot them when the session ends. */\n messagesRef?: { current: DisplayMessage[] };\n /** Auto-send this text as the first message on mount (used when starting a new session). */\n initialText?: string;\n /** Auto-start voice on mount (used when starting a new voice session). */\n autoStartVoice?: boolean;\n}\n\nexport const RqmiiChatBoxContent = React.memo(function RqmiiChatBoxContent({\n agent,\n language,\n languages,\n onLanguageChange = noop,\n onEndSession = noop,\n onMinimize,\n messages: previewMessages,\n onSendMessage,\n isPreview = false,\n chatKind: propChatKind,\n sdk,\n renderPanel,\n messagesRef,\n initialText,\n autoStartVoice,\n}: RqmiiChatBoxContentProps) {\n const consentConfig = agent.widget?.consent || agent.consent;\n const isConsentEnabled = Boolean(consentConfig?.enabled);\n const consentContent =\n consentConfig?.content?.[language] ||\n consentConfig?.body?.[language] ||\n '';\n const isOneTime = consentConfig?.one_time !== false;\n const storageKey = agent.id ? `rqmii_consent_${agent.id}` : null;\n\n const [consented, setConsented] = useState<boolean>(() => {\n if (!isConsentEnabled || !consentContent) return true;\n if (isOneTime && storageKey && typeof window !== 'undefined') {\n try {\n return window.localStorage.getItem(storageKey) === 'true';\n } catch {\n return false;\n }\n }\n return false;\n });\n\n const resolvedChatKind = propChatKind || resolveChatKind(agent);\n const [voiceStarted, setVoiceStarted] = useState(() => (resolvedChatKind === 'voice' && sdk.isSessionReady) || (resolvedChatKind === 'voice' && !!autoStartVoice));\n const [conversationStarted, setConversationStarted] = useState(() => ((resolvedChatKind === 'text' || resolvedChatKind === 'text_and_voice') && sdk.isSessionReady) || !!initialText || (resolvedChatKind === 'text_and_voice' && !!autoStartVoice));\n const [isMinimized, setIsMinimized] = useState(false);\n const [connecting, setConnecting] = useState(false);\n const [connectError, setConnectError] = useState<string | null>(null);\n const timedSessionActive = (resolvedChatKind === 'voice' && voiceStarted) || (resolvedChatKind === 'text_and_voice' && conversationStarted);\n const elapsed = useElapsed(timedSessionActive);\n const vh = useVisualViewportHeight();\n const showConsent = isConsentEnabled && Boolean(consentContent) && !consented && !isPreview;\n const canMinimize = shouldShowMinimize(resolvedChatKind);\n const { events } = useRqmiiConnection();\n\n useEffect(() => {\n if (!events) return;\n // The client tool that navigates to a page section minimizes the chat to a\n // pill so the section is visible. On desktop there's room for both, so keep\n // the chat open — the pill is a mobile-only affordance.\n const handleMinimize = () => { if (canMinimize && isMobileViewport()) setIsMinimized(true); };\n const handleMaximize = () => { if (canMinimize) setIsMinimized(false); };\n \n events.on('minimize_chat', handleMinimize);\n events.on('maximize_chat', handleMaximize);\n return () => {\n events.off('minimize_chat', handleMinimize);\n events.off('maximize_chat', handleMaximize);\n };\n }, [events, canMinimize]);\n\n const handleConsentAccept = useCallback(() => {\n if (isOneTime && storageKey && typeof window !== 'undefined') {\n try {\n window.localStorage.setItem(storageKey, 'true');\n } catch {}\n }\n setConsented(true);\n }, [isOneTime, storageKey]);\n\n const handleConsentDecline = useCallback(() => {\n if (onMinimize) onMinimize();\n else onEndSession();\n }, [onMinimize, onEndSession]);\n\n const setLanguage = (nextLanguage: string) => {\n onLanguageChange(nextLanguage);\n if (!isPreview) sdk.changeSessionLanguage(nextLanguage);\n };\n\n const send = useCallback((text: string) => {\n setConnectError(null);\n setConnecting(true);\n if (onSendMessage) { onSendMessage(text); return; }\n sdk.sendTextMessage(text);\n }, [onSendMessage, sdk]);\n\n // Keep the latest displayed messages available to the parent for snapshotting on end.\n useEffect(() => {\n if (messagesRef) messagesRef.current = sdk.messages;\n });\n\n // Auto-start a new session on mount (only when directed).\n const autoStartedRef = useRef(false);\n useEffect(() => {\n if (autoStartedRef.current) return;\n if (initialText) {\n autoStartedRef.current = true;\n send(initialText);\n } else if (autoStartVoice) {\n autoStartedRef.current = true;\n setConnectError(null);\n setConnecting(true);\n if (!sdk.isVoiceActive) sdk.startVoice();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // Transition to conversation panel when the session is ready\n useEffect(() => {\n if (connecting && sdk.isSessionReady) {\n setConnecting(false);\n if (resolvedChatKind === 'voice') setVoiceStarted(true);\n else setConversationStarted(true);\n }\n }, [connecting, sdk.isSessionReady, resolvedChatKind]);\n\n // Stay on start screen if session init fails instead of jumping to error panel\n useEffect(() => {\n if (connecting && sdk.error) {\n setConnecting(false);\n setConnectError(sdk.error);\n }\n }, [connecting, sdk.error]);\n\n const initiateVoice = useCallback(() => {\n setConnectError(null);\n setConnecting(true);\n if (!sdk.isVoiceActive) sdk.startVoice();\n }, [sdk]);\n\n if (sdk.error && !isPreview && (conversationStarted || voiceStarted)) return <ErrorPanel message={sdk.error} language={language} onClose={onEndSession} />;\n\n if (showConsent) {\n return (\n <ConsentDialog\n language={language}\n content={consentContent}\n config={agent.consent}\n agent={agent}\n onAccept={handleConsentAccept}\n onDecline={handleConsentDecline}\n />\n );\n }\n\n const panelProps: ChatBoxPanelProps = {\n agent,\n language,\n languages,\n chatKind: resolvedChatKind,\n sdk,\n isPreview,\n onLanguageChange: setLanguage,\n onClose: onEndSession,\n onMinimize: canMinimize ? () => setIsMinimized(true) : undefined,\n onRestore: canMinimize ? () => setIsMinimized(false) : undefined,\n onSend: send,\n voiceStarted,\n conversationStarted,\n isMinimized,\n elapsed,\n setVoiceStarted,\n setConversationStarted,\n };\n\n if (renderPanel) {\n return <>{renderPanel(panelProps)}</>;\n }\n\n return <DefaultPanelRenderer {...panelProps} connecting={connecting} connectError={connectError} visualViewportHeight={vh} onCloseWidget={onMinimize ?? onEndSession} initiateVoice={initiateVoice} onSendSuggestion={(text) => { setConnectError(null); setConnecting(true); sdk.sendSuggestion?.(text); }} />;\n});\n\nconst DefaultPanelRenderer = React.memo(function DefaultPanelRenderer({ agent, language, languages, chatKind, sdk, onLanguageChange, onClose, onMinimize, onRestore, onSend, voiceStarted, conversationStarted, isMinimized, elapsed, setVoiceStarted, setConversationStarted, visualViewportHeight, connecting = false, connectError = null, onCloseWidget, initiateVoice, onSendSuggestion }: ChatBoxPanelProps & { visualViewportHeight: number | null; connecting?: boolean; connectError?: string | null; onCloseWidget: () => void; initiateVoice: () => void; onSendSuggestion: (text: string) => void }) {\n const typingIndicatorEnabled = agent.widget?.behavior?.typing_indicator_enabled ?? true;\n const effectiveWaitingForResponse = chatKind === 'text' ? sdk.waitingForResponse && typingIndicatorEnabled : false;\n const displayMessages = sdk.messages;\n\n if (chatKind === 'avatar') return <AvatarChatPanel agent={agent} language={language} onClose={onClose} />;\n\n if (isMinimized) {\n return (\n <MinimizedChatPill agent={agent} language={language} onRestore={onRestore!} onClose={onClose} isListening={sdk.isVoiceActive} isAudioPlaying={sdk.isAudioPlaying} isSpeaking={sdk.vad.isSpeaking} onToggleVoice={sdk.toggleVoice} elapsed={elapsed} variant={chatKind === 'text' ? 'text' : 'voice'} />\n );\n }\n\n if (chatKind === 'voice' && voiceStarted) {\n return (\n <VoiceCallPanel agent={agent} language={language} onEndSession={onClose} onMinimize={onMinimize!} isListening={sdk.isVoiceActive} isLoading={sdk.vad.isLoading} isSpeaking={sdk.vad.isSpeaking} isAudioPlaying={sdk.isAudioPlaying} isAgentThinking={sdk.isAgentThinking} isAgentSpeaking={sdk.isAgentSpeaking} onToggleVoice={sdk.toggleVoice} elapsed={elapsed} visualViewportHeight={visualViewportHeight} />\n );\n }\n\n if (chatKind === 'voice') {\n return (\n <StartVoicePanel agent={agent} language={language} languages={languages} onLanguageChange={onLanguageChange} onClose={onCloseWidget} isAudioPlaying={sdk.isAudioPlaying} isVoiceSetupLoading={sdk.isVoiceSetupLoading || connecting} onStartVoice={initiateVoice} visualViewportHeight={visualViewportHeight} />\n );\n }\n\n if (!conversationStarted && (sdk.messages.length === 0 || connecting)) {\n const suggestions = (\n agent.widget?.behavior?.suggested_messages?.[language] ||\n agent.conversation?.suggested_messages?.[language]\n )?.filter(s => s.trim()) || undefined;\n\n const handleSuggestionClick = (text: string) => {\n if (sdk.sendSuggestion) {\n onSendSuggestion(text);\n } else {\n onSend?.(text);\n }\n };\n\n const isVoiceEnabled = chatKind === 'text_and_voice' || resolveChatKind(agent) === 'text_and_voice';\n\n return (\n <StartTextPanel agent={agent} language={language} languages={languages} onLanguageChange={onLanguageChange} onClose={onCloseWidget} onSend={onSend!} isVoiceEnabled={isVoiceEnabled} isAudioPlaying={sdk.isAudioPlaying} isVoiceSetupLoading={sdk.isVoiceSetupLoading || connecting} onStartVoice={initiateVoice} visualViewportHeight={visualViewportHeight} disabled={connecting} error={connectError || undefined} suggestions={suggestions} onSuggestionClick={handleSuggestionClick} compact={!!suggestions} />\n );\n }\n\n return (\n <TextChatPanel agent={agent} language={language} onEndSession={onClose} messages={displayMessages} partialTranscript={normalizePartialTranscript(sdk.partialTranscript)} onSend={onSend!} isAudioPlaying={sdk.isAudioPlaying} isVoiceEnabled={chatKind === 'text_and_voice'} isListening={sdk.isVoiceActive} isSpeaking={sdk.vad.isSpeaking} isLoading={sdk.vad.isLoading} isAgentThinking={sdk.isAgentThinking} isAgentSpeaking={sdk.isAgentSpeaking} onToggleVoice={sdk.toggleVoice} onStartVoice={sdk.startVoice} onMinimize={onMinimize!} elapsed={elapsed} visualViewportHeight={visualViewportHeight} waitingForResponse={effectiveWaitingForResponse} />\n );\n});\n","import { useCallback, useEffect, useRef, useState } from 'react';\nimport type { PublicAgent } from '../../types';\n\nexport function normalizePartialTranscript(value: unknown): string {\n if (!value) return '';\n if (typeof value === 'string') return value;\n if (typeof value === 'object' && typeof (value as { text?: string }).text === 'string') return (value as { text: string }).text;\n return '';\n}\n\nexport const DUMMY_VAD = { isListening: false, isLoading: false, isSpeaking: false, toggle: async () => false };\n\nexport function useWelcomeTextHandling({ isSessionReady, sendTextMessage, messages }: { isSessionReady: boolean; sendTextMessage: (text: string) => void; messages: Array<{ id?: string; role?: string; sender?: string; text: string }> }) {\n const [pendingWelcomeText, setPendingWelcomeText] = useState<string | null>(null);\n const [pendingMessage, setPendingMessage] = useState<string | null>(null);\n\n const sendPendingWelcomeText = useCallback(() => {\n setPendingWelcomeText((prev) => {\n if (!prev) return null;\n if (isSessionReady) {\n sendTextMessage(prev);\n } else {\n setPendingMessage(prev);\n }\n return null;\n });\n }, [isSessionReady, sendTextMessage]);\n\n useEffect(() => {\n if (!pendingWelcomeText) return;\n if (messages.length === 0) return;\n sendPendingWelcomeText();\n }, [messages, pendingWelcomeText, sendPendingWelcomeText]);\n\n useEffect(() => {\n if (!pendingWelcomeText) return;\n const timer = setTimeout(sendPendingWelcomeText, 5000);\n return () => clearTimeout(timer);\n }, [pendingWelcomeText, sendPendingWelcomeText]);\n\n useEffect(() => {\n if (!pendingMessage || !isSessionReady) return;\n sendTextMessage(pendingMessage);\n setPendingMessage(null);\n }, [isSessionReady, pendingMessage, sendTextMessage]);\n\n return { pendingWelcomeText, pendingMessage, setPendingWelcomeText, setPendingMessage, sendPendingWelcomeText };\n}\n\nexport function useDeferredClientReady({ isSessionReady, signalClientReady }: { isSessionReady: boolean; signalClientReady: (payload?: Record<string, unknown>) => void }) {\n const [pending, setPending] = useState(false);\n const [pendingPayload, setPendingPayload] = useState<Record<string, unknown> | undefined>(undefined);\n const emittedRef = useRef(false);\n\n useEffect(() => {\n if (!isSessionReady || emittedRef.current || !pending) return;\n emittedRef.current = true;\n signalClientReady(pendingPayload);\n setPending(false);\n }, [isSessionReady, pending, pendingPayload, signalClientReady]);\n\n const emitClientReady = useCallback((payload?: Record<string, unknown>) => {\n if (isSessionReady) {\n emittedRef.current = true;\n signalClientReady(payload);\n } else {\n setPendingPayload(payload);\n setPending(true);\n }\n }, [isSessionReady, signalClientReady]);\n\n return { emitClientReady };\n}\n\n\nexport function useWelcomeMessage({ agent, language, messages }: {\n agent: PublicAgent;\n language: string;\n messages: Array<{ role?: string; sender?: string; text: string }>;\n}): { id: string; role: 'assistant'; text: string } | null {\n const userHasSent = messages.some(m => m.role === 'user' || m.sender === 'user'); // R7.3 freeze\n const raw = agent.welcomeMessages?.[language] ?? '';\n const text = raw.trim(); // R7.5 whitespace-only = empty\n if (!text) return null; // R7.4 no welcome message\n if (userHasSent) return null; // R7.3 frozen after first user message\n // Text tracks the selected language before user sends (R7.2).\n return { id: 'welcome', role: 'assistant', text };\n}\n","import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { useRqmiiConnection, useRqmiiEvents, useRqmiiMessages } from '../../hooks';import { RqmiiChatBoxContent } from './chat-box-content';\nimport { DUMMY_VAD } from './chat-box-shared';\nimport { noop } from './utils';\nimport type { ChatBoxEventHandlers, ChatBoxSdkActions, RqmiiChatBoxProps, SdkState } from './chat-box-types';\n\n// Short safeguard delay between client_ready (welcome) and the user's first message\n// (response) so the backend welcome arrives before the response to the user message.\nconst WELCOME_SAFEGUARD_MS = 300;\n\nexport function RqmiiTextChatBox(props: RqmiiChatBoxProps & ChatBoxEventHandlers) {\n const { isPreview = false, ...restProps } = props;\n const { messages, sendTextMessage, emitUserMessage, addLocalMessage, clearMessages } = useRqmiiMessages();\n const { changeSessionLanguage, clearSessionHistory, signalClientReady, error, isSessionReady, isAgentThinking, isAgentSpeaking } = useRqmiiConnection();\n\n const startedRef = useRef(false);\n const pendingFirstTextRef = useRef<string | null>(null);\n const welcomeFlowDoneRef = useRef(false);\n const [pendingFlag, setPendingFlag] = useState(false);\n // The first user message is kept in local state (not provider state) so it survives the\n // provider's HARD_RESET during session initialization and appears immediately.\n const [firstUserText, setFirstUserText] = useState<string | null>(null);\n const [waitingForResponse, setWaitingForResponse] = useState(false);\n const prevMsgCountRef = useRef(messages.length);\n\n useEffect(() => {\n if (messages.length > prevMsgCountRef.current) {\n const lastMsg = messages[messages.length - 1];\n const isAssistant = lastMsg.role === 'assistant';\n if (isAssistant && lastMsg.streaming) {\n setWaitingForResponse(false);\n }\n }\n prevMsgCountRef.current = messages.length;\n }, [messages]);\n\n // A rate-limited message never yields an agent response, so release the\n // typing indicator instead of leaving it spinning forever.\n useRqmiiEvents('message_rate_limited', useCallback(() => {\n setWaitingForResponse(false);\n }, []));\n\n // First-message backend welcome flow: once the session is ready, emit client_ready\n // (backend produces the welcome message), then after a short safeguard delay emit the\n // user's message to the backend (which produces the response). The user's message is\n // already shown via `firstUserText`. The pending text is held in a ref (not state) so the\n // delayed send is not cancelled by a re-render clearing the effect's timeout.\n useEffect(() => {\n if (!isSessionReady || !pendingFlag || welcomeFlowDoneRef.current) return;\n const text = pendingFirstTextRef.current;\n if (text === null) return;\n welcomeFlowDoneRef.current = true;\n pendingFirstTextRef.current = null;\n // Persist the first user message to provider state (durable history) and drop the\n // optimistic local copy. The backend welcome (from client_ready) arrives after, so\n // provider order stays [user, welcome, response].\n addLocalMessage('user', text);\n setFirstUserText(null);\n const welcomeText = props.agent.welcomeMessages?.[props.language];\n signalClientReady(welcomeText ? { welcomeMessage: welcomeText } : undefined);\n const timer = setTimeout(() => { emitUserMessage(text); setWaitingForResponse(true); }, WELCOME_SAFEGUARD_MS);\n return () => clearTimeout(timer);\n }, [isSessionReady, pendingFlag, signalClientReady, emitUserMessage, addLocalMessage]);\n\n // The first user message shows first, followed by the backend welcome and response.\n const displayMessages = useMemo(() => (\n firstUserText\n ? [{ id: 'first-user', role: 'user', text: firstUserText }, ...messages]\n : messages\n ), [firstUserText, messages]);\n\n // Refresh clears both the optimistic first message and the provider messages.\n const clearAll = useCallback(() => {\n setFirstUserText(null);\n clearMessages();\n }, [clearMessages]);\n\n const actions: ChatBoxSdkActions = {\n emitClientReady: signalClientReady,\n sendMessage: (text) => {\n sendTextMessage(text);\n },\n queueForWelcome: noop,\n enableVoice: noop,\n disableVoice: noop,\n language: props.language,\n isSessionReady,\n supportsVoice: false,\n isVoiceActive: false,\n chatKind: 'text',\n };\n\n const defaultTextSend = (text: string, a: ChatBoxSdkActions) => {\n props.onSessionStart?.();\n if (!startedRef.current) {\n // First message: show it immediately (local state), then run the backend welcome\n // flow once the session is ready (see the effect above).\n startedRef.current = true;\n setFirstUserText(text);\n pendingFirstTextRef.current = text;\n setPendingFlag(true);\n setWaitingForResponse(true);\n } else {\n setWaitingForResponse(true);\n a.sendMessage(text);\n }\n };\n\n const handleTextSend = (text: string) => {\n if (props.onTextSend) {\n props.onTextSend(text, actions);\n } else {\n defaultTextSend(text, actions);\n }\n };\n\n const sdk: SdkState = {\n messages: displayMessages,\n sendTextMessage: handleTextSend,\n clearMessages: clearAll,\n clearSessionHistory,\n isAudioPlaying: false,\n partialTranscript: null,\n changeSessionLanguage,\n error,\n isAgentThinking,\n isAgentSpeaking,\n isVoiceSetupLoading: false,\n isVoiceActive: false,\n isSessionReady,\n vad: DUMMY_VAD,\n startVoice: noop,\n prepareVoice: noop,\n toggleVoice: noop,\n signalClientReady,\n waitingForResponse,\n sendSuggestion: handleTextSend,\n };\n\n return (\n <RqmiiChatBoxContent\n {...restProps}\n isPreview={isPreview}\n chatKind=\"text\"\n sdk={sdk}\n />\n );\n}\n","import { useEffect, useState } from 'react';\nimport { useRqmiiConnection, useRqmiiMessages, useRqmiiVAD, useRqmiiVoice } from '../../hooks';\nimport { RqmiiChatBoxContent } from './chat-box-content';\nimport { useDeferredClientReady, useWelcomeTextHandling } from './chat-box-shared';\nimport type { ChatBoxEventHandlers, ChatBoxSdkActions, RqmiiChatBoxProps, SdkState } from './chat-box-types';\n\nexport function RqmiiVoiceChatBox(props: RqmiiChatBoxProps & ChatBoxEventHandlers) {\n const { isPreview = false, ...restProps } = props;\n const { messages, sendTextMessage, clearMessages } = useRqmiiMessages();\n const { isAudioPlaying, partialTranscript } = useRqmiiVoice();\n const { changeSessionLanguage, clearSessionHistory, signalClientReady, error, isSessionReady, isAgentThinking, isAgentSpeaking } = useRqmiiConnection();\n const { pendingWelcomeText: _pwt, pendingMessage: _pm, setPendingWelcomeText, setPendingMessage } = useWelcomeTextHandling({ isSessionReady, sendTextMessage, messages });\n const { emitClientReady: deferredClientReady } = useDeferredClientReady({ isSessionReady, signalClientReady });\n const [voiceRequested, setVoiceRequested] = useState(false);\n\n // Barge-in is owned entirely by the backend now. It interrupts the agent only\n // when the first confirmed partial transcript arrives and emits `interrupted`,\n // which stops playback via the socket handler. We intentionally do NOT pause\n // playback locally on VAD speech-start: that fired on coughs / background\n // noise and cut the agent off on false positives.\n const vad = useRqmiiVAD({\n enabled: true,\n preloadStream: false,\n });\n const { isLoading: isVadLoading, isListening, toggle: toggleListening } = vad;\n const isVoiceSetupLoading = isVadLoading;\n const isVoiceActive = isListening || voiceRequested;\n\n useEffect(() => {\n if (!voiceRequested || !isSessionReady || isVadLoading || isListening) return;\n void toggleListening();\n }, [voiceRequested, isSessionReady, isVadLoading, isListening, toggleListening]);\n\n const startSession = () => { props.onSessionStart?.(); };\n\n const actions: ChatBoxSdkActions = {\n emitClientReady: deferredClientReady,\n sendMessage: (text) => {\n if (isSessionReady) {\n sendTextMessage(text);\n } else {\n setPendingMessage(text);\n }\n },\n queueForWelcome: (text) => setPendingWelcomeText(text),\n enableVoice: () => setVoiceRequested(true),\n disableVoice: () => { setVoiceRequested(false); if (isListening) void toggleListening(); },\n language: props.language,\n isSessionReady,\n supportsVoice: true,\n isVoiceActive,\n chatKind: 'voice',\n };\n\n const defaultVoiceStart = (a: ChatBoxSdkActions) => {\n startSession();\n a.enableVoice();\n const welcomeText = props.agent.welcomeMessages?.[props.language];\n a.emitClientReady(welcomeText ? { welcomeMessage: welcomeText } : undefined);\n };\n\n const defaultVoiceToggle = (a: ChatBoxSdkActions) => {\n if (a.isVoiceActive) {\n a.disableVoice();\n } else {\n a.enableVoice();\n }\n };\n\n const handleVoiceStart = () => {\n if (props.onVoiceStart) {\n props.onVoiceStart(actions);\n } else {\n defaultVoiceStart(actions);\n }\n };\n\n const handleVoiceToggle = () => {\n if (props.onVoiceToggle) {\n props.onVoiceToggle(actions);\n } else {\n defaultVoiceToggle(actions);\n }\n };\n\n const sdk: SdkState = {\n messages,\n sendTextMessage: () => {},\n clearMessages,\n clearSessionHistory,\n isAudioPlaying,\n partialTranscript,\n changeSessionLanguage,\n error,\n isAgentThinking,\n isAgentSpeaking,\n isVoiceSetupLoading,\n isVoiceActive,\n isSessionReady,\n vad,\n startVoice: handleVoiceStart,\n prepareVoice: () => {},\n toggleVoice: handleVoiceToggle,\n signalClientReady,\n };\n\n return (\n <RqmiiChatBoxContent\n {...restProps}\n isPreview={isPreview}\n chatKind=\"voice\"\n sdk={sdk}\n />\n );\n}\n","import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { useRqmiiConnection, useRqmiiEvents, useRqmiiMessages, useRqmiiVAD, useRqmiiVoice } from '../../hooks';\nimport { RqmiiChatBoxContent } from './chat-box-content';\nimport { useDeferredClientReady } from './chat-box-shared';\nimport type { ChatBoxEventHandlers, ChatBoxSdkActions, RqmiiChatBoxProps, SdkState } from './chat-box-types';\n\n// Safeguard delay between client_ready (welcome) and the user's first text message (response)\n// on the text-first path, so the backend welcome arrives before the response.\nconst WELCOME_SAFEGUARD_MS = 300;\n\nexport function RqmiiTextAndVoiceChatBox(props: RqmiiChatBoxProps & ChatBoxEventHandlers) {\n const { isPreview = false, ...restProps } = props;\n const { messages, sendTextMessage, emitUserMessage, addLocalMessage, clearMessages } = useRqmiiMessages();\n const { isAudioPlaying, partialTranscript } = useRqmiiVoice();\n const { changeSessionLanguage, clearSessionHistory, signalClientReady, error, isSessionReady, isAgentThinking, isAgentSpeaking } = useRqmiiConnection();\n const { emitClientReady: deferredClientReady } = useDeferredClientReady({ isSessionReady, signalClientReady });\n const [voiceRequested, setVoiceRequested] = useState(false);\n // First message from the text-first path is queued until the session is ready (backend welcome flow).\n const pendingTextRef = useRef<string | null>(null);\n const [pendingFlag, setPendingFlag] = useState(false);\n // A suggestion click starts voice + text together, so its message is queued separately\n // from the text-first welcome flow above (no client_ready is emitted for suggestions).\n const pendingSuggestionRef = useRef<string | null>(null);\n const [pendingSuggestionFlag, setPendingSuggestionFlag] = useState(false);\n const suggestionFlowDoneRef = useRef(false);\n const textStartedRef = useRef(false);\n const welcomeFlowDoneRef = useRef(false);\n // The first text-first user message is kept in local state so it survives the provider's\n // HARD_RESET during session initialization and appears immediately.\n const [firstUserText, setFirstUserText] = useState<string | null>(null);\n const [waitingForResponse, setWaitingForResponse] = useState(false);\n const prevMsgCountRef = useRef(messages.length);\n\n useEffect(() => {\n if (messages.length > prevMsgCountRef.current) {\n const lastMsg = messages[messages.length - 1];\n const isAssistant = lastMsg.role === 'assistant';\n if (isAssistant && lastMsg.streaming) {\n setWaitingForResponse(false);\n }\n }\n prevMsgCountRef.current = messages.length;\n }, [messages]);\n\n // A rate-limited message never yields an agent response, so release the\n // typing indicator instead of leaving it spinning forever.\n useRqmiiEvents('message_rate_limited', useCallback(() => {\n setWaitingForResponse(false);\n }, []));\n\n // Barge-in is owned entirely by the backend now. It interrupts the agent only\n // when the first confirmed partial transcript arrives and emits `interrupted`,\n // which stops playback via the socket handler. We intentionally do NOT pause\n // playback locally on VAD speech-start: that fired on coughs / background\n // noise and cut the agent off on false positives.\n const vad = useRqmiiVAD({\n enabled: true,\n preloadStream: false,\n });\n const { isLoading: isVadLoading, isListening, toggle: toggleListening } = vad;\n const isVoiceSetupLoading = isVadLoading;\n const isVoiceActive = isListening || voiceRequested;\n\n useEffect(() => {\n if (!voiceRequested || !isSessionReady || isVadLoading || isListening) return;\n void toggleListening();\n }, [voiceRequested, isSessionReady, isVadLoading, isListening, toggleListening]);\n\n // Text-first backend welcome flow: once the session is ready, emit client_ready (backend\n // produces the welcome), then after a short safeguard delay emit the user's message\n // (backend responds). The user's message is already shown via `firstUserText`. The pending\n // text is held in a ref so the delayed send is not cancelled by a re-render.\n useEffect(() => {\n if (!isSessionReady || !pendingFlag || welcomeFlowDoneRef.current) return;\n const text = pendingTextRef.current;\n if (text === null) return;\n welcomeFlowDoneRef.current = true;\n pendingTextRef.current = null;\n // Persist the first user message to provider state (durable history) and drop the\n // optimistic local copy.\n addLocalMessage('user', text);\n setFirstUserText(null);\n const welcomeText = props.agent.welcomeMessages?.[props.language];\n signalClientReady(welcomeText ? { welcomeMessage: welcomeText } : undefined);\n const timer = setTimeout(() => { emitUserMessage(text); setWaitingForResponse(true); }, WELCOME_SAFEGUARD_MS);\n return () => clearTimeout(timer);\n }, [isSessionReady, pendingFlag, signalClientReady, emitUserMessage, addLocalMessage]);\n\n // Suggestion click flow: the session is only just starting (socket not connected yet), so the\n // message is held until the session is ready, then displayed locally and emitted to the\n // backend. No client_ready is emitted here — the suggestion IS the user's first message.\n useEffect(() => {\n if (!isSessionReady || !pendingSuggestionFlag || suggestionFlowDoneRef.current) return;\n const text = pendingSuggestionRef.current;\n if (text === null) return;\n suggestionFlowDoneRef.current = true;\n pendingSuggestionRef.current = null;\n addLocalMessage('user', text);\n emitUserMessage(text);\n setWaitingForResponse(true);\n setPendingSuggestionFlag(false);\n }, [isSessionReady, pendingSuggestionFlag, emitUserMessage, addLocalMessage]);\n\n // The first user message shows first, followed by the backend welcome and response.\n const displayMessages = useMemo(() => (\n firstUserText\n ? [{ id: 'first-user', role: 'user', text: firstUserText }, ...messages]\n : messages\n ), [firstUserText, messages]);\n\n // Refresh clears both the optimistic first message and the provider messages.\n const clearAll = useCallback(() => {\n setFirstUserText(null);\n textStartedRef.current = false;\n welcomeFlowDoneRef.current = false;\n clearMessages();\n }, [clearMessages]);\n\n const startSession = () => { props.onSessionStart?.(); };\n\n const actions: ChatBoxSdkActions = {\n emitClientReady: (payload) => {\n welcomeFlowDoneRef.current = true;\n textStartedRef.current = true;\n deferredClientReady(payload);\n },\n sendMessage: (text) => {\n sendTextMessage(text);\n },\n queueForWelcome: () => {},\n enableVoice: () => setVoiceRequested(true),\n disableVoice: () => { setVoiceRequested(false); if (isListening) void toggleListening(); },\n language: props.language,\n isSessionReady,\n supportsVoice: true,\n isVoiceActive,\n chatKind: 'text_and_voice',\n };\n\n const defaultTextSend = (text: string, a: ChatBoxSdkActions) => {\n startSession();\n if (!textStartedRef.current && !welcomeFlowDoneRef.current) {\n // First text message chooses the text-only path and runs the backend welcome flow:\n // display locally now, then client_ready + delayed backend send once the session is ready.\n textStartedRef.current = true;\n props.onStartText?.();\n setFirstUserText(text);\n pendingTextRef.current = text;\n setPendingFlag(true);\n setWaitingForResponse(true);\n } else {\n // Subsequent messages in the established text-only session send normally.\n textStartedRef.current = true;\n setWaitingForResponse(true);\n a.sendMessage(text);\n }\n };\n\n const defaultVoiceStart = (a: ChatBoxSdkActions) => {\n startSession();\n textStartedRef.current = true;\n welcomeFlowDoneRef.current = true;\n props.onStartVoice?.();\n a.enableVoice();\n const welcomeText = props.agent.welcomeMessages?.[props.language];\n a.emitClientReady(welcomeText ? { welcomeMessage: welcomeText } : undefined);\n };\n\n const defaultVoiceToggle = (a: ChatBoxSdkActions) => {\n if (a.isVoiceActive) {\n a.disableVoice();\n } else {\n a.enableVoice();\n }\n };\n\n const handleTextSend = (text: string) => {\n if (props.onTextSend) {\n props.onTextSend(text, actions);\n } else {\n defaultTextSend(text, actions);\n }\n };\n\n const handleVoiceStart = () => {\n if (props.onVoiceStart) {\n props.onVoiceStart(actions);\n } else {\n defaultVoiceStart(actions);\n }\n };\n\n const handleVoiceToggle = () => {\n if (props.onVoiceToggle) {\n props.onVoiceToggle(actions);\n } else {\n defaultVoiceToggle(actions);\n }\n };\n\n const sdk: SdkState = {\n messages: displayMessages,\n sendTextMessage: handleTextSend,\n clearMessages: clearAll,\n clearSessionHistory,\n isAudioPlaying,\n partialTranscript,\n changeSessionLanguage,\n error,\n isAgentThinking,\n isAgentSpeaking,\n isVoiceSetupLoading,\n isVoiceActive,\n isSessionReady,\n vad,\n startVoice: handleVoiceStart,\n prepareVoice: () => {},\n toggleVoice: handleVoiceToggle,\n signalClientReady,\n waitingForResponse,\n sendSuggestion: (text) => {\n startSession();\n textStartedRef.current = true;\n welcomeFlowDoneRef.current = true;\n props.onStartVoice?.();\n setVoiceRequested(true);\n pendingSuggestionRef.current = text;\n setPendingSuggestionFlag(true);\n },\n };\n\n return (\n <RqmiiChatBoxContent\n {...restProps}\n isPreview={isPreview}\n chatKind={props.textOnly ? 'text' : 'text_and_voice'}\n sdk={sdk}\n />\n );\n}\n","import React from 'react';\nimport { useRqmiiConnection, useRqmiiMessages } from '../../hooks';\nimport { AvatarChatPanel } from './panels';\nimport { ErrorPanel } from './primitives';\nimport { DUMMY_VAD, useDeferredClientReady, useWelcomeTextHandling } from './chat-box-shared';\nimport { noop } from './utils';\nimport type { ChatBoxEventHandlers, ChatBoxSdkActions, RqmiiChatBoxProps, SdkState } from './chat-box-types';\n\nexport function RqmiiAvatarChatBox(props: RqmiiChatBoxProps & ChatBoxEventHandlers) {\n const { isPreview = false, agent, language, languages, onLanguageChange, onEndSession, onMinimize, messages: previewMessages, onSendMessage } = props;\n const onClose = onEndSession || onMinimize || noop;\n const { messages, sendTextMessage, clearMessages } = useRqmiiMessages();\n const { changeSessionLanguage, clearSessionHistory, signalClientReady, error, isSessionReady, isAgentThinking, isAgentSpeaking } = useRqmiiConnection();\n const { pendingWelcomeText: _pwt, pendingMessage: _pm, setPendingWelcomeText, setPendingMessage } = useWelcomeTextHandling({ isSessionReady, sendTextMessage, messages });\n const { emitClientReady: deferredClientReady } = useDeferredClientReady({ isSessionReady, signalClientReady });\n\n const startSession = () => { props.onSessionStart?.(); };\n\n const actions: ChatBoxSdkActions = {\n emitClientReady: deferredClientReady,\n sendMessage: (text) => {\n if (isSessionReady) {\n sendTextMessage(text);\n } else {\n setPendingMessage(text);\n }\n },\n queueForWelcome: (text) => setPendingWelcomeText(text),\n enableVoice: noop,\n disableVoice: noop,\n language,\n isSessionReady,\n supportsVoice: false,\n isVoiceActive: false,\n chatKind: 'avatar',\n };\n\n const defaultTextSend = (text: string, a: ChatBoxSdkActions) => {\n startSession();\n const welcomeText = props.agent.welcomeMessages?.[props.language];\n a.emitClientReady(welcomeText ? { welcomeMessage: welcomeText } : undefined);\n a.queueForWelcome(text);\n };\n\n const handleTextSend = (text: string) => {\n if (props.onTextSend) {\n props.onTextSend(text, actions);\n } else {\n defaultTextSend(text, actions);\n }\n };\n\n const sdk: SdkState = {\n messages,\n sendTextMessage: handleTextSend,\n clearMessages,\n clearSessionHistory,\n isAudioPlaying: false,\n partialTranscript: null,\n changeSessionLanguage,\n error,\n isAgentThinking,\n isAgentSpeaking,\n isVoiceSetupLoading: false,\n isVoiceActive: false,\n isSessionReady,\n vad: DUMMY_VAD,\n startVoice: noop,\n prepareVoice: noop,\n toggleVoice: noop,\n signalClientReady,\n };\n\n if (error && !isPreview) return <ErrorPanel message={error} language={language} onClose={onClose} />;\n\n return <AvatarChatPanel agent={agent} language={language} onClose={onClose} />;\n}\n","import React, { useMemo } from 'react';\nimport { normalizeChatLanguages } from '../languages';\nimport { RqmiiChatOpenButton } from './primitives';\nimport { cx, resolveWidgetThemeStyles } from './utils';\nimport type { PublicAgent } from '../../types';\n\nexport { RqmiiTextChatBox } from './chat-box-text';\nexport { RqmiiVoiceChatBox } from './chat-box-voice';\nexport { RqmiiTextAndVoiceChatBox } from './chat-box-text-and-voice';\nexport { RqmiiAvatarChatBox } from './chat-box-avatar';\n\nexport type { ChatKind, ChatBoxSdkActions, ChatBoxEventHandlers, ChatBoxPanelProps, SdkState, RqmiiChatBoxProps, SessionEndedInfo, EndedBy, EndedReason } from './chat-box-types';\n\nexport function RqmiiChatSurface({ agent, defaultOpen, className = '', preview = false, ChatBoxComponent }: { agent: PublicAgent; defaultOpen?: boolean; className?: string; preview?: boolean; ChatBoxComponent: React.ComponentType<{ agent: PublicAgent; language: string; languages: string[]; onLanguageChange?: (v: string) => void; onClose?: () => void; isPreview?: boolean }> }) {\n const effectiveDefaultOpen = defaultOpen !== undefined ? defaultOpen : (agent.widget?.behavior?.default_open ?? false);\n const [open, setOpen] = React.useState(effectiveDefaultOpen);\n const [language, setLanguage] = React.useState(agent.defaultLanguage);\n const languages = useMemo(() => normalizeChatLanguages(agent.languages, agent.defaultLanguage), [agent.defaultLanguage, agent.languages]);\n\n React.useEffect(() => { setLanguage(agent.defaultLanguage); }, [agent.defaultLanguage]);\n React.useEffect(() => { setOpen(effectiveDefaultOpen); }, [effectiveDefaultOpen]);\n\n const themeMode = agent.widget?.appearance?.theme?.mode === 'light' ? 'light' : 'dark';\n const surfaceStyles = useMemo(() => resolveWidgetThemeStyles(agent.widget?.appearance), [agent.widget?.appearance]);\n\n return (\n <div\n className={cx('rqmii-chat-surface', `rqmii-theme-${themeMode}`, preview && 'is-preview', className)}\n data-theme={themeMode}\n style={surfaceStyles}\n >\n {!open && (<RqmiiChatOpenButton agent={agent} onClick={() => setOpen(true)} position={preview ? 'static' : 'fixed'} />)}\n {open && (<ChatBoxComponent agent={agent} language={language} languages={languages} onLanguageChange={setLanguage} onClose={() => setOpen(false)} isPreview={preview} />)}\n </div>\n );\n}\n","import React, { useEffect, useMemo, useState, useRef } from 'react';\nimport { RqmiiAgentProvider } from '../provider/RqmiiAgentProvider';\nimport { RqmiiAgentRoom } from '../components/RqmiiAgentRoom';\nimport { useRqmiiConnection } from '../hooks/use-rqmii-connection';\nimport { useRqmiiMessages } from '../hooks/use-rqmii-messages';\nimport { fetchAgentCustomization, normalizePublicAgent, resolveChatKind, applyAgentConfigOverrides } from './agent-data';\nimport { RqmiiTextChatBox, RqmiiVoiceChatBox, RqmiiTextAndVoiceChatBox, RqmiiAvatarChatBox, RqmiiChatOpenButton, WelcomeBubble } from './chat/components';\nimport { EndedChatPanel } from './chat/panels';\nimport { FeedbackPanel } from './chat/feedback';\nimport { normalizeChatLanguages } from './languages';\nimport { cx, ensureGoogleFontLoaded, resolveWidgetThemeStyles } from './chat/utils';\nimport type { RqmiiAgentChatProps, RqmiiAgentChatPreviewProps, PublicAgent } from '../types';\nimport type { SessionEndedInfo, EndedBy, EndedReason } from './chat/chat-box-types';\n\ntype DisplayMessage = { id?: string; role?: string; sender?: string; text: string };\ntype StartMode = 'idle' | 'voice' | 'text';\ntype NewSessionDirective = { mode: 'text'; text: string } | { mode: 'voice' } | null;\n\n// ---------------------------------------------------------------------------\n// Agent loader\n// ---------------------------------------------------------------------------\n\nfunction PublicAgentLoader({ restUrl, identifier, fallbackAgent, withCredentials = false, children, onError }: { restUrl: string; identifier?: string; fallbackAgent?: Partial<PublicAgent> | Record<string, unknown>; withCredentials?: boolean; children: (agent: PublicAgent) => React.ReactNode; onError?: (error: unknown) => void }) {\n const [agent, setAgent] = useState<PublicAgent | null>(() => fallbackAgent ? normalizePublicAgent(fallbackAgent) : null);\n const [error, setError] = useState<Error | null>(null);\n\n useEffect(() => {\n if (!fallbackAgent) return;\n setAgent(normalizePublicAgent(fallbackAgent));\n setError(null);\n }, [fallbackAgent]);\n\n useEffect(() => {\n // If a complete agent object is provided (e.g. in platform live preview),\n // skip the remote fetch to keep live unsaved form state intact.\n if (!identifier || fallbackAgent) return undefined;\n const controller = new AbortController();\n setError(null);\n fetchAgentCustomization({ restUrl, identifier, withCredentials, signal: controller.signal })\n .then(setAgent)\n .catch((nextError) => {\n if (controller.signal.aborted) return;\n if (!fallbackAgent) {\n setError(nextError);\n }\n onError?.(nextError);\n });\n return () => controller.abort();\n }, [fallbackAgent, identifier, onError, restUrl, withCredentials]);\n\n if (error) return <div className=\"rqmii-chat-panel rqmii-chat-panel--error\">{error.message || 'Could not load agent'}</div>;\n if (!agent) return <div className=\"rqmii-chat-panel rqmii-chat-panel--error\">Loading</div>;\n\n return <>{children(agent)}</>;\n}\n\n// ---------------------------------------------------------------------------\n// Active-session dispatcher (before session ends)\n// ---------------------------------------------------------------------------\n\nfunction ChatBoxDispatcher({ agent, language, languages, onLanguageChange, onEndSession, onMinimize, onStartText, onStartVoice, textOnly, messages, onSendMessage, isPreview, onSessionStart, initialText, autoStartVoice }: { agent: PublicAgent; language: string; languages: string[]; onLanguageChange?: (v: string) => void; onEndSession?: () => void; onMinimize?: () => void; onStartText?: () => void; onStartVoice?: () => void; textOnly?: boolean; messages?: DisplayMessage[]; onSendMessage?: (text: string) => void; isPreview?: boolean; onSessionStart?: () => void; initialText?: string; autoStartVoice?: boolean }) {\n const chatKind = resolveChatKind(agent);\n const props = { agent, language, languages, onLanguageChange, onEndSession, onMinimize, messages, onSendMessage, isPreview, onSessionStart, initialText, autoStartVoice };\n\n switch (chatKind) {\n case 'avatar': return <RqmiiAvatarChatBox {...props} />;\n case 'voice': return <RqmiiVoiceChatBox {...props} />;\n case 'text_and_voice': return <RqmiiTextAndVoiceChatBox {...props} onStartText={onStartText} onStartVoice={onStartVoice} textOnly={textOnly} />;\n case 'text': default: return <RqmiiTextChatBox {...props} />;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Chat shell — always mounted inside the provider. Owns the ended-state latch,\n// renders the floating button when closed, active chat when open, and the ended\n// panel once the session terminates.\n// ---------------------------------------------------------------------------\n\ninterface ChatShellProps {\n agent: PublicAgent;\n language: string;\n languages: string[];\n startMode: StartMode;\n directive: NewSessionDirective;\n open: boolean;\n onOpen: () => void;\n onLanguageChange: (v: string) => void;\n onMinimize: () => void;\n onStartNewSession: (mode: 'voice' | 'text', firstText?: string) => void;\n onSessionStart: () => void;\n onStartText: () => void;\n onStartVoice: () => void;\n}\n\nfunction ChatShell({\n agent,\n language,\n languages,\n startMode,\n directive,\n open,\n onOpen,\n onLanguageChange,\n onMinimize,\n onStartNewSession,\n onSessionStart,\n onStartText,\n onStartVoice,\n}: ChatShellProps) {\n const { connectionState, isConnected, isSessionTerminated, creditExhausted, session, endSession, submitFeedback, interrupt } = useRqmiiConnection();\n const { messages } = useRqmiiMessages();\n\n const hasConnectedRef = useRef(false);\n const endedByRef = useRef<EndedBy | null>(null);\n\n // Latched internal ended-session info (kept for future feedback UI).\n const [endedInfo, setEndedInfo] = useState<SessionEndedInfo | null>(null);\n\n // Rating/feedback flow state (persists across minimize; reset on new session via remount).\n const [rating, setRating] = useState(0);\n const [feedbackSubmitted, setFeedbackSubmitted] = useState(false);\n const [showFeedbackScreen, setShowFeedbackScreen] = useState(false);\n const [ratedOnce, setRatedOnce] = useState(false);\n\n useEffect(() => {\n if (isConnected) hasConnectedRef.current = true;\n }, [isConnected]);\n\n useEffect(() => {\n if (endedInfo) return; // already latched\n\n let reason: EndedReason | null = null;\n if (isSessionTerminated) {\n reason = endedByRef.current === 'user' ? 'user_ended' : 'terminated';\n } else if (connectionState === 'ended') {\n reason = endedByRef.current === 'user' ? 'user_ended' : 'terminated';\n } else if (connectionState === 'failed') {\n if (creditExhausted) reason = 'credits_exhausted';\n else if (hasConnectedRef.current) reason = 'connection_lost';\n else reason = 'failed';\n } else if (creditExhausted) {\n reason = 'credits_exhausted';\n }\n\n if (!reason) return;\n\n setEndedInfo({\n sessionId: session.sessionId,\n endedBy: endedByRef.current ?? 'agent',\n reason,\n });\n }, [isSessionTerminated, connectionState, creditExhausted, session.sessionId, endedInfo]);\n\n const handleUserEndSession = () => {\n endedByRef.current = 'user';\n interrupt();\n endSession();\n };\n\n const sessionId = endedInfo?.sessionId ?? null;\n\n // Star selected in the ended panel. Persists the rating; opens the feedback screen only\n // on the first rating (subsequent star changes just re-send the rating and stay).\n const handleRate = (value: number) => {\n if (feedbackSubmitted) return;\n setRating(value);\n if (sessionId) {\n submitFeedback({ sessionId, rating: value, endedBy: endedInfo?.endedBy }).catch(() => {});\n }\n if (!ratedOnce) {\n setRatedOnce(true);\n setShowFeedbackScreen(true);\n }\n };\n\n const handleSubmitFeedback = async (comment: string) => {\n if (sessionId) {\n try {\n await submitFeedback({ sessionId, feedback: comment, endedBy: endedInfo?.endedBy });\n } catch {\n // ignore network errors; still lock locally\n }\n }\n setFeedbackSubmitted(true);\n setShowFeedbackScreen(false);\n };\n\n // Closed → floating button (state persists so reopening restores the same screen).\n if (!open) {\n return <RqmiiChatOpenButton agent={agent} onClick={onOpen} active={connectionState === 'connected'} />;\n }\n\n const chatKind = resolveChatKind(agent);\n const isAvatarAgent = agent.agentType === 'cloud_avatar' || agent.agentType === 'desktop_avatar';\n const textOnly = startMode === 'text';\n\n // Avatar agents keep their current behavior (no ended panel / new-session controls).\n if (isAvatarAgent) {\n return (\n <ChatBoxDispatcher\n agent={agent}\n language={language}\n languages={languages}\n onLanguageChange={onLanguageChange}\n onEndSession={handleUserEndSession}\n onMinimize={onMinimize}\n onSessionStart={onSessionStart}\n onStartText={onStartText}\n onStartVoice={onStartVoice}\n textOnly={textOnly}\n />\n );\n }\n\n // Ended state — show durable provider history + rating/feedback affordances.\n if (endedInfo) {\n // Full-screen feedback (comment) view — opened after the first rating or \"Tell us more\".\n if (showFeedbackScreen && sessionId) {\n return (\n <FeedbackPanel\n agent={agent}\n language={language}\n rating={rating}\n onBack={() => setShowFeedbackScreen(false)}\n onMinimize={onMinimize}\n onSubmit={handleSubmitFeedback}\n />\n );\n }\n\n return (\n <EndedChatPanel\n agent={agent}\n language={language}\n languages={languages}\n chatKind={chatKind === 'avatar' ? 'text' : chatKind}\n messages={messages}\n onLanguageChange={onLanguageChange}\n onMinimize={onMinimize}\n onStartNewVoice={() => onStartNewSession('voice')}\n onStartNewText={(text) => onStartNewSession('text', text)}\n rating={rating}\n endedBy={endedInfo.endedBy}\n sessionId={sessionId}\n ratingInteractive={!feedbackSubmitted}\n showTellUsMore={ratedOnce && !feedbackSubmitted}\n onRate={handleRate}\n onTellUsMore={() => setShowFeedbackScreen(true)}\n />\n );\n }\n\n // Active session.\n return (\n <ChatBoxDispatcher\n agent={agent}\n language={language}\n languages={languages}\n onLanguageChange={onLanguageChange}\n onEndSession={handleUserEndSession}\n onMinimize={onMinimize}\n onSessionStart={onSessionStart}\n onStartText={onStartText}\n onStartVoice={onStartVoice}\n textOnly={textOnly}\n initialText={directive?.mode === 'text' ? directive.text : undefined}\n autoStartVoice={directive?.mode === 'voice'}\n />\n );\n}\n\n// ---------------------------------------------------------------------------\n// Main connected chat component\n// ---------------------------------------------------------------------------\n\nexport function RqmiiAgentChat(props: RqmiiAgentChatProps) {\n const {\n wsUrl,\n restUrl,\n apiKey,\n agentId,\n agent,\n language,\n defaultOpen,\n open,\n className = '',\n debug = false,\n withCredentials = false,\n onError,\n onInitialized,\n config,\n promptOverrides,\n clientTools,\n onMinimize,\n onOpen,\n } = props;\n const identifiers = [!!apiKey, !!agentId].filter(Boolean).length;\n if (identifiers > 1) {\n throw new Error('RqmiiAgentChat: only one of apiKey, or agentId may be provided');\n }\n const identifier = apiKey || agentId;\n\n return (\n <PublicAgentLoader restUrl={restUrl} identifier={identifier} fallbackAgent={agent} withCredentials={withCredentials} onError={onError}>\n {(loadedAgent) => (\n <ConnectedAgentChat\n wsUrl={wsUrl}\n restUrl={restUrl}\n apiKey={apiKey}\n agentId={agentId}\n agent={loadedAgent}\n language={language}\n defaultOpen={defaultOpen}\n open={open}\n className={className}\n debug={debug}\n withCredentials={withCredentials}\n onError={onError}\n onInitialized={onInitialized}\n config={config}\n promptOverrides={promptOverrides}\n clientTools={clientTools}\n onMinimize={onMinimize}\n onOpen={onOpen}\n />\n )}\n </PublicAgentLoader>\n );\n}\n\nfunction ConnectedAgentChat({ wsUrl, restUrl, apiKey, agentId, agent, language: defaultLanguage, defaultOpen, open: controlledOpen, className, debug, withCredentials, onError, onInitialized, config, promptOverrides, clientTools, onMinimize, onOpen }: { wsUrl: string; restUrl: string; apiKey?: string; agentId?: string; agent: PublicAgent; language?: string; defaultOpen?: boolean; open?: boolean; className: string; debug: boolean; withCredentials: boolean; onError?: (error: unknown) => void; onInitialized?: (data: unknown) => void; config?: Record<string, unknown>; promptOverrides?: import(\"../types\").RqmiiPromptOverrides; clientTools?: Record<string, import(\"../types\").ClientToolHandler>; onMinimize?: () => void; onOpen?: () => void; }) {\n const effectiveDefaultOpen =\n defaultOpen !== undefined\n ? defaultOpen\n : (agent.widget?.behavior?.default_open ?? false);\n const [internalOpen, setInternalOpen] = useState(effectiveDefaultOpen);\n const open = controlledOpen !== undefined ? controlledOpen : internalOpen;\n\n useEffect(() => {\n if (controlledOpen === undefined) {\n setInternalOpen(effectiveDefaultOpen);\n }\n }, [effectiveDefaultOpen, controlledOpen]);\n\n const [sessionStarted, setSessionStarted] = useState(false);\n const [language, setLanguage] = useState(defaultLanguage || agent.defaultLanguage);\n const [startMode, setStartMode] = useState<StartMode>('idle');\n // Bumping this remounts RqmiiAgentRoom (fresh provider + session) for a clean new session.\n const [sessionAttempt, setSessionAttempt] = useState(0);\n // Directive that auto-starts a freshly-started session (first text message / voice call).\n const [directive, setDirective] = useState<NewSessionDirective>(null);\n const [bubbleDismissed, setBubbleDismissed] = useState(false);\n\n const connectsOnOpen = agent.agentType === 'cloud_avatar' || agent.agentType === 'desktop_avatar';\n const isAvatarAgent = connectsOnOpen;\n const welcomeBubble = agent.widget?.behavior?.welcome_bubble;\n const bubbleMessage = agent.welcomeMessages?.[language] || '';\n const showWelcomeBubble =\n !open &&\n !bubbleDismissed &&\n !isAvatarAgent &&\n !!welcomeBubble?.enabled &&\n !!bubbleMessage.trim();\n const languages = useMemo(() => normalizeChatLanguages(agent.languages, agent.defaultLanguage), [agent.defaultLanguage, agent.languages]);\n\n useEffect(() => {\n ensureGoogleFontLoaded(agent.widget?.appearance?.font);\n }, [agent.widget?.appearance?.font]);\n\n // Text-first path disables voice for the whole session.\n const effectiveConfig = useMemo(() => {\n if (startMode === 'text') return { ...(config ?? {}), use_voice: false, use_text: true };\n return config;\n }, [config, startMode]);\n\n const effectiveAgent = useMemo(\n () => applyAgentConfigOverrides(agent, effectiveConfig),\n [agent, effectiveConfig],\n );\n\n const audioEnabled = !isAvatarAgent && effectiveAgent.useVoice;\n\n // Non-avatar: connect = sessionStarted (decoupled from `open`) so minimizing to the\n // floating button does NOT tear down the provider and wipe history.\n // Avatar: connect when open (unchanged).\n const shouldConnect = connectsOnOpen ? open : sessionStarted;\n\n const roomSession = useMemo(() => ({\n\n ...(apiKey ? { apiKey } : {}),\n ...(agentId ? { agentId } : {}),\n language,\n config: effectiveConfig,\n ...(promptOverrides ? { promptOverrides } : {}),\n }), [agentId, apiKey, language, effectiveConfig, promptOverrides]);\n\n // Freeze the session object once started so mid-session state changes (e.g. language)\n // don't rebuild the session reference and trigger a teardown that wipes messages.\n // Re-freeze when the session attempt changes (new session) since sessionStarted stays true.\n const frozenSessionRef = useRef<typeof roomSession | null>(null);\n const prevSessionStartedRef = useRef(false);\n const prevAttemptRef = useRef(sessionAttempt);\n const attemptChanged = prevAttemptRef.current !== sessionAttempt;\n prevAttemptRef.current = sessionAttempt;\n if (sessionStarted && (!prevSessionStartedRef.current || attemptChanged)) {\n frozenSessionRef.current = roomSession;\n }\n prevSessionStartedRef.current = sessionStarted;\n if (!sessionStarted) frozenSessionRef.current = null;\n const activeSession = (sessionStarted && frozenSessionRef.current) ? frozenSessionRef.current : roomSession;\n\n useEffect(() => { setLanguage(defaultLanguage || agent.defaultLanguage); }, [agent.defaultLanguage, defaultLanguage]);\n\n const handleError = useMemo(() => {\n if (!onError) return (_error: unknown) => { setStartMode('idle'); };\n return (error: unknown) => {\n setStartMode('idle');\n onError(error);\n };\n }, [onError]);\n\n const handleStartText = () => { setStartMode('text'); setSessionStarted(true); };\n const handleStartVoice = () => { setStartMode('voice'); setSessionStarted(true); };\n\n // Minimize / close the panel to the floating button — session + history stay intact.\n const handleMinimize = () => { if (controlledOpen === undefined) setInternalOpen(false); onMinimize?.(); };\n const handleOpen = () => { if (controlledOpen === undefined) setInternalOpen(true); setBubbleDismissed(true); onOpen?.(); };\n\n // Start a brand-new session from the ended state (clears history via provider remount).\n const handleStartNewSession = (mode: 'voice' | 'text', firstText?: string) => {\n setDirective(mode === 'text' ? { mode: 'text', text: firstText ?? '' } : { mode: 'voice' });\n setStartMode(mode);\n setSessionStarted(true);\n setSessionAttempt((prev) => prev + 1);\n };\n\n const themeMode = agent.widget?.appearance?.theme?.mode === 'light' ? 'light' : 'dark';\n const surfaceStyles = useMemo(() => resolveWidgetThemeStyles(agent.widget?.appearance), [agent.widget?.appearance]);\n\n return (\n <RqmiiAgentRoom\n key={sessionAttempt}\n wsUrl={wsUrl}\n restUrl={restUrl}\n session={activeSession}\n connect={shouldConnect}\n enableAudio={audioEnabled}\n debug={debug}\n withCredentials={withCredentials}\n onError={handleError}\n onInitialized={onInitialized}\n clientTools={clientTools}\n >\n <div\n className={cx(\n 'rqmii-chat-surface',\n `rqmii-theme-${themeMode}`,\n agent.widget?.appearance?.position === 'left' && 'rqmii-position-left',\n className\n )}\n data-theme={themeMode}\n style={surfaceStyles}\n dir=\"ltr\"\n >\n {showWelcomeBubble && (\n <WelcomeBubble\n message={bubbleMessage}\n delaySeconds={welcomeBubble?.delay_seconds ?? 3}\n soundEnabled={!!welcomeBubble?.sound_enabled}\n language={language}\n buttonPosition={agent.widget?.appearance?.position === 'left' ? 'left' : 'right'}\n onClick={() => setBubbleDismissed(true)}\n />\n )}\n <ChatShell\n agent={agent}\n language={language}\n languages={languages}\n startMode={startMode}\n directive={directive}\n open={open}\n onOpen={handleOpen}\n onLanguageChange={setLanguage}\n onMinimize={handleMinimize}\n onStartNewSession={handleStartNewSession}\n onSessionStart={() => setSessionStarted(true)}\n onStartText={handleStartText}\n onStartVoice={handleStartVoice}\n />\n </div>\n </RqmiiAgentRoom>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Preview component (unchanged behavior)\n// ---------------------------------------------------------------------------\n\nexport function RqmiiAgentChatPreview(props: RqmiiAgentChatPreviewProps) {\n const { agent, language, open = true, className = '', messages, onSendMessage, onClose } = props;\n const normalizedAgent = useMemo(() => normalizePublicAgent(agent), [agent]);\n const [isOpen, setIsOpen] = useState(open);\n const [currentLanguage, setCurrentLanguage] = useState(language || normalizedAgent.defaultLanguage);\n const languages = useMemo(() => normalizeChatLanguages(normalizedAgent.languages, normalizedAgent.defaultLanguage), [normalizedAgent.defaultLanguage, normalizedAgent.languages]);\n const themeMode = normalizedAgent.widget?.appearance?.theme?.mode === 'light' ? 'light' : 'dark';\n const surfaceStyles = useMemo(() => resolveWidgetThemeStyles(normalizedAgent.widget?.appearance), [normalizedAgent.widget?.appearance]);\n\n useEffect(() => { if (language) setCurrentLanguage(language); }, [language]);\n useEffect(() => { setIsOpen(open); }, [open]);\n useEffect(() => {\n ensureGoogleFontLoaded(normalizedAgent.widget?.appearance?.font);\n }, [normalizedAgent.widget?.appearance?.font]);\n\n return (\n <RqmiiAgentProvider wsUrl=\"\" restUrl=\"\" enableAudio={false}>\n <div\n className={cx('rqmii-chat-surface is-preview', `rqmii-theme-${themeMode}`, className)}\n data-theme={themeMode}\n style={surfaceStyles}\n dir=\"ltr\"\n >\n {isOpen ? (\n <ChatBoxDispatcher\n agent={normalizedAgent}\n language={currentLanguage}\n languages={languages}\n onLanguageChange={setCurrentLanguage}\n onEndSession={() => { setIsOpen(false); onClose?.(); }}\n onMinimize={() => { setIsOpen(false); onClose?.(); }}\n messages={messages}\n onSendMessage={onSendMessage}\n isPreview\n />\n ) : null}\n </div>\n </RqmiiAgentProvider>\n );\n}\n"],"names":["af","sq","ar","az","eu","be","bn","bs","bg","ca","zh","hr","cs","da","nl","en","et","fi","fr","gl","de","el","gu","hi","hu","id","it","ja","kn","kk","ko","lv","lt","mk","ms","ml","mr","no","fa","pl","pt","pa","ro","ru","sr","sk","sl","es","sw","sv","tl","ta","te","th","tr","uk","ur","vi","cy","TEXT","arEg","arSa","RQMII_CHAT_LANGUAGES","RQMII_CHAT_LANGUAGE_VALUES","language","getChatLanguage","value","getChatText","key","normalizeChatLanguages","languages","fallback","clean","DEFAULT_AGENT","AGENT_TYPES","normalizePublicAgent","rawAgent","r","agentType","useText","useVoice","conversation","speech","defaultLanguage","rawWidgetSource","rawAppearance","rawBehavior","rawWidget","showBranding","showTopbarAvatarImage","rawSuggested","rawDefaultOpen","rawFont","normalizedFont","val","rawConsentSource","rawConsentEnabled","rawConsentOneTime","rawConsentContent","rawEndedScreen","conversationEndedScreen","rawBubble","welcomeBubble","rawTheme","theme","widget","rawConsent","rawWelcome","welcomeMessages","v","k","allowInterrupt","allowWelcomeMessageInterrupt","faceImage","fetchAgentCustomization","restUrl","identifier","withCredentials","signal","response","data","fetchAgentConfig","apiKey","agentId","detail","d","applyAgentConfigOverrides","agent","config","resolveChatKind","mergeClasses","classes","className","index","array","toKebabCase","string","toCamelCase","match","p1","p2","toPascalCase","camelCase","defaultAttributes","hasA11yProp","props","prop","LucideContext","createContext","useLucideContext","useContext","Icon","forwardRef","color","size","strokeWidth","absoluteStrokeWidth","children","iconNode","rest","ref","contextSize","contextStrokeWidth","contextAbsoluteStrokeWidth","contextColor","contextClass","calculatedStrokeWidth","createElement","tag","attrs","createLucideIcon","iconName","Component","__iconNode","ArrowUp","ChevronLeft","ChevronDown","ChevronUp","LoaderCircle","Maximize2","MicOff","Mic","Minimize2","PhoneOff","Phone","RotateCcw","Star","X","noop","MOBILE_BREAKPOINT","isMobileViewport","cx","resolveWidgetFontFamily","font","normalized","getContrastTextColor","hexColor","hex","fullHex","c","g","b","resolveWidgetThemeStyles","appearance","styles","accentColor","accentTextColor","endCallColor","endCallTextColor","getGoogleFontUrl","ensureGoogleFontLoaded","href","link","languageFontClass","_language","languageTextDirection","formatTime","seconds","minutes","useElapsed","active","elapsed","setElapsed","useState","useEffect","interval","useVisualViewportHeight","height","setHeight","vv","update","useStreamingText","text","streaming","wordsRef","useRef","wordCount","setWordCount","prev","timer","RqmiiOrb","React","m","LanguageSelect","onChange","open","setOpen","selected","options","handler","event","jsxs","jsx","option","RqmiiChatFooter","brand","footerContent","hasFooterContent","template","dir","renderBranding","parts","RqmiiAgentAvatar","isOrb","RqmiiChatOpenButton","onClick","position","playNotificationSound","Ctx","ctx","now","osc","gain","WelcomeBubble","message","delaySeconds","soundEnabled","buttonPosition","visible","setVisible","trimmed","sideClass","ChatInput","placeholder","onSend","disabled","variant","setMessage","textareaRef","maxTextareaHeight","send","textarea","StreamingText","displayText","SUGGESTIONS_MAX_HEIGHT","SUGGESTIONS_MAX_HEIGHT_MOBILE","TOGGLE_SIZE","TOGGLE_GAP","TOGGLE_RESERVED","getSuggestionsMaxHeight","toggleSide","textDirection","findCornerBubble","items","containerWidth","side","reserved","lastRowTop","rowItems","reserveCornerSpace","pass","corner","SuggestedMessages","suggestions","expanded","setExpanded","hasOverflow","setHasOverflow","hiddenFrom","setHiddenFrom","toggleTop","setToggleTop","innerRef","itemRefs","resetReservations","useLayoutEffect","measure","width","maxHeight","firstOverIndex","i","firstOverflow","guard","next","bottom","contentBottom","hidden","node","TypingIndicator","isMultilineField","FIELD_PLACEHOLDER_KEYS","LeadCaptureFormMessage","messageId","form","formSubmitted","useRqmiiAgentContext","values","setValues","submitting","setSubmitting","submitted","setSubmitted","error","setError","title","getPlaceholder","field","i18nKey","handleChange","handleSubmit","e","f","collectedData","err","inputType","MessageRow","isUser","MessageList","messages","partialTranscript","showTypingIndicator","endRef","prevMessageCountRef","isNewMessage","ErrorPanel","onRetry","onClose","MAX_RATING","StarRow","rating","onRate","readonly","hover","setHover","_","filled","RatingBar","endedBy","sessionId","interactive","showTellUsMore","showRating","showConversationId","onTellUsMore","header","endedText","Fragment","FeedbackPanel","onBack","onMinimize","onSubmit","comment","setComment","canSubmit","Loader2","RqmiiCloudAvatarPlayer","n","usePanelStyle","visualViewportHeight","StartTextPanel","onLanguageChange","isVoiceEnabled","isAudioPlaying","isVoiceSetupLoading","onStartVoice","onSuggestionClick","compact","panelStyle","isMobile","setIsMobile","onResize","isCompactLayout","avatarSize","hasSuggestions","StartVoicePanel","TextChatPanel","onEndSession","onToggleVoice","isListening","isSpeaking","isLoading","isAgentThinking","isAgentSpeaking","waitingForResponse","status","getStatusText","showTopbarAvatar","VoiceCallPanel","persistentListening","MinimizedChatPill","onRestore","isText","EndedChatPanel","chatKind","onStartNewVoice","onStartNewText","ratingInteractive","endedScreen","postChatRatingEnabled","ratingBar","showCallButton","showTextInput","topBarActions","AvatarChatPanel","streamingUrl","isCloudStreamConnected","cloudStreamError","useRqmiiAvatar","isAvatarSpeaking","sendTextMessage","useRqmiiMessages","sanitizeUrl","url","lower","parseInlineMarkdown","nodes","pattern","lastIndex","linkText","linkUrl","boldText","italicText","delText","codeText","renderInlineWithLineBreaks","keyPrefix","lines","line","idx","RqmiiMarkdownComponent","content","rawBlocks","elements","rawBlock","blockIdx","blockKey","headingMatch","level","headingText","inlineContent","quoteText","l","item","itemIdx","RqmiiMarkdown","ConsentDialog","onAccept","onDecline","markdownText","acceptLabel","declineLabel","normalizePartialTranscript","shouldShowMinimize","RqmiiChatBoxContent","previewMessages","onSendMessage","isPreview","propChatKind","sdk","renderPanel","messagesRef","initialText","autoStartVoice","consentConfig","isConsentEnabled","consentContent","isOneTime","storageKey","consented","setConsented","resolvedChatKind","voiceStarted","setVoiceStarted","conversationStarted","setConversationStarted","isMinimized","setIsMinimized","connecting","setConnecting","connectError","setConnectError","vh","showConsent","canMinimize","events","useRqmiiConnection","handleMinimize","handleMaximize","handleConsentAccept","useCallback","handleConsentDecline","setLanguage","nextLanguage","autoStartedRef","initiateVoice","panelProps","DefaultPanelRenderer","onCloseWidget","onSendSuggestion","typingIndicatorEnabled","effectiveWaitingForResponse","displayMessages","s","handleSuggestionClick","DUMMY_VAD","useWelcomeTextHandling","isSessionReady","pendingWelcomeText","setPendingWelcomeText","pendingMessage","setPendingMessage","sendPendingWelcomeText","useDeferredClientReady","signalClientReady","pending","setPending","pendingPayload","setPendingPayload","emittedRef","payload","WELCOME_SAFEGUARD_MS","RqmiiTextChatBox","restProps","emitUserMessage","addLocalMessage","clearMessages","changeSessionLanguage","clearSessionHistory","startedRef","pendingFirstTextRef","welcomeFlowDoneRef","pendingFlag","setPendingFlag","firstUserText","setFirstUserText","setWaitingForResponse","prevMsgCountRef","lastMsg","useRqmiiEvents","welcomeText","useMemo","clearAll","actions","defaultTextSend","a","handleTextSend","RqmiiVoiceChatBox","useRqmiiVoice","deferredClientReady","voiceRequested","setVoiceRequested","vad","useRqmiiVAD","isVadLoading","toggleListening","isVoiceActive","startSession","defaultVoiceStart","defaultVoiceToggle","RqmiiTextAndVoiceChatBox","pendingTextRef","pendingSuggestionRef","pendingSuggestionFlag","setPendingSuggestionFlag","suggestionFlowDoneRef","textStartedRef","RqmiiAvatarChatBox","RqmiiChatSurface","defaultOpen","preview","ChatBoxComponent","effectiveDefaultOpen","themeMode","surfaceStyles","PublicAgentLoader","fallbackAgent","onError","setAgent","controller","nextError","ChatBoxDispatcher","onStartText","textOnly","onSessionStart","ChatShell","startMode","directive","onOpen","onStartNewSession","connectionState","isConnected","isSessionTerminated","creditExhausted","session","endSession","submitFeedback","interrupt","hasConnectedRef","endedByRef","endedInfo","setEndedInfo","setRating","feedbackSubmitted","setFeedbackSubmitted","showFeedbackScreen","setShowFeedbackScreen","ratedOnce","setRatedOnce","reason","handleUserEndSession","handleRate","handleSubmitFeedback","isAvatarAgent","RqmiiAgentChat","wsUrl","debug","onInitialized","promptOverrides","clientTools","loadedAgent","ConnectedAgentChat","controlledOpen","internalOpen","setInternalOpen","sessionStarted","setSessionStarted","setStartMode","sessionAttempt","setSessionAttempt","setDirective","bubbleDismissed","setBubbleDismissed","connectsOnOpen","bubbleMessage","showWelcomeBubble","effectiveConfig","effectiveAgent","audioEnabled","shouldConnect","roomSession","frozenSessionRef","prevSessionStartedRef","prevAttemptRef","attemptChanged","activeSession","handleError","_error","handleStartText","handleStartVoice","handleOpen","handleStartNewSession","mode","firstText","RqmiiAgentRoom","RqmiiAgentChatPreview","normalizedAgent","isOpen","setIsOpen","currentLanguage","setCurrentLanguage","RqmiiAgentProvider"],"mappings":"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","x_google_ignoreList":[64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86]}