@moveo-ai/web-client 0.88.4-true.2 → 0.88.5-true.1

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 (74) hide show
  1. package/dist/147.min.js +3 -0
  2. package/dist/147.min.js.LICENSE.txt +6 -0
  3. package/dist/147.min.js.map +1 -0
  4. package/dist/329.min.js +3 -0
  5. package/dist/329.min.js.LICENSE.txt +6 -0
  6. package/dist/329.min.js.map +1 -0
  7. package/dist/audio-client.min.js +3 -0
  8. package/dist/audio-client.min.js.LICENSE.txt +46 -0
  9. package/dist/audio-client.min.js.map +1 -0
  10. package/dist/iframe.min.js +1 -1
  11. package/dist/iframe.min.js.LICENSE.txt +1 -1
  12. package/dist/iframe.min.js.map +1 -1
  13. package/dist/iframe.v2.min.js +1 -1
  14. package/dist/iframe.v2.min.js.LICENSE.txt +2 -2
  15. package/dist/iframe.v2.min.js.map +1 -1
  16. package/dist/index.html +1 -1
  17. package/dist/preview/index.html +91 -0
  18. package/dist/preview-audio/index.html +68 -0
  19. package/dist/preview.css.min.js.LICENSE.txt +1 -1
  20. package/dist/public/background.svg +79 -0
  21. package/dist/public/espa.png +0 -0
  22. package/dist/public/fonts/alpha/AlphaText-Bold.woff +0 -0
  23. package/dist/public/fonts/alpha/AlphaText-BoldItalic.woff +0 -0
  24. package/dist/public/fonts/alpha/AlphaText-Italic.woff +0 -0
  25. package/dist/public/fonts/alpha/AlphaText-Light.woff +0 -0
  26. package/dist/public/fonts/alpha/AlphaText-LightItalic.woff +0 -0
  27. package/dist/public/fonts/alpha/AlphaText-Medium.woff +0 -0
  28. package/dist/public/fonts/alpha/AlphaText-MediumItalic.woff +0 -0
  29. package/dist/public/fonts/alpha/AlphaText-Regular.woff +0 -0
  30. package/dist/public/fonts/alpha/AlphaText-SemiBold.woff +0 -0
  31. package/dist/public/fonts/alpha/AlphaText-SemiBoldItalic.woff +0 -0
  32. package/dist/public/fonts/aptos/Aptos-Bold-Italic.ttf +0 -0
  33. package/dist/public/fonts/aptos/Aptos-Bold.ttf +0 -0
  34. package/dist/public/fonts/aptos/Aptos-ExtraBold-Italic.ttf +0 -0
  35. package/dist/public/fonts/aptos/Aptos-ExtraBold.ttf +0 -0
  36. package/dist/public/fonts/aptos/Aptos-Italic.ttf +0 -0
  37. package/dist/public/fonts/aptos/Aptos-Light-Italic.ttf +0 -0
  38. package/dist/public/fonts/aptos/Aptos-Light.ttf +0 -0
  39. package/dist/public/fonts/aptos/Aptos-SemiBold-Italic.ttf +0 -0
  40. package/dist/public/fonts/aptos/Aptos-SemiBold.ttf +0 -0
  41. package/dist/public/fonts/aptos/Aptos.ttf +0 -0
  42. package/dist/public/locales/ar.json +183 -0
  43. package/dist/public/locales/bg.json +183 -0
  44. package/dist/public/locales/cs.json +183 -0
  45. package/dist/public/locales/da.json +183 -0
  46. package/dist/public/locales/de.json +183 -0
  47. package/dist/public/locales/el.json +183 -0
  48. package/dist/public/locales/en.json +183 -0
  49. package/dist/public/locales/es.json +183 -0
  50. package/dist/public/locales/fr.json +183 -0
  51. package/dist/public/locales/id.json +183 -0
  52. package/dist/public/locales/it.json +183 -0
  53. package/dist/public/locales/ja.json +183 -0
  54. package/dist/public/locales/me.json +183 -0
  55. package/dist/public/locales/nl-be.json +183 -0
  56. package/dist/public/locales/nl.json +183 -0
  57. package/dist/public/locales/pl.json +183 -0
  58. package/dist/public/locales/pt-br.json +183 -0
  59. package/dist/public/locales/pt.json +183 -0
  60. package/dist/public/locales/ro.json +183 -0
  61. package/dist/public/locales/ru.json +183 -0
  62. package/dist/public/locales/sq.json +183 -0
  63. package/dist/public/locales/sr.json +183 -0
  64. package/dist/public/locales/sv.json +183 -0
  65. package/dist/public/locales/tl.json +183 -0
  66. package/dist/public/locales/tr.json +183 -0
  67. package/dist/public/locales/zh.json +183 -0
  68. package/dist/public/nbg.svg +3 -0
  69. package/dist/public/og-image.jpg +0 -0
  70. package/dist/public/webview-image.png +0 -0
  71. package/dist/web-client.min.js +1 -1
  72. package/dist/web-client.min.js.LICENSE.txt +1 -1
  73. package/dist/web-client.min.js.map +1 -1
  74. package/package.json +38 -66
