position: 'bottom-right', // or 'bottom-left'
theme: 'dark',
})
</script></code></pre></div><div><h3 class="font-semiboldtext-gray-900mb-2">Option 2: Web Component</h3><pre class="bg-gray-900text-gray-100rounded-lgp-4overflow-x-autotext-xs"><code><!-- Load the custom element -->
></iframe></code></pre></div></div></div><div class="bg-gray-50rounded-2xlborderborder-gray-200p-8"><h2 class="text-xlfont-boldmb-4">Technical Architecture</h2><div class="gridmd:grid-cols-2gap-8text-smtext-gray-700"><div><h3 class="font-semiboldtext-gray-900mb-2">Script Tag / npm</h3><ul class="space-y-1list-disclist-inside"><li>Injects a Vue micro-app into a shadow DOM container</li><li>Styles are encapsulated — no CSS conflicts with host</li><li>Communicates via CustomEvents or a global AIUI API object</li><li>Host app can pass context (current page, user info)</li><li>Smallest footprint: ~80KB gzipped</li></ul></div><div><h3 class="font-semiboldtext-gray-900mb-2">Web Component</h3><ul class="space-y-1list-disclist-inside"><li>Framework-agnostic Custom Element (works in any HTML)</li><li>Shadow DOM encapsulation by default</li><li>Attributes for configuration, events for callbacks</li><li>Can be lazy-loaded with dynamic import()</li><li>Works in React, Angular, Svelte, plain HTML</li></ul></div><div><h3 class="font-semiboldtext-gray-900mb-2">iframe</h3><ul class="space-y-1list-disclist-inside"><li>Maximum isolation — separate browsing context</li><li>Zero risk of CSS/JS conflicts</li><li>Communication via postMessage API</li><li>API key stays on embedded origin (more secure)</li><li>Slightly larger overhead, but simplest integration</li></ul></div><div><h3 class="font-semiboldtext-gray-900mb-2">Host Communication</h3><ul class="space-y-1list-disclist-inside"><li>Host can send page context to AI for better answers</li><li>Widget can trigger actions in host app via callbacks</li><li>Conversation history syncs via encrypted IndexedDB</li><li>Deep-link support: <code class="bg-gray-200px-1rounded">?aiui=open&q=help</code></li></ul></div></div></div>`,2))]),d(D)]))}});export{X as default};