@moveo-ai/web-client 0.127.0-true.38 → 0.127.0-true.39

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.
@@ -6,7 +6,7 @@
6
6
 
7
7
  /*!
8
8
  *
9
- * @moveo-ai/web-client v0.127.0-true.38
9
+ * @moveo-ai/web-client v0.127.0-true.39
10
10
  * Copyright (c) Moveo.ai (TM)
11
11
  *
12
12
  */
@@ -66,7 +66,7 @@
66
66
  */
67
67
 
68
68
  /**
69
- * @license lucide-react v1.28.0 - ISC
69
+ * @license lucide-react v1.61.0 - ISC
70
70
  *
71
71
  * This source code is licensed under the ISC license.
72
72
  * See the LICENSE file in the root directory of this source tree.
package/dist/index.html CHANGED
@@ -1,25 +1 @@
1
- <html lang="en"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1"/><meta name="robots" content="noindex"/><base target="_blank"/><style>body {
2
- background-color: transparent;
3
- margin: 0;
4
- overflow: hidden;
5
- }
6
-
7
- .uai {
8
- display: none !important;
9
- }</style><title>Widget</title></head><body><script>const queryString = window.location.search;
10
- const urlParams = new URLSearchParams(queryString);
11
- const widgetId = urlParams.get('widgetId');
12
-
13
- const script = document.createElement('script');
14
- script.src = 'iframe.min.js?cd1ee6479d8ff9e90fca';
15
-
16
- script.onload = function () {
17
- if (widgetId) {
18
- MoveoAI.init(widgetId).catch((error) => {
19
- console.error(error, `Error initializing ${widgetId} iframe`);
20
- });
21
- } else {
22
- console.error('Moveo Webchat is missing the widgetId');
23
- }
24
- };
25
- document.head.appendChild(script);</script></body></html>
1
+ <html lang=en><head><meta charset=UTF-8><meta name=viewport content="width=device-width,initial-scale=1,maximum-scale=1"><meta name=robots content=noindex><base target=_blank><style>body{background-color:transparent;margin:0;overflow:hidden}.uai{display:none!important}</style><title>Widget</title></head><body><script>const queryString=window.location.search,urlParams=new URLSearchParams(queryString),widgetId=urlParams.get("widgetId"),script=document.createElement("script");script.src="iframe.min.js?b8df051b8d1f3c440b93",script.onload=function(){widgetId?MoveoAI.init(widgetId).catch(e=>{console.error(e,`Error initializing ${widgetId} iframe`)}):console.error("Moveo Webchat is missing the widgetId")},document.head.appendChild(script);</script></body></html>
@@ -1,93 +1 @@
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><style>/* Must stay above the scripts: they inject stylesheets that would
2
- otherwise order the audio client's preflight over our utilities. */
3
- @layer theme, base, components, utilities;
4
-
5
- body::before {
6
- background-image: url('/public/background.svg');
7
- }</style><script src="../preview.css.min.js?cd1ee6479d8ff9e90fca"></script></head><body><div class="flex flex-row flex-wrap justify-between p-[10%] pb-0 mobile:flex-col mobile:items-center mobile:p-0 mobile:pt-[75px]"><div class="w-[510px] mb-9 mobile:flex mobile:flex-col mobile:items-center mobile:w-auto mobile:min-w-0"><p class="mt-0 mb-6 text-[42px] leading-[51px] font-bold mobile:text-center mobile:text-[28px] mobile:leading-[34px]"><span class="colored text-preview-muted">Preview</span> and <span class="colored text-preview-muted">Test</span><br/>your Webchat</p><p class="mb-9 text-2xl leading-[30px] font-normal mobile:text-center mobile:text-base mobile:leading-5 mobile:w-[280px]">Moveo.ai can help you build engaging conversational applications powered by Artificial Intelligence.</p><div class="flex flex-row justify-start"><button class="action_button hidden cursor-pointer" id="open-chat-button">Open Webchat</button> <button class="action_button hidden mobile:hidden cursor-pointer" id="close-chat-button">Close Webchat</button> <button class="action_button hidden cursor-pointer" id="render-chat-button">Render Webchat</button></div></div><div class="hidden box-border flex-initial w-[512px] h-[562px] min-w-[300px] mb-16 rounded-lg border-2 border-brand-background bg-white shadow-[2px_3px_6px_rgb(104_104_104/10%)] mobile:mx-[10%] mobile:w-4/5" id="embed-chat-container"><p class="mt-[10%] mx-7 mb-0 text-base leading-6 text-center" 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 class="hidden w-full h-full" id="embed-chat"></div></div></div><script>const queryString = window.location.search;
8
- const urlParams = new URLSearchParams(queryString);
9
-
10
- // Find web-client.min.js directly
11
- const webpackFiles = `../iframe.min.js?cd1ee6479d8ff9e90fca,../web-client.min.js?cd1ee6479d8ff9e90fca,../continue.min.js?cd1ee6479d8ff9e90fca,../preview.css.min.js?cd1ee6479d8ff9e90fca,../audio-client.min.js?cd1ee6479d8ff9e90fca,../webrtc-client.min.js?cd1ee6479d8ff9e90fca,../telnyx-client.min.js?cd1ee6479d8ff9e90fca`.split(',');
12
- const webClientFile = webpackFiles.find(file => file.includes('web-client.min.js'));
13
- const previewCssFile = webpackFiles.find(file => file.includes('preview.css.min.js'));
14
-
15
- // Load preview.css
16
- const previewCssScript = document.createElement('script');
17
- previewCssScript.src = previewCssFile;
18
- document.head.appendChild(previewCssScript);
19
-
20
- // Dynamically load the web client
21
- const script = document.createElement('script');
22
- script.src = webClientFile;
23
- script.onload = function () {
24
- // Initialize the web client after the script is loaded
25
- const integrationId = urlParams.get('integrationId');
26
- const host = urlParams.get('host');
27
- const element = document.getElementById('embed-chat');
28
- const encodedConfig = urlParams.get('_config');
29
- let config = {};
30
- if (encodedConfig) {
31
- try {
32
- config = JSON.parse(atob(encodedConfig));
33
- } catch (error) {
34
- console.debug({ error, encodedConfig }, 'Error parsing config');
35
- }
36
- }
37
- MoveoAI.init({
38
- ...config,
39
- integrationId,
40
- host,
41
- element,
42
- })
43
- .then((instance) => {
44
- console.log('Preview initialized', instance);
45
-
46
- window.webClientInstance = instance;
47
-
48
- if (instance.config.widget_position === 'embed') {
49
- const embedContainer = document.getElementById('embed-chat-container');
50
- embedContainer.classList.remove('hidden');
51
-
52
- const renderButton = document.getElementById('render-chat-button');
53
- renderButton.classList.remove('hidden');
54
-
55
- renderButton.onclick = function () {
56
- document.getElementById('embed-text').classList.add('hidden');
57
- document.getElementById('embed-chat').classList.remove('hidden');
58
- renderButton.style.removeProperty('background-color')
59
- renderButton.classList.remove('cursor-pointer');
60
- renderButton.classList.add('cursor-not-allowed');
61
- renderButton.disabled = true;
62
- };
63
- } else {
64
- const openButton = document.getElementById('open-chat-button');
65
- openButton.classList.remove('hidden');
66
-
67
- openButton.onclick = function () {
68
- instance.openWindow();
69
- };
70
-
71
- const closeButton = document.getElementById('close-chat-button');
72
- closeButton.classList.remove('hidden');
73
-
74
- closeButton.onclick = function () {
75
- instance.closeWindow();
76
- };
77
- }
78
-
79
- const primaryColor = instance?.config?.background_color ?? '#1B66D6';
80
- const colored = document.querySelectorAll('span.colored');
81
- for (const element of colored) {
82
- element.style.color = primaryColor;
83
- }
84
- const buttons = document.querySelectorAll('.action_button');
85
- for (const button of buttons) {
86
- button.style.backgroundColor = primaryColor;
87
- }
88
- })
89
- .catch((error) => {
90
- console.error(error, 'Error initializing preview');
91
- });
92
- };
93
- document.head.appendChild(script);</script></body></html>
1
+ <!doctype 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><style>@layer theme,base,components,utilities;body:before{background-image:url(/public/background.svg)}</style><script src=../preview.css.min.js?b8df051b8d1f3c440b93></script></head><body><div class="flex flex-row flex-wrap justify-between p-[10%] pb-0 mobile:flex-col mobile:items-center mobile:p-0 mobile:pt-[75px]"><div class="w-[510px] mb-9 mobile:flex mobile:flex-col mobile:items-center mobile:w-auto mobile:min-w-0"><p class="mt-0 mb-6 text-[42px] leading-[51px] font-bold mobile:text-center mobile:text-[28px] mobile:leading-[34px]"><span class="colored text-preview-muted">Preview</span> and <span class="colored text-preview-muted">Test</span><br>your Webchat<p class="mb-9 text-2xl leading-[30px] font-normal mobile:text-center mobile:text-base mobile:leading-5 mobile:w-[280px]">Moveo.ai can help you build engaging conversational applications powered by Artificial Intelligence.<div class="flex flex-row justify-start"><button class="action_button hidden cursor-pointer" id=open-chat-button>Open Webchat</button> <button class="action_button hidden mobile:hidden cursor-pointer" id=close-chat-button>Close Webchat</button> <button class="action_button hidden cursor-pointer" id=render-chat-button>Render Webchat</button></div></div><div class="hidden box-border flex-initial w-[512px] h-[562px] min-w-[300px] mb-16 rounded-lg border-2 border-brand-background bg-white shadow-[2px_3px_6px_rgb(104_104_104/10%)] mobile:mx-[10%] mobile:w-4/5" id=embed-chat-container><p class="mt-[10%] mx-7 mb-0 text-base leading-6 text-center" id=embed-text>The webchat will render in the html element of your choice. Render the webchat here, in order to preview other settings.<div class="hidden w-full h-full" id=embed-chat></div></div></div><script>const queryString=window.location.search,urlParams=new URLSearchParams(queryString),webpackFiles="../iframe.min.js?b8df051b8d1f3c440b93,../web-client.min.js?b8df051b8d1f3c440b93,../continue.min.js?b8df051b8d1f3c440b93,../preview.css.min.js?b8df051b8d1f3c440b93,../audio-client.min.js?b8df051b8d1f3c440b93,../webrtc-client.min.js?b8df051b8d1f3c440b93,../telnyx-client.min.js?b8df051b8d1f3c440b93".split(","),webClientFile=webpackFiles.find(e=>e.includes("web-client.min.js")),previewCssFile=webpackFiles.find(e=>e.includes("preview.css.min.js")),previewCssScript=document.createElement("script");previewCssScript.src=previewCssFile,document.head.appendChild(previewCssScript);const script=document.createElement("script");script.src=webClientFile,script.onload=function(){const e=urlParams.get("integrationId"),t=urlParams.get("host"),n=document.getElementById("embed-chat"),c=urlParams.get("_config");let i={};if(c)try{i=JSON.parse(atob(c))}catch(e){console.debug({error:e,encodedConfig:c},"Error parsing config")}MoveoAI.init({...i,integrationId:e,host:t,element:n}).then(e=>{if(console.log("Preview initialized",e),window.webClientInstance=e,"embed"===e.config.widget_position){document.getElementById("embed-chat-container").classList.remove("hidden");const e=document.getElementById("render-chat-button");e.classList.remove("hidden"),e.onclick=function(){document.getElementById("embed-text").classList.add("hidden"),document.getElementById("embed-chat").classList.remove("hidden"),e.style.removeProperty("background-color"),e.classList.remove("cursor-pointer"),e.classList.add("cursor-not-allowed"),e.disabled=!0}}else{const t=document.getElementById("open-chat-button");t.classList.remove("hidden"),t.onclick=function(){e.openWindow()};const n=document.getElementById("close-chat-button");n.classList.remove("hidden"),n.onclick=function(){e.closeWindow()}}const t=e?.config?.background_color??"#1B66D6",n=document.querySelectorAll("span.colored");for(const e of n)e.style.color=t;const c=document.querySelectorAll(".action_button");for(const e of c)e.style.backgroundColor=t}).catch(e=>{console.error(e,"Error initializing preview")})},document.head.appendChild(script);</script></body></html>
@@ -1,70 +1 @@
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
- important: '#preview-content',
3
- corePlugins: { preflight: false },
4
- theme: {
5
- extend: {
6
- fontFamily: {
7
- sans: ['Inter', 'system-ui', '-apple-system', 'sans-serif'],
8
- },
9
- colors: {
10
- 'moveo-primary': '#1B66D6',
11
- 'moveo-secondary': '#EEF2FF',
12
- },
13
- backgroundImage: {
14
- 'moveo-radial':
15
- 'radial-gradient(circle at top right, rgba(27,102,214,0.18), transparent 55%)',
16
- },
17
- },
18
- },
19
- };</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><div id="preview-content" 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></div><script>localStorage.debug = 'moveo:audio:*';
20
-
21
- const statusNode = document.getElementById('status');
22
- const toneColor = {
23
- warning: 'text-amber-600',
24
- error: 'text-rose-600',
25
- };
26
-
27
- const setStatus = (message, tone = 'error') => {
28
- if (!statusNode) return;
29
- statusNode.className = `text-sm font-medium ${toneColor[tone] ?? toneColor.error}`;
30
- statusNode.textContent = message;
31
- };
32
-
33
- window.addEventListener('load', async () => {
34
- const params = new URLSearchParams(window.location.search);
35
- const integrationId =
36
- (params.get('integration_id') ?? params.get('integrationId') ?? '').trim();
37
- if (!integrationId) {
38
- setStatus('Add "?integration_id=YOUR_ID" to the URL to begin.', 'warning');
39
- return;
40
- }
41
-
42
- const hostParam = (params.get('host') ?? '').trim();
43
- const host = hostParam ? hostParam.replace(/\/+$/, '') : '';
44
-
45
- if (!window.MoveoAudio?.init) {
46
- console.error('MoveoAudio UMD build is not available on window.');
47
- setStatus(
48
- 'Unable to load the audio client. Check the bundle output.',
49
- 'error'
50
- );
51
- return;
52
- }
53
-
54
- try {
55
- const audioController = await window.MoveoAudio.init({
56
- integrationId,
57
- ...(host ? { host } : {}),
58
- });
59
-
60
- audioController.on?.('error', ({ message }) => {
61
- setStatus(`Call error: ${message || 'unexpected error'}`, 'error');
62
- });
63
-
64
- // Widget initialized successfully - no status message needed
65
- console.log('✅ MoveoAudio widget initialized', audioController);
66
- } catch (error) {
67
- console.error('❌ Failed to initialize MoveoAudio widget:', error);
68
- setStatus(`Failed to initialize the audio widget`, 'error');
69
- }
70
- });</script></body></html>
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={important:"#preview-content",corePlugins:{preflight:!1},theme:{extend:{fontFamily:{sans:["Inter","system-ui","-apple-system","sans-serif"]},colors:{"moveo-primary":"#1B66D6","moveo-secondary":"#EEF2FF"},backgroundImage:{"moveo-radial":"radial-gradient(circle at top right, rgba(27,102,214,0.18), transparent 55%)"}}}};</script><link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;600;700&display=swap" rel=stylesheet><script defer src=/audio-client.min.js></script></head><body><div id=preview-content 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.<div id=status class="text-sm font-medium"></div></header></section></main></div><script>localStorage.debug="moveo:audio:*";const statusNode=document.getElementById("status"),toneColor={warning:"text-amber-600",error:"text-rose-600"},setStatus=(t,e="error")=>{statusNode&&(statusNode.className=`text-sm font-medium ${toneColor[e]??toneColor.error}`,statusNode.textContent=t)};window.addEventListener("load",async()=>{const t=new URLSearchParams(window.location.search),e=(t.get("integration_id")??t.get("integrationId")??"").trim();if(!e)return void setStatus('Add "?integration_id=YOUR_ID" to the URL to begin.',"warning");const o=(t.get("host")??"").trim(),i=o?o.replace(/\/+$/,""):"";if(!window.MoveoAudio?.init)return console.error("MoveoAudio UMD build is not available on window."),void setStatus("Unable to load the audio client. Check the bundle output.","error");try{const t=await window.MoveoAudio.init({integrationId:e,...i?{host:i}:{}});t.on?.("error",({message:t})=>{setStatus(`Call error: ${t||"unexpected error"}`,"error")}),console.log("✅ MoveoAudio widget initialized",t)}catch(t){console.error("❌ Failed to initialize MoveoAudio widget:",t),setStatus("Failed to initialize the audio widget","error")}});</script></body></html>
@@ -1,79 +1 @@
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, Telnyx, Preview"/><meta name="description" content="Internal testing — Telnyx Voice Integration"/><meta name="twitter:card" content="summary"/><meta property="og:title" content="Moveo.ai Telnyx 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="Internal testing — Telnyx Voice Integration"/><title>Moveo.ai Telnyx Preview (internal)</title><script src="https://cdn.tailwindcss.com"></script><script>tailwind.config = {
2
- important: '#preview-content',
3
- corePlugins: { preflight: false },
4
- theme: {
5
- extend: {
6
- fontFamily: {
7
- sans: ['Inter', 'system-ui', '-apple-system', 'sans-serif'],
8
- },
9
- colors: {
10
- 'moveo-primary': '#1B66D6',
11
- 'moveo-secondary': '#EEF2FF',
12
- },
13
- backgroundImage: {
14
- 'moveo-radial':
15
- 'radial-gradient(circle at top right, rgba(27,102,214,0.18), transparent 55%)',
16
- },
17
- },
18
- },
19
- };</script><link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;600;700&display=swap" rel="stylesheet"/><script defer="defer" src="/telnyx-client.min.js"></script></head><body><div id="preview-content" 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 Telnyx 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 through the Telnyx WebRTC pipeline.</p><div id="status" class="text-sm font-medium"></div></header></section></main></div><script>localStorage.debug = 'moveo:telnyx:*';
20
-
21
- const statusNode = document.getElementById('status');
22
- const toneColor = {
23
- warning: 'text-amber-600',
24
- error: 'text-rose-600',
25
- };
26
-
27
- const setStatus = (message, tone = 'error') => {
28
- if (!statusNode) return;
29
- statusNode.className = `text-sm font-medium ${toneColor[tone] ?? toneColor.error}`;
30
- statusNode.textContent = message;
31
- };
32
-
33
- window.addEventListener('load', async () => {
34
- const params = new URLSearchParams(window.location.search);
35
- const integrationId =
36
- (params.get('integration_id') ?? params.get('integrationId') ?? '').trim();
37
- if (!integrationId) {
38
- setStatus('Add "?integration_id=YOUR_ID" to the URL to begin.', 'warning');
39
- return;
40
- }
41
-
42
- const hostParam = (params.get('host') ?? '').trim();
43
- const host = hostParam ? hostParam.replace(/\/+$/, '') : '';
44
-
45
- if (!window.MoveoTelnyx?.init) {
46
- console.error('MoveoTelnyx UMD build is not available on window.');
47
- setStatus(
48
- 'Unable to load the Telnyx client. Check the bundle output.',
49
- 'error'
50
- );
51
- return;
52
- }
53
-
54
- try {
55
- const telnyxController = await window.MoveoTelnyx.init({
56
- integrationId,
57
- ...(host ? { host } : {}),
58
- });
59
-
60
- telnyxController.on?.('error', ({ message }) => {
61
- setStatus(`Call error: ${message || 'unexpected error'}`, 'error');
62
- });
63
-
64
- // Close the Telnyx WS session cleanly on tab close — otherwise the
65
- // session lingers server-side until the JWT expires.
66
- window.addEventListener('beforeunload', () => {
67
- try {
68
- telnyxController.destroy();
69
- } catch (_) {
70
- // best-effort
71
- }
72
- });
73
-
74
- console.log('✅ MoveoTelnyx widget initialized', telnyxController);
75
- } catch (error) {
76
- console.error('❌ Failed to initialize MoveoTelnyx widget:', error);
77
- setStatus('Failed to initialize the Telnyx widget', 'error');
78
- }
79
- });</script></body></html>
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, Telnyx, Preview"><meta name=description content="Internal testing — Telnyx Voice Integration"><meta name=twitter:card content=summary><meta property=og:title content="Moveo.ai Telnyx 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="Internal testing — Telnyx Voice Integration"><title>Moveo.ai Telnyx Preview (internal)</title><script src=https://cdn.tailwindcss.com></script><script>tailwind.config={important:"#preview-content",corePlugins:{preflight:!1},theme:{extend:{fontFamily:{sans:["Inter","system-ui","-apple-system","sans-serif"]},colors:{"moveo-primary":"#1B66D6","moveo-secondary":"#EEF2FF"},backgroundImage:{"moveo-radial":"radial-gradient(circle at top right, rgba(27,102,214,0.18), transparent 55%)"}}}};</script><link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;600;700&display=swap" rel=stylesheet><script defer src=/telnyx-client.min.js></script></head><body><div id=preview-content 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 Telnyx 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 through the Telnyx WebRTC pipeline.<div id=status class="text-sm font-medium"></div></header></section></main></div><script>localStorage.debug="moveo:telnyx:*";const statusNode=document.getElementById("status"),toneColor={warning:"text-amber-600",error:"text-rose-600"},setStatus=(e,t="error")=>{statusNode&&(statusNode.className=`text-sm font-medium ${toneColor[t]??toneColor.error}`,statusNode.textContent=e)};window.addEventListener("load",async()=>{const e=new URLSearchParams(window.location.search),t=(e.get("integration_id")??e.get("integrationId")??"").trim();if(!t)return void setStatus('Add "?integration_id=YOUR_ID" to the URL to begin.',"warning");const o=(e.get("host")??"").trim(),n=o?o.replace(/\/+$/,""):"";if(!window.MoveoTelnyx?.init)return console.error("MoveoTelnyx UMD build is not available on window."),void setStatus("Unable to load the Telnyx client. Check the bundle output.","error");try{const e=await window.MoveoTelnyx.init({integrationId:t,...n?{host:n}:{}});e.on?.("error",({message:e})=>{setStatus(`Call error: ${e||"unexpected error"}`,"error")}),window.addEventListener("beforeunload",()=>{try{e.destroy()}catch(e){}}),console.log("✅ MoveoTelnyx widget initialized",e)}catch(e){console.error("❌ Failed to initialize MoveoTelnyx widget:",e),setStatus("Failed to initialize the Telnyx widget","error")}});</script></body></html>
@@ -1,174 +1 @@
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, WebRTC, Preview"/><meta name="description" content="Test your WebRTC Voice Integration"/><meta name="twitter:card" content="summary"/><meta property="og:title" content="Moveo.ai WebRTC 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 WebRTC Voice Integration"/><title>Moveo.ai WebRTC Preview</title><script src="https://cdn.tailwindcss.com"></script><script>tailwind.config = {
2
- important: '#preview-content',
3
- corePlugins: { preflight: false },
4
- theme: {
5
- extend: {
6
- fontFamily: {
7
- sans: ['Inter', 'system-ui', '-apple-system', 'sans-serif'],
8
- },
9
- colors: {
10
- 'moveo-primary': '#1B66D6',
11
- 'moveo-secondary': '#EEF2FF',
12
- },
13
- },
14
- },
15
- };</script><link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;600;700&display=swap" rel="stylesheet"/><script src="https://cdn.jsdelivr.net/npm/marked@18.0.9/lib/marked.umd.js"></script><script src="https://cdn.jsdelivr.net/npm/dompurify@3.4.13/dist/purify.min.js"></script><script defer="defer" src="/webrtc-client.min.js"></script></head><body><div id="preview-content" class="relative min-h-screen font-sans text-slate-900 antialiased"><main class="relative z-10 flex min-h-screen items-start md:items-center"><section class="mx-auto flex w-full max-w-6xl flex-col gap-12 px-6 py-16 pb-32 md:flex-row md:items-start md:px-12 md:pb-16 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 WebRTC 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 native WebRTC voice.</p><div id="status" class="text-sm font-medium"></div></header><div class="flex-1"><div id="transcript-log" class="hidden max-h-[60vh] w-full overflow-y-auto rounded-xl border border-slate-200 bg-white/80 p-4 font-mono text-sm shadow-sm backdrop-blur md:max-h-[70vh]"><h3 class="mb-3 text-xs font-semibold uppercase tracking-wider text-slate-400">Live Transcript</h3><div id="transcript-entries" class="space-y-2 pb-24"></div></div></div></section></main></div><script>localStorage.debug = 'moveo:webrtc:*';
16
-
17
- const statusNode = document.getElementById('status');
18
- const transcriptLog = document.getElementById('transcript-log');
19
- const transcriptEntries = document.getElementById('transcript-entries');
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
- const escapeHtml = (text) =>
32
- String(text).replace(
33
- /[&<>"']/g,
34
- (char) =>
35
- ({ '&': '&amp;', '<': '&lt;', '>': '&gt;', '"': '&quot;', "'": '&#39;' })[char]
36
- );
37
-
38
- // Mirrors the widget caption pipeline (marked + DOMPurify) so a markdown
39
- // link reads as a link here too. parseInline keeps the turn on one line.
40
- const renderRich = (text) => {
41
- if (!window.marked?.parseInline || !window.DOMPurify?.sanitize) {
42
- return escapeHtml(text);
43
- }
44
- return window.DOMPurify.sanitize(
45
- window.marked.parseInline(String(text), { gfm: true, breaks: true })
46
- );
47
- };
48
-
49
- const setEntry = (entry, html) => {
50
- entry.innerHTML = html;
51
- entry.querySelectorAll('a').forEach((link) => {
52
- link.target = '_blank';
53
- link.rel = 'noopener noreferrer';
54
- link.className = 'text-moveo-primary underline';
55
- });
56
- };
57
-
58
- const addTranscript = (speaker, text) => {
59
- if (!transcriptEntries || !transcriptLog) return;
60
- transcriptLog.classList.remove('hidden');
61
-
62
- const entry = document.createElement('div');
63
- const label = speaker === 'user' ? '🎤 You' : '🤖 Agent';
64
- const color = speaker === 'user' ? 'text-sky-600' : 'text-emerald-600';
65
- setEntry(
66
- entry,
67
- `<span class="font-semibold ${color}">${label}:</span> ${renderRich(text)}`
68
- );
69
- transcriptEntries.appendChild(entry);
70
- transcriptLog.scrollTop = transcriptLog.scrollHeight;
71
- };
72
-
73
- window.addEventListener('load', async () => {
74
- const params = new URLSearchParams(window.location.search);
75
- const integrationId =
76
- (params.get('integration_id') ?? params.get('integrationId') ?? '').trim();
77
- if (!integrationId) {
78
- setStatus('Add "?integration_id=YOUR_ID" to the URL to begin.', 'warning');
79
- return;
80
- }
81
-
82
- const hostParam = (params.get('host') ?? '').trim();
83
- const host = hostParam ? hostParam.replace(/\/+$/, '') : '';
84
-
85
- if (!window.MoveoWebRTC?.init) {
86
- console.error('MoveoWebRTC UMD build is not available on window.');
87
- setStatus(
88
- 'Unable to load the WebRTC client. Check the bundle output.',
89
- 'error'
90
- );
91
- return;
92
- }
93
-
94
- try {
95
- const controller = await window.MoveoWebRTC.init({
96
- integrationId,
97
- ...(host ? { host } : {}),
98
- });
99
-
100
- controller.on?.('error', ({ message }) => {
101
- setStatus(`Call error: ${message || 'unexpected error'}`, 'error');
102
- });
103
-
104
- // One entry element per request_id for the current call; reset when a
105
- // new call starts so a prior call's lines don't carry over.
106
- let brainEntries = {};
107
- let lastState = 'idle';
108
- const resetTranscript = () => {
109
- if (transcriptEntries) transcriptEntries.innerHTML = '';
110
- brainEntries = {};
111
- if (transcriptLog) transcriptLog.classList.add('hidden');
112
- };
113
-
114
- // A fresh call is idle/error -> connecting. A mid-call reconnect goes
115
- // through 'reconnecting' (or connected -> connecting on an ICE blip), so
116
- // the live transcript survives it.
117
- controller.on?.('state-change', ({ data }) => {
118
- if (data === 'connecting' && (lastState === 'idle' || lastState === 'error')) {
119
- resetTranscript();
120
- }
121
- lastState = data;
122
- });
123
-
124
- controller.on?.('transcript', ({ data }) => {
125
- if (data && typeof data === 'object' && 'text' in data) {
126
- addTranscript('user', data.text);
127
- }
128
- });
129
-
130
- // brain-response streams in chunks; upsert one line per request_id so
131
- // the assembled reply grows in place instead of appending each chunk.
132
- controller.on?.('brain-response', ({ data }) => {
133
- if (!data || typeof data !== 'object' || !('text' in data)) return;
134
- if (!transcriptEntries || !transcriptLog) return;
135
- transcriptLog.classList.remove('hidden');
136
- const reqId = ('request_id' in data && data.request_id) || '_';
137
- let entry = brainEntries[reqId];
138
- if (!entry) {
139
- entry = document.createElement('div');
140
- transcriptEntries.appendChild(entry);
141
- brainEntries[reqId] = entry;
142
- }
143
- setEntry(
144
- entry,
145
- `<span class="font-semibold text-emerald-600">🤖 Agent:</span> ${renderRich(data.text)}`
146
- );
147
- transcriptLog.scrollTop = transcriptLog.scrollHeight;
148
- });
149
-
150
- // interrupt marks a barge-in: keep the heard text, gray out the unheard
151
- // tail (never delete).
152
- controller.on?.('interrupt', ({ data }) => {
153
- if (!data || typeof data !== 'object' || !('request_id' in data)) return;
154
- const reqId = data.request_id || '_';
155
- const entry = brainEntries[reqId];
156
- if (!entry) return;
157
- const heard = ('heardText' in data && data.heardText) || '';
158
- const unheard = ('unheardText' in data && data.unheardText) || '';
159
- setEntry(
160
- entry,
161
- `<span class="font-semibold text-emerald-600">🤖 Agent:</span> ${renderRich(heard)}` +
162
- (unheard
163
- ? ` <span class="text-slate-400 line-through">${renderRich(unheard)}</span>`
164
- : '')
165
- );
166
- transcriptLog.scrollTop = transcriptLog.scrollHeight;
167
- });
168
-
169
- console.log('✅ MoveoWebRTC widget initialized', controller);
170
- } catch (error) {
171
- console.error('❌ Failed to initialize MoveoWebRTC widget:', error);
172
- setStatus('Failed to initialize the WebRTC widget', 'error');
173
- }
174
- });</script></body></html>
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, WebRTC, Preview"><meta name=description content="Test your WebRTC Voice Integration"><meta name=twitter:card content=summary><meta property=og:title content="Moveo.ai WebRTC 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 WebRTC Voice Integration"><title>Moveo.ai WebRTC Preview</title><script src=https://cdn.tailwindcss.com></script><script>tailwind.config={important:"#preview-content",corePlugins:{preflight:!1},theme:{extend:{fontFamily:{sans:["Inter","system-ui","-apple-system","sans-serif"]},colors:{"moveo-primary":"#1B66D6","moveo-secondary":"#EEF2FF"}}}};</script><link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;600;700&display=swap" rel=stylesheet><script src=https://cdn.jsdelivr.net/npm/marked@18.0.9/lib/marked.umd.js></script><script src=https://cdn.jsdelivr.net/npm/dompurify@3.4.13/dist/purify.min.js></script><script defer src=/webrtc-client.min.js></script></head><body><div id=preview-content class="relative min-h-screen font-sans text-slate-900 antialiased"><main class="relative z-10 flex min-h-screen items-start md:items-center"><section class="mx-auto flex w-full max-w-6xl flex-col gap-12 px-6 py-16 pb-32 md:flex-row md:items-start md:px-12 md:pb-16 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 WebRTC 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 native WebRTC voice.<div id=status class="text-sm font-medium"></div></header><div class=flex-1><div id=transcript-log class="hidden max-h-[60vh] w-full overflow-y-auto rounded-xl border border-slate-200 bg-white/80 p-4 font-mono text-sm shadow-sm backdrop-blur md:max-h-[70vh]"><h3 class="mb-3 text-xs font-semibold uppercase tracking-wider text-slate-400">Live Transcript</h3><div id=transcript-entries class="space-y-2 pb-24"></div></div></div></section></main></div><script>localStorage.debug="moveo:webrtc:*";const statusNode=document.getElementById("status"),transcriptLog=document.getElementById("transcript-log"),transcriptEntries=document.getElementById("transcript-entries"),toneColor={warning:"text-amber-600",error:"text-rose-600"},setStatus=(t,e="error")=>{statusNode&&(statusNode.className=`text-sm font-medium ${toneColor[e]??toneColor.error}`,statusNode.textContent=t)},escapeHtml=t=>String(t).replace(/[&<>"']/g,t=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"}[t])),renderRich=t=>window.marked?.parseInline&&window.DOMPurify?.sanitize?window.DOMPurify.sanitize(window.marked.parseInline(String(t),{gfm:!0,breaks:!0})):escapeHtml(t),setEntry=(t,e)=>{t.innerHTML=e,t.querySelectorAll("a").forEach(t=>{t.target="_blank",t.rel="noopener noreferrer",t.className="text-moveo-primary underline"})},addTranscript=(t,e)=>{if(!transcriptEntries||!transcriptLog)return;transcriptLog.classList.remove("hidden");const r=document.createElement("div");setEntry(r,`<span class="font-semibold ${"user"===t?"text-sky-600":"text-emerald-600"}">${"user"===t?"🎤 You":"🤖 Agent"}:</span> ${renderRich(e)}`),transcriptEntries.appendChild(r),transcriptLog.scrollTop=transcriptLog.scrollHeight};window.addEventListener("load",async()=>{const t=new URLSearchParams(window.location.search),e=(t.get("integration_id")??t.get("integrationId")??"").trim();if(!e)return void setStatus('Add "?integration_id=YOUR_ID" to the URL to begin.',"warning");const r=(t.get("host")??"").trim(),n=r?r.replace(/\/+$/,""):"";if(!window.MoveoWebRTC?.init)return console.error("MoveoWebRTC UMD build is not available on window."),void setStatus("Unable to load the WebRTC client. Check the bundle output.","error");try{const t=await window.MoveoWebRTC.init({integrationId:e,...n?{host:n}:{}});t.on?.("error",({message:t})=>{setStatus(`Call error: ${t||"unexpected error"}`,"error")});let r={},i="idle";const o=()=>{transcriptEntries&&(transcriptEntries.innerHTML=""),r={},transcriptLog&&transcriptLog.classList.add("hidden")};t.on?.("state-change",({data:t})=>{"connecting"!==t||"idle"!==i&&"error"!==i||o(),i=t}),t.on?.("transcript",({data:t})=>{t&&"object"==typeof t&&"text"in t&&addTranscript("user",t.text)}),t.on?.("brain-response",({data:t})=>{if(!t||"object"!=typeof t||!("text"in t))return;if(!transcriptEntries||!transcriptLog)return;transcriptLog.classList.remove("hidden");const e="request_id"in t&&t.request_id||"_";let n=r[e];n||(n=document.createElement("div"),transcriptEntries.appendChild(n),r[e]=n),setEntry(n,`<span class="font-semibold text-emerald-600">🤖 Agent:</span> ${renderRich(t.text)}`),transcriptLog.scrollTop=transcriptLog.scrollHeight}),t.on?.("interrupt",({data:t})=>{if(!t||"object"!=typeof t||!("request_id"in t))return;const e=t.request_id||"_",n=r[e];if(!n)return;const i="heardText"in t&&t.heardText||"",o="unheardText"in t&&t.unheardText||"";setEntry(n,`<span class="font-semibold text-emerald-600">🤖 Agent:</span> ${renderRich(i)}`+(o?` <span class="text-slate-400 line-through">${renderRich(o)}</span>`:"")),transcriptLog.scrollTop=transcriptLog.scrollHeight}),console.log("✅ MoveoWebRTC widget initialized",t)}catch(t){console.error("❌ Failed to initialize MoveoWebRTC widget:",t),setStatus("Failed to initialize the WebRTC widget","error")}});</script></body></html>
@@ -1,2 +1,2 @@
1
1
  /*! For license information please see preview.css.min.js.LICENSE.txt */
2
- !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("MoveoPreview",[],t):"object"==typeof exports?exports.MoveoPreview=t():e.MoveoPreview=t()}(this,()=>(()=>{"use strict";var e={8620(e,t,i){var o=i(1601),n=i.n(o),r=i(6314),a=i.n(r)()(n());a.push([e.id,"@import url(https://fonts.googleapis.com/css2?family=Inter:wght@300;400;600;700&display=swap);"]),a.push([e.id,'/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */@layer properties{@supports ((-webkit-hyphens:none) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--font-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-white:#fff;--spacing:.25rem;--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--font-weight-normal:400;--font-weight-semibold:600;--font-weight-bold:700;--radius-lg:.5rem;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-brand-background:#1b66d6;--color-preview-muted:#c4c4c4}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not (-webkit-appearance:-apple-pay-button)) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components{.action_button{margin-right:calc(var(--spacing) * 4);border-style:var(--tw-border-style);background-color:var(--color-preview-muted);padding-inline:calc(var(--spacing) * 4);padding-block:calc(var(--spacing) * 2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing) * 4);line-height:calc(var(--spacing) * 4);--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);white-space:nowrap;color:var(--color-white);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.2s;--tw-ease:linear;border-width:0;border-radius:.25rem;transition-duration:.2s;transition-timing-function:linear}}@layer utilities{.mx-7{margin-inline:calc(var(--spacing) * 7)}.mt-0{margin-top:0}.mt-\\[10\\%\\]{margin-top:10%}.mb-0{margin-bottom:0}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.mb-9{margin-bottom:calc(var(--spacing) * 9)}.mb-16{margin-bottom:calc(var(--spacing) * 16)}.box-border{box-sizing:border-box}.flex{display:flex}.hidden{display:none}.h-\\[562px\\]{height:562px}.h-full{height:100%}.w-\\[510px\\]{width:510px}.w-\\[512px\\]{width:512px}.w-full{width:100%}.min-w-\\[300px\\]{min-width:300px}.flex-initial{flex:0 auto}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.justify-between{justify-content:space-between}.justify-start{justify-content:flex-start}.rounded-lg{border-radius:var(--radius-lg)}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-brand-background{border-color:var(--color-brand-background)}.bg-white{background-color:var(--color-white)}.p-\\[10\\%\\]{padding:10%}.pb-0{padding-bottom:0}.text-center{text-align:center}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-\\[42px\\]{font-size:42px}.leading-6{--tw-leading:calc(var(--spacing) * 6);line-height:calc(var(--spacing) * 6)}.leading-\\[30px\\]{--tw-leading:30px;line-height:30px}.leading-\\[51px\\]{--tw-leading:51px;line-height:51px}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.text-preview-muted{color:var(--color-preview-muted)}.shadow-\\[2px_3px_6px_rgb\\(104_104_104\\/10\\%\\)\\]{--tw-shadow:2px 3px 6px var(--tw-shadow-color,#6868681a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}@media (max-width:700px){.mobile\\:mx-\\[10\\%\\]{margin-inline:10%}.mobile\\:flex{display:flex}.mobile\\:hidden{display:none}.mobile\\:w-4\\/5{width:80%}.mobile\\:w-\\[280px\\]{width:280px}.mobile\\:w-auto{width:auto}.mobile\\:min-w-0{min-width:0}.mobile\\:flex-col{flex-direction:column}.mobile\\:items-center{align-items:center}.mobile\\:p-0{padding:0}.mobile\\:pt-\\[75px\\]{padding-top:75px}.mobile\\:text-center{text-align:center}.mobile\\:text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.mobile\\:text-\\[28px\\]{font-size:28px}.mobile\\:leading-5{--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5)}.mobile\\:leading-\\[34px\\]{--tw-leading:34px;line-height:34px}}}body{background:linear-gradient(270.03deg, var(--color-preview-muted) 3.88%, #c4c4c400 90.28%);background-position:100% 0;background-repeat:no-repeat;background-size:contain;min-height:100vh;margin:0;font-family:Inter,monospace;position:relative}body:before{z-index:-1;content:"";opacity:.5;background-position:100% 0;background-repeat:no-repeat;background-size:contain;width:100%;height:100%;position:absolute}@media (max-width:700px){body{background:linear-gradient(0deg, var(--color-preview-muted) 3.88%, #c4c4c400 90.28%)}body:before{background-size:cover}}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}\n',""]);const s=a;i.d(t,["A",0,s])},6314(e){e.exports=function(e){var t=[];return t.toString=function(){return this.map(function(t){var i="",o=void 0!==t[5];return t[4]&&(i+="@supports (".concat(t[4],") {")),t[2]&&(i+="@media ".concat(t[2]," {")),o&&(i+="@layer".concat(t[5].length>0?" ".concat(t[5]):""," {")),i+=e(t),o&&(i+="}"),t[2]&&(i+="}"),t[4]&&(i+="}"),i}).join("")},t.i=function(e,i,o,n,r){"string"==typeof e&&(e=[[null,e,void 0]]);var a={};if(o)for(var s=0;s<this.length;s++){var l=this[s][0];null!=l&&(a[l]=!0)}for(var d=0;d<e.length;d++){var c=[].concat(e[d]);o&&a[c[0]]||(void 0!==r&&(void 0===c[5]||(c[1]="@layer".concat(c[5].length>0?" ".concat(c[5]):""," {").concat(c[1],"}")),c[5]=r),i&&(c[2]?(c[1]="@media ".concat(c[2]," {").concat(c[1],"}"),c[2]=i):c[2]=i),n&&(c[4]?(c[1]="@supports (".concat(c[4],") {").concat(c[1],"}"),c[4]=n):c[4]="".concat(n)),t.push(c))}},t}},1601(e){e.exports=function(e){return e[1]}},6917(e,t,i){var o=i.cjs(function(e,t){var i=[];function o(e){for(var t=-1,o=0;o<i.length;o++)if(i[o].identifier===e){t=o;break}return t}function n(e,t){for(var n={},a=[],s=0;s<e.length;s++){var l=e[s],d=t.base?l[0]+t.base:l[0],c=n[d]||0,p="".concat(d," ").concat(c);n[d]=c+1;var f=o(p),u={css:l[1],media:l[2],sourceMap:l[3],supports:l[4],layer:l[5]};if(-1!==f)i[f].references++,i[f].updater(u);else{var h=r(u,t);t.byIndex=s,i.splice(s,0,{identifier:p,updater:h,references:1})}a.push(p)}return a}function r(e,t){var i=t.domAPI(t);return i.update(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap&&t.supports===e.supports&&t.layer===e.layer)return;i.update(e=t)}else i.remove()}}e.exports=function(e,t){var r=n(e=e||[],t=t||{});return function(e){e=e||[];for(var a=0;a<r.length;a++){var s=o(r[a]);i[s].references--}for(var l=n(e,t),d=0;d<r.length;d++){var c=o(r[d]);0===i[c].references&&(i[c].updater(),i.splice(c,1))}r=l}}}),n=i.n(o),r=i.cjs(function(e,t){e.exports=function(e){if("undefined"==typeof document)return{update:function(){},remove:function(){}};var t=e.insertStyleElement(e);return{update:function(i){!function(e,t,i){var o="";i.supports&&(o+="@supports (".concat(i.supports,") {")),i.media&&(o+="@media ".concat(i.media," {"));var n=void 0!==i.layer;n&&(o+="@layer".concat(i.layer.length>0?" ".concat(i.layer):""," {")),o+=i.css,n&&(o+="}"),i.media&&(o+="}"),i.supports&&(o+="}");var r=i.sourceMap;r&&"undefined"!=typeof btoa&&(o+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(r))))," */")),t.styleTagTransform(o,e,t.options)}(t,e,i)},remove:function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(t)}}}}),a=i.n(r),s=i.cjs(function(e,t){var i={};e.exports=function(e,t){var o=function(e){if(void 0===i[e]){var t=document.querySelector(e);if(window.HTMLIFrameElement&&t instanceof window.HTMLIFrameElement)try{t=t.contentDocument.head}catch(e){t=null}i[e]=t}return i[e]}(e);if(!o)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");o.appendChild(t)}}),l=i.n(s),d=i.cjs(function(e,t){e.exports=function(e){var t=i.nc;t&&e.setAttribute("nonce",t)}}),c=i.n(d),p=i.cjs(function(e,t){e.exports=function(e){var t=document.createElement("style");return e.setAttributes(t,e.attributes),e.insert(t,e.options),t}}),f=i.n(p),u=i.cjs(function(e,t){e.exports=function(e,t){if(t.styleSheet)t.styleSheet.cssText=e;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(e))}}}),h=i.n(u),g=i(8620),b={};b.styleTagTransform=h(),b.setAttributes=c(),b.insert=l().bind(null,"head"),b.domAPI=a(),b.insertStyleElement=f(),n()(g.A,b),g.A&&g.A.locals&&g.A.locals}};const t={};function i(o){const n=t[o];if(void 0!==n)return n.exports;const r=t[o]={id:o,exports:{}};return e[o](r,r.exports,i),r.exports}return i.n=e=>{const t=e&&e.__esModule?()=>e.default:()=>e;return i.d(t,{a:t}),t},i.d=(e,t)=>{if(Array.isArray(t))for(var o=0;o<t.length;){var n=t[o++],r=t[o++];i.o(e,n)?0===r&&o++:0===r?Object.defineProperty(e,n,{enumerable:!0,value:t[o++]}):Object.defineProperty(e,n,{enumerable:!0,get:r})}else for(var n in t)i.o(t,n)&&!i.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},i.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),i.cjs=e=>{const t={exports:{}};return e.call(t.exports,t,t.exports),t.exports},i.nc=void 0,i(6917)})());
2
+ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("MoveoPreview",[],t):"object"==typeof exports?exports.MoveoPreview=t():e.MoveoPreview=t()}(this,()=>(()=>{"use strict";var e={620(e,t,i){var n=i(601),o=i.n(n),r=i(314),a=i.n(r)()(o());a.push([e.id,"@import url(https://fonts.googleapis.com/css2?family=Inter:wght@300;400;600;700&display=swap);"]),a.push([e.id,'/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */@layer properties{@supports ((-webkit-hyphens:none) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--font-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-white:#fff;--spacing:.25rem;--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--font-weight-normal:400;--font-weight-semibold:600;--font-weight-bold:700;--radius-lg:.5rem;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-brand-background:#1b66d6;--color-preview-muted:#c4c4c4}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not (-webkit-appearance:-apple-pay-button)) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components{.action_button{margin-right:calc(var(--spacing) * 4);border-style:var(--tw-border-style);background-color:var(--color-preview-muted);padding-inline:calc(var(--spacing) * 4);padding-block:calc(var(--spacing) * 2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing) * 4);line-height:calc(var(--spacing) * 4);--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);white-space:nowrap;color:var(--color-white);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.2s;--tw-ease:linear;border-width:0;border-radius:.25rem;transition-duration:.2s;transition-timing-function:linear}}@layer utilities{.mx-7{margin-inline:calc(var(--spacing) * 7)}.mt-0{margin-top:0}.mt-\\[10\\%\\]{margin-top:10%}.mb-0{margin-bottom:0}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.mb-9{margin-bottom:calc(var(--spacing) * 9)}.mb-16{margin-bottom:calc(var(--spacing) * 16)}.box-border{box-sizing:border-box}.flex{display:flex}.hidden{display:none}.h-\\[562px\\]{height:562px}.h-full{height:100%}.w-\\[510px\\]{width:510px}.w-\\[512px\\]{width:512px}.w-full{width:100%}.min-w-\\[300px\\]{min-width:300px}.flex-initial{flex:0 auto}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.justify-between{justify-content:space-between}.justify-start{justify-content:flex-start}.rounded-lg{border-radius:var(--radius-lg)}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-brand-background{border-color:var(--color-brand-background)}.bg-white{background-color:var(--color-white)}.p-\\[10\\%\\]{padding:10%}.pb-0{padding-bottom:0}.text-center{text-align:center}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-\\[42px\\]{font-size:42px}.leading-6{--tw-leading:calc(var(--spacing) * 6);line-height:calc(var(--spacing) * 6)}.leading-\\[30px\\]{--tw-leading:30px;line-height:30px}.leading-\\[51px\\]{--tw-leading:51px;line-height:51px}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.text-preview-muted{color:var(--color-preview-muted)}.shadow-\\[2px_3px_6px_rgb\\(104_104_104\\/10\\%\\)\\]{--tw-shadow:2px 3px 6px var(--tw-shadow-color,#6868681a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}@media (max-width:700px){.mobile\\:mx-\\[10\\%\\]{margin-inline:10%}.mobile\\:flex{display:flex}.mobile\\:hidden{display:none}.mobile\\:w-4\\/5{width:80%}.mobile\\:w-\\[280px\\]{width:280px}.mobile\\:w-auto{width:auto}.mobile\\:min-w-0{min-width:0}.mobile\\:flex-col{flex-direction:column}.mobile\\:items-center{align-items:center}.mobile\\:p-0{padding:0}.mobile\\:pt-\\[75px\\]{padding-top:75px}.mobile\\:text-center{text-align:center}.mobile\\:text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.mobile\\:text-\\[28px\\]{font-size:28px}.mobile\\:leading-5{--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5)}.mobile\\:leading-\\[34px\\]{--tw-leading:34px;line-height:34px}}}body{background:linear-gradient(270.03deg, var(--color-preview-muted) 3.88%, #c4c4c400 90.28%);background-position:100% 0;background-repeat:no-repeat;background-size:contain;min-height:100vh;margin:0;font-family:Inter,monospace;position:relative}body:before{z-index:-1;content:"";opacity:.5;background-position:100% 0;background-repeat:no-repeat;background-size:contain;width:100%;height:100%;position:absolute}@media (max-width:700px){body{background:linear-gradient(0deg, var(--color-preview-muted) 3.88%, #c4c4c400 90.28%)}body:before{background-size:cover}}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}\n',""]);const l=a;i.d(t,["A",0,l])},314(e){e.exports=function(e){var t=[];return t.toString=function(){return this.map(function(t){var i="",n=void 0!==t[5];return t[4]&&(i+="@supports (".concat(t[4],") {")),t[2]&&(i+="@media ".concat(t[2]," {")),n&&(i+="@layer".concat(t[5].length>0?" ".concat(t[5]):""," {")),i+=e(t),n&&(i+="}"),t[2]&&(i+="}"),t[4]&&(i+="}"),i}).join("")},t.i=function(e,i,n,o,r){"string"==typeof e&&(e=[[null,e,void 0]]);var a={};if(n)for(var l=0;l<this.length;l++){var s=this[l][0];null!=s&&(a[s]=!0)}for(var d=0;d<e.length;d++){var c=[].concat(e[d]);n&&a[c[0]]||(void 0!==r&&(void 0===c[5]||(c[1]="@layer".concat(c[5].length>0?" ".concat(c[5]):""," {").concat(c[1],"}")),c[5]=r),i&&(c[2]?(c[1]="@media ".concat(c[2]," {").concat(c[1],"}"),c[2]=i):c[2]=i),o&&(c[4]?(c[1]="@supports (".concat(c[4],") {").concat(c[1],"}"),c[4]=o):c[4]="".concat(o)),t.push(c))}},t}},601(e){e.exports=function(e){return e[1]}}};const t={};function i(n){const o=t[n];if(void 0!==o)return o.exports;const r=t[n]={id:n,exports:{}};return e[n](r,r.exports,i),r.exports}i.n=e=>{const t=e&&e.__esModule?()=>e.default:()=>e;return i.d(t,{a:t}),t},i.cw=e=>{var t;return()=>{if(e){var i=e;e=0,t={exports:{}},i.call(t.exports,t,t.exports)}return t.exports}},i.d=(e,t)=>{if(Array.isArray(t))for(var n=0;n<t.length;){var o=t[n++],r=t[n++],a=0===r?{enumerable:!0,value:t[n++]}:{enumerable:!0,get:r};i.o(e,o)||Object.defineProperty(e,o,a)}else for(var o in t)i.o(t,o)&&!i.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:t[o]})},i.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),i.nc=void 0;var n=i.cw(e=>{var t=[];function i(e){for(var i=-1,n=0;n<t.length;n++)if(t[n].identifier===e){i=n;break}return i}function n(e,n){for(var r={},a=[],l=0;l<e.length;l++){var s=e[l],d=n.base?s[0]+n.base:s[0],c=r[d]||0,p="".concat(d," ").concat(c);r[d]=c+1;var f=i(p),u={css:s[1],media:s[2],sourceMap:s[3],supports:s[4],layer:s[5]};if(-1!==f)t[f].references++,t[f].updater(u);else{var h=o(u,n);n.byIndex=l,t.splice(l,0,{identifier:p,updater:h,references:1})}a.push(p)}return a}function o(e,t){var i=t.domAPI(t);return i.update(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap&&t.supports===e.supports&&t.layer===e.layer)return;i.update(e=t)}else i.remove()}}e.exports=function(e,o){var r=n(e=e||[],o=o||{});return function(e){e=e||[];for(var a=0;a<r.length;a++){var l=i(r[a]);t[l].references--}for(var s=n(e,o),d=0;d<r.length;d++){var c=i(r[d]);0===t[c].references&&(t[c].updater(),t.splice(c,1))}r=s}}}),o=i.cw(e=>{var t={};e.exports=function(e,i){var n=function(e){if(void 0===t[e]){var i=document.querySelector(e);if(window.HTMLIFrameElement&&i instanceof window.HTMLIFrameElement)try{i=i.contentDocument.head}catch(e){i=null}t[e]=i}return t[e]}(e);if(!n)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");n.appendChild(i)}}),r=i.cw(e=>{e.exports=function(e){var t=document.createElement("style");return e.setAttributes(t,e.attributes),e.insert(t,e.options),t}}),a=i.cw(e=>{e.exports=function(e){var t=i.nc;t&&e.setAttribute("nonce",t)}}),l=i.cw(e=>{e.exports=function(e){if("undefined"==typeof document)return{update:function(){},remove:function(){}};var t=e.insertStyleElement(e);return{update:function(i){!function(e,t,i){var n="";i.supports&&(n+="@supports (".concat(i.supports,") {")),i.media&&(n+="@media ".concat(i.media," {"));var o=void 0!==i.layer;o&&(n+="@layer".concat(i.layer.length>0?" ".concat(i.layer):""," {")),n+=i.css,o&&(n+="}"),i.media&&(n+="}"),i.supports&&(n+="}");var r=i.sourceMap;r&&"undefined"!=typeof btoa&&(n+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(r))))," */")),t.styleTagTransform(n,e,t.options)}(t,e,i)},remove:function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(t)}}}}),s=i.cw(e=>{e.exports=function(e,t){if(t.styleSheet)t.styleSheet.cssText=e;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(e))}}});n(),l(),o(),a(),r(),s();var d=i(620),c={};return c.styleTagTransform=function e(){return e.c||(e.c=i.n(s()))}()(),c.setAttributes=function e(){return e.c||(e.c=i.n(a()))}()(),c.insert=function e(){return e.c||(e.c=i.n(o()))}()().bind(null,"head"),c.domAPI=function e(){return e.c||(e.c=i.n(l()))}()(),c.insertStyleElement=function e(){return e.c||(e.c=i.n(r()))}()(),function e(){return e.c||(e.c=i.n(n()))}()()(d.A,c),d.A&&d.A.locals&&d.A.locals,{}})());
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  *
3
- * @moveo-ai/web-client v0.127.0-true.38
3
+ * @moveo-ai/web-client v0.127.0-true.39
4
4
  * Copyright (c) Moveo.ai (TM)
5
5
  *
6
6
  */