package/dist/index.html CHANGED
@@ -15,7 +15,7 @@
15
15
  const widgetId = urlParams.get('widgetId');
16
16
  const version = urlParams.get('version');
17
17
 
18
- const defaultScript = 'iframe.min.js?af3396ff8b7954385c51';
18
+ const defaultScript = 'iframe.min.js?65305982e7a80eeba524';
19
19
  const versionPattern = /^v\d+$/;
20
20
  const script = document.createElement('script');
21
21
  script.src =
@@ -0,0 +1,91 @@
1
+ <!doctype html><html><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1"/><meta name="keywords" content="Moveo.ai, Preview, WebChat, WebWidget, webclient, chatbot"/><meta name="description" content="Preview and Improve your AI Agent"/><meta name="twitter:card" value="summary"><meta property="og:title" content="Moveo.ai Webchat Preview"/><meta property="og:type" content="website"/><meta property="og:url" content="https://moveo.ai"/><meta property="og:image" content="https://web-client.moveo.ai/public/og-image.jpg"/><meta property="og:image:width" content="1200"/><meta property="og:image:height" content="630"/><meta property="og:description" content="Preview and Improve your AI Agent"/><title>Moveo.ai Client Preview</title><script src="../preview.css.min.js?65305982e7a80eeba524"></script><style>body::before {
2
+ background-image: url('/public/background.svg');
3
+ }</style></head><body><div class="moveo_preview"><div class="preview_actions"><p class="header_text"><span class="colored">Preview</span> and <span class="colored">Test</span><br>your Webchat</p><p class="body_text">Moveo.ai can help you build engaging conversational applications powered by Artificial Intelligence.</p><div class="button_container"><button class="action_button" id="open-chat-button">Open Webchat</button> <button class="action_button" id="close-chat-button">Close Webchat</button> <button class="action_button" id="render-chat-button">Render Webchat</button></div></div><div id="embed-chat-container"><p id="embed-text">The webchat will render in the html element of your choice. Render the webchat here, in order to preview other settings.</p><div id="embed-chat"></div></div></div><script>// Get version from URL or default to v1
4
+ const queryString = window.location.search;
5
+ const urlParams = new URLSearchParams(queryString);
6
+ const version = urlParams.get('version') || 'v1';
7
+
8
+ // Find web-client.min.js directly
9
+ const webpackFiles = `../iframe.min.js?65305982e7a80eeba524,../iframe.v2.min.js?65305982e7a80eeba524,../web-client.min.js?65305982e7a80eeba524,../preview.css.min.js?65305982e7a80eeba524,../audio-client.min.js?65305982e7a80eeba524`.split(',');
10
+ const webClientFile = webpackFiles.find(file => file.includes('web-client.min.js'));
11
+ const previewCssFile = webpackFiles.find(file => file.includes('preview.css.min.js'));
12
+
13
+ // Load preview.css
14
+ const previewCssScript = document.createElement('script');
15
+ previewCssScript.src = previewCssFile;
16
+ document.head.appendChild(previewCssScript);
17
+
18
+ // Dynamically load the correct version of the web client
19
+ const script = document.createElement('script');
20
+ script.src = webClientFile;
21
+ script.onload = function () {
22
+ // Initialize the web client after the script is loaded
23
+ const integrationId = urlParams.get('integrationId');
24
+ const host = urlParams.get('host');
25
+ const element = document.getElementById('embed-chat');
26
+ const encodedConfig = urlParams.get('_config');
27
+ let config = {};
28
+ if (encodedConfig) {
29
+ try {
30
+ config = JSON.parse(atob(encodedConfig));
31
+ } catch (error) {
32
+ console.debug({ error, encodedConfig }, 'Error parsing config');
33
+ }
34
+ }
35
+ MoveoAI.init({
36
+ ...config,
37
+ version,
38
+ integrationId,
39
+ host,
40
+ element,
41
+ })
42
+ .then((instance) => {
43
+ console.log('Preview initialized', instance);
44
+
45
+ window.webClientInstance = instance;
46
+
47
+ if (instance.config.widget_position === 'embed') {
48
+ const embedContainer = document.getElementById('embed-chat-container');
49
+ embedContainer.style.display = 'block';
50
+
51
+ const renderButton = document.getElementById('render-chat-button');
52
+ renderButton.classList.add("enabled");
53
+
54
+ renderButton.onclick = function () {
55
+ document.getElementById('embed-text').style.display = 'none';
56
+ document.getElementById('embed-chat').style.display = 'block';
57
+ renderButton.style.removeProperty('background-color')
58
+ renderButton.classList.add("disabled");
59
+ renderButton.disabled = true;
60
+ };
61
+ } else {
62
+ const openButton = document.getElementById('open-chat-button');
63
+ openButton.classList.add("enabled")
64
+
65
+ openButton.onclick = function () {
66
+ instance.openWindow();
67
+ };
68
+
69
+ const closeButton = document.getElementById('close-chat-button');
70
+ closeButton.classList.add("enabled");
71
+
72
+ closeButton.onclick = function () {
73
+ instance.closeWindow();
74
+ };
75
+ }
76
+
77
+ const primaryColor = instance?.config?.background_color ?? '#1B66D6';
78
+ const colored = document.querySelectorAll('span.colored');
79
+ for (const element of colored) {
80
+ element.style.color = primaryColor;
81
+ }
82
+ const buttons = document.querySelectorAll('.action_button');
83
+ for (const button of buttons) {
84
+ button.style.backgroundColor = primaryColor;
85
+ }
86
+ })
87
+ .catch((error) => {
88
+ console.error(error, 'Error initializing preview');
89
+ });
90
+ };
91
+ document.head.appendChild(script);</script></body></html>
@@ -0,0 +1,68 @@
1
+ <!doctype html><html lang="en"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1"/><meta name="keywords" content="Moveo.ai, Voice, Audio, Preview"/><meta name="description" content="Test your Audio Integration"/><meta name="twitter:card" content="summary"/><meta property="og:title" content="Moveo.ai Audio Preview"/><meta property="og:type" content="website"/><meta property="og:url" content="https://moveo.ai"/><meta property="og:image" content="https://web-client.moveo.ai/public/og-image.jpg"/><meta property="og:image:width" content="1200"/><meta property="og:image:height" content="630"/><meta property="og:description" content="Test your Audio Integration"/><title>Moveo.ai Audio Preview</title><script src="https://cdn.tailwindcss.com"></script><script>tailwind.config = {
2
+ theme: {
3
+ extend: {
4
+ fontFamily: {
5
+ sans: ['Inter', 'system-ui', '-apple-system', 'sans-serif'],
6
+ },
7
+ colors: {
8
+ 'moveo-primary': '#1B66D6',
9
+ 'moveo-secondary': '#EEF2FF',
10
+ },
11
+ backgroundImage: {
12
+ 'moveo-radial':
13
+ 'radial-gradient(circle at top right, rgba(27,102,214,0.18), transparent 55%)',
14
+ },
15
+ },
16
+ },
17
+ };</script><link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;600;700&display=swap" rel="stylesheet"/><script defer="defer" src="/audio-client.min.js"></script></head><body class="relative min-h-screen font-sans text-slate-900 antialiased"><main class="relative z-10 flex min-h-screen items-center"><section class="mx-auto flex w-full max-w-6xl flex-col gap-12 px-6 py-16 md:flex-row md:items-center md:px-12 lg:gap-16"><header class="max-w-2xl space-y-6 text-center md:text-left"><h1 class="text-4xl font-semibold leading-tight sm:text-5xl">Preview and test<br class="hidden sm:block"/>your voice integration</h1><p class="text-lg text-slate-600 sm:text-xl">Click the widget button at the bottom right to start a test call and try your AI Agent with voice.</p><div id="status" class="text-sm font-medium"></div></header></section></main><script>localStorage.debug = 'moveo:audio:*';
18
+
19
+ const statusNode = document.getElementById('status');
20
+ const toneColor = {
21
+ warning: 'text-amber-600',
22
+ error: 'text-rose-600',
23
+ };
24
+
25
+ const setStatus = (message, tone = 'error') => {
26
+ if (!statusNode) return;
27
+ statusNode.className = `text-sm font-medium ${toneColor[tone] ?? toneColor.error}`;
28
+ statusNode.textContent = message;
29
+ };
30
+
31
+ window.addEventListener('load', async () => {
32
+ const params = new URLSearchParams(window.location.search);
33
+ const integrationId =
34
+ (params.get('integration_id') ?? params.get('integrationId') ?? '').trim();
35
+ if (!integrationId) {
36
+ setStatus('Add "?integration_id=YOUR_ID" to the URL to begin.', 'warning');
37
+ return;
38
+ }
39
+
40
+ const hostParam = (params.get('host') ?? '').trim();
41
+ const host = hostParam ? hostParam.replace(/\/+$/, '') : '';
42
+
43
+ if (!window.MoveoAudio?.init) {
44
+ console.error('MoveoAudio UMD build is not available on window.');
45
+ setStatus(
46
+ 'Unable to load the audio client. Check the bundle output.',
47
+ 'error'
48
+ );
49
+ return;
50
+ }
51
+
52
+ try {
53
+ const audioController = await window.MoveoAudio.init({
54
+ integrationId,
55
+ ...(host ? { host } : {}),
56
+ });
57
+
58
+ audioController.on?.('error', ({ message }) => {
59
+ setStatus(`Call error: ${message || 'unexpected error'}`, 'error');
60
+ });
61
+
62
+ // Widget initialized successfully - no status message needed
63
+ console.log('✅ MoveoAudio widget initialized', audioController);
64
+ } catch (error) {
65
+ console.error('❌ Failed to initialize MoveoAudio widget:', error);
66
+ setStatus(`Failed to initialize the audio widget`, 'error');
67
+ }
68
+ });</script></body></html>
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  *
3
- * @moveo-ai/web-client v0.88.4-true.2
3
+ * @moveo-ai/web-client v0.88.5-true.1
4
4
  * Copyright (c) Moveo.ai (TM)
