@guidekit/vanilla 0.1.0-beta.1 → 0.1.0-beta.3
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/LICENSE +21 -0
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.global.js +1440 -805
- package/dist/index.global.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +34 -11
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 GuideKit
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/dist/index.cjs
CHANGED
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["// ---------------------------------------------------------------------------\n// @guidekit/vanilla — Non-React IIFE bundle for script-tag integration\n// ---------------------------------------------------------------------------\n//\n// Provides an imperative API for using GuideKit without React. Users include\n// the script via a <script> tag and interact with the global `GuideKit` object.\n//\n// Usage:\n// <script src=\"https://cdn.jsdelivr.net/npm/@guidekit/vanilla/dist/index.global.js\"></script>\n// <script>\n// GuideKit.init({\n// llm: { provider: 'gemini', apiKey: '...' },\n// agent: { name: 'Guide', greeting: 'Hello!' },\n// });\n// </script>\n// ---------------------------------------------------------------------------\n\nimport { GuideKitCore } from '@guidekit/core';\nimport type {\n GuideKitCoreOptions,\n AgentState,\n GuideKitEvent,\n GuideKitErrorType,\n PageModel,\n HealthCheckResult,\n I18nStrings,\n} from '@guidekit/core';\n\n// ---------------------------------------------------------------------------\n// Widget DOM (lightweight, no React — plain DOM manipulation)\n// ---------------------------------------------------------------------------\n\nconst WIDGET_CSS = /* css */ `\n :host {\n --gk-primary: #6366f1;\n --gk-primary-hover: #4f46e5;\n --gk-bg: #ffffff;\n --gk-bg-secondary: #f8fafc;\n --gk-text: #1e293b;\n --gk-text-secondary: #64748b;\n --gk-border: #e2e8f0;\n --gk-shadow: 0 20px 60px rgba(0, 0, 0, 0.15);\n --gk-radius: 16px;\n --gk-fab-size: 56px;\n --gk-panel-width: 380px;\n --gk-panel-height: 520px;\n --gk-font: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n all: initial;\n font-family: var(--gk-font);\n position: fixed;\n z-index: 2147483647;\n bottom: 24px;\n right: 24px;\n }\n @media (prefers-reduced-motion: reduce) {\n *, *::before, *::after {\n animation-duration: 0.01ms !important;\n transition-duration: 0.01ms !important;\n }\n }\n .gk-fab {\n width: var(--gk-fab-size);\n height: var(--gk-fab-size);\n border-radius: 50%;\n border: none;\n background: var(--gk-primary);\n color: #fff;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n box-shadow: 0 4px 16px rgba(99, 102, 241, 0.35);\n transition: transform 0.2s ease, box-shadow 0.2s ease;\n outline: none;\n }\n .gk-fab:hover {\n background: var(--gk-primary-hover);\n transform: scale(1.05);\n }\n .gk-fab:focus-visible {\n outline: 2px solid var(--gk-primary);\n outline-offset: 3px;\n }\n .gk-fab svg { width: 24px; height: 24px; fill: currentColor; }\n .gk-panel {\n position: absolute;\n bottom: calc(var(--gk-fab-size) + 16px);\n right: 0;\n width: var(--gk-panel-width);\n height: var(--gk-panel-height);\n background: var(--gk-bg);\n border-radius: var(--gk-radius);\n box-shadow: var(--gk-shadow);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n opacity: 0;\n transform: translateY(12px) scale(0.95);\n pointer-events: none;\n transition: opacity 0.2s ease, transform 0.2s ease;\n }\n .gk-panel.gk-open {\n opacity: 1;\n transform: translateY(0) scale(1);\n pointer-events: auto;\n }\n .gk-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid var(--gk-border);\n flex-shrink: 0;\n }\n .gk-header-title {\n font-size: 15px;\n font-weight: 600;\n color: var(--gk-text);\n margin: 0;\n }\n .gk-close-btn {\n width: 28px; height: 28px; border-radius: 8px;\n border: none; background: transparent; color: var(--gk-text-secondary);\n cursor: pointer; display: flex; align-items: center; justify-content: center;\n outline: none;\n }\n .gk-close-btn:hover { background: var(--gk-bg-secondary); color: var(--gk-text); }\n .gk-close-btn:focus-visible { outline: 2px solid var(--gk-primary); outline-offset: -2px; }\n .gk-close-btn svg { width: 16px; height: 16px; fill: currentColor; }\n .gk-transcript {\n flex: 1; overflow-y: auto; padding: 16px 20px;\n display: flex; flex-direction: column; gap: 12px; scroll-behavior: smooth;\n }\n .gk-empty {\n flex: 1; display: flex; flex-direction: column; align-items: center;\n justify-content: center; color: var(--gk-text-secondary); text-align: center;\n padding: 32px 16px; font-size: 13px;\n }\n .gk-msg {\n max-width: 85%; padding: 10px 14px; border-radius: 12px;\n font-size: 14px; line-height: 1.5; word-wrap: break-word; white-space: pre-wrap;\n }\n .gk-msg-user {\n align-self: flex-end; background: var(--gk-primary);\n color: #fff; border-bottom-right-radius: 4px;\n }\n .gk-msg-assistant {\n align-self: flex-start; background: var(--gk-bg-secondary);\n color: var(--gk-text); border-bottom-left-radius: 4px;\n }\n .gk-dots {\n align-self: flex-start; display: flex; gap: 4px; padding: 12px 16px;\n }\n .gk-dot {\n width: 6px; height: 6px; border-radius: 50%; background: var(--gk-text-secondary);\n animation: gk-bounce 1.4s ease-in-out infinite;\n }\n .gk-dot:nth-child(2) { animation-delay: 0.16s; }\n .gk-dot:nth-child(3) { animation-delay: 0.32s; }\n @keyframes gk-bounce {\n 0%, 80%, 100% { transform: translateY(0); }\n 40% { transform: translateY(-6px); }\n }\n .gk-input-area {\n display: flex; align-items: flex-end; gap: 8px;\n padding: 12px 16px; border-top: 1px solid var(--gk-border); flex-shrink: 0;\n }\n .gk-input {\n flex: 1; min-height: 40px; max-height: 120px; padding: 8px 14px;\n border: 1px solid var(--gk-border); border-radius: 12px;\n background: var(--gk-bg); color: var(--gk-text);\n font-family: var(--gk-font); font-size: 14px; line-height: 1.5;\n resize: none; outline: none;\n }\n .gk-input:focus { border-color: var(--gk-primary); box-shadow: 0 0 0 3px rgba(99,102,241,0.15); }\n .gk-send-btn {\n width: 40px; height: 40px; border-radius: 12px; border: none;\n background: var(--gk-primary); color: #fff; cursor: pointer;\n display: flex; align-items: center; justify-content: center; flex-shrink: 0;\n outline: none;\n }\n .gk-send-btn:hover:not(:disabled) { background: var(--gk-primary-hover); }\n .gk-send-btn:disabled { opacity: 0.5; cursor: not-allowed; }\n .gk-send-btn:focus-visible { outline: 2px solid var(--gk-primary); outline-offset: 3px; }\n .gk-send-btn svg { width: 18px; height: 18px; fill: currentColor; }\n @media (hover: none) and (pointer: coarse), (max-width: 768px) {\n :host { bottom: 16px !important; right: 16px !important; }\n .gk-panel {\n position: fixed; bottom: 0; left: 0; right: 0;\n width: 100%; height: 70vh; max-height: 70vh;\n border-radius: var(--gk-radius) var(--gk-radius) 0 0;\n transform: translateY(100%);\n padding-bottom: env(safe-area-inset-bottom, 0px);\n }\n .gk-panel.gk-open { transform: translateY(0); }\n .gk-send-btn, .gk-close-btn { min-width: 44px; min-height: 44px; }\n .gk-input-area { padding-bottom: calc(12px + env(safe-area-inset-bottom, 0px)); }\n }\n @media (forced-colors: active) {\n .gk-fab, .gk-send-btn { border: 2px solid ButtonText; }\n .gk-panel { border: 1px solid ButtonText; }\n }\n`;\n\nconst SVG_CHAT = '<svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M20 2H4c-1.1 0-2 .9-2 2v18l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm0 14H5.17L4 17.17V4h16v12z\"/><path d=\"M7 9h10v2H7zm0-3h10v2H7z\"/></svg>';\nconst SVG_CLOSE = '<svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"/></svg>';\nconst SVG_SEND = '<svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M2.01 21L23 12 2.01 3 2 10l15 2-15 2z\"/></svg>';\n\n// ---------------------------------------------------------------------------\n// VanillaWidget — renders and manages the chat widget without React\n// ---------------------------------------------------------------------------\n\nclass VanillaWidget {\n private host: HTMLDivElement;\n private shadow: ShadowRoot;\n private panel!: HTMLDivElement;\n private transcript!: HTMLDivElement;\n private emptyState!: HTMLDivElement;\n private dotsEl!: HTMLDivElement;\n private input!: HTMLTextAreaElement;\n private sendBtn!: HTMLButtonElement;\n private fab!: HTMLButtonElement;\n private isOpen = false;\n private isSending = false;\n private core: GuideKitCore;\n\n constructor(core: GuideKitCore) {\n this.core = core;\n\n // Create Shadow DOM host\n this.host = document.createElement('div');\n this.host.id = 'guidekit-widget';\n this.host.style.cssText =\n 'position:fixed;z-index:2147483647;bottom:24px;right:24px;margin:0;padding:0;border:none;background:none;';\n document.body.appendChild(this.host);\n\n this.shadow = this.host.attachShadow({ mode: 'open' });\n\n // Inject styles\n const style = document.createElement('style');\n style.textContent = WIDGET_CSS;\n this.shadow.appendChild(style);\n\n this.buildDOM();\n this.bindEvents();\n }\n\n private buildDOM(): void {\n // Panel\n this.panel = document.createElement('div');\n this.panel.className = 'gk-panel';\n this.panel.setAttribute('role', 'dialog');\n this.panel.setAttribute('aria-label', 'GuideKit Assistant');\n this.panel.setAttribute('aria-hidden', 'true');\n\n // Header\n const header = document.createElement('div');\n header.className = 'gk-header';\n\n const title = document.createElement('div');\n title.className = 'gk-header-title';\n title.textContent = this.t('widgetTitle');\n header.appendChild(title);\n\n const closeBtn = document.createElement('button');\n closeBtn.className = 'gk-close-btn';\n closeBtn.setAttribute('aria-label', this.t('closePanel'));\n closeBtn.innerHTML = SVG_CLOSE;\n closeBtn.addEventListener('click', () => this.togglePanel(false));\n header.appendChild(closeBtn);\n\n this.panel.appendChild(header);\n\n // Transcript\n this.transcript = document.createElement('div');\n this.transcript.className = 'gk-transcript';\n this.transcript.setAttribute('role', 'log');\n this.transcript.setAttribute('aria-live', 'polite');\n\n this.emptyState = document.createElement('div');\n this.emptyState.className = 'gk-empty';\n this.emptyState.textContent = this.t('emptyStateMessage');\n this.transcript.appendChild(this.emptyState);\n\n // Dots indicator (hidden by default)\n this.dotsEl = document.createElement('div');\n this.dotsEl.className = 'gk-dots';\n this.dotsEl.setAttribute('role', 'status');\n this.dotsEl.setAttribute('aria-label', 'Processing');\n this.dotsEl.style.display = 'none';\n for (let i = 0; i < 3; i++) {\n const dot = document.createElement('div');\n dot.className = 'gk-dot';\n this.dotsEl.appendChild(dot);\n }\n this.transcript.appendChild(this.dotsEl);\n\n this.panel.appendChild(this.transcript);\n\n // Input area\n const inputArea = document.createElement('div');\n inputArea.className = 'gk-input-area';\n\n this.input = document.createElement('textarea');\n this.input.className = 'gk-input';\n this.input.placeholder = this.t('inputPlaceholder');\n this.input.setAttribute('aria-label', this.t('sendMessage'));\n this.input.rows = 1;\n inputArea.appendChild(this.input);\n\n this.sendBtn = document.createElement('button');\n this.sendBtn.className = 'gk-send-btn';\n this.sendBtn.setAttribute('aria-label', this.t('sendMessage'));\n this.sendBtn.innerHTML = SVG_SEND;\n inputArea.appendChild(this.sendBtn);\n\n this.panel.appendChild(inputArea);\n this.shadow.appendChild(this.panel);\n\n // FAB\n this.fab = document.createElement('button');\n this.fab.className = 'gk-fab';\n this.fab.setAttribute('aria-label', this.t('openAssistant'));\n this.fab.setAttribute('aria-expanded', 'false');\n this.fab.setAttribute('aria-haspopup', 'dialog');\n this.fab.innerHTML = SVG_CHAT;\n this.shadow.appendChild(this.fab);\n }\n\n private bindEvents(): void {\n this.fab.addEventListener('click', () => this.togglePanel(!this.isOpen));\n\n this.sendBtn.addEventListener('click', () => this.handleSend());\n\n this.input.addEventListener('keydown', (e) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n this.handleSend();\n }\n if (e.key === 'Escape') {\n this.togglePanel(false);\n this.fab.focus();\n }\n });\n }\n\n private togglePanel(open: boolean): void {\n this.isOpen = open;\n if (open) {\n this.panel.classList.add('gk-open');\n this.panel.setAttribute('aria-hidden', 'false');\n this.fab.setAttribute('aria-expanded', 'true');\n this.fab.innerHTML = SVG_CLOSE;\n this.fab.setAttribute('aria-label', this.t('closeAssistant'));\n setTimeout(() => this.input.focus(), 100);\n } else {\n this.panel.classList.remove('gk-open');\n this.panel.setAttribute('aria-hidden', 'true');\n this.fab.setAttribute('aria-expanded', 'false');\n this.fab.innerHTML = SVG_CHAT;\n this.fab.setAttribute('aria-label', this.t('openAssistant'));\n }\n }\n\n private async handleSend(): Promise<void> {\n const text = this.input.value.trim();\n if (!text || this.isSending) return;\n\n this.isSending = true;\n\n // Hide empty state\n this.emptyState.style.display = 'none';\n\n // Add user message\n this.addMessage('user', text);\n this.input.value = '';\n\n // Show processing dots\n this.dotsEl.style.display = 'flex';\n this.scrollToBottom();\n\n try {\n const response = await this.core.sendText(text);\n this.dotsEl.style.display = 'none';\n this.addMessage('assistant', response);\n } catch (err) {\n this.dotsEl.style.display = 'none';\n const msg = err instanceof Error ? err.message : 'Something went wrong.';\n this.addMessage('assistant', `Error: ${msg}`);\n } finally {\n this.isSending = false;\n }\n }\n\n private addMessage(role: 'user' | 'assistant', content: string): void {\n const el = document.createElement('div');\n el.className = `gk-msg gk-msg-${role}`;\n el.textContent = content;\n // Insert before the dots element\n this.transcript.insertBefore(el, this.dotsEl);\n this.scrollToBottom();\n }\n\n private scrollToBottom(): void {\n this.transcript.scrollTop = this.transcript.scrollHeight;\n }\n\n private t(key: string): string {\n try {\n return this.core.i18n.t(key as keyof I18nStrings) ?? key;\n } catch {\n return key;\n }\n }\n\n destroy(): void {\n this.host.remove();\n }\n}\n\n// ---------------------------------------------------------------------------\n// GuideKitVanilla — imperative wrapper around GuideKitCore\n// ---------------------------------------------------------------------------\n\nexport interface GuideKitVanillaOptions {\n tokenEndpoint?: string;\n stt?: GuideKitCoreOptions['stt'];\n tts?: GuideKitCoreOptions['tts'];\n llm?: GuideKitCoreOptions['llm'];\n agent?: GuideKitCoreOptions['agent'];\n contentMap?: GuideKitCoreOptions['contentMap'];\n options?: GuideKitCoreOptions['options'];\n instanceId?: string;\n rootElement?: HTMLElement;\n /** Disable the built-in widget UI (for headless use). */\n headless?: boolean;\n onError?: (error: GuideKitErrorType) => void;\n onEvent?: (event: GuideKitEvent) => void;\n onReady?: () => void;\n}\n\n/** Singleton state */\nlet _core: GuideKitCore | null = null;\nlet _widget: VanillaWidget | null = null;\nlet _initialized = false;\n\n/**\n * Initialize GuideKit. Must be called before any other methods.\n * Idempotent — calling multiple times is safe (returns existing instance).\n */\nexport async function init(options: GuideKitVanillaOptions): Promise<void> {\n if (_initialized && _core) return;\n\n _core = new GuideKitCore({\n tokenEndpoint: options.tokenEndpoint,\n stt: options.stt,\n tts: options.tts,\n llm: options.llm,\n agent: options.agent,\n contentMap: options.contentMap,\n options: options.options,\n instanceId: options.instanceId,\n rootElement: options.rootElement,\n onError: options.onError,\n onEvent: options.onEvent,\n onReady: options.onReady,\n });\n\n await _core.init();\n\n // Create widget unless headless\n if (!options.headless) {\n _widget = new VanillaWidget(_core);\n }\n\n _initialized = true;\n}\n\n/**\n * Send a text message to the assistant. Returns the response.\n */\nexport async function sendText(message: string): Promise<string> {\n assertInitialized();\n return _core!.sendText(message);\n}\n\n/**\n * Highlight an element on the page.\n */\nexport function highlight(params: {\n sectionId?: string;\n selector?: string;\n tooltip?: string;\n position?: 'top' | 'bottom' | 'left' | 'right' | 'auto';\n}): boolean {\n assertInitialized();\n return _core!.highlight(params);\n}\n\n/** Dismiss the current spotlight highlight. */\nexport function dismissHighlight(): void {\n assertInitialized();\n _core!.dismissHighlight();\n}\n\n/** Smooth scroll to a section by ID. */\nexport function scrollToSection(sectionId: string, offset?: number): void {\n assertInitialized();\n _core!.scrollToSection(sectionId, offset);\n}\n\n/** Start a guided tour. */\nexport function startTour(sectionIds: string[], mode?: 'auto' | 'manual'): void {\n assertInitialized();\n _core!.startTour(sectionIds, mode);\n}\n\n/** Stop the current tour. */\nexport function stopTour(): void {\n assertInitialized();\n _core!.stopTour();\n}\n\n/** Navigate to a URL (same-origin only). */\nexport async function navigate(href: string): Promise<boolean> {\n assertInitialized();\n return _core!.navigate(href);\n}\n\n/** Set developer page context for the LLM. */\nexport function setPageContext(context: Record<string, unknown>): void {\n assertInitialized();\n _core!.setPageContext(context);\n}\n\n/** Register a custom action the LLM can invoke. */\nexport function registerAction(\n actionId: string,\n action: {\n description: string;\n parameters: Record<string, unknown>;\n handler: (params: Record<string, unknown>) => Promise<unknown>;\n },\n): void {\n assertInitialized();\n _core!.registerAction(actionId, action);\n}\n\n/** Start voice input. */\nexport async function startListening(): Promise<void> {\n assertInitialized();\n await _core!.startListening();\n}\n\n/** Stop voice input. */\nexport function stopListening(): void {\n assertInitialized();\n _core!.stopListening();\n}\n\n/** Get current agent state. */\nexport function getAgentState(): AgentState {\n assertInitialized();\n return _core!.agentState;\n}\n\n/** Get current page model. */\nexport function getPageModel(): PageModel | null {\n assertInitialized();\n return _core!.pageModel;\n}\n\n/** Whether the SDK is ready. */\nexport function isReady(): boolean {\n return _core?.isReady ?? false;\n}\n\n/** Get/set quiet mode. */\nexport function getQuietMode(): boolean {\n assertInitialized();\n return _core!.quietMode;\n}\n\nexport function setQuietMode(value: boolean): void {\n assertInitialized();\n _core!.quietMode = value;\n}\n\n/** Check health of all connected services. */\nexport async function checkHealth(): Promise<HealthCheckResult> {\n assertInitialized();\n return _core!.checkHealth();\n}\n\n/** Destroy the instance and clean up. */\nexport async function destroy(): Promise<void> {\n if (_widget) {\n _widget.destroy();\n _widget = null;\n }\n if (_core) {\n await _core.destroy();\n _core = null;\n }\n _initialized = false;\n}\n\n/** Get the underlying GuideKitCore instance (escape hatch). */\nexport function getCore(): GuideKitCore | null {\n return _core;\n}\n\n// ---------------------------------------------------------------------------\n// Internal\n// ---------------------------------------------------------------------------\n\nfunction assertInitialized(): void {\n if (!_core || !_initialized) {\n throw new Error(\n 'GuideKit not initialized. Call GuideKit.init({...}) first.',\n );\n }\n}\n\n// ---------------------------------------------------------------------------\n// Version\n// ---------------------------------------------------------------------------\n\nexport const VERSION = '0.1.0-beta.1';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiBA,kBAA6B;AAe7B,IAAM;AAAA;AAAA,EAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA4K7B,IAAM,WAAW;AACjB,IAAM,YAAY;AAClB,IAAM,WAAW;AAMjB,IAAM,gBAAN,MAAoB;AAAA,EACV;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT,YAAY;AAAA,EACZ;AAAA,EAER,YAAY,MAAoB;AAC9B,SAAK,OAAO;AAGZ,SAAK,OAAO,SAAS,cAAc,KAAK;AACxC,SAAK,KAAK,KAAK;AACf,SAAK,KAAK,MAAM,UACd;AACF,aAAS,KAAK,YAAY,KAAK,IAAI;AAEnC,SAAK,SAAS,KAAK,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAGrD,UAAM,QAAQ,SAAS,cAAc,OAAO;AAC5C,UAAM,cAAc;AACpB,SAAK,OAAO,YAAY,KAAK;AAE7B,SAAK,SAAS;AACd,SAAK,WAAW;AAAA,EAClB;AAAA,EAEQ,WAAiB;AAEvB,SAAK,QAAQ,SAAS,cAAc,KAAK;AACzC,SAAK,MAAM,YAAY;AACvB,SAAK,MAAM,aAAa,QAAQ,QAAQ;AACxC,SAAK,MAAM,aAAa,cAAc,oBAAoB;AAC1D,SAAK,MAAM,aAAa,eAAe,MAAM;AAG7C,UAAM,SAAS,SAAS,cAAc,KAAK;AAC3C,WAAO,YAAY;AAEnB,UAAM,QAAQ,SAAS,cAAc,KAAK;AAC1C,UAAM,YAAY;AAClB,UAAM,cAAc,KAAK,EAAE,aAAa;AACxC,WAAO,YAAY,KAAK;AAExB,UAAM,WAAW,SAAS,cAAc,QAAQ;AAChD,aAAS,YAAY;AACrB,aAAS,aAAa,cAAc,KAAK,EAAE,YAAY,CAAC;AACxD,aAAS,YAAY;AACrB,aAAS,iBAAiB,SAAS,MAAM,KAAK,YAAY,KAAK,CAAC;AAChE,WAAO,YAAY,QAAQ;AAE3B,SAAK,MAAM,YAAY,MAAM;AAG7B,SAAK,aAAa,SAAS,cAAc,KAAK;AAC9C,SAAK,WAAW,YAAY;AAC5B,SAAK,WAAW,aAAa,QAAQ,KAAK;AAC1C,SAAK,WAAW,aAAa,aAAa,QAAQ;AAElD,SAAK,aAAa,SAAS,cAAc,KAAK;AAC9C,SAAK,WAAW,YAAY;AAC5B,SAAK,WAAW,cAAc,KAAK,EAAE,mBAAmB;AACxD,SAAK,WAAW,YAAY,KAAK,UAAU;AAG3C,SAAK,SAAS,SAAS,cAAc,KAAK;AAC1C,SAAK,OAAO,YAAY;AACxB,SAAK,OAAO,aAAa,QAAQ,QAAQ;AACzC,SAAK,OAAO,aAAa,cAAc,YAAY;AACnD,SAAK,OAAO,MAAM,UAAU;AAC5B,aAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,YAAM,MAAM,SAAS,cAAc,KAAK;AACxC,UAAI,YAAY;AAChB,WAAK,OAAO,YAAY,GAAG;AAAA,IAC7B;AACA,SAAK,WAAW,YAAY,KAAK,MAAM;AAEvC,SAAK,MAAM,YAAY,KAAK,UAAU;AAGtC,UAAM,YAAY,SAAS,cAAc,KAAK;AAC9C,cAAU,YAAY;AAEtB,SAAK,QAAQ,SAAS,cAAc,UAAU;AAC9C,SAAK,MAAM,YAAY;AACvB,SAAK,MAAM,cAAc,KAAK,EAAE,kBAAkB;AAClD,SAAK,MAAM,aAAa,cAAc,KAAK,EAAE,aAAa,CAAC;AAC3D,SAAK,MAAM,OAAO;AAClB,cAAU,YAAY,KAAK,KAAK;AAEhC,SAAK,UAAU,SAAS,cAAc,QAAQ;AAC9C,SAAK,QAAQ,YAAY;AACzB,SAAK,QAAQ,aAAa,cAAc,KAAK,EAAE,aAAa,CAAC;AAC7D,SAAK,QAAQ,YAAY;AACzB,cAAU,YAAY,KAAK,OAAO;AAElC,SAAK,MAAM,YAAY,SAAS;AAChC,SAAK,OAAO,YAAY,KAAK,KAAK;AAGlC,SAAK,MAAM,SAAS,cAAc,QAAQ;AAC1C,SAAK,IAAI,YAAY;AACrB,SAAK,IAAI,aAAa,cAAc,KAAK,EAAE,eAAe,CAAC;AAC3D,SAAK,IAAI,aAAa,iBAAiB,OAAO;AAC9C,SAAK,IAAI,aAAa,iBAAiB,QAAQ;AAC/C,SAAK,IAAI,YAAY;AACrB,SAAK,OAAO,YAAY,KAAK,GAAG;AAAA,EAClC;AAAA,EAEQ,aAAmB;AACzB,SAAK,IAAI,iBAAiB,SAAS,MAAM,KAAK,YAAY,CAAC,KAAK,MAAM,CAAC;AAEvE,SAAK,QAAQ,iBAAiB,SAAS,MAAM,KAAK,WAAW,CAAC;AAE9D,SAAK,MAAM,iBAAiB,WAAW,CAAC,MAAM;AAC5C,UAAI,EAAE,QAAQ,WAAW,CAAC,EAAE,UAAU;AACpC,UAAE,eAAe;AACjB,aAAK,WAAW;AAAA,MAClB;AACA,UAAI,EAAE,QAAQ,UAAU;AACtB,aAAK,YAAY,KAAK;AACtB,aAAK,IAAI,MAAM;AAAA,MACjB;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEQ,YAAY,MAAqB;AACvC,SAAK,SAAS;AACd,QAAI,MAAM;AACR,WAAK,MAAM,UAAU,IAAI,SAAS;AAClC,WAAK,MAAM,aAAa,eAAe,OAAO;AAC9C,WAAK,IAAI,aAAa,iBAAiB,MAAM;AAC7C,WAAK,IAAI,YAAY;AACrB,WAAK,IAAI,aAAa,cAAc,KAAK,EAAE,gBAAgB,CAAC;AAC5D,iBAAW,MAAM,KAAK,MAAM,MAAM,GAAG,GAAG;AAAA,IAC1C,OAAO;AACL,WAAK,MAAM,UAAU,OAAO,SAAS;AACrC,WAAK,MAAM,aAAa,eAAe,MAAM;AAC7C,WAAK,IAAI,aAAa,iBAAiB,OAAO;AAC9C,WAAK,IAAI,YAAY;AACrB,WAAK,IAAI,aAAa,cAAc,KAAK,EAAE,eAAe,CAAC;AAAA,IAC7D;AAAA,EACF;AAAA,EAEA,MAAc,aAA4B;AACxC,UAAM,OAAO,KAAK,MAAM,MAAM,KAAK;AACnC,QAAI,CAAC,QAAQ,KAAK,UAAW;AAE7B,SAAK,YAAY;AAGjB,SAAK,WAAW,MAAM,UAAU;AAGhC,SAAK,WAAW,QAAQ,IAAI;AAC5B,SAAK,MAAM,QAAQ;AAGnB,SAAK,OAAO,MAAM,UAAU;AAC5B,SAAK,eAAe;AAEpB,QAAI;AACF,YAAM,WAAW,MAAM,KAAK,KAAK,SAAS,IAAI;AAC9C,WAAK,OAAO,MAAM,UAAU;AAC5B,WAAK,WAAW,aAAa,QAAQ;AAAA,IACvC,SAAS,KAAK;AACZ,WAAK,OAAO,MAAM,UAAU;AAC5B,YAAM,MAAM,eAAe,QAAQ,IAAI,UAAU;AACjD,WAAK,WAAW,aAAa,UAAU,GAAG,EAAE;AAAA,IAC9C,UAAE;AACA,WAAK,YAAY;AAAA,IACnB;AAAA,EACF;AAAA,EAEQ,WAAW,MAA4B,SAAuB;AACpE,UAAM,KAAK,SAAS,cAAc,KAAK;AACvC,OAAG,YAAY,iBAAiB,IAAI;AACpC,OAAG,cAAc;AAEjB,SAAK,WAAW,aAAa,IAAI,KAAK,MAAM;AAC5C,SAAK,eAAe;AAAA,EACtB;AAAA,EAEQ,iBAAuB;AAC7B,SAAK,WAAW,YAAY,KAAK,WAAW;AAAA,EAC9C;AAAA,EAEQ,EAAE,KAAqB;AAC7B,QAAI;AACF,aAAO,KAAK,KAAK,KAAK,EAAE,GAAwB,KAAK;AAAA,IACvD,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,UAAgB;AACd,SAAK,KAAK,OAAO;AAAA,EACnB;AACF;AAwBA,IAAI,QAA6B;AACjC,IAAI,UAAgC;AACpC,IAAI,eAAe;AAMnB,eAAsB,KAAK,SAAgD;AACzE,MAAI,gBAAgB,MAAO;AAE3B,UAAQ,IAAI,yBAAa;AAAA,IACvB,eAAe,QAAQ;AAAA,IACvB,KAAK,QAAQ;AAAA,IACb,KAAK,QAAQ;AAAA,IACb,KAAK,QAAQ;AAAA,IACb,OAAO,QAAQ;AAAA,IACf,YAAY,QAAQ;AAAA,IACpB,SAAS,QAAQ;AAAA,IACjB,YAAY,QAAQ;AAAA,IACpB,aAAa,QAAQ;AAAA,IACrB,SAAS,QAAQ;AAAA,IACjB,SAAS,QAAQ;AAAA,IACjB,SAAS,QAAQ;AAAA,EACnB,CAAC;AAED,QAAM,MAAM,KAAK;AAGjB,MAAI,CAAC,QAAQ,UAAU;AACrB,cAAU,IAAI,cAAc,KAAK;AAAA,EACnC;AAEA,iBAAe;AACjB;AAKA,eAAsB,SAAS,SAAkC;AAC/D,oBAAkB;AAClB,SAAO,MAAO,SAAS,OAAO;AAChC;AAKO,SAAS,UAAU,QAKd;AACV,oBAAkB;AAClB,SAAO,MAAO,UAAU,MAAM;AAChC;AAGO,SAAS,mBAAyB;AACvC,oBAAkB;AAClB,QAAO,iBAAiB;AAC1B;AAGO,SAAS,gBAAgB,WAAmB,QAAuB;AACxE,oBAAkB;AAClB,QAAO,gBAAgB,WAAW,MAAM;AAC1C;AAGO,SAAS,UAAU,YAAsB,MAAgC;AAC9E,oBAAkB;AAClB,QAAO,UAAU,YAAY,IAAI;AACnC;AAGO,SAAS,WAAiB;AAC/B,oBAAkB;AAClB,QAAO,SAAS;AAClB;AAGA,eAAsB,SAAS,MAAgC;AAC7D,oBAAkB;AAClB,SAAO,MAAO,SAAS,IAAI;AAC7B;AAGO,SAAS,eAAe,SAAwC;AACrE,oBAAkB;AAClB,QAAO,eAAe,OAAO;AAC/B;AAGO,SAAS,eACd,UACA,QAKM;AACN,oBAAkB;AAClB,QAAO,eAAe,UAAU,MAAM;AACxC;AAGA,eAAsB,iBAAgC;AACpD,oBAAkB;AAClB,QAAM,MAAO,eAAe;AAC9B;AAGO,SAAS,gBAAsB;AACpC,oBAAkB;AAClB,QAAO,cAAc;AACvB;AAGO,SAAS,gBAA4B;AAC1C,oBAAkB;AAClB,SAAO,MAAO;AAChB;AAGO,SAAS,eAAiC;AAC/C,oBAAkB;AAClB,SAAO,MAAO;AAChB;AAGO,SAAS,UAAmB;AACjC,SAAO,OAAO,WAAW;AAC3B;AAGO,SAAS,eAAwB;AACtC,oBAAkB;AAClB,SAAO,MAAO;AAChB;AAEO,SAAS,aAAa,OAAsB;AACjD,oBAAkB;AAClB,QAAO,YAAY;AACrB;AAGA,eAAsB,cAA0C;AAC9D,oBAAkB;AAClB,SAAO,MAAO,YAAY;AAC5B;AAGA,eAAsB,UAAyB;AAC7C,MAAI,SAAS;AACX,YAAQ,QAAQ;AAChB,cAAU;AAAA,EACZ;AACA,MAAI,OAAO;AACT,UAAM,MAAM,QAAQ;AACpB,YAAQ;AAAA,EACV;AACA,iBAAe;AACjB;AAGO,SAAS,UAA+B;AAC7C,SAAO;AACT;AAMA,SAAS,oBAA0B;AACjC,MAAI,CAAC,SAAS,CAAC,cAAc;AAC3B,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACF;AAMO,IAAM,UAAU;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["// ---------------------------------------------------------------------------\n// @guidekit/vanilla — Non-React IIFE bundle for script-tag integration\n// ---------------------------------------------------------------------------\n//\n// Provides an imperative API for using GuideKit without React. Users include\n// the script via a <script> tag and interact with the global `GuideKit` object.\n//\n// Usage:\n// <script src=\"https://cdn.jsdelivr.net/npm/@guidekit/vanilla/dist/index.global.js\"></script>\n// <script>\n// GuideKit.init({\n// llm: { provider: 'gemini', apiKey: '...' },\n// agent: { name: 'Guide', greeting: 'Hello!' },\n// });\n// </script>\n// ---------------------------------------------------------------------------\n\nimport { GuideKitCore } from '@guidekit/core';\nimport type {\n GuideKitCoreOptions,\n AgentState,\n GuideKitEvent,\n GuideKitErrorType,\n PageModel,\n HealthCheckResult,\n I18nStrings,\n} from '@guidekit/core';\n\n// ---------------------------------------------------------------------------\n// Widget DOM (lightweight, no React — plain DOM manipulation)\n// ---------------------------------------------------------------------------\n\nconst WIDGET_CSS = /* css */ `\n :host {\n --gk-primary: #6366f1;\n --gk-primary-hover: #4f46e5;\n --gk-bg: #ffffff;\n --gk-bg-secondary: #f8fafc;\n --gk-text: #1e293b;\n --gk-text-secondary: #64748b;\n --gk-border: #e2e8f0;\n --gk-shadow: 0 20px 60px rgba(0, 0, 0, 0.15);\n --gk-radius: 16px;\n --gk-fab-size: 56px;\n --gk-panel-width: 380px;\n --gk-panel-height: 520px;\n --gk-font: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n all: initial;\n font-family: var(--gk-font);\n position: fixed;\n z-index: 2147483647;\n bottom: 24px;\n right: 24px;\n }\n @media (prefers-reduced-motion: reduce) {\n *, *::before, *::after {\n animation-duration: 0.01ms !important;\n transition-duration: 0.01ms !important;\n }\n }\n .gk-fab {\n width: var(--gk-fab-size);\n height: var(--gk-fab-size);\n border-radius: 50%;\n border: none;\n background: var(--gk-primary);\n color: #fff;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n box-shadow: 0 4px 16px rgba(99, 102, 241, 0.35);\n transition: transform 0.2s ease, box-shadow 0.2s ease;\n outline: none;\n }\n .gk-fab:hover {\n background: var(--gk-primary-hover);\n transform: scale(1.05);\n }\n .gk-fab:focus-visible {\n outline: 2px solid var(--gk-primary);\n outline-offset: 3px;\n }\n .gk-fab svg { width: 24px; height: 24px; fill: currentColor; }\n .gk-panel {\n position: absolute;\n bottom: calc(var(--gk-fab-size) + 16px);\n right: 0;\n width: var(--gk-panel-width);\n height: var(--gk-panel-height);\n background: var(--gk-bg);\n border-radius: var(--gk-radius);\n box-shadow: var(--gk-shadow);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n opacity: 0;\n transform: translateY(12px) scale(0.95);\n pointer-events: none;\n transition: opacity 0.2s ease, transform 0.2s ease;\n }\n .gk-panel.gk-open {\n opacity: 1;\n transform: translateY(0) scale(1);\n pointer-events: auto;\n }\n .gk-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid var(--gk-border);\n flex-shrink: 0;\n }\n .gk-header-title {\n font-size: 15px;\n font-weight: 600;\n color: var(--gk-text);\n margin: 0;\n }\n .gk-close-btn {\n width: 28px; height: 28px; border-radius: 8px;\n border: none; background: transparent; color: var(--gk-text-secondary);\n cursor: pointer; display: flex; align-items: center; justify-content: center;\n outline: none;\n }\n .gk-close-btn:hover { background: var(--gk-bg-secondary); color: var(--gk-text); }\n .gk-close-btn:focus-visible { outline: 2px solid var(--gk-primary); outline-offset: -2px; }\n .gk-close-btn svg { width: 16px; height: 16px; fill: currentColor; }\n .gk-transcript {\n flex: 1; overflow-y: auto; padding: 16px 20px;\n display: flex; flex-direction: column; gap: 12px; scroll-behavior: smooth;\n }\n .gk-empty {\n flex: 1; display: flex; flex-direction: column; align-items: center;\n justify-content: center; color: var(--gk-text-secondary); text-align: center;\n padding: 32px 16px; font-size: 13px;\n }\n .gk-msg {\n max-width: 85%; padding: 10px 14px; border-radius: 12px;\n font-size: 14px; line-height: 1.5; word-wrap: break-word; white-space: pre-wrap;\n }\n .gk-msg-user {\n align-self: flex-end; background: var(--gk-primary);\n color: #fff; border-bottom-right-radius: 4px;\n }\n .gk-msg-assistant {\n align-self: flex-start; background: var(--gk-bg-secondary);\n color: var(--gk-text); border-bottom-left-radius: 4px;\n }\n .gk-dots {\n align-self: flex-start; display: flex; gap: 4px; padding: 12px 16px;\n }\n .gk-dot {\n width: 6px; height: 6px; border-radius: 50%; background: var(--gk-text-secondary);\n animation: gk-bounce 1.4s ease-in-out infinite;\n }\n .gk-dot:nth-child(2) { animation-delay: 0.16s; }\n .gk-dot:nth-child(3) { animation-delay: 0.32s; }\n @keyframes gk-bounce {\n 0%, 80%, 100% { transform: translateY(0); }\n 40% { transform: translateY(-6px); }\n }\n .gk-input-area {\n display: flex; align-items: flex-end; gap: 8px;\n padding: 12px 16px; border-top: 1px solid var(--gk-border); flex-shrink: 0;\n }\n .gk-input {\n flex: 1; min-height: 40px; max-height: 120px; padding: 8px 14px;\n border: 1px solid var(--gk-border); border-radius: 12px;\n background: var(--gk-bg); color: var(--gk-text);\n font-family: var(--gk-font); font-size: 14px; line-height: 1.5;\n resize: none; outline: none;\n }\n .gk-input:focus { border-color: var(--gk-primary); box-shadow: 0 0 0 3px rgba(99,102,241,0.15); }\n .gk-send-btn {\n width: 40px; height: 40px; border-radius: 12px; border: none;\n background: var(--gk-primary); color: #fff; cursor: pointer;\n display: flex; align-items: center; justify-content: center; flex-shrink: 0;\n outline: none;\n }\n .gk-send-btn:hover:not(:disabled) { background: var(--gk-primary-hover); }\n .gk-send-btn:disabled { opacity: 0.5; cursor: not-allowed; }\n .gk-send-btn:focus-visible { outline: 2px solid var(--gk-primary); outline-offset: 3px; }\n .gk-send-btn svg { width: 18px; height: 18px; fill: currentColor; }\n @media (hover: none) and (pointer: coarse), (max-width: 768px) {\n :host { bottom: 16px !important; right: 16px !important; }\n .gk-panel {\n position: fixed; bottom: 0; left: 0; right: 0;\n width: 100%; height: 70vh; max-height: 70vh;\n border-radius: var(--gk-radius) var(--gk-radius) 0 0;\n transform: translateY(100%);\n padding-bottom: env(safe-area-inset-bottom, 0px);\n }\n .gk-panel.gk-open { transform: translateY(0); }\n .gk-send-btn, .gk-close-btn { min-width: 44px; min-height: 44px; }\n .gk-input-area { padding-bottom: calc(12px + env(safe-area-inset-bottom, 0px)); }\n }\n @media (forced-colors: active) {\n .gk-fab, .gk-send-btn { border: 2px solid ButtonText; }\n .gk-panel { border: 1px solid ButtonText; }\n }\n`;\n\nconst SVG_CHAT = '<svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M20 2H4c-1.1 0-2 .9-2 2v18l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm0 14H5.17L4 17.17V4h16v12z\"/><path d=\"M7 9h10v2H7zm0-3h10v2H7z\"/></svg>';\nconst SVG_CLOSE = '<svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"/></svg>';\nconst SVG_SEND = '<svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M2.01 21L23 12 2.01 3 2 10l15 2-15 2z\"/></svg>';\n\n// ---------------------------------------------------------------------------\n// VanillaWidget — renders and manages the chat widget without React\n// ---------------------------------------------------------------------------\n\nclass VanillaWidget {\n private host: HTMLDivElement;\n private shadow: ShadowRoot;\n private panel!: HTMLDivElement;\n private transcript!: HTMLDivElement;\n private emptyState!: HTMLDivElement;\n private dotsEl!: HTMLDivElement;\n private input!: HTMLTextAreaElement;\n private sendBtn!: HTMLButtonElement;\n private fab!: HTMLButtonElement;\n private isOpen = false;\n private isSending = false;\n private core: GuideKitCore;\n\n constructor(core: GuideKitCore) {\n this.core = core;\n\n // Create Shadow DOM host\n this.host = document.createElement('div');\n this.host.id = 'guidekit-widget';\n this.host.style.cssText =\n 'position:fixed;z-index:2147483647;bottom:24px;right:24px;margin:0;padding:0;border:none;background:none;';\n document.body.appendChild(this.host);\n\n this.shadow = this.host.attachShadow({ mode: 'open' });\n\n // Inject styles\n const style = document.createElement('style');\n style.textContent = WIDGET_CSS;\n this.shadow.appendChild(style);\n\n this.buildDOM();\n this.bindEvents();\n }\n\n private buildDOM(): void {\n // Panel\n this.panel = document.createElement('div');\n this.panel.className = 'gk-panel';\n this.panel.setAttribute('role', 'dialog');\n this.panel.setAttribute('aria-label', 'GuideKit Assistant');\n this.panel.setAttribute('aria-hidden', 'true');\n\n // Header\n const header = document.createElement('div');\n header.className = 'gk-header';\n\n const title = document.createElement('div');\n title.className = 'gk-header-title';\n title.textContent = this.t('widgetTitle');\n header.appendChild(title);\n\n const closeBtn = document.createElement('button');\n closeBtn.className = 'gk-close-btn';\n closeBtn.setAttribute('aria-label', this.t('closePanel'));\n closeBtn.innerHTML = SVG_CLOSE;\n closeBtn.addEventListener('click', () => this.togglePanel(false));\n header.appendChild(closeBtn);\n\n this.panel.appendChild(header);\n\n // Transcript\n this.transcript = document.createElement('div');\n this.transcript.className = 'gk-transcript';\n this.transcript.setAttribute('role', 'log');\n this.transcript.setAttribute('aria-live', 'polite');\n\n this.emptyState = document.createElement('div');\n this.emptyState.className = 'gk-empty';\n this.emptyState.textContent = this.t('emptyStateMessage');\n this.transcript.appendChild(this.emptyState);\n\n // Dots indicator (hidden by default)\n this.dotsEl = document.createElement('div');\n this.dotsEl.className = 'gk-dots';\n this.dotsEl.setAttribute('role', 'status');\n this.dotsEl.setAttribute('aria-label', 'Processing');\n this.dotsEl.style.display = 'none';\n for (let i = 0; i < 3; i++) {\n const dot = document.createElement('div');\n dot.className = 'gk-dot';\n this.dotsEl.appendChild(dot);\n }\n this.transcript.appendChild(this.dotsEl);\n\n this.panel.appendChild(this.transcript);\n\n // Input area\n const inputArea = document.createElement('div');\n inputArea.className = 'gk-input-area';\n\n this.input = document.createElement('textarea');\n this.input.className = 'gk-input';\n this.input.placeholder = this.t('inputPlaceholder');\n this.input.setAttribute('aria-label', this.t('sendMessage'));\n this.input.rows = 1;\n inputArea.appendChild(this.input);\n\n this.sendBtn = document.createElement('button');\n this.sendBtn.className = 'gk-send-btn';\n this.sendBtn.setAttribute('aria-label', this.t('sendMessage'));\n this.sendBtn.innerHTML = SVG_SEND;\n inputArea.appendChild(this.sendBtn);\n\n this.panel.appendChild(inputArea);\n this.shadow.appendChild(this.panel);\n\n // FAB\n this.fab = document.createElement('button');\n this.fab.className = 'gk-fab';\n this.fab.setAttribute('aria-label', this.t('openAssistant'));\n this.fab.setAttribute('aria-expanded', 'false');\n this.fab.setAttribute('aria-haspopup', 'dialog');\n this.fab.innerHTML = SVG_CHAT;\n this.shadow.appendChild(this.fab);\n }\n\n private bindEvents(): void {\n this.fab.addEventListener('click', () => this.togglePanel(!this.isOpen));\n\n this.sendBtn.addEventListener('click', () => this.handleSend());\n\n this.input.addEventListener('keydown', (e) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n this.handleSend();\n }\n if (e.key === 'Escape') {\n this.togglePanel(false);\n this.fab.focus();\n }\n });\n }\n\n private togglePanel(open: boolean): void {\n this.isOpen = open;\n if (open) {\n this.panel.classList.add('gk-open');\n this.panel.setAttribute('aria-hidden', 'false');\n this.fab.setAttribute('aria-expanded', 'true');\n this.fab.innerHTML = SVG_CLOSE;\n this.fab.setAttribute('aria-label', this.t('closeAssistant'));\n setTimeout(() => this.input.focus(), 100);\n } else {\n this.panel.classList.remove('gk-open');\n this.panel.setAttribute('aria-hidden', 'true');\n this.fab.setAttribute('aria-expanded', 'false');\n this.fab.innerHTML = SVG_CHAT;\n this.fab.setAttribute('aria-label', this.t('openAssistant'));\n }\n }\n\n private async handleSend(): Promise<void> {\n const text = this.input.value.trim();\n if (!text || this.isSending) return;\n\n this.isSending = true;\n\n // Hide empty state\n this.emptyState.style.display = 'none';\n\n // Add user message\n this.addMessage('user', text);\n this.input.value = '';\n\n // Show processing dots\n this.dotsEl.style.display = 'flex';\n this.scrollToBottom();\n\n try {\n const response = await this.core.sendText(text);\n this.dotsEl.style.display = 'none';\n this.addMessage('assistant', response);\n } catch (err) {\n this.dotsEl.style.display = 'none';\n const msg = err instanceof Error ? err.message : 'Something went wrong.';\n this.addMessage('assistant', `Error: ${msg}`);\n } finally {\n this.isSending = false;\n }\n }\n\n private addMessage(role: 'user' | 'assistant', content: string): void {\n const el = document.createElement('div');\n el.className = `gk-msg gk-msg-${role}`;\n el.textContent = content;\n // Insert before the dots element\n this.transcript.insertBefore(el, this.dotsEl);\n this.scrollToBottom();\n }\n\n private scrollToBottom(): void {\n this.transcript.scrollTop = this.transcript.scrollHeight;\n }\n\n private t(key: string): string {\n try {\n return this.core.i18n.t(key as keyof I18nStrings) ?? key;\n } catch {\n return key;\n }\n }\n\n destroy(): void {\n this.host.remove();\n }\n}\n\n// ---------------------------------------------------------------------------\n// GuideKitVanilla — imperative wrapper around GuideKitCore\n// ---------------------------------------------------------------------------\n\nexport interface GuideKitVanillaOptions {\n tokenEndpoint?: string;\n stt?: GuideKitCoreOptions['stt'];\n tts?: GuideKitCoreOptions['tts'];\n llm?: GuideKitCoreOptions['llm'];\n agent?: GuideKitCoreOptions['agent'];\n contentMap?: GuideKitCoreOptions['contentMap'];\n options?: GuideKitCoreOptions['options'];\n instanceId?: string;\n rootElement?: HTMLElement;\n /** Disable the built-in widget UI (for headless use). */\n headless?: boolean;\n onError?: (error: GuideKitErrorType) => void;\n onEvent?: (event: GuideKitEvent) => void;\n onReady?: () => void;\n}\n\n/** Singleton state */\nlet _core: GuideKitCore | null = null;\nlet _widget: VanillaWidget | null = null;\nlet _initialized = false;\n\n/**\n * Initialize GuideKit. Must be called before any other methods.\n * Idempotent — calling multiple times is safe (returns existing instance).\n */\nexport async function init(options: GuideKitVanillaOptions): Promise<void> {\n if (_initialized && _core) return;\n\n _core = new GuideKitCore({\n tokenEndpoint: options.tokenEndpoint,\n stt: options.stt,\n tts: options.tts,\n llm: options.llm,\n agent: options.agent,\n contentMap: options.contentMap,\n options: options.options,\n instanceId: options.instanceId,\n rootElement: options.rootElement,\n onError: options.onError,\n onEvent: options.onEvent,\n onReady: options.onReady,\n });\n\n await _core.init();\n\n // Create widget unless headless\n if (!options.headless) {\n _widget = new VanillaWidget(_core);\n }\n\n _initialized = true;\n}\n\n/**\n * Send a text message to the assistant. Returns the response.\n */\nexport async function sendText(message: string): Promise<string> {\n assertInitialized();\n return _core!.sendText(message);\n}\n\n/**\n * Highlight an element on the page.\n */\nexport function highlight(params: {\n sectionId?: string;\n selector?: string;\n tooltip?: string;\n position?: 'top' | 'bottom' | 'left' | 'right' | 'auto';\n}): boolean {\n assertInitialized();\n return _core!.highlight(params);\n}\n\n/** Dismiss the current spotlight highlight. */\nexport function dismissHighlight(): void {\n assertInitialized();\n _core!.dismissHighlight();\n}\n\n/** Smooth scroll to a section by ID. */\nexport function scrollToSection(sectionId: string, offset?: number): void {\n assertInitialized();\n _core!.scrollToSection(sectionId, offset);\n}\n\n/** Start a guided tour. */\nexport function startTour(sectionIds: string[], mode?: 'auto' | 'manual'): void {\n assertInitialized();\n _core!.startTour(sectionIds, mode);\n}\n\n/** Stop the current tour. */\nexport function stopTour(): void {\n assertInitialized();\n _core!.stopTour();\n}\n\n/** Navigate to a URL (same-origin only). */\nexport async function navigate(href: string): Promise<boolean> {\n assertInitialized();\n return _core!.navigate(href);\n}\n\n/** Set developer page context for the LLM. */\nexport function setPageContext(context: Record<string, unknown>): void {\n assertInitialized();\n _core!.setPageContext(context);\n}\n\n/** Register a custom action the LLM can invoke. */\nexport function registerAction(\n actionId: string,\n action: {\n description: string;\n parameters: Record<string, unknown>;\n handler: (params: Record<string, unknown>) => Promise<unknown>;\n },\n): void {\n assertInitialized();\n _core!.registerAction(actionId, action);\n}\n\n/** Start voice input. */\nexport async function startListening(): Promise<void> {\n assertInitialized();\n await _core!.startListening();\n}\n\n/** Stop voice input. */\nexport function stopListening(): void {\n assertInitialized();\n _core!.stopListening();\n}\n\n/** Get current agent state. */\nexport function getAgentState(): AgentState {\n assertInitialized();\n return _core!.agentState;\n}\n\n/** Get current page model. */\nexport function getPageModel(): PageModel | null {\n assertInitialized();\n return _core!.pageModel;\n}\n\n/** Whether the SDK is ready. */\nexport function isReady(): boolean {\n return _core?.isReady ?? false;\n}\n\n/** Get/set quiet mode. */\nexport function getQuietMode(): boolean {\n assertInitialized();\n return _core!.quietMode;\n}\n\nexport function setQuietMode(value: boolean): void {\n assertInitialized();\n _core!.quietMode = value;\n}\n\n/** Check health of all connected services. */\nexport async function checkHealth(): Promise<HealthCheckResult> {\n assertInitialized();\n return _core!.checkHealth();\n}\n\n/** Destroy the instance and clean up. */\nexport async function destroy(): Promise<void> {\n if (_widget) {\n _widget.destroy();\n _widget = null;\n }\n if (_core) {\n await _core.destroy();\n _core = null;\n }\n _initialized = false;\n}\n\n/** Get the underlying GuideKitCore instance (escape hatch). */\nexport function getCore(): GuideKitCore | null {\n return _core;\n}\n\n// ---------------------------------------------------------------------------\n// Internal\n// ---------------------------------------------------------------------------\n\nfunction assertInitialized(): void {\n if (!_core || !_initialized) {\n throw new Error(\n 'GuideKit not initialized. Call GuideKit.init({...}) first.',\n );\n }\n}\n\n// ---------------------------------------------------------------------------\n// Version\n// ---------------------------------------------------------------------------\n\nexport const VERSION = '0.1.0-beta.2';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiBA,kBAA6B;AAe7B,IAAM;AAAA;AAAA,EAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA4K7B,IAAM,WAAW;AACjB,IAAM,YAAY;AAClB,IAAM,WAAW;AAMjB,IAAM,gBAAN,MAAoB;AAAA,EACV;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT,YAAY;AAAA,EACZ;AAAA,EAER,YAAY,MAAoB;AAC9B,SAAK,OAAO;AAGZ,SAAK,OAAO,SAAS,cAAc,KAAK;AACxC,SAAK,KAAK,KAAK;AACf,SAAK,KAAK,MAAM,UACd;AACF,aAAS,KAAK,YAAY,KAAK,IAAI;AAEnC,SAAK,SAAS,KAAK,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAGrD,UAAM,QAAQ,SAAS,cAAc,OAAO;AAC5C,UAAM,cAAc;AACpB,SAAK,OAAO,YAAY,KAAK;AAE7B,SAAK,SAAS;AACd,SAAK,WAAW;AAAA,EAClB;AAAA,EAEQ,WAAiB;AAEvB,SAAK,QAAQ,SAAS,cAAc,KAAK;AACzC,SAAK,MAAM,YAAY;AACvB,SAAK,MAAM,aAAa,QAAQ,QAAQ;AACxC,SAAK,MAAM,aAAa,cAAc,oBAAoB;AAC1D,SAAK,MAAM,aAAa,eAAe,MAAM;AAG7C,UAAM,SAAS,SAAS,cAAc,KAAK;AAC3C,WAAO,YAAY;AAEnB,UAAM,QAAQ,SAAS,cAAc,KAAK;AAC1C,UAAM,YAAY;AAClB,UAAM,cAAc,KAAK,EAAE,aAAa;AACxC,WAAO,YAAY,KAAK;AAExB,UAAM,WAAW,SAAS,cAAc,QAAQ;AAChD,aAAS,YAAY;AACrB,aAAS,aAAa,cAAc,KAAK,EAAE,YAAY,CAAC;AACxD,aAAS,YAAY;AACrB,aAAS,iBAAiB,SAAS,MAAM,KAAK,YAAY,KAAK,CAAC;AAChE,WAAO,YAAY,QAAQ;AAE3B,SAAK,MAAM,YAAY,MAAM;AAG7B,SAAK,aAAa,SAAS,cAAc,KAAK;AAC9C,SAAK,WAAW,YAAY;AAC5B,SAAK,WAAW,aAAa,QAAQ,KAAK;AAC1C,SAAK,WAAW,aAAa,aAAa,QAAQ;AAElD,SAAK,aAAa,SAAS,cAAc,KAAK;AAC9C,SAAK,WAAW,YAAY;AAC5B,SAAK,WAAW,cAAc,KAAK,EAAE,mBAAmB;AACxD,SAAK,WAAW,YAAY,KAAK,UAAU;AAG3C,SAAK,SAAS,SAAS,cAAc,KAAK;AAC1C,SAAK,OAAO,YAAY;AACxB,SAAK,OAAO,aAAa,QAAQ,QAAQ;AACzC,SAAK,OAAO,aAAa,cAAc,YAAY;AACnD,SAAK,OAAO,MAAM,UAAU;AAC5B,aAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,YAAM,MAAM,SAAS,cAAc,KAAK;AACxC,UAAI,YAAY;AAChB,WAAK,OAAO,YAAY,GAAG;AAAA,IAC7B;AACA,SAAK,WAAW,YAAY,KAAK,MAAM;AAEvC,SAAK,MAAM,YAAY,KAAK,UAAU;AAGtC,UAAM,YAAY,SAAS,cAAc,KAAK;AAC9C,cAAU,YAAY;AAEtB,SAAK,QAAQ,SAAS,cAAc,UAAU;AAC9C,SAAK,MAAM,YAAY;AACvB,SAAK,MAAM,cAAc,KAAK,EAAE,kBAAkB;AAClD,SAAK,MAAM,aAAa,cAAc,KAAK,EAAE,aAAa,CAAC;AAC3D,SAAK,MAAM,OAAO;AAClB,cAAU,YAAY,KAAK,KAAK;AAEhC,SAAK,UAAU,SAAS,cAAc,QAAQ;AAC9C,SAAK,QAAQ,YAAY;AACzB,SAAK,QAAQ,aAAa,cAAc,KAAK,EAAE,aAAa,CAAC;AAC7D,SAAK,QAAQ,YAAY;AACzB,cAAU,YAAY,KAAK,OAAO;AAElC,SAAK,MAAM,YAAY,SAAS;AAChC,SAAK,OAAO,YAAY,KAAK,KAAK;AAGlC,SAAK,MAAM,SAAS,cAAc,QAAQ;AAC1C,SAAK,IAAI,YAAY;AACrB,SAAK,IAAI,aAAa,cAAc,KAAK,EAAE,eAAe,CAAC;AAC3D,SAAK,IAAI,aAAa,iBAAiB,OAAO;AAC9C,SAAK,IAAI,aAAa,iBAAiB,QAAQ;AAC/C,SAAK,IAAI,YAAY;AACrB,SAAK,OAAO,YAAY,KAAK,GAAG;AAAA,EAClC;AAAA,EAEQ,aAAmB;AACzB,SAAK,IAAI,iBAAiB,SAAS,MAAM,KAAK,YAAY,CAAC,KAAK,MAAM,CAAC;AAEvE,SAAK,QAAQ,iBAAiB,SAAS,MAAM,KAAK,WAAW,CAAC;AAE9D,SAAK,MAAM,iBAAiB,WAAW,CAAC,MAAM;AAC5C,UAAI,EAAE,QAAQ,WAAW,CAAC,EAAE,UAAU;AACpC,UAAE,eAAe;AACjB,aAAK,WAAW;AAAA,MAClB;AACA,UAAI,EAAE,QAAQ,UAAU;AACtB,aAAK,YAAY,KAAK;AACtB,aAAK,IAAI,MAAM;AAAA,MACjB;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEQ,YAAY,MAAqB;AACvC,SAAK,SAAS;AACd,QAAI,MAAM;AACR,WAAK,MAAM,UAAU,IAAI,SAAS;AAClC,WAAK,MAAM,aAAa,eAAe,OAAO;AAC9C,WAAK,IAAI,aAAa,iBAAiB,MAAM;AAC7C,WAAK,IAAI,YAAY;AACrB,WAAK,IAAI,aAAa,cAAc,KAAK,EAAE,gBAAgB,CAAC;AAC5D,iBAAW,MAAM,KAAK,MAAM,MAAM,GAAG,GAAG;AAAA,IAC1C,OAAO;AACL,WAAK,MAAM,UAAU,OAAO,SAAS;AACrC,WAAK,MAAM,aAAa,eAAe,MAAM;AAC7C,WAAK,IAAI,aAAa,iBAAiB,OAAO;AAC9C,WAAK,IAAI,YAAY;AACrB,WAAK,IAAI,aAAa,cAAc,KAAK,EAAE,eAAe,CAAC;AAAA,IAC7D;AAAA,EACF;AAAA,EAEA,MAAc,aAA4B;AACxC,UAAM,OAAO,KAAK,MAAM,MAAM,KAAK;AACnC,QAAI,CAAC,QAAQ,KAAK,UAAW;AAE7B,SAAK,YAAY;AAGjB,SAAK,WAAW,MAAM,UAAU;AAGhC,SAAK,WAAW,QAAQ,IAAI;AAC5B,SAAK,MAAM,QAAQ;AAGnB,SAAK,OAAO,MAAM,UAAU;AAC5B,SAAK,eAAe;AAEpB,QAAI;AACF,YAAM,WAAW,MAAM,KAAK,KAAK,SAAS,IAAI;AAC9C,WAAK,OAAO,MAAM,UAAU;AAC5B,WAAK,WAAW,aAAa,QAAQ;AAAA,IACvC,SAAS,KAAK;AACZ,WAAK,OAAO,MAAM,UAAU;AAC5B,YAAM,MAAM,eAAe,QAAQ,IAAI,UAAU;AACjD,WAAK,WAAW,aAAa,UAAU,GAAG,EAAE;AAAA,IAC9C,UAAE;AACA,WAAK,YAAY;AAAA,IACnB;AAAA,EACF;AAAA,EAEQ,WAAW,MAA4B,SAAuB;AACpE,UAAM,KAAK,SAAS,cAAc,KAAK;AACvC,OAAG,YAAY,iBAAiB,IAAI;AACpC,OAAG,cAAc;AAEjB,SAAK,WAAW,aAAa,IAAI,KAAK,MAAM;AAC5C,SAAK,eAAe;AAAA,EACtB;AAAA,EAEQ,iBAAuB;AAC7B,SAAK,WAAW,YAAY,KAAK,WAAW;AAAA,EAC9C;AAAA,EAEQ,EAAE,KAAqB;AAC7B,QAAI;AACF,aAAO,KAAK,KAAK,KAAK,EAAE,GAAwB,KAAK;AAAA,IACvD,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,UAAgB;AACd,SAAK,KAAK,OAAO;AAAA,EACnB;AACF;AAwBA,IAAI,QAA6B;AACjC,IAAI,UAAgC;AACpC,IAAI,eAAe;AAMnB,eAAsB,KAAK,SAAgD;AACzE,MAAI,gBAAgB,MAAO;AAE3B,UAAQ,IAAI,yBAAa;AAAA,IACvB,eAAe,QAAQ;AAAA,IACvB,KAAK,QAAQ;AAAA,IACb,KAAK,QAAQ;AAAA,IACb,KAAK,QAAQ;AAAA,IACb,OAAO,QAAQ;AAAA,IACf,YAAY,QAAQ;AAAA,IACpB,SAAS,QAAQ;AAAA,IACjB,YAAY,QAAQ;AAAA,IACpB,aAAa,QAAQ;AAAA,IACrB,SAAS,QAAQ;AAAA,IACjB,SAAS,QAAQ;AAAA,IACjB,SAAS,QAAQ;AAAA,EACnB,CAAC;AAED,QAAM,MAAM,KAAK;AAGjB,MAAI,CAAC,QAAQ,UAAU;AACrB,cAAU,IAAI,cAAc,KAAK;AAAA,EACnC;AAEA,iBAAe;AACjB;AAKA,eAAsB,SAAS,SAAkC;AAC/D,oBAAkB;AAClB,SAAO,MAAO,SAAS,OAAO;AAChC;AAKO,SAAS,UAAU,QAKd;AACV,oBAAkB;AAClB,SAAO,MAAO,UAAU,MAAM;AAChC;AAGO,SAAS,mBAAyB;AACvC,oBAAkB;AAClB,QAAO,iBAAiB;AAC1B;AAGO,SAAS,gBAAgB,WAAmB,QAAuB;AACxE,oBAAkB;AAClB,QAAO,gBAAgB,WAAW,MAAM;AAC1C;AAGO,SAAS,UAAU,YAAsB,MAAgC;AAC9E,oBAAkB;AAClB,QAAO,UAAU,YAAY,IAAI;AACnC;AAGO,SAAS,WAAiB;AAC/B,oBAAkB;AAClB,QAAO,SAAS;AAClB;AAGA,eAAsB,SAAS,MAAgC;AAC7D,oBAAkB;AAClB,SAAO,MAAO,SAAS,IAAI;AAC7B;AAGO,SAAS,eAAe,SAAwC;AACrE,oBAAkB;AAClB,QAAO,eAAe,OAAO;AAC/B;AAGO,SAAS,eACd,UACA,QAKM;AACN,oBAAkB;AAClB,QAAO,eAAe,UAAU,MAAM;AACxC;AAGA,eAAsB,iBAAgC;AACpD,oBAAkB;AAClB,QAAM,MAAO,eAAe;AAC9B;AAGO,SAAS,gBAAsB;AACpC,oBAAkB;AAClB,QAAO,cAAc;AACvB;AAGO,SAAS,gBAA4B;AAC1C,oBAAkB;AAClB,SAAO,MAAO;AAChB;AAGO,SAAS,eAAiC;AAC/C,oBAAkB;AAClB,SAAO,MAAO;AAChB;AAGO,SAAS,UAAmB;AACjC,SAAO,OAAO,WAAW;AAC3B;AAGO,SAAS,eAAwB;AACtC,oBAAkB;AAClB,SAAO,MAAO;AAChB;AAEO,SAAS,aAAa,OAAsB;AACjD,oBAAkB;AAClB,QAAO,YAAY;AACrB;AAGA,eAAsB,cAA0C;AAC9D,oBAAkB;AAClB,SAAO,MAAO,YAAY;AAC5B;AAGA,eAAsB,UAAyB;AAC7C,MAAI,SAAS;AACX,YAAQ,QAAQ;AAChB,cAAU;AAAA,EACZ;AACA,MAAI,OAAO;AACT,UAAM,MAAM,QAAQ;AACpB,YAAQ;AAAA,EACV;AACA,iBAAe;AACjB;AAGO,SAAS,UAA+B;AAC7C,SAAO;AACT;AAMA,SAAS,oBAA0B;AACjC,MAAI,CAAC,SAAS,CAAC,cAAc;AAC3B,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACF;AAMO,IAAM,UAAU;","names":[]}
|
package/dist/index.d.cts
CHANGED
|
@@ -71,6 +71,6 @@ declare function checkHealth(): Promise<HealthCheckResult>;
|
|
|
71
71
|
declare function destroy(): Promise<void>;
|
|
72
72
|
/** Get the underlying GuideKitCore instance (escape hatch). */
|
|
73
73
|
declare function getCore(): GuideKitCore | null;
|
|
74
|
-
declare const VERSION = "0.1.0-beta.
|
|
74
|
+
declare const VERSION = "0.1.0-beta.2";
|
|
75
75
|
|
|
76
76
|
export { type GuideKitVanillaOptions, VERSION, checkHealth, destroy, dismissHighlight, getAgentState, getCore, getPageModel, getQuietMode, highlight, init, isReady, navigate, registerAction, scrollToSection, sendText, setPageContext, setQuietMode, startListening, startTour, stopListening, stopTour };
|
package/dist/index.d.ts
CHANGED
|
@@ -71,6 +71,6 @@ declare function checkHealth(): Promise<HealthCheckResult>;
|
|
|
71
71
|
declare function destroy(): Promise<void>;
|
|
72
72
|
/** Get the underlying GuideKitCore instance (escape hatch). */
|
|
73
73
|
declare function getCore(): GuideKitCore | null;
|
|
74
|
-
declare const VERSION = "0.1.0-beta.
|
|
74
|
+
declare const VERSION = "0.1.0-beta.2";
|
|
75
75
|
|
|
76
76
|
export { type GuideKitVanillaOptions, VERSION, checkHealth, destroy, dismissHighlight, getAgentState, getCore, getPageModel, getQuietMode, highlight, init, isReady, navigate, registerAction, scrollToSection, sendText, setPageContext, setQuietMode, startListening, startTour, stopListening, stopTour };
|