@pagelines/sdk 1.0.308 → 1.0.310
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.
- package/dist/{AgentProvider.vue_vue_type_script_setup_true_lang-zUkpPTt7.js → AgentProvider.vue_vue_type_script_setup_true_lang-CEs3o2R3.js} +2 -2
- package/dist/{AgentProvider.vue_vue_type_script_setup_true_lang-zUkpPTt7.js.map → AgentProvider.vue_vue_type_script_setup_true_lang-CEs3o2R3.js.map} +1 -1
- package/dist/{AgentWidgetInline-DeqfrORH.js → AgentWidgetInline-CJHAa59b.js} +3 -3
- package/dist/{AgentWidgetInline-DeqfrORH.js.map → AgentWidgetInline-CJHAa59b.js.map} +1 -1
- package/dist/{AgentWidgetModal-C664WxCs.js → AgentWidgetModal-CCAJsZcm.js} +3 -3
- package/dist/{AgentWidgetModal-C664WxCs.js.map → AgentWidgetModal-CCAJsZcm.js.map} +1 -1
- package/dist/{AgentWrap.vue_vue_type_script_setup_true_lang-CvNzBs-l.js → AgentWrap.vue_vue_type_script_setup_true_lang-bmrI1vVo.js} +2 -2
- package/dist/{AgentWrap.vue_vue_type_script_setup_true_lang-CvNzBs-l.js.map → AgentWrap.vue_vue_type_script_setup_true_lang-bmrI1vVo.js.map} +1 -1
- package/dist/agent.js +4 -4
- package/dist/{index-C0h55a8L.js → index-BqWcASTa.js} +34 -34
- package/dist/{index-C0h55a8L.js.map → index-BqWcASTa.js.map} +1 -1
- package/dist/widget.js +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-C0h55a8L.js","sources":["../widget/PLWidget.ts","../widget/composables/usePLWidget.ts","../widget/composables/useWidgetState.ts","../widget/ui/AgentWidgetPopup.vue"],"sourcesContent":["import type { App, ComponentPublicInstance } from 'vue'\nimport type { AgentConfig } from '@pagelines/core'\nimport type { AgentChatController } from '../agent/AgentController'\nimport { PageLinesSDK } from '../sdkClient'\nimport sdkCSS from '../agent/ui/styles.css?inline'\nimport { createApp } from 'vue'\nimport { createLogger } from '@pagelines/core'\n\nexport type WidgetMode = 'inline' | 'button' | 'popup' | 'modal'\nexport type ButtonIconPreset = 'phone' | 'calendar' | 'question' | 'message' | 'sparkles'\n\nexport interface WidgetConfig {\n el?: HTMLElement // Optional for modal/button modes (creates and appends to body for modal)\n mode: WidgetMode\n handle?: string\n agent?: AgentConfig\n context?: string\n firstMessage?: string\n buttonText?: string // Custom button text with template vars: {name}, {title}, {handle}, {orgName}\n buttonIcon?: ButtonIconPreset // Icon preset: phone | calendar | question | message | sparkles\n position?: 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left' // Popup mode only\n chatOnly?: boolean // Skip full agent interface, show chat directly (for embedded chatbots)\n chatController?: AgentChatController // Optional external chat controller\n apiBase?: string\n onClose?: () => void // Callback when widget is closed (modal/popup/button modes)\n}\n\nexport interface WidgetUpdate {\n agent?: AgentConfig\n context?: string\n firstMessage?: string\n buttonText?: string\n buttonIcon?: ButtonIconPreset\n}\n\ntype WidgetInstance = {\n toggle?: () => void\n open?: () => void\n close?: () => void\n update?: (config: WidgetUpdate) => void\n} & ComponentPublicInstance\n\nconst logger = createLogger('PLWidget')\n\nexport class PLWidget {\n private app: App | null = null\n private shadowRoot: ShadowRoot | null = null\n private widgetInstance: WidgetInstance | null = null\n private config: WidgetConfig\n private sdk: PageLinesSDK\n private container: HTMLElement | null = null\n private static modalInstances = new Map<string, PLWidget>()\n\n /**\n * Auto-collect page context from the current document.\n * Returns a concise summary string the agent can use to understand\n * where the visitor is on the site.\n */\n static collectPageContext(): string {\n if (typeof window === 'undefined' || typeof document === 'undefined')\n return ''\n\n const parts: string[] = []\n\n const url = window.location.href\n if (url)\n parts.push(`Page URL: ${url}`)\n\n const title = document.title\n if (title)\n parts.push(`Page title: ${title}`)\n\n const metaDesc = document.querySelector('meta[name=\"description\"]')?.getAttribute('content')\n if (metaDesc)\n parts.push(`Page description: ${metaDesc}`)\n\n const ogTitle = document.querySelector('meta[property=\"og:title\"]')?.getAttribute('content')\n if (ogTitle && ogTitle !== title)\n parts.push(`OG title: ${ogTitle}`)\n\n const referrer = document.referrer\n if (referrer)\n parts.push(`Referrer: ${referrer}`)\n\n const path = window.location.pathname\n if (path && path !== '/')\n parts.push(`Path: ${path}`)\n\n return parts.join('\\n')\n }\n\n constructor(config: WidgetConfig) {\n // Auto-collect page context and merge with any manual context\n const autoContext = PLWidget.collectPageContext()\n const manualContext = config.context || ''\n const mergedContext = [autoContext, manualContext].filter(Boolean).join('\\n\\n')\n\n this.config = {\n ...config,\n context: mergedContext || undefined,\n }\n\n // Validate required config\n if (!config.mode)\n throw new Error('PLWidget: mode is required')\n if (!config.handle && !config.agent)\n throw new Error('PLWidget: either handle or agent is required')\n\n // For non-modal/button modes, el is required\n if (config.mode !== 'modal' && config.mode !== 'button' && !config.el)\n throw new Error(`PLWidget: el (HTMLElement) is required for ${config.mode} mode`)\n\n // For modal mode, handle singleton pattern\n if (config.mode === 'modal') {\n const instanceKey = config.handle || config.agent?.agentId || 'default'\n const existing = PLWidget.modalInstances.get(instanceKey)\n if (existing) {\n logger.warn(`Destroying existing modal widget for: ${instanceKey}`)\n existing.destroy()\n }\n PLWidget.modalInstances.set(instanceKey, this)\n }\n\n // Create SDK instance (singleton)\n const isDev = typeof window !== 'undefined'\n ? window.location.hostname === 'localhost' || window.location.hostname.includes('127.0.0.1')\n : false\n\n this.sdk = PageLinesSDK.getInstance({\n isDev,\n ...(config.apiBase && { apiBase: config.apiBase }),\n })\n\n logger.info(`Initializing ${config.mode} mode for @${config.handle || config.agent?.handle} (isDev: ${isDev})`)\n\n this.init()\n }\n\n private async init() {\n // Button mode doesn't need shadow DOM - just set up click handler\n if (this.config.mode === 'button') {\n await this.mountMode(this.config.el!)\n return\n }\n\n // For modal mode, create container and append to body\n if (this.config.mode === 'modal') {\n this.container = document.createElement('div')\n this.container.id = `pagelines-modal-${this.config.handle || this.config.agent?.agentId || 'widget'}`\n // Position container to cover viewport for proper modal centering\n this.container.style.cssText = 'position: fixed; inset: 0; z-index: 9999;'\n document.body.appendChild(this.container)\n\n // Create shadow root in modal container\n this.shadowRoot = this.container.attachShadow({ mode: 'open' })\n }\n else {\n // For other modes, use provided element\n this.shadowRoot = this.config.el!.attachShadow({ mode: 'open' })\n }\n\n // Inject SDK CSS into shadow DOM\n const styleElement = document.createElement('style')\n styleElement.textContent = sdkCSS\n this.shadowRoot.appendChild(styleElement)\n\n // Create mount point\n const mountPoint = document.createElement('div')\n mountPoint.id = 'pagelines-widget-root'\n mountPoint.style.cssText = 'width: 100%; height: 100%;'\n this.shadowRoot.appendChild(mountPoint)\n\n // Import and mount mode-specific component\n await this.mountMode(mountPoint)\n }\n\n private async mountMode(mountPoint: HTMLElement) {\n const { mode } = this.config\n\n if (mode === 'inline') {\n const { default: AgentWidgetInline } = await import('./ui/AgentWidgetInline.vue')\n\n this.app = createApp(AgentWidgetInline, {\n sdk: this.sdk,\n handle: this.config.handle,\n agent: this.config.agent,\n context: this.config.context,\n firstMessage: this.config.firstMessage,\n buttonText: this.config.buttonText,\n buttonIcon: this.config.buttonIcon,\n chatOnly: this.config.chatOnly,\n })\n\n this.widgetInstance = this.app.mount(mountPoint) as WidgetInstance\n }\n else if (mode === 'button') {\n // Button mode - element is the button itself, no Vue component\n // Just set up click handler to open modal\n if (!this.config.el)\n throw new Error('PLWidget: el is required for button mode')\n\n const buttonEl = this.config.el\n buttonEl.style.cursor = 'pointer'\n\n const handleClick = () => {\n // Create modal widget on click\n new PLWidget({\n mode: 'modal',\n handle: this.config.handle,\n agent: this.config.agent,\n context: this.config.context,\n firstMessage: this.config.firstMessage,\n buttonText: this.config.buttonText,\n buttonIcon: this.config.buttonIcon,\n chatOnly: this.config.chatOnly,\n onClose: this.config.onClose,\n })\n }\n\n buttonEl.addEventListener('click', handleClick)\n\n // Store cleanup function\n this.destroy = () => {\n buttonEl.removeEventListener('click', handleClick)\n logger.info(`Button mode widget destroyed for handle: ${this.config.handle}`)\n }\n }\n else if (mode === 'popup') {\n const { default: AgentWidgetPopup } = await import('./ui/AgentWidgetPopup.vue')\n\n this.app = createApp(AgentWidgetPopup, {\n sdk: this.sdk,\n handle: this.config.handle,\n agent: this.config.agent,\n context: this.config.context,\n firstMessage: this.config.firstMessage,\n buttonText: this.config.buttonText,\n buttonIcon: this.config.buttonIcon,\n position: this.config.position || 'bottom-right',\n chatOnly: this.config.chatOnly,\n chatController: this.config.chatController,\n })\n\n this.widgetInstance = this.app.mount(mountPoint) as WidgetInstance\n }\n else if (mode === 'modal') {\n const { default: AgentWidgetModal } = await import('./ui/AgentWidgetModal.vue')\n\n this.app = createApp(AgentWidgetModal, {\n sdk: this.sdk,\n handle: this.config.handle,\n agent: this.config.agent,\n context: this.config.context,\n firstMessage: this.config.firstMessage,\n buttonText: this.config.buttonText,\n buttonIcon: this.config.buttonIcon,\n chatOnly: this.config.chatOnly,\n onClose: () => {\n // Call user's onClose callback if provided\n if (this.config.onClose) {\n this.config.onClose()\n }\n // Auto-destroy modal when closed\n this.destroy()\n },\n })\n\n this.widgetInstance = this.app.mount(mountPoint) as WidgetInstance\n }\n else {\n throw new Error(`PLWidget: unsupported mode \"${mode}\"`)\n }\n }\n\n /**\n * Update widget with new configuration without re-mounting\n */\n update(updates: WidgetUpdate) {\n if (this.widgetInstance?.update) {\n this.widgetInstance.update(updates)\n logger.info(`Widget updated: ${Object.keys(updates).join(', ')}`)\n }\n else {\n logger.warn('Widget instance does not support update()')\n }\n }\n\n /**\n * Toggle widget visibility (popup mode only)\n */\n toggle() {\n if (this.widgetInstance?.toggle) {\n this.widgetInstance.toggle()\n }\n else {\n logger.warn('Widget mode does not support toggle()')\n }\n }\n\n /**\n * Open widget (popup mode only)\n */\n open() {\n if (this.widgetInstance?.open) {\n this.widgetInstance.open()\n }\n else {\n logger.warn('Widget mode does not support open()')\n }\n }\n\n /**\n * Close widget (popup mode only)\n */\n close() {\n if (this.widgetInstance?.close) {\n this.widgetInstance.close()\n }\n else {\n logger.warn('Widget mode does not support close()')\n }\n }\n\n /**\n * Destroy widget and cleanup\n */\n destroy() {\n if (this.app) {\n this.app.unmount()\n this.app = null\n }\n\n if (this.shadowRoot) {\n this.shadowRoot.innerHTML = ''\n this.shadowRoot = null\n }\n\n // For modal mode, remove container from body and remove from singleton map\n if (this.config.mode === 'modal') {\n if (this.container) {\n this.container.remove()\n this.container = null\n }\n\n const instanceKey = this.config.handle || this.config.agent?.agentId || 'default'\n PLWidget.modalInstances.delete(instanceKey)\n }\n\n this.widgetInstance = null\n\n logger.info(`Widget destroyed for handle: ${this.config.handle || this.config.agent?.handle}`)\n }\n}\n","import type { MaybeRef } from 'vue'\nimport type { AgentConfig } from '@pagelines/core'\nimport type { WidgetConfig, WidgetUpdate } from '../PLWidget'\nimport { computed, onUnmounted, ref, unref, watch } from 'vue'\nimport { PLWidget } from '../PLWidget'\n\nexport interface UsePLWidgetConfig {\n mode: WidgetConfig['mode']\n handle?: MaybeRef<string | undefined>\n agent?: MaybeRef<AgentConfig | null | undefined>\n context?: MaybeRef<string | undefined>\n firstMessage?: MaybeRef<string | undefined>\n apiBase?: string\n onClose?: () => void\n}\n\n/**\n * Composable for managing PLWidget lifecycle with automatic initialization,\n * reactive updates, and cleanup.\n *\n * Benefits:\n * - Eliminates manual DOM timing coordination (watch + nextTick)\n * - Automatic cleanup on unmount\n * - Reactive prop updates via widget.update()\n * - Prevents double initialization\n * - Clear loading/error states\n *\n * @example\n * ```vue\n * <script setup>\n * const agentRef = ref<Agent | null>(null)\n * const { containerRef, loading, error } = usePLWidget({\n * mode: 'inline',\n * agent: agentRef,\n * context: 'welcome'\n * })\n * </script>\n *\n * <template>\n * <div ref=\"containerRef\" class=\"w-full h-full\" />\n * </template>\n * ```\n */\nexport function usePLWidget(config: UsePLWidgetConfig) {\n const containerRef = ref<HTMLElement | null>(null)\n const widget = ref<InstanceType<typeof PLWidget> | null>(null)\n const loading = ref(true)\n const error = ref<string | null>(null)\n\n // Track if widget has been initialized to prevent double-init\n const initialized = ref(false)\n\n // Computed values for reactive tracking\n const currentHandle = computed(() => unref(config.handle))\n const currentAgent = computed(() => unref(config.agent))\n const currentContext = computed(() => unref(config.context))\n const currentFirstMessage = computed(() => unref(config.firstMessage))\n\n // Check if we have required data for initialization\n const hasRequiredData = computed(() => {\n if (config.mode === 'modal') {\n // Modal doesn't need container\n return !!(currentHandle.value || currentAgent.value)\n }\n // Inline/popup need container + (handle or agent)\n return !!(containerRef.value && (currentHandle.value || currentAgent.value))\n })\n\n // Initialize widget when container and data are ready\n watch([containerRef, currentAgent, currentHandle], async () => {\n // Skip if already initialized or missing required data\n if (initialized.value || !hasRequiredData.value) {\n return\n }\n\n loading.value = true\n error.value = null\n\n try {\n // Wait for next tick to ensure DOM is fully rendered\n await new Promise(resolve => setTimeout(resolve, 0))\n\n const widgetConfig: WidgetConfig = {\n mode: config.mode,\n handle: currentHandle.value,\n agent: currentAgent.value || undefined,\n context: currentContext.value,\n firstMessage: currentFirstMessage.value,\n apiBase: config.apiBase,\n onClose: config.onClose,\n }\n\n // Add container element for non-modal modes\n if (config.mode !== 'modal') {\n widgetConfig.el = containerRef.value!\n }\n\n widget.value = new PLWidget(widgetConfig)\n initialized.value = true\n } catch (err) {\n error.value = err instanceof Error ? err.message : 'Failed to initialize widget'\n console.error('[usePLWidget] Initialization error:', err)\n } finally {\n loading.value = false\n }\n }, { immediate: true })\n\n // Watch for prop changes and update widget reactively\n watch([currentAgent, currentContext, currentFirstMessage], () => {\n if (!widget.value || !initialized.value) {\n return\n }\n\n const updates: WidgetUpdate = {}\n if (currentAgent.value !== undefined) {\n updates.agent = currentAgent.value || undefined\n }\n if (currentContext.value !== undefined) {\n updates.context = currentContext.value\n }\n if (currentFirstMessage.value !== undefined) {\n updates.firstMessage = currentFirstMessage.value\n }\n\n if (Object.keys(updates).length > 0) {\n widget.value.update(updates)\n }\n })\n\n // Cleanup on unmount\n onUnmounted(() => {\n if (widget.value) {\n widget.value.destroy()\n widget.value = null\n }\n initialized.value = false\n })\n\n return {\n containerRef,\n widget,\n loading,\n error,\n }\n}\n","import type { AgentConfig } from '../../agent/schema'\nimport type { ButtonIconPreset, WidgetUpdate } from '../PLWidget'\nimport { ref } from 'vue'\n\nexport function useWidgetState(props: {\n agent?: AgentConfig\n context?: string\n firstMessage?: string\n buttonText?: string\n buttonIcon?: ButtonIconPreset\n}) {\n const currentAgent = ref<AgentConfig | undefined>(props.agent)\n const currentContext = ref<string | undefined>(props.context)\n const currentFirstMessage = ref<string | undefined>(props.firstMessage)\n const currentButtonText = ref<string | undefined>(props.buttonText)\n const currentButtonIcon = ref<ButtonIconPreset | undefined>(props.buttonIcon)\n\n function update(updates: WidgetUpdate) {\n if (updates.agent !== undefined)\n currentAgent.value = updates.agent\n if (updates.context !== undefined)\n currentContext.value = updates.context\n if (updates.firstMessage !== undefined)\n currentFirstMessage.value = updates.firstMessage\n if (updates.buttonText !== undefined)\n currentButtonText.value = updates.buttonText\n if (updates.buttonIcon !== undefined)\n currentButtonIcon.value = updates.buttonIcon\n }\n\n return { currentAgent, currentContext, currentFirstMessage, currentButtonText, currentButtonIcon, update }\n}\n","<script setup lang=\"ts\">\nimport type { AgentChatController } from '../../agent/AgentController'\nimport type { PageLinesSDK } from '../../sdkClient'\nimport type { AgentConfig } from '../../agent/schema'\nimport type { Agent } from '../../agent/schema'\nimport { computed, ref, shallowRef, watch } from 'vue'\nimport { getAgentAvatarUrl } from '../../agent/utils'\nimport { AgentChatController as Controller } from '../../agent/AgentController'\nimport AgentWrap from '../../agent/ui/AgentWrap.vue'\nimport ElAgentChat from '../../agent/ui/ElAgentChat.vue'\nimport { useWidgetState } from '../composables/useWidgetState'\n\nconst props = defineProps<{\n sdk?: PageLinesSDK\n handle?: string\n agent?: AgentConfig\n context?: string\n firstMessage?: string\n position?: 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left'\n chatController?: AgentChatController\n}>()\n\nconst isOpen = ref(false)\nconst hasOpened = ref(false)\nconst internalController = shallowRef<AgentChatController>()\n\nconst { currentAgent, currentContext, currentFirstMessage, update } = useWidgetState(props)\n\nconst positionClasses = computed(() => {\n const map = {\n 'bottom-left': 'bottom-4 left-4 sm:bottom-6 sm:left-6',\n 'top-right': 'top-4 right-4 sm:top-6 sm:right-6',\n 'top-left': 'top-4 left-4 sm:top-6 sm:left-6',\n 'bottom-right': 'bottom-4 right-4 sm:bottom-6 sm:right-6',\n }\n return map[props.position || 'bottom-right']\n})\n\nconst transformOrigin = computed(() => {\n const map = {\n 'bottom-left': 'bottom left',\n 'top-right': 'top right',\n 'top-left': 'top left',\n 'bottom-right': 'bottom right',\n }\n return map[props.position || 'bottom-right']\n})\n\nfunction initController(agent: Agent, sdk: PageLinesSDK) {\n if (props.chatController || internalController.value) return\n\n internalController.value = new Controller({\n sdk,\n agent: agent.toConfig(),\n context: currentContext.value,\n firstMessage: currentFirstMessage.value,\n })\n}\n\n// Lazy connection: start conversation on first open\nwatch(isOpen, (open) => {\n if (open && !hasOpened.value) {\n hasOpened.value = true\n const ctrl = props.chatController || internalController.value\n if (ctrl) {\n void ctrl.startTextConversation()\n }\n }\n})\n\nfunction toggle() {\n isOpen.value = !isOpen.value\n}\n\nfunction open() {\n isOpen.value = true\n}\n\nfunction close() {\n isOpen.value = false\n}\n\ndefineExpose({ toggle, open, close, update })\n</script>\n\n<template>\n <AgentWrap\n v-slot=\"{ agent, sdk: resolvedSdk }\"\n :sdk=\"sdk\"\n :handle=\"handle\"\n :agent=\"currentAgent\"\n :context=\"currentContext\"\n :first-message=\"currentFirstMessage\"\n >\n <div\n v-if=\"agent\"\n :ref=\"() => initController(agent, resolvedSdk)\"\n class=\"fixed z-[999999] pointer-events-auto\"\n :class=\"positionClasses\"\n >\n <!-- Widget container: animates size/radius/shadow -->\n <div\n class=\"widget-container transform-gpu overflow-hidden\"\n :class=\"isOpen\n ? 'w-[min(400px,calc(100vw-2rem))] h-[min(600px,calc(100vh-4rem))] shadow-[0_24px_80px_-12px_rgba(0,0,0,0.2),0_8px_24px_-8px_rgba(0,0,0,0.08)]'\n : 'w-16 h-16 shadow-[0_8px_32px_-4px_rgba(0,0,0,0.15)] cursor-pointer'\"\n :style=\"{ 'border-radius': isOpen ? '16px' : '32px', 'transform-origin': transformOrigin }\"\n @click=\"!isOpen ? toggle() : undefined\"\n >\n <!-- Bubble (cross-fade: always in DOM) -->\n <div\n class=\"absolute inset-0 transition-opacity duration-200\"\n :class=\"isOpen ? 'opacity-0 pointer-events-none' : 'opacity-100'\"\n >\n <div class=\"relative h-full w-full rounded-full overflow-hidden\">\n <img\n :src=\"getAgentAvatarUrl(agent.toConfig())\"\n :alt=\"`${agent.name.value} agent`\"\n class=\"h-full w-full object-cover pointer-events-none\"\n width=\"64\"\n height=\"64\"\n />\n <div class=\"absolute inset-0 pointer-events-none bg-gradient-to-br from-transparent via-black/10 to-black/40 opacity-60\" />\n </div>\n </div>\n\n <!-- Panel (cross-fade: always in DOM) -->\n <div\n class=\"absolute inset-0 flex flex-col bg-white transition-opacity duration-250\"\n :class=\"isOpen ? 'opacity-100' : 'opacity-0 pointer-events-none'\"\n >\n <!-- Header -->\n <div class=\"flex items-center shrink-0 border-b border-theme-100 px-4 py-3\">\n <div class=\"flex items-center gap-3 flex-1 min-w-0\">\n <img\n :src=\"agent.avatarUrl.value\"\n :alt=\"agent.name.value\"\n class=\"size-8 rounded-full object-cover shrink-0\"\n />\n <div class=\"min-w-0\">\n <div class=\"text-sm font-medium text-theme-900 truncate\">{{ agent.displayName.value }}</div>\n <div class=\"text-[11px]\" :class=\"agent.desiredStatus.value === 'active' ? 'text-green-500' : 'text-theme-400'\">\n {{ agent.desiredStatus.value === 'active' ? 'Online' : 'Offline' }}\n </div>\n </div>\n </div>\n <button\n class=\"cursor-pointer flex items-center justify-center p-2 -mr-1 rounded-xl text-theme-400 hover:text-theme-600 hover:bg-theme-50 transition-colors\"\n @click.stop=\"close\"\n >\n <i class=\"size-5 i-tabler-x\" />\n </button>\n </div>\n\n <!-- Chat -->\n <div class=\"flex-1 overflow-hidden\">\n <ElAgentChat\n v-if=\"hasOpened\"\n :chat-controller=\"chatController || internalController\"\n :agent=\"agent\"\n variant=\"light\"\n scale=\"md\"\n setup-hint=\"\"\n empty-state-message=\"Send a message to get started\"\n />\n </div>\n\n <!-- Footer -->\n <div class=\"shrink-0 flex items-center justify-center border-t border-theme-100 py-1.5\">\n <a\n href=\"https://www.pagelines.com\"\n target=\"_blank\"\n rel=\"noopener\"\n class=\"text-[10px] text-theme-300 hover:text-theme-400 transition-colors\"\n >\n AI Agent™ by PageLines\n </a>\n </div>\n </div>\n </div>\n\n <!-- Online indicator (outside overflow-hidden so ping isn't clipped) -->\n <div\n v-if=\"agent.desiredStatus.value === 'active'\"\n class=\"absolute top-[5%] right-[5%] transition-opacity duration-200 pointer-events-none\"\n :class=\"isOpen ? 'opacity-0' : 'opacity-100'\"\n >\n <div class=\"size-3 bg-green-500 rounded-full ring-2 ring-white absolute animate-ping\" style=\"animation-duration: 5s;\" />\n <div class=\"size-3 bg-green-500 rounded-full ring-2 ring-white\" />\n </div>\n </div>\n </AgentWrap>\n</template>\n\n<style scoped>\n.widget-container {\n transition: width 0.4s cubic-bezier(0.32, 0.72, 0, 1),\n height 0.4s cubic-bezier(0.32, 0.72, 0, 1),\n border-radius 0.4s cubic-bezier(0.32, 0.72, 0, 1),\n box-shadow 0.4s cubic-bezier(0.32, 0.72, 0, 1);\n}\n</style>\n"],"names":["logger","createLogger","_PLWidget","config","__publicField","autoContext","manualContext","mergedContext","instanceKey","existing","isDev","PageLinesSDK","parts","url","title","metaDesc","ogTitle","referrer","path","styleElement","sdkCSS","mountPoint","mode","AgentWidgetInline","createApp","buttonEl","handleClick","__name","AgentWidgetPopup","AgentWidgetPopup$1","AgentWidgetModal","updates","PLWidget","usePLWidget","containerRef","ref","widget","loading","error","initialized","currentHandle","computed","unref","currentAgent","currentContext","currentFirstMessage","hasRequiredData","watch","resolve","widgetConfig","err","onUnmounted","useWidgetState","props","currentButtonText","currentButtonIcon","update","__props","isOpen","hasOpened","internalController","shallowRef","positionClasses","transformOrigin","initController","agent","sdk","Controller","open","ctrl","toggle","close","__expose","_createBlock","AgentWrap","_unref","resolvedSdk","_createElementBlock","_normalizeClass","_createElementVNode","_normalizeStyle","_cache","$event","_hoisted_1","getAgentAvatarUrl","_hoisted_3","_hoisted_4","_hoisted_6","_hoisted_7","_toDisplayString","_hoisted_8","ElAgentChat"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index-BqWcASTa.js","sources":["../widget/PLWidget.ts","../widget/composables/usePLWidget.ts","../widget/composables/useWidgetState.ts","../widget/ui/AgentWidgetPopup.vue"],"sourcesContent":["import type { App, ComponentPublicInstance } from 'vue'\nimport type { AgentConfig } from '@pagelines/core'\nimport type { AgentChatController } from '../agent/AgentController'\nimport { PageLinesSDK } from '../sdkClient'\nimport sdkCSS from '../agent/ui/styles.css?inline'\nimport { createApp } from 'vue'\nimport { createLogger } from '@pagelines/core'\n\nexport type WidgetMode = 'inline' | 'button' | 'popup' | 'modal'\nexport type ButtonIconPreset = 'phone' | 'calendar' | 'question' | 'message' | 'sparkles'\n\nexport interface WidgetConfig {\n el?: HTMLElement // Optional for modal/button modes (creates and appends to body for modal)\n mode: WidgetMode\n handle?: string\n agent?: AgentConfig\n context?: string\n firstMessage?: string\n buttonText?: string // Custom button text with template vars: {name}, {title}, {handle}, {orgName}\n buttonIcon?: ButtonIconPreset // Icon preset: phone | calendar | question | message | sparkles\n position?: 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left' // Popup mode only\n chatOnly?: boolean // Skip full agent interface, show chat directly (for embedded chatbots)\n chatController?: AgentChatController // Optional external chat controller\n apiBase?: string\n onClose?: () => void // Callback when widget is closed (modal/popup/button modes)\n}\n\nexport interface WidgetUpdate {\n agent?: AgentConfig\n context?: string\n firstMessage?: string\n buttonText?: string\n buttonIcon?: ButtonIconPreset\n}\n\ntype WidgetInstance = {\n toggle?: () => void\n open?: () => void\n close?: () => void\n update?: (config: WidgetUpdate) => void\n} & ComponentPublicInstance\n\nconst logger = createLogger('PLWidget')\n\nexport class PLWidget {\n private app: App | null = null\n private shadowRoot: ShadowRoot | null = null\n private widgetInstance: WidgetInstance | null = null\n private config: WidgetConfig\n private sdk: PageLinesSDK\n private container: HTMLElement | null = null\n private static modalInstances = new Map<string, PLWidget>()\n\n /**\n * Auto-collect page context from the current document.\n * Returns a concise summary string the agent can use to understand\n * where the visitor is on the site.\n */\n static collectPageContext(): string {\n if (typeof window === 'undefined' || typeof document === 'undefined')\n return ''\n\n const parts: string[] = []\n\n const url = window.location.href\n if (url)\n parts.push(`Page URL: ${url}`)\n\n const title = document.title\n if (title)\n parts.push(`Page title: ${title}`)\n\n const metaDesc = document.querySelector('meta[name=\"description\"]')?.getAttribute('content')\n if (metaDesc)\n parts.push(`Page description: ${metaDesc}`)\n\n const ogTitle = document.querySelector('meta[property=\"og:title\"]')?.getAttribute('content')\n if (ogTitle && ogTitle !== title)\n parts.push(`OG title: ${ogTitle}`)\n\n const referrer = document.referrer\n if (referrer)\n parts.push(`Referrer: ${referrer}`)\n\n const path = window.location.pathname\n if (path && path !== '/')\n parts.push(`Path: ${path}`)\n\n return parts.join('\\n')\n }\n\n constructor(config: WidgetConfig) {\n // Auto-collect page context and merge with any manual context\n const autoContext = PLWidget.collectPageContext()\n const manualContext = config.context || ''\n const mergedContext = [autoContext, manualContext].filter(Boolean).join('\\n\\n')\n\n this.config = {\n ...config,\n context: mergedContext || undefined,\n }\n\n // Validate required config\n if (!config.mode)\n throw new Error('PLWidget: mode is required')\n if (!config.handle && !config.agent)\n throw new Error('PLWidget: either handle or agent is required')\n\n // For non-modal/button modes, el is required\n if (config.mode !== 'modal' && config.mode !== 'button' && !config.el)\n throw new Error(`PLWidget: el (HTMLElement) is required for ${config.mode} mode`)\n\n // For modal mode, handle singleton pattern\n if (config.mode === 'modal') {\n const instanceKey = config.handle || config.agent?.agentId || 'default'\n const existing = PLWidget.modalInstances.get(instanceKey)\n if (existing) {\n logger.warn(`Destroying existing modal widget for: ${instanceKey}`)\n existing.destroy()\n }\n PLWidget.modalInstances.set(instanceKey, this)\n }\n\n // Create SDK instance (singleton)\n const isDev = typeof window !== 'undefined'\n ? window.location.hostname === 'localhost' || window.location.hostname.includes('127.0.0.1')\n : false\n\n this.sdk = PageLinesSDK.getInstance({\n isDev,\n ...(config.apiBase && { apiBase: config.apiBase }),\n })\n\n logger.info(`Initializing ${config.mode} mode for @${config.handle || config.agent?.handle} (isDev: ${isDev})`)\n\n this.init()\n }\n\n private async init() {\n // Button mode doesn't need shadow DOM - just set up click handler\n if (this.config.mode === 'button') {\n await this.mountMode(this.config.el!)\n return\n }\n\n // For modal mode, create container and append to body\n if (this.config.mode === 'modal') {\n this.container = document.createElement('div')\n this.container.id = `pagelines-modal-${this.config.handle || this.config.agent?.agentId || 'widget'}`\n // Position container to cover viewport for proper modal centering\n this.container.style.cssText = 'position: fixed; inset: 0; z-index: 9999;'\n document.body.appendChild(this.container)\n\n // Create shadow root in modal container\n this.shadowRoot = this.container.attachShadow({ mode: 'open' })\n }\n else {\n // For other modes, use provided element\n this.shadowRoot = this.config.el!.attachShadow({ mode: 'open' })\n }\n\n // Inject SDK CSS into shadow DOM\n const styleElement = document.createElement('style')\n styleElement.textContent = sdkCSS\n this.shadowRoot.appendChild(styleElement)\n\n // Create mount point\n const mountPoint = document.createElement('div')\n mountPoint.id = 'pagelines-widget-root'\n mountPoint.style.cssText = 'width: 100%; height: 100%;'\n this.shadowRoot.appendChild(mountPoint)\n\n // Import and mount mode-specific component\n await this.mountMode(mountPoint)\n }\n\n private async mountMode(mountPoint: HTMLElement) {\n const { mode } = this.config\n\n if (mode === 'inline') {\n const { default: AgentWidgetInline } = await import('./ui/AgentWidgetInline.vue')\n\n this.app = createApp(AgentWidgetInline, {\n sdk: this.sdk,\n handle: this.config.handle,\n agent: this.config.agent,\n context: this.config.context,\n firstMessage: this.config.firstMessage,\n buttonText: this.config.buttonText,\n buttonIcon: this.config.buttonIcon,\n chatOnly: this.config.chatOnly,\n })\n\n this.widgetInstance = this.app.mount(mountPoint) as WidgetInstance\n }\n else if (mode === 'button') {\n // Button mode - element is the button itself, no Vue component\n // Just set up click handler to open modal\n if (!this.config.el)\n throw new Error('PLWidget: el is required for button mode')\n\n const buttonEl = this.config.el\n buttonEl.style.cursor = 'pointer'\n\n const handleClick = () => {\n // Create modal widget on click\n new PLWidget({\n mode: 'modal',\n handle: this.config.handle,\n agent: this.config.agent,\n context: this.config.context,\n firstMessage: this.config.firstMessage,\n buttonText: this.config.buttonText,\n buttonIcon: this.config.buttonIcon,\n chatOnly: this.config.chatOnly,\n onClose: this.config.onClose,\n })\n }\n\n buttonEl.addEventListener('click', handleClick)\n\n // Store cleanup function\n this.destroy = () => {\n buttonEl.removeEventListener('click', handleClick)\n logger.info(`Button mode widget destroyed for handle: ${this.config.handle}`)\n }\n }\n else if (mode === 'popup') {\n const { default: AgentWidgetPopup } = await import('./ui/AgentWidgetPopup.vue')\n\n this.app = createApp(AgentWidgetPopup, {\n sdk: this.sdk,\n handle: this.config.handle,\n agent: this.config.agent,\n context: this.config.context,\n firstMessage: this.config.firstMessage,\n buttonText: this.config.buttonText,\n buttonIcon: this.config.buttonIcon,\n position: this.config.position || 'bottom-right',\n chatOnly: this.config.chatOnly,\n chatController: this.config.chatController,\n })\n\n this.widgetInstance = this.app.mount(mountPoint) as WidgetInstance\n }\n else if (mode === 'modal') {\n const { default: AgentWidgetModal } = await import('./ui/AgentWidgetModal.vue')\n\n this.app = createApp(AgentWidgetModal, {\n sdk: this.sdk,\n handle: this.config.handle,\n agent: this.config.agent,\n context: this.config.context,\n firstMessage: this.config.firstMessage,\n buttonText: this.config.buttonText,\n buttonIcon: this.config.buttonIcon,\n chatOnly: this.config.chatOnly,\n onClose: () => {\n // Call user's onClose callback if provided\n if (this.config.onClose) {\n this.config.onClose()\n }\n // Auto-destroy modal when closed\n this.destroy()\n },\n })\n\n this.widgetInstance = this.app.mount(mountPoint) as WidgetInstance\n }\n else {\n throw new Error(`PLWidget: unsupported mode \"${mode}\"`)\n }\n }\n\n /**\n * Update widget with new configuration without re-mounting\n */\n update(updates: WidgetUpdate) {\n if (this.widgetInstance?.update) {\n this.widgetInstance.update(updates)\n logger.info(`Widget updated: ${Object.keys(updates).join(', ')}`)\n }\n else {\n logger.warn('Widget instance does not support update()')\n }\n }\n\n /**\n * Toggle widget visibility (popup mode only)\n */\n toggle() {\n if (this.widgetInstance?.toggle) {\n this.widgetInstance.toggle()\n }\n else {\n logger.warn('Widget mode does not support toggle()')\n }\n }\n\n /**\n * Open widget (popup mode only)\n */\n open() {\n if (this.widgetInstance?.open) {\n this.widgetInstance.open()\n }\n else {\n logger.warn('Widget mode does not support open()')\n }\n }\n\n /**\n * Close widget (popup mode only)\n */\n close() {\n if (this.widgetInstance?.close) {\n this.widgetInstance.close()\n }\n else {\n logger.warn('Widget mode does not support close()')\n }\n }\n\n /**\n * Destroy widget and cleanup\n */\n destroy() {\n if (this.app) {\n this.app.unmount()\n this.app = null\n }\n\n if (this.shadowRoot) {\n this.shadowRoot.innerHTML = ''\n this.shadowRoot = null\n }\n\n // For modal mode, remove container from body and remove from singleton map\n if (this.config.mode === 'modal') {\n if (this.container) {\n this.container.remove()\n this.container = null\n }\n\n const instanceKey = this.config.handle || this.config.agent?.agentId || 'default'\n PLWidget.modalInstances.delete(instanceKey)\n }\n\n this.widgetInstance = null\n\n logger.info(`Widget destroyed for handle: ${this.config.handle || this.config.agent?.handle}`)\n }\n}\n","import type { MaybeRef } from 'vue'\nimport type { AgentConfig } from '@pagelines/core'\nimport type { WidgetConfig, WidgetUpdate } from '../PLWidget'\nimport { computed, onUnmounted, ref, unref, watch } from 'vue'\nimport { PLWidget } from '../PLWidget'\n\nexport interface UsePLWidgetConfig {\n mode: WidgetConfig['mode']\n handle?: MaybeRef<string | undefined>\n agent?: MaybeRef<AgentConfig | null | undefined>\n context?: MaybeRef<string | undefined>\n firstMessage?: MaybeRef<string | undefined>\n apiBase?: string\n onClose?: () => void\n}\n\n/**\n * Composable for managing PLWidget lifecycle with automatic initialization,\n * reactive updates, and cleanup.\n *\n * Benefits:\n * - Eliminates manual DOM timing coordination (watch + nextTick)\n * - Automatic cleanup on unmount\n * - Reactive prop updates via widget.update()\n * - Prevents double initialization\n * - Clear loading/error states\n *\n * @example\n * ```vue\n * <script setup>\n * const agentRef = ref<Agent | null>(null)\n * const { containerRef, loading, error } = usePLWidget({\n * mode: 'inline',\n * agent: agentRef,\n * context: 'welcome'\n * })\n * </script>\n *\n * <template>\n * <div ref=\"containerRef\" class=\"w-full h-full\" />\n * </template>\n * ```\n */\nexport function usePLWidget(config: UsePLWidgetConfig) {\n const containerRef = ref<HTMLElement | null>(null)\n const widget = ref<InstanceType<typeof PLWidget> | null>(null)\n const loading = ref(true)\n const error = ref<string | null>(null)\n\n // Track if widget has been initialized to prevent double-init\n const initialized = ref(false)\n\n // Computed values for reactive tracking\n const currentHandle = computed(() => unref(config.handle))\n const currentAgent = computed(() => unref(config.agent))\n const currentContext = computed(() => unref(config.context))\n const currentFirstMessage = computed(() => unref(config.firstMessage))\n\n // Check if we have required data for initialization\n const hasRequiredData = computed(() => {\n if (config.mode === 'modal') {\n // Modal doesn't need container\n return !!(currentHandle.value || currentAgent.value)\n }\n // Inline/popup need container + (handle or agent)\n return !!(containerRef.value && (currentHandle.value || currentAgent.value))\n })\n\n // Initialize widget when container and data are ready\n watch([containerRef, currentAgent, currentHandle], async () => {\n // Skip if already initialized or missing required data\n if (initialized.value || !hasRequiredData.value) {\n return\n }\n\n loading.value = true\n error.value = null\n\n try {\n // Wait for next tick to ensure DOM is fully rendered\n await new Promise(resolve => setTimeout(resolve, 0))\n\n const widgetConfig: WidgetConfig = {\n mode: config.mode,\n handle: currentHandle.value,\n agent: currentAgent.value || undefined,\n context: currentContext.value,\n firstMessage: currentFirstMessage.value,\n apiBase: config.apiBase,\n onClose: config.onClose,\n }\n\n // Add container element for non-modal modes\n if (config.mode !== 'modal') {\n widgetConfig.el = containerRef.value!\n }\n\n widget.value = new PLWidget(widgetConfig)\n initialized.value = true\n } catch (err) {\n error.value = err instanceof Error ? err.message : 'Failed to initialize widget'\n console.error('[usePLWidget] Initialization error:', err)\n } finally {\n loading.value = false\n }\n }, { immediate: true })\n\n // Watch for prop changes and update widget reactively\n watch([currentAgent, currentContext, currentFirstMessage], () => {\n if (!widget.value || !initialized.value) {\n return\n }\n\n const updates: WidgetUpdate = {}\n if (currentAgent.value !== undefined) {\n updates.agent = currentAgent.value || undefined\n }\n if (currentContext.value !== undefined) {\n updates.context = currentContext.value\n }\n if (currentFirstMessage.value !== undefined) {\n updates.firstMessage = currentFirstMessage.value\n }\n\n if (Object.keys(updates).length > 0) {\n widget.value.update(updates)\n }\n })\n\n // Cleanup on unmount\n onUnmounted(() => {\n if (widget.value) {\n widget.value.destroy()\n widget.value = null\n }\n initialized.value = false\n })\n\n return {\n containerRef,\n widget,\n loading,\n error,\n }\n}\n","import type { AgentConfig } from '../../agent/schema'\nimport type { ButtonIconPreset, WidgetUpdate } from '../PLWidget'\nimport { ref } from 'vue'\n\nexport function useWidgetState(props: {\n agent?: AgentConfig\n context?: string\n firstMessage?: string\n buttonText?: string\n buttonIcon?: ButtonIconPreset\n}) {\n const currentAgent = ref<AgentConfig | undefined>(props.agent)\n const currentContext = ref<string | undefined>(props.context)\n const currentFirstMessage = ref<string | undefined>(props.firstMessage)\n const currentButtonText = ref<string | undefined>(props.buttonText)\n const currentButtonIcon = ref<ButtonIconPreset | undefined>(props.buttonIcon)\n\n function update(updates: WidgetUpdate) {\n if (updates.agent !== undefined)\n currentAgent.value = updates.agent\n if (updates.context !== undefined)\n currentContext.value = updates.context\n if (updates.firstMessage !== undefined)\n currentFirstMessage.value = updates.firstMessage\n if (updates.buttonText !== undefined)\n currentButtonText.value = updates.buttonText\n if (updates.buttonIcon !== undefined)\n currentButtonIcon.value = updates.buttonIcon\n }\n\n return { currentAgent, currentContext, currentFirstMessage, currentButtonText, currentButtonIcon, update }\n}\n","<script setup lang=\"ts\">\nimport type { AgentChatController } from '../../agent/AgentController'\nimport type { PageLinesSDK } from '../../sdkClient'\nimport type { AgentConfig } from '../../agent/schema'\nimport type { Agent } from '../../agent/schema'\nimport { computed, ref, shallowRef, watch } from 'vue'\nimport { getAgentAvatarUrl } from '../../agent/utils'\nimport { AgentChatController as Controller } from '../../agent/AgentController'\nimport AgentWrap from '../../agent/ui/AgentWrap.vue'\nimport ElAgentChat from '../../agent/ui/ElAgentChat.vue'\nimport { useWidgetState } from '../composables/useWidgetState'\n\nconst props = defineProps<{\n sdk?: PageLinesSDK\n handle?: string\n agent?: AgentConfig\n context?: string\n firstMessage?: string\n position?: 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left'\n chatController?: AgentChatController\n}>()\n\nconst isOpen = ref(false)\nconst hasOpened = ref(false)\nconst internalController = shallowRef<AgentChatController>()\n\nconst { currentAgent, currentContext, currentFirstMessage, update } = useWidgetState(props)\n\nconst positionClasses = computed(() => {\n const map = {\n 'bottom-left': 'bottom-4 left-4 sm:bottom-6 sm:left-6',\n 'top-right': 'top-4 right-4 sm:top-6 sm:right-6',\n 'top-left': 'top-4 left-4 sm:top-6 sm:left-6',\n 'bottom-right': 'bottom-4 right-4 sm:bottom-6 sm:right-6',\n }\n return map[props.position || 'bottom-right']\n})\n\nconst transformOrigin = computed(() => {\n const map = {\n 'bottom-left': 'bottom left',\n 'top-right': 'top right',\n 'top-left': 'top left',\n 'bottom-right': 'bottom right',\n }\n return map[props.position || 'bottom-right']\n})\n\nfunction initController(agent: Agent, sdk: PageLinesSDK) {\n if (props.chatController || internalController.value) return\n\n internalController.value = new Controller({\n sdk,\n agent: agent.toConfig(),\n context: currentContext.value,\n firstMessage: currentFirstMessage.value,\n })\n}\n\n// Lazy connection: start conversation on first open\nwatch(isOpen, (open) => {\n if (open && !hasOpened.value) {\n hasOpened.value = true\n const ctrl = props.chatController || internalController.value\n if (ctrl) {\n void ctrl.startTextConversation()\n }\n }\n})\n\nfunction toggle() {\n isOpen.value = !isOpen.value\n}\n\nfunction open() {\n isOpen.value = true\n}\n\nfunction close() {\n isOpen.value = false\n}\n\ndefineExpose({ toggle, open, close, update })\n</script>\n\n<template>\n <AgentWrap\n v-slot=\"{ agent, sdk: resolvedSdk }\"\n :sdk=\"sdk\"\n :handle=\"handle\"\n :agent=\"currentAgent\"\n :context=\"currentContext\"\n :first-message=\"currentFirstMessage\"\n >\n <div\n v-if=\"agent\"\n :ref=\"() => initController(agent, resolvedSdk)\"\n class=\"fixed z-[999999] pointer-events-auto\"\n :class=\"positionClasses\"\n >\n <!-- Widget container: animates size/radius/shadow -->\n <div\n class=\"widget-container transform-gpu overflow-hidden\"\n :class=\"isOpen\n ? 'w-[min(400px,calc(100vw-2rem))] h-[min(600px,calc(100vh-4rem))] shadow-[0_24px_80px_-12px_rgba(0,0,0,0.2),0_8px_24px_-8px_rgba(0,0,0,0.08)]'\n : 'w-16 h-16 shadow-[0_8px_32px_-4px_rgba(0,0,0,0.15)] cursor-pointer'\"\n :style=\"{ 'border-radius': isOpen ? '16px' : '32px', 'transform-origin': transformOrigin }\"\n @click=\"!isOpen ? toggle() : undefined\"\n >\n <!-- Bubble (cross-fade: always in DOM) -->\n <div\n class=\"absolute inset-0 transition-opacity duration-200\"\n :class=\"isOpen ? 'opacity-0 pointer-events-none' : 'opacity-100'\"\n >\n <div class=\"relative h-full w-full rounded-full overflow-hidden\">\n <img\n :src=\"getAgentAvatarUrl(agent.toConfig())\"\n :alt=\"`${agent.name.value} agent`\"\n class=\"h-full w-full object-cover pointer-events-none\"\n width=\"64\"\n height=\"64\"\n />\n <div class=\"absolute inset-0 pointer-events-none bg-gradient-to-br from-transparent via-black/10 to-black/40 opacity-60\" />\n </div>\n </div>\n\n <!-- Panel (cross-fade: always in DOM) -->\n <div\n class=\"absolute inset-0 flex flex-col bg-white transition-opacity duration-250\"\n :class=\"isOpen ? 'opacity-100' : 'opacity-0 pointer-events-none'\"\n >\n <!-- Header -->\n <div class=\"flex items-center shrink-0 border-b border-theme-100 px-4 py-3\">\n <div class=\"flex items-center gap-3 flex-1 min-w-0\">\n <img\n :src=\"agent.avatarUrl.value\"\n :alt=\"agent.name.value\"\n class=\"size-8 rounded-full object-cover shrink-0\"\n />\n <div class=\"min-w-0\">\n <div class=\"text-sm font-medium text-theme-900 truncate\">{{ agent.displayName.value }}</div>\n <div class=\"text-[11px]\" :class=\"agent.desiredStatus.value === 'active' ? 'text-green-500' : 'text-theme-400'\">\n {{ agent.desiredStatus.value === 'active' ? 'Online' : 'Offline' }}\n </div>\n </div>\n </div>\n <button\n class=\"cursor-pointer flex items-center justify-center p-2 -mr-1 rounded-xl text-theme-400 hover:text-theme-600 hover:bg-theme-50 transition-colors\"\n @click.stop=\"close\"\n >\n <i class=\"size-5 i-tabler-x\" />\n </button>\n </div>\n\n <!-- Chat -->\n <div class=\"flex-1 overflow-hidden\">\n <ElAgentChat\n v-if=\"hasOpened\"\n :chat-controller=\"chatController || internalController\"\n :agent=\"agent\"\n variant=\"light\"\n scale=\"md\"\n setup-hint=\"\"\n empty-state-message=\"Send a message to get started\"\n />\n </div>\n\n <!-- Footer -->\n <div class=\"shrink-0 flex items-center justify-center border-t border-theme-100 py-1.5\">\n <a\n href=\"https://www.pagelines.com\"\n target=\"_blank\"\n rel=\"noopener\"\n class=\"text-[10px] text-theme-300 hover:text-theme-400 transition-colors\"\n >\n AI Agent™ by PageLines\n </a>\n </div>\n </div>\n </div>\n\n <!-- Online indicator (outside overflow-hidden so ping isn't clipped) -->\n <div\n v-if=\"agent.desiredStatus.value === 'active'\"\n class=\"absolute top-[5%] right-[5%] transition-opacity duration-200 pointer-events-none\"\n :class=\"isOpen ? 'opacity-0' : 'opacity-100'\"\n >\n <div class=\"size-3 bg-green-500 rounded-full ring-2 ring-white absolute animate-ping\" style=\"animation-duration: 5s;\" />\n <div class=\"size-3 bg-green-500 rounded-full ring-2 ring-white\" />\n </div>\n </div>\n </AgentWrap>\n</template>\n\n<style scoped>\n.widget-container {\n transition: width 0.4s cubic-bezier(0.32, 0.72, 0, 1),\n height 0.4s cubic-bezier(0.32, 0.72, 0, 1),\n border-radius 0.4s cubic-bezier(0.32, 0.72, 0, 1),\n box-shadow 0.4s cubic-bezier(0.32, 0.72, 0, 1);\n}\n</style>\n"],"names":["logger","createLogger","_PLWidget","config","__publicField","autoContext","manualContext","mergedContext","instanceKey","existing","isDev","PageLinesSDK","parts","url","title","metaDesc","ogTitle","referrer","path","styleElement","sdkCSS","mountPoint","mode","AgentWidgetInline","createApp","buttonEl","handleClick","__name","AgentWidgetPopup","AgentWidgetPopup$1","AgentWidgetModal","updates","PLWidget","usePLWidget","containerRef","ref","widget","loading","error","initialized","currentHandle","computed","unref","currentAgent","currentContext","currentFirstMessage","hasRequiredData","watch","resolve","widgetConfig","err","onUnmounted","useWidgetState","props","currentButtonText","currentButtonIcon","update","__props","isOpen","hasOpened","internalController","shallowRef","positionClasses","transformOrigin","initController","agent","sdk","Controller","open","ctrl","toggle","close","__expose","_createBlock","AgentWrap","_unref","resolvedSdk","_createElementBlock","_normalizeClass","_createElementVNode","_normalizeStyle","_cache","$event","_hoisted_1","getAgentAvatarUrl","_hoisted_3","_hoisted_4","_hoisted_6","_hoisted_7","_toDisplayString","_hoisted_8","ElAgentChat"],"mappings":"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"}
|
package/dist/widget.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pagelines/sdk",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.310",
|
|
4
4
|
"description": "PageLines SDK for agent management, auth, and billing",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/sdk.js",
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
},
|
|
57
57
|
"dependencies": {
|
|
58
58
|
"@nanostores/vue": "^1.0.1",
|
|
59
|
-
"hono": "^4.12.
|
|
59
|
+
"hono": "^4.12.7",
|
|
60
60
|
"nanoid": "^5.1.6",
|
|
61
61
|
"nanostores": "^1.1.1",
|
|
62
62
|
"zod": "^4.3.6",
|