5
5
  *
6
6
  */
@@ -0,0 +1,79 @@
1
+ <svg
2
+ width="746"
3
+ height="984"
4
+ fill="none"
5
+ xmlns="http://www.w3.org/2000/svg"
6
+ >
7
+ <rect
8
+ x="152.122"
9
+ y="827.667"
10
+ width="110.899"
11
+ height="221.798"
12
+ rx="55.45"
13
+ transform="rotate(-90 152.122 827.667)"
14
+ fill="#DEDEDE"
15
+ />
16
+ <circle cx="77.87" cy="960.36" r="77.87" fill="#DEDEDE" />
17
+ <circle cx="45.424" cy="770.845" r="45.424" fill="#DEDEDE" />
18
+ <circle cx="262.436" cy="958.197" r="45.424" fill="#DEDEDE" />
19
+ <rect
20
+ x="557.202"
21
+ y="827.667"
22
+ width="110.899"
23
+ height="221.798"
24
+ rx="55.45"
25
+ transform="rotate(-90 557.202 827.667)"
26
+ fill="#DEDEDE"
27
+ />
28
+ <circle cx="482.951" cy="960.36" r="77.87" fill="#DEDEDE" />
29
+ <circle cx="450.504" cy="770.845" r="45.424" fill="#DEDEDE" />
30
+ <circle cx="667.516" cy="958.197" r="45.424" fill="#DEDEDE" />
31
+ <rect
32
+ x="152.122"
33
+ y="441.283"
34
+ width="110.899"
35
+ height="221.798"
36
+ rx="55.45"
37
+ transform="rotate(-90 152.122 441.283)"
38
+ fill="#DEDEDE"
39
+ />
40
+ <circle cx="77.87" cy="573.976" r="77.87" fill="#DEDEDE" />
41
+ <circle cx="45.424" cy="384.461" r="45.424" fill="#DEDEDE" />
42
+ <circle cx="262.436" cy="571.813" r="45.424" fill="#DEDEDE" />
43
+ <rect
44
+ x="557.202"
45
+ y="441.283"
46
+ width="110.899"
47
+ height="221.798"
48
+ rx="55.45"
49
+ transform="rotate(-90 557.202 441.283)"
50
+ fill="#DEDEDE"
51
+ />
52
+ <circle cx="482.951" cy="573.976" r="77.87" fill="#DEDEDE" />
53
+ <circle cx="450.504" cy="384.461" r="45.424" fill="#DEDEDE" />
54
+ <circle cx="667.516" cy="571.813" r="45.424" fill="#DEDEDE" />
55
+ <rect
56
+ x="152.122"
57
+ y="54.899"
58
+ width="110.899"
59
+ height="221.798"
60
+ rx="55.45"
61
+ transform="rotate(-90 152.122 54.899)"
62
+ fill="#DEDEDE"
63
+ />
64
+ <circle cx="77.87" cy="187.592" r="77.87" fill="#DEDEDE" />
65
+ <circle cx="45.424" cy="-1.923" r="45.424" fill="#DEDEDE" />
66
+ <circle cx="262.436" cy="185.429" r="45.424" fill="#DEDEDE" />
67
+ <rect
68
+ x="557.202"
69
+ y="54.899"
70
+ width="110.899"
71
+ height="221.798"
72
+ rx="55.45"
73
+ transform="rotate(-90 557.202 54.899)"
74
+ fill="#DEDEDE"
75
+ />
76
+ <circle cx="482.951" cy="187.592" r="77.87" fill="#DEDEDE" />
77
+ <circle cx="450.504" cy="-1.923" r="45.424" fill="#DEDEDE" />
78
+ <circle cx="667.516" cy="185.429" r="45.424" fill="#DEDEDE" />
79
+ </svg>
Binary file
@@ -0,0 +1,183 @@
1
+ {
2
+ "buttons": {
3
+ "cancel": "إلغاء",
4
+ "close": "إغلاق",
5
+ "continue": "متابعة",
6
+ "end_chat": "إنهاء الدردشة",
7
+ "end_conversation": "إنهاء المحادثة",
8
+ "launcher_label": "فتح نافذة الدردشة",
9
+ "restart": "إعادة التشغيل",
10
+ "resume": "استئناف",
11
+ "see_more": "عرض المزيد",
12
+ "send": "إرسال",
13
+ "show_more": "إظهار المزيد",
14
+ "skip": "تخطي",
15
+ "skip_close": "تخطي وإغلاق",
16
+ "start": "بدء",
17
+ "start_new": "بدء جديد",
18
+ "start_new_chat": "بدء دردشة جديدة",
19
+ "submit": "إرسال"
20
+ },
21
+ "common": {
22
+ "ai_agent": "وكيل الذكاء الاصطناعي",
23
+ "loading": "جارٍ التحميل..."
24
+ },
25
+ "disclaimer": {
26
+ "required": "للاستمرار، يجب أن تقبل سياسة الخصوصية.",
27
+ "title": "تنبيه وسياسة البيانات"
28
+ },
29
+ "errors": {
30
+ "history_sync": "حدث خطأ ما. فضلاً أعد تحميل هذه الصفحة.",
31
+ "max_concurrent": "تم تجاوز الحد الأقصى للجلسات المتزامنة.",
32
+ "reconnect": "حدث خطأ ما.",
33
+ "reconnect_forbidden": "حدث خطأ في التفويض. يرجى إعادة بدء جلستك.",
34
+ "restart_conversation": "يرجى إعادة هذه المحادثة أو تحديث الصفحة.",
35
+ "unknown": "حدث خطأ ما. يرجى تحديث هذه الصفحة."
36
+ },
37
+ "events": {
38
+ "member_join": "انضم {{0}} إلى المحادثة",
39
+ "member_leave": "غادر {{0}} المحادثة",
40
+ "resolved": {
41
+ "title": "تم حل هذه المحادثة",
42
+ "subtitle": "ستظل نشطة لمدة <0>{{time}}</0>"
43
+ }
44
+ },
45
+ "feedback": {
46
+ "helpful": "هل كان ذلك مفيدًا؟",
47
+ "helpful_button": "كان مفيدًا",
48
+ "not_helpful_button": "لم يكن مفيدًا"
49
+ },
50
+ "fields": {
51
+ "address": "العنوان",
52
+ "custom_field": "حقل مخصص",
53
+ "display_name": "الاسم",
54
+ "email": "البريد الإلكتروني",
55
+ "invalid": "هذا الحقل غير صالح.",
56
+ "language": "اللغة",
57
+ "less_than": "يجب أن يحتوي هذا الحقل على أقل من {{0}} حرفًا.",
58
+ "more_than": "يجب أن يحتوي هذا الحقل على {{0}} أحرف على الأقل.",
59
+ "phone": "الهاتف",
60
+ "placeholder": {
61
+ "language": "اختر اللغة"
62
+ },
63
+ "required": "هذا الحقل مطلوب"
64
+ },
65
+ "files": {
66
+ "invalid_type": "الملف {{0}} من نوع غير مدعوم.",
67
+ "too_large": "الملف {{0}} كبير جدًا. الحد الأقصى للحجم هو {{1}} ميجابايت."
68
+ },
69
+ "forms": {
70
+ "email": {
71
+ "label": "ما هو عنوان بريدك الإلكتروني؟"
72
+ }
73
+ },
74
+ "header": {
75
+ "download_conversation": "تنزيل المحادثة",
76
+ "send_email": "إرسال عبر البريد الإلكتروني"
77
+ },
78
+ "input_placeholder": "اكتب رسالة",
79
+ "input_send": "إرسال الرسالة",
80
+ "launchers": {
81
+ "feedback": "ملاحظات",
82
+ "help": "هل تحتاج إلى مساعدة؟"
83
+ },
84
+ "loading": {
85
+ "creating_answer": "جارٍ إنشاء الإجابة...",
86
+ "fetching_data": "جارٍ جلب البيانات...",
87
+ "processing_request": "جارٍ معالجة الطلب..."
88
+ },
89
+ "modal": {
90
+ "continue": "يمكنك متابعة المحادثة لمدة...",
91
+ "end": "هل أنت متأكد أنك تريد إنهاء المحادثة؟",
92
+ "end_old": "هل أنت متأكد أنك تريد إنهاء الدردشة؟",
93
+ "expired": "انتهت صلاحية جلستك",
94
+ "expired_subtitle": "هذه المحادثة لم تعد متاحة",
95
+ "expired_title": "انتهت المحادثة",
96
+ "inactivity": "لقد كنت غير نشط لبعض الوقت. كيف تود المتابعة؟",
97
+ "inactivity_title": "تنبيه بعدم النشاط",
98
+ "resolved_old": "تم وضع علامة على هذه المحادثة كمحلولة",
99
+ "webview": "Webview"
100
+ },
101
+ "moveo_ai": "Moveo.ai",
102
+ "no_messages": "لم تبدأ هذه المحادثة بعد",
103
+ "no_video_tag": "متصفحك لا يدعم وسم الفيديو",
104
+ "overview": {
105
+ "agent_soon": "سيكون أحد الوكلاء متاحًا قريبًا",
106
+ "estimated_time": "الوقت المقدر للانتظار:",
107
+ "high_traffic": "يتجاوز وقت الانتظار",
108
+ "mins": "دقائق",
109
+ "secs": "ث",
110
+ "queue_position": "موضعك في قائمة الانتظار: {{0}}"
111
+ },
112
+ "related_articles": "مقالات ذات صلة",
113
+ "reset_conversation": "إعادة تعيين المحادثة",
114
+ "resolved_continue": "يمكنك متابعة هذه المحادثة حتى",
115
+ "status": {
116
+ "away": "بعيد",
117
+ "connecting": "جارٍ الاتصال",
118
+ "offline": "غير متصل",
119
+ "online": "متصل"
120
+ },
121
+ "survey": {
122
+ "bad": "سيئ",
123
+ "excellent": "ممتاز",
124
+ "experience": "كيف تقيّم تجربة الدردشة؟",
125
+ "forbidden": "حدث خطأ ما. حاول مرة أخرى لاحقًا.",
126
+ "good": "جيد",
127
+ "great": "رائع",
128
+ "input_placeholder": "أخبرنا برأيك",
129
+ "okay": "متوسط",
130
+ "rate": "شكرًا لتواصلك معنا! قيّم هذه الدردشة:",
131
+ "restart_conversation": "إعادة تشغيل المحادثة",
132
+ "subtitle": "ساعدنا على التحسن بنقرتين فقط!",
133
+ "terrible": "سيئ جدًا",
134
+ "title": "قيّم تجربتك",
135
+ "transcript": "هل تحتاج إلى نسخة؟",
136
+ "type_here": "اكتب هنا...",
137
+ "well": "ما الذي سار على ما يرام؟",
138
+ "wrong": "ما الذي لم يسر على ما يرام؟"
139
+ },
140
+ "toast": {
141
+ "set_email": "أضف بريدك الإلكتروني حتى نتمكن من التواصل معك."
142
+ },
143
+ "we_run_on": "نحن نعمل على <0>{{brand}}</0>",
144
+ "carousel": {
145
+ "previous_slide": "الشريحة السابقة",
146
+ "next_slide": "الشريحة التالية"
147
+ },
148
+ "audio_widget": {
149
+ "errors": {
150
+ "generic": "حدث خطأ ما",
151
+ "start_failed": "تعذر بدء المكالمة"
152
+ },
153
+ "status": {
154
+ "ready": "جاهز",
155
+ "connecting": "جارٍ الاتصال",
156
+ "thinking": "يفكر",
157
+ "on_call": "في مكالمة",
158
+ "error": "خطأ"
159
+ },
160
+ "actions": {
161
+ "start": "بدء مكالمة معاينة الصوت",
162
+ "cancel": "إلغاء مكالمة معاينة الصوت",
163
+ "end": "إنهاء مكالمة معاينة الصوت"
164
+ },
165
+ "sr": {
166
+ "ready": "جاهز لإجراء مكالمة",
167
+ "connecting": "جارٍ توصيل المكالمة",
168
+ "connected_thinking": "تم توصيل المكالمة، جارٍ إنشاء الرد",
169
+ "connected": "تم توصيل المكالمة",
170
+ "error": "خطأ في المكالمة",
171
+ "error_with_message": "خطأ في المكالمة: {{message}}"
172
+ },
173
+ "mute": {
174
+ "mute_microphone": "كتم الميكروفون",
175
+ "unmute_microphone": "إلغاء كتم الميكروفون",
176
+ "mute": "كتم",
177
+ "unmute": "إلغاء الكتم"
178
+ }
179
+ },
180
+ "footer": {
181
+ "powered_by": "Powered by <0/> <1>{{brand}}</1>"
182
+ }
183
+ }