@visma-swno/gaia-chat-ui 5.1.0 → 5.2.0
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/CHANGELOG.md +19 -0
- package/dist/app/app.d.ts +32 -1
- package/dist/components/canvas/canvas-workspace/canvas-workspace.d.ts +1 -1
- package/dist/components/composer/message-composer.d.ts +41 -6
- package/dist/components/conversation/activity-indicator/activity-indicator.d.ts +1 -1
- package/dist/components/feedback/consent-dialog.d.ts +1 -1
- package/dist/components/layout/connection-status-overlay/connection-status-overlay.d.ts +1 -1
- package/dist/components/message/assistant-message.d.ts +1 -1
- package/dist/components/message/message-actions.d.ts +1 -1
- package/dist/components/message/message-attachments.d.ts +17 -1
- package/dist/components/message/message.d.ts +1 -1
- package/dist/components/message/renderers/citation-link/citation-link.d.ts +1 -1
- package/dist/components/message/renderers/reasoning-block.d.ts +1 -1
- package/dist/components/message/renderers/tool-approval-block.d.ts +1 -1
- package/dist/components/message/renderers/tool-status-block.d.ts +1 -1
- package/dist/components/primitives/icon/icon.d.ts +1 -1
- package/dist/components/primitives/modal/modal.d.ts +1 -1
- package/dist/components/primitives/notification/notification.d.ts +1 -1
- package/dist/components/shared/suggested-question-pills.d.ts +1 -1
- package/dist/core/adapters/tool-utils.d.ts +28 -0
- package/dist/core/store/chat-store.d.ts +7 -0
- package/dist/core/store/run-coordinator.d.ts +1 -0
- package/dist/core/types.d.ts +12 -4
- package/dist/custom-elements.json +1 -1
- package/dist/{da-DTtUa6Q_.js → da-DDxL51tD.js} +34 -37
- package/dist/{esm-BF86VROU.js → esm-lz7YfYzg.js} +672 -672
- package/dist/{fi-BOvtWDCe.js → fi-twx072Zu.js} +34 -37
- package/dist/generated/locales/da.d.ts +33 -36
- package/dist/generated/locales/fi.d.ts +33 -36
- package/dist/generated/locales/nb.d.ts +33 -36
- package/dist/generated/locales/nl.d.ts +33 -36
- package/dist/generated/locales/sv.d.ts +33 -36
- package/dist/index.es.js +4455 -4184
- package/dist/{markdown-BTbuI0wi.js → markdown-BsU07hR0.js} +419 -412
- package/dist/{nb-DZXqrqeY.js → nb-CeFzi8EU.js} +34 -37
- package/dist/{nl-DGhlP4kd.js → nl-D1Z5TDkR.js} +34 -37
- package/dist/services/api-schemas.d.ts +29 -34
- package/dist/{signalr-Daj845_b.js → signalr-K7e2DzwD.js} +1 -1
- package/dist/{sv-DPPbk9Xd.js → sv-BnYyj9E_.js} +34 -37
- package/dist/types/message-attachment.d.ts +2 -0
- package/dist/utils/i18n-check-helpers.d.ts +15 -0
- package/dist/utils/polling-task.d.ts +11 -1
- package/dist/vscode.html-custom-data.json +7 -4
- package/package.json +10 -6
- /package/dist/{learning-universe-DoX8vYTL.js → learning-universe-B_ZGsjBI.js} +0 -0
- /package/dist/{rolldown-runtime-CUF-kog3.js → rolldown-runtime--_vEcKDh.js} +0 -0
- /package/dist/{vsn-DP5dReH5.js → vsn-CBq00924.js} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"schemaVersion":"1.0.0","readme":"","modules":[{"kind":"javascript-module","path":"app/app.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"app/app.styles.js"}}]},{"kind":"javascript-module","path":"app/app.js","declarations":[{"kind":"class","description":"Root chat widget component.\n\nBootstraps services, manages authentication, and renders the chat UI.\nEmbed in any page to add AI-powered chat with support handoff.","name":"ChatApp","members":[{"kind":"field","name":"baseUrl","type":{"text":"string"},"default":"'https://api.assistant.stag.vsn.dev'","description":"Backend API base URL.","attribute":"base-url"},{"kind":"field","name":"profileId","type":{"text":"string"},"default":"'default'","description":"Assistant profile identifier.","attribute":"profile-id"},{"kind":"field","name":"tokenProvider","type":{"text":"TokenFetcher | undefined"},"privacy":"public","description":"Function (sync or async) that returns an OAuth access token for Visma Connect auth."},{"kind":"field","name":"hostContextProvider","type":{"text":"HostContextProvider | undefined"},"privacy":"public","description":"Async function that returns application context sent with each message."},{"kind":"field","name":"authStrategy","type":{"text":"StrategyType"},"default":"'visitor'","description":"Authentication strategy: \"visitor\" (anonymous) or \"visma\" (Visma Connect).","attribute":"auth-strategy"},{"kind":"field","name":"closeable","type":{"text":"boolean"},"default":"true","description":"Whether to show a close button in the header.","attribute":"closeable","reflects":true},{"kind":"field","name":"enableHistory","type":{"text":"boolean"},"default":"true","description":"Whether to show the conversation history button in the header.","attribute":"enable-history","reflects":true},{"kind":"field","name":"conversationId","type":{"text":"string"},"default":"''","description":"Host-provided conversation id (#2644). When set, this conversation is\nrestored instead of the one persisted in localStorage. The localStorage\nvalue is **not** overwritten — clearing the attribute returns the widget\nto that previous conversation. Empty string is treated as unset.","attribute":"conversation-id"},{"kind":"field","name":"tools","type":{"text":"FrontendTool[]"},"privacy":"public","default":"[]","description":"Frontend tool definitions sent to the agent."},{"kind":"field","name":"readonlyMode","type":{"text":"boolean"},"default":"false","description":"Readonly mode: hides the composer, header actions, and connection overlay.\nUse `setReadonlyMessages()` to inject messages for display.","attribute":"readonly","reflects":true},{"kind":"field","name":"activeLang","type":{"text":"string"},"privacy":"private","readonly":true},{"kind":"field","name":"langObserver","type":{"text":"MutationObserver | undefined"},"privacy":"private"},{"kind":"field","name":"store","type":{"text":"ChatStore"},"privacy":"private"},{"kind":"field","name":"canvasStore","type":{"text":"CanvasStore"},"privacy":"private"},{"kind":"field","name":"canvasEnabled","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"field","name":"canvasActive","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"field","name":"canvasExpanded","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"field","name":"supportSessionEnded","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"field","name":"historyOpen","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"field","name":"settingsOpen","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"field","name":"disposables","privacy":"private","default":"new DisposableController(this)"},{"kind":"field","name":"ctx","type":{"text":"ChatContext"},"privacy":"private"},{"kind":"field","name":"handleInlineQuestionClick","privacy":"private","default":"(async (e: CustomEvent<{ question: string }>) => { const question = e.detail.question; const hostContext = this.hostContextProvider ? await this.hostContextProvider() : null; this.store.sendMessage(question, this.profileId, hostContext, { source: 'suggested_question' }); this.dispatchEvent(new MessageSentEvent(question, 'assistant')); })"},{"kind":"method","name":"handleAuthChanged","privacy":"private","parameters":[{"name":"conversationIdOverride","optional":true,"type":{"text":"string | null"}}]},{"kind":"method","name":"applyConversationIdOverride","privacy":"private","description":"Reconcile the chat surface with the current `conversation-id` attribute\nwhen no auth-related prop changed alongside it. Non-empty value → scoped\nrestore (no localStorage write). Empty/absent → fall back to the\nlocalStorage-backed conversation via `loadHistory`."},{"kind":"method","name":"toggleHostAttribute","privacy":"private","parameters":[{"name":"name","type":{"text":"string"}},{"name":"force","type":{"text":"boolean"}}]},{"kind":"field","name":"handleKeyDown","privacy":"private"},{"kind":"method","name":"clearConversation","privacy":"public","return":{"type":{"text":"void"}},"description":"Clears the current conversation and resets the chat."},{"kind":"method","name":"stopSupport","privacy":"public","return":{"type":{"text":"void"}},"description":"Stops any active support session."},{"kind":"method","name":"setReadonlyMessages","privacy":"public","return":{"type":{"text":"void"}},"parameters":[{"name":"messages","type":{"text":"ReadonlyArray<Record<string, unknown>>"},"description":"AG-UI format message objects from the backend."},{"name":"thumbs","optional":true,"type":{"text":"Readonly<Record<string, string>>"},"description":"Optional map of messageId → \"up\" | \"down\" for feedback indicators."}],"description":"Inject messages for readonly display. Accepts AG-UI format messages\n(as returned by the inspect API) and runs them through the full message\npipeline so tool calls, search results, reasoning, and citations all\nrender correctly."},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"events":[{"name":"shouldExpand","type":{"text":"CanvasLayoutChangedEvent"}},{"type":{"text":"ConversationClearedEvent"},"description":"When the user clears the conversation","name":"conversation-cleared"},{"type":{"text":"ConversationRestoredEvent"},"description":"When a conversation is restored from history, carrying the persisted host-context snapshot so the host app can re-orient to the tenant / customer / company it was about.","name":"conversation-restored"},{"type":{"text":"MessageSentEvent"},"description":"When the user sends a message","name":"message-sent"},{"type":{"text":"ToolCallApprovedEvent"},"description":"When the user approves a tool call","name":"tool-call-approved"},{"type":{"text":"ToolCallDeclinedEvent"},"description":"When the user declines a tool call","name":"tool-call-declined"},{"type":{"text":"FeedbackSubmittedEvent"},"description":"When the user submits feedback","name":"feedback-submitted"},{"type":{"text":"CloseRequestedEvent"},"description":"When the user clicks the close button","name":"close-requested"},{"type":{"text":"ToolCallEvent"},"description":"When a frontend tool call is executed","name":"tool-call"}],"attributes":[{"name":"base-url","type":{"text":"string"},"default":"'https://api.assistant.stag.vsn.dev'","description":"Backend API base URL.","fieldName":"baseUrl"},{"name":"profile-id","type":{"text":"string"},"default":"'default'","description":"Assistant profile identifier.","fieldName":"profileId"},{"name":"auth-strategy","type":{"text":"StrategyType"},"default":"'visitor'","description":"Authentication strategy: \"visitor\" (anonymous) or \"visma\" (Visma Connect).","fieldName":"authStrategy"},{"name":"closeable","type":{"text":"boolean"},"default":"true","description":"Whether to show a close button in the header.","fieldName":"closeable"},{"name":"enable-history","type":{"text":"boolean"},"default":"true","description":"Whether to show the conversation history button in the header.","fieldName":"enableHistory"},{"name":"conversation-id","type":{"text":"string"},"default":"''","description":"Host-provided conversation id (#2644). When set, this conversation is\nrestored instead of the one persisted in localStorage. The localStorage\nvalue is **not** overwritten — clearing the attribute returns the widget\nto that previous conversation. Empty string is treated as unset.","fieldName":"conversationId"},{"name":"readonly","type":{"text":"boolean"},"default":"false","description":"Readonly mode: hides the composer, header actions, and connection overlay.\nUse `setReadonlyMessages()` to inject messages for display.","fieldName":"readonlyMode"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-chat","customElement":true}],"exports":[{"kind":"js","name":"ChatApp","declaration":{"name":"ChatApp","module":"app/app.js"}},{"kind":"custom-element-definition","name":"gaia-chat","declaration":{"name":"ChatApp","module":"app/app.js"}}]},{"kind":"javascript-module","path":"app/chat-context.js","declarations":[{"kind":"function","name":"createChatContext","return":{"type":{"text":"ChatContext"}},"parameters":[{"name":"host","type":{"text":"ReactiveControllerHost & HTMLElement"}},{"name":"baseUrl","type":{"text":"string"}}],"description":"Create the full chat context: API client, services, stores, and canvas wiring."},{"kind":"function","name":"subscribeAutoSupport","return":{"type":{"text":"() => void"}},"parameters":[{"name":"store","type":{"text":"ChatStore"}},{"name":"getBaseUrl","type":{"text":"() => string"}}],"description":"Subscribe to store state and auto-start support when channel switches.\r\nReturns an unsubscribe function.\r\n\r\nTracks previous channel in a dedicated variable to avoid dependency\r\non subscription ordering with other store subscribers."}],"exports":[{"kind":"js","name":"createChatContext","declaration":{"name":"createChatContext","module":"app/chat-context.js"}},{"kind":"js","name":"subscribeAutoSupport","declaration":{"name":"subscribeAutoSupport","module":"app/chat-context.js"}}]},{"kind":"javascript-module","path":"app/localization.js","declarations":[{"kind":"variable","name":"{ getLocale, setLocale }"},{"kind":"function","name":"parseLocaleCode","parameters":[{"name":"locale","type":{"text":"string"}}]}],"exports":[{"kind":"js","name":"{ getLocale, setLocale }","declaration":{"name":"{ getLocale, setLocale }","module":"app/localization.js"}},{"kind":"js","name":"parseLocaleCode","declaration":{"name":"parseLocaleCode","module":"app/localization.js"}}]},{"kind":"javascript-module","path":"components/canvas/canvas-code-view/canvas-code-view.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"components/canvas/canvas-code-view/canvas-code-view.js","declarations":[{"kind":"class","description":"Code viewer for canvas content.\n\nRenders code in a plain `<pre><code>` block.","name":"CanvasCodeView","members":[{"kind":"field","name":"content","type":{"text":"string"},"default":"''","attribute":"content"},{"kind":"field","name":"language","type":{"text":"string"},"default":"'tsx'","attribute":"language"},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"attributes":[{"name":"content","type":{"text":"string"},"default":"''","fieldName":"content"},{"name":"language","type":{"text":"string"},"default":"'tsx'","fieldName":"language"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-canvas-code-view","customElement":true}],"exports":[{"kind":"js","name":"CanvasCodeView","declaration":{"name":"CanvasCodeView","module":"components/canvas/canvas-code-view/canvas-code-view.js"}},{"kind":"custom-element-definition","name":"gaia-canvas-code-view","declaration":{"name":"CanvasCodeView","module":"components/canvas/canvas-code-view/canvas-code-view.js"}}]},{"kind":"javascript-module","path":"components/canvas/canvas-revision-selector/canvas-revision-selector.test.js","declarations":[{"kind":"class","description":"","name":"TestWrapper","members":[{"kind":"field","name":"store","default":"sharedStore","type":{"text":"MockCanvasStore"}}],"superclass":{"name":"LitElement","package":"lit"},"tagName":"test-wrapper-canvas-revision-selector","customElement":true}],"exports":[{"kind":"custom-element-definition","name":"test-wrapper-canvas-revision-selector","declaration":{"name":"TestWrapper","module":"components/canvas/canvas-revision-selector/canvas-revision-selector.test.js"}}]},{"kind":"javascript-module","path":"components/canvas/canvas-revision-selector/canvas-revision-selector.js","declarations":[{"kind":"class","description":"Dropdown selector for switching between canvas revisions.\n\nWhen multiple revisions exist, renders a `<select>` with version\nlabels. Otherwise shows a static version number.","name":"CanvasRevisionSelector","members":[{"kind":"field","name":"ctrl","privacy":"private","default":"new CanvasStoreController(this, (s) => ({ revisions: s.revisions, activeRevisionIndex: s.activeRevisionIndex, revision: s.revision, }))"},{"kind":"method","name":"handleChange","privacy":"private","parameters":[{"name":"e","type":{"text":"CustomEvent<{ value: string }>"}}]},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-canvas-revision-selector","customElement":true}],"exports":[{"kind":"js","name":"CanvasRevisionSelector","declaration":{"name":"CanvasRevisionSelector","module":"components/canvas/canvas-revision-selector/canvas-revision-selector.js"}},{"kind":"custom-element-definition","name":"gaia-canvas-revision-selector","declaration":{"name":"CanvasRevisionSelector","module":"components/canvas/canvas-revision-selector/canvas-revision-selector.js"}}]},{"kind":"javascript-module","path":"components/canvas/canvas-toolbar/canvas-toolbar.stories.js","declarations":[{"kind":"class","description":"","name":"StoryCanvasToolbarWrapper","members":[{"kind":"field","name":"store","default":"createCanvasStore() as unknown"}],"superclass":{"name":"LitElement","package":"lit"},"tagName":"story-canvas-toolbar-wrapper","customElement":true},{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Canvas/Toolbar', component: 'gaia-canvas-toolbar', }"},{"kind":"variable","name":"Default","type":{"text":"Story"},"default":"{ render: () => withCanvasStore( { title: 'My Canvas', activeTab: 'code', status: 'ready', kind: 'react-app', }, html`<gaia-canvas-toolbar></gaia-canvas-toolbar>` ), }"},{"kind":"variable","name":"PreviewTabActive","type":{"text":"Story"},"default":"{ render: () => withCanvasStore( { title: 'My Canvas', activeTab: 'preview', status: 'ready', kind: 'react-app', }, html`<gaia-canvas-toolbar></gaia-canvas-toolbar>` ), }"},{"kind":"variable","name":"WithDownloadButton","type":{"text":"Story"},"default":"{ render: () => withCanvasStore( { title: 'Quarterly Report', activeTab: 'preview', status: 'ready', kind: 'report-source-html', exports: [readyExport], }, html`<gaia-canvas-toolbar></gaia-canvas-toolbar>` ), }"},{"kind":"variable","name":"LongTitle","type":{"text":"Story"},"default":"{ render: () => withCanvasStore( { title: 'This is a very long canvas title that should be truncated with ellipsis when it overflows the available space', activeTab: 'code', status: 'ready', kind: 'react-app', }, html`<div style=\"max-width: 400px;\"> <gaia-canvas-toolbar></gaia-canvas-toolbar> </div>` ), }"}],"exports":[{"kind":"custom-element-definition","name":"story-canvas-toolbar-wrapper","declaration":{"name":"StoryCanvasToolbarWrapper","module":"components/canvas/canvas-toolbar/canvas-toolbar.stories.js"}},{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/canvas/canvas-toolbar/canvas-toolbar.stories.js"}},{"kind":"js","name":"Default","declaration":{"name":"Default","module":"components/canvas/canvas-toolbar/canvas-toolbar.stories.js"}},{"kind":"js","name":"PreviewTabActive","declaration":{"name":"PreviewTabActive","module":"components/canvas/canvas-toolbar/canvas-toolbar.stories.js"}},{"kind":"js","name":"WithDownloadButton","declaration":{"name":"WithDownloadButton","module":"components/canvas/canvas-toolbar/canvas-toolbar.stories.js"}},{"kind":"js","name":"LongTitle","declaration":{"name":"LongTitle","module":"components/canvas/canvas-toolbar/canvas-toolbar.stories.js"}}]},{"kind":"javascript-module","path":"components/canvas/canvas-toolbar/canvas-toolbar.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/canvas/canvas-toolbar/canvas-toolbar.styles.js"}}]},{"kind":"javascript-module","path":"components/canvas/canvas-toolbar/canvas-toolbar.test.js","declarations":[{"kind":"class","description":"","name":"TestWrapper","members":[{"kind":"field","name":"store","default":"sharedStore","type":{"text":"MockCanvasStore"}}],"superclass":{"name":"LitElement","package":"lit"},"tagName":"test-wrapper-canvas-revision-selector","customElement":true}],"exports":[{"kind":"custom-element-definition","name":"test-wrapper-canvas-toolbar","declaration":{"name":"TestWrapper","module":"components/canvas/canvas-toolbar/canvas-toolbar.test.js"}}]},{"kind":"javascript-module","path":"components/canvas/canvas-toolbar/canvas-toolbar.js","declarations":[{"kind":"class","description":"Toolbar for the canvas workspace with tab switching, download, and close actions.\n\nDisplays the canvas title, Code/Preview tab buttons, an optional\nPDF download button (for report-source canvases with ready exports),\nand a close button.","name":"CanvasToolbar","members":[{"kind":"field","name":"ctrl","privacy":"private","default":"new CanvasStoreController(this, (s) => ({ title: s.title, activeTab: s.activeTab, revision: s.revision, revisions: s.revisions, kind: s.kind, exports: s.exports, }))"},{"kind":"method","name":"handleTabClick","privacy":"private","parameters":[{"name":"tab","type":{"text":"'code' | 'preview'"}}]},{"kind":"method","name":"handleClose","privacy":"private"},{"kind":"method","name":"handleDownload","privacy":"private"},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-canvas-toolbar","customElement":true}],"exports":[{"kind":"js","name":"CanvasToolbar","declaration":{"name":"CanvasToolbar","module":"components/canvas/canvas-toolbar/canvas-toolbar.js"}},{"kind":"custom-element-definition","name":"gaia-canvas-toolbar","declaration":{"name":"CanvasToolbar","module":"components/canvas/canvas-toolbar/canvas-toolbar.js"}}]},{"kind":"javascript-module","path":"components/canvas/canvas-workspace/canvas-workspace.stories.js","declarations":[{"kind":"class","description":"","name":"StoryCanvasWorkspaceWrapper","members":[{"kind":"field","name":"store","default":"createCanvasStore() as unknown"}],"superclass":{"name":"LitElement","package":"lit"},"tagName":"story-canvas-workspace-wrapper","customElement":true},{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Canvas/Workspace', component: 'gaia-canvas-workspace', }"},{"kind":"variable","name":"CodeTab","type":{"text":"Story"},"default":"{ render: () => withCanvasStore( { title: 'My Canvas', activeTab: 'code', status: 'ready', content: sampleCode, language: 'tsx', kind: 'react-app', }, html`<gaia-canvas-workspace></gaia-canvas-workspace>` ), }"},{"kind":"variable","name":"Creating","type":{"text":"Story"},"default":"{ render: () => withCanvasStore( { title: 'My Canvas', activeTab: 'code', status: 'creating', content: '', language: 'tsx', kind: 'react-app', }, html`<gaia-canvas-workspace></gaia-canvas-workspace>` ), }"},{"kind":"variable","name":"Updating","type":{"text":"Story"},"default":"{ render: () => withCanvasStore( { title: 'My Canvas', activeTab: 'code', status: 'updating', content: sampleCode, language: 'tsx', kind: 'react-app', }, html`<gaia-canvas-workspace></gaia-canvas-workspace>` ), }"}],"exports":[{"kind":"custom-element-definition","name":"story-canvas-workspace-wrapper","declaration":{"name":"StoryCanvasWorkspaceWrapper","module":"components/canvas/canvas-workspace/canvas-workspace.stories.js"}},{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/canvas/canvas-workspace/canvas-workspace.stories.js"}},{"kind":"js","name":"CodeTab","declaration":{"name":"CodeTab","module":"components/canvas/canvas-workspace/canvas-workspace.stories.js"}},{"kind":"js","name":"Creating","declaration":{"name":"Creating","module":"components/canvas/canvas-workspace/canvas-workspace.stories.js"}},{"kind":"js","name":"Updating","declaration":{"name":"Updating","module":"components/canvas/canvas-workspace/canvas-workspace.stories.js"}}]},{"kind":"javascript-module","path":"components/canvas/canvas-workspace/canvas-workspace.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/canvas/canvas-workspace/canvas-workspace.styles.js"}}]},{"kind":"javascript-module","path":"components/canvas/canvas-workspace/canvas-workspace.test.js","declarations":[{"kind":"class","description":"","name":"TestWrapper","members":[{"kind":"field","name":"store","default":"sharedStore","type":{"text":"MockCanvasStore"}}],"superclass":{"name":"LitElement","package":"lit"},"tagName":"test-wrapper-canvas-revision-selector","customElement":true}],"exports":[{"kind":"custom-element-definition","name":"test-wrapper-canvas-workspace","declaration":{"name":"TestWrapper","module":"components/canvas/canvas-workspace/canvas-workspace.test.js"}}]},{"kind":"javascript-module","path":"components/canvas/canvas-workspace/canvas-workspace.js","declarations":[{"kind":"class","description":"Side panel workspace for viewing and editing canvas content.\n\nRenders a toolbar and either a code view or a live preview (HTML or\nreport) depending on the active tab. Shows a progress shimmer while\nthe canvas is being created or updated.","name":"CanvasWorkspace","members":[{"kind":"field","name":"ctrl","privacy":"private","default":"new CanvasStoreController(this, (s) => ({ active: s.active, activeTab: s.activeTab, status: s.status, title: s.title, content: s.content, language: s.language, kind: s.kind, }))"},{"kind":"method","name":"renderPreview","privacy":"private"},{"kind":"field","name":"handleRenderResult","privacy":"private"},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-canvas-workspace","customElement":true}],"exports":[{"kind":"js","name":"CanvasWorkspace","declaration":{"name":"CanvasWorkspace","module":"components/canvas/canvas-workspace/canvas-workspace.js"}},{"kind":"custom-element-definition","name":"gaia-canvas-workspace","declaration":{"name":"CanvasWorkspace","module":"components/canvas/canvas-workspace/canvas-workspace.js"}}]},{"kind":"javascript-module","path":"components/canvas/iframe-preview/iframe-preview.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"components/canvas/iframe-preview/iframe-preview.js","declarations":[{"kind":"class","description":"Unified iframe preview component supporting two rendering modes:\n\n- **transpile**: Transpiles TSX/JSX source with Sucrase (lazy-loaded),\n then posts the compiled code to a renderer iframe served from the API.\n- **html**: Renders report-source-html content directly as complete HTML\n with DOMPurify sanitization and optional ECharts bundle injection.","name":"IframePreview","members":[{"kind":"field","name":"content","type":{"text":"string"},"default":"''","attribute":"content"},{"kind":"field","name":"title","type":{"text":"string"},"default":"''","attribute":"title"},{"kind":"field","name":"mode","type":{"text":"IframePreviewMode"},"default":"'transpile'","description":"Rendering mode: 'transpile' for TSX/JSX, 'html' for report HTML.","attribute":"mode"},{"kind":"field","name":"rendererUrl","type":{"text":"string"},"default":"''","description":"URL of the canvas renderer app (transpile mode only).","attribute":"renderer-url"},{"kind":"field","name":"chartsScriptUrl","type":{"text":"string"},"default":"''","description":"URL of the ECharts bundle script (html mode only).","attribute":"charts-script-url"},{"kind":"field","name":"iframeRef","privacy":"private"},{"kind":"field","name":"pendingCode","type":{"text":"string | null"},"privacy":"private","default":"null"},{"kind":"field","name":"preview","type":{"text":"IframePreviewController"},"privacy":"private"},{"kind":"field","name":"htmlRenderGeneration","type":{"text":"number"},"privacy":"private","default":"0"},{"kind":"method","name":"getRendererOrigin","privacy":"private","return":{"type":{"text":"string"}},"description":"Target origin for postMessage to the sandboxed iframe.\nWithout `allow-same-origin`, the iframe gets an opaque origin,\nso we must use '*'. The iframe sandbox (allow-scripts only) prevents\nsame-origin access, cookie/storage reads, navigation, and popups.\nOnly transpiled source code is transmitted — no auth tokens or secrets."},{"kind":"field","name":"handleRendererReady","privacy":"private"},{"kind":"method","name":"transpileAndSend","privacy":"private","return":{"type":{"text":"Promise<void>"}}},{"kind":"method","name":"updateIframeHtml","privacy":"private","return":{"type":{"text":"Promise<void>"}}},{"kind":"method","name":"sanitizeContent","privacy":"private","return":{"type":{"text":"{ sanitized: string; isFullDocument: boolean }"}},"description":"Single source of truth for report sanitization. Branches on whether the\nLLM produced a full document or a fragment, runs DOMPurify with the\nmatching options, then runs the defense-in-depth post-pass. Both the\nchart-bundle precheck in `updateIframeHtml` and the final `buildHtml`\ncall site consume the same output, so detection and rendering can never\ndisagree about what survives sanitisation."},{"kind":"method","name":"loadChartsScript","privacy":"private","return":{"type":{"text":"Promise<string | null>"}}},{"kind":"method","name":"errorHarness","privacy":"private","static":true,"return":{"type":{"text":"string"}},"parameters":[{"name":"nonce","type":{"text":"string"}}],"description":"Returns the error harness script tag with a per-render CSP nonce.\nThe nonce matches the one embedded in the Content-Security-Policy meta\ntag, so `script-src 'unsafe-inline'` is not required."},{"kind":"method","name":"buildCspMeta","privacy":"private","static":true,"return":{"type":{"text":"string"}},"parameters":[{"name":"nonce","type":{"text":"string"}}],"description":"Returns the CSP meta tag for the report iframe, scoped to a per-render\nnonce.\n\nUsing a nonce eliminates the need for `script-src 'unsafe-inline'`:\nonly `<script nonce=\"…\">` elements whose nonce matches the policy are\nexecuted, so a DOMPurify zero-day that lets an inline `<script>` survive\nsanitization cannot execute — it would have no nonce.\n\nThe iframe is loaded via `srcdoc`, which does not receive the server's\nHTTP-header CSP applied to /canvas/*. The policy therefore lives inside\nthe document itself and mirrors the transpile-renderer policy\n(assistant/src/Api/Program.cs). `connect-src 'none'` is the critical\ndirective — it blocks fetch/XHR/beacon so surviving scripts cannot\nexfiltrate report contents to an external host."},{"kind":"field","name":"REPORT_FORBID_TAGS","type":{"text":"array"},"privacy":"private","static":true,"readonly":true,"default":"[ 'script', 'iframe', 'embed', 'object', 'link', 'meta', 'base', 'form', 'math', 'audio', 'video', 'picture', 'source', 'track', ]","description":"Tags stripped from LLM-authored report HTML. Script/handler removal is\nalready covered by DOMPurify defaults; these add belt-and-braces against\ntags that can navigate, load external resources, or submit data.\n\nNotably *not* forbidden — these are intended report features:\n - `<svg>`: pdf-report skill instructs the LLM to inline SVG icons\n and diagrams (see `assistant/src/Plugins/PdfReport/skills/.../SKILL.md`).\n The script-execution risk from SVG-mediated DOMPurify mXSS is\n neutralised by the per-render CSP nonce — a surviving inline `<script>`\n would have no nonce and the browser would refuse to run it.\n - `<img>`: pdf-report supports PNG data URIs (`src=\"data:image/png;…\"`),\n and the iframe CSP already restricts `img-src` to `data: blob:`.\n - `<style>`: pdf-report embeds all CSS in `<style>` blocks. The element\n itself is safe; CSS-injection-via-attribute is blocked by\n `REPORT_FORBID_ATTRS` below."},{"kind":"field","name":"REPORT_FORBID_ATTRS","type":{"text":"array"},"privacy":"private","static":true,"readonly":true,"default":"['style']","description":"Attributes stripped from LLM-authored report HTML. The inline `style`\nattribute is the main UI-spoofing vector left after `<script>`/handler\nremoval — e.g. `<div style=\"position:fixed;inset:0;background:#fff;\nz-index:9999\">…fake content…</div>` could mask the rest of the report\ninside the iframe. The pdf-report skill never instructs the LLM to use\ninline `style` attributes (it embeds all CSS in a `<style>` block), so\nforbidding the attribute does not regress intended functionality."},{"kind":"method","name":"buildHtml","privacy":"private","return":{"type":{"text":"string"}},"parameters":[{"name":"sanitized","type":{"text":"string"}},{"name":"isFullDocument","type":{"text":"boolean"}},{"name":"chartsScript","type":{"text":"string"}},{"name":"nonce","type":{"text":"string"}}]},{"kind":"method","name":"escapeHtml","privacy":"private","return":{"type":{"text":"string"}},"parameters":[{"name":"text","type":{"text":"string"}}]},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"events":[{"description":"Bubbles render success or error details","name":"canvas-render-result"}],"attributes":[{"name":"content","type":{"text":"string"},"default":"''","fieldName":"content"},{"name":"title","type":{"text":"string"},"default":"''","fieldName":"title"},{"name":"mode","type":{"text":"IframePreviewMode"},"default":"'transpile'","description":"Rendering mode: 'transpile' for TSX/JSX, 'html' for report HTML.","fieldName":"mode"},{"name":"renderer-url","type":{"text":"string"},"default":"''","description":"URL of the canvas renderer app (transpile mode only).","fieldName":"rendererUrl"},{"name":"charts-script-url","type":{"text":"string"},"default":"''","description":"URL of the ECharts bundle script (html mode only).","fieldName":"chartsScriptUrl"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-iframe-preview","customElement":true}],"exports":[{"kind":"js","name":"IframePreview","declaration":{"name":"IframePreview","module":"components/canvas/iframe-preview/iframe-preview.js"}},{"kind":"custom-element-definition","name":"gaia-iframe-preview","declaration":{"name":"IframePreview","module":"components/canvas/iframe-preview/iframe-preview.js"}}]},{"kind":"javascript-module","path":"components/composer/disclaimer/disclaimer.stories.js","declarations":[{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Components/Disclaimer', component: 'gaia-disclaimer', }"},{"kind":"variable","name":"Default","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"max-width: 400px;\"> <gaia-disclaimer></gaia-disclaimer> </div>`, }"}],"exports":[{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/composer/disclaimer/disclaimer.stories.js"}},{"kind":"js","name":"Default","declaration":{"name":"Default","module":"components/composer/disclaimer/disclaimer.stories.js"}}]},{"kind":"javascript-module","path":"components/composer/disclaimer/disclaimer.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"components/composer/disclaimer/disclaimer.js","declarations":[{"kind":"class","description":"AI disclaimer notice displayed below the message composer.\n\nShows a static message informing users that answers are AI-generated\nand may contain errors, with a link to the terms of use.","name":"GaiaDisclaimer","members":[{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-disclaimer","customElement":true}],"exports":[{"kind":"js","name":"GaiaDisclaimer","declaration":{"name":"GaiaDisclaimer","module":"components/composer/disclaimer/disclaimer.js"}},{"kind":"custom-element-definition","name":"gaia-disclaimer","declaration":{"name":"GaiaDisclaimer","module":"components/composer/disclaimer/disclaimer.js"}}]},{"kind":"javascript-module","path":"components/composer/message-composer.stories.js","declarations":[{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Components/Message Composer', component: 'gaia-message-composer', }"},{"kind":"variable","name":"Default","type":{"text":"Story"},"default":"{ render: () => html`<gaia-message-composer></gaia-message-composer>`, }"}],"exports":[{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/composer/message-composer.stories.js"}},{"kind":"js","name":"Default","declaration":{"name":"Default","module":"components/composer/message-composer.stories.js"}}]},{"kind":"javascript-module","path":"components/composer/message-composer.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/composer/message-composer.styles.js"}}]},{"kind":"javascript-module","path":"components/composer/message-composer.test.js","declarations":[{"kind":"class","description":"","name":"TestWrapper","members":[{"kind":"field","name":"store","type":{"text":"MockChatStore & ChatStore"},"default":"createMockChatStore()"}],"superclass":{"name":"LitElement","package":"lit"},"tagName":"test-wrapper-canvas-revision-selector","customElement":true}],"exports":[{"kind":"custom-element-definition","name":"test-wrapper-composer","declaration":{"name":"TestWrapper","module":"components/composer/message-composer.test.js"}}]},{"kind":"javascript-module","path":"components/composer/message-composer.js","declarations":[{"kind":"class","description":"Text input area for composing and sending messages.\n\nProvides an auto-resizing textarea, character count validation,\nsuggested question pills (when the conversation is empty), a send\nbutton, and the AI disclaimer. Routes messages to either the AI\nagent or the support operator depending on the active channel.","name":"GaiaMessageComposer","members":[{"kind":"field","name":"debounceTimer","type":{"text":"number | undefined"},"privacy":"private"},{"kind":"field","name":"resizeController","privacy":"private","default":"new ResizeController(this)"},{"kind":"field","name":"ctrl","privacy":"private","default":"new StoreController(this, selectComposerState)"},{"kind":"field","name":"textareaWrap","type":{"text":"HTMLDivElement"}},{"kind":"field","name":"textarea","type":{"text":"HTMLTextAreaElement"}},{"kind":"field","name":"autosize","type":{"text":"HTMLDivElement"}},{"kind":"field","name":"attachmentInput","type":{"text":"HTMLInputElement | undefined"}},{"kind":"field","name":"value","type":{"text":"string"},"privacy":"private","default":"''"},{"kind":"field","name":"invalid","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"field","name":"pendingAttachment","type":{"text":"MessageAttachment | null"},"privacy":"private","default":"null"},{"kind":"field","name":"pendingAttachmentPreviewUrl","type":{"text":"string | null"},"privacy":"private","default":"null"},{"kind":"field","name":"attachmentError","type":{"text":"string | null"},"privacy":"private","default":"null"},{"kind":"field","name":"uploadingAttachment","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"field","name":"isRecording","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"field","name":"speechSupported","type":{"text":"boolean"},"privacy":"private","default":"!!SpeechRecognitionAPI"},{"kind":"field","name":"recognition","type":{"text":"SpeechRecognitionLike | null"},"privacy":"private","default":"null"},{"kind":"field","name":"profileId","type":{"text":"string"},"default":"'default'","attribute":"profile-id"},{"kind":"field","name":"hostContextProvider","type":{"text":"HostContextProvider | undefined"}},{"kind":"field","name":"rows","type":{"text":"number"},"default":"1","attribute":"rows"},{"kind":"field","name":"maxRows","type":{"text":"number"},"default":"5","attribute":"max-rows"},{"kind":"field","name":"notAllowedToSendMessage","privacy":"private","readonly":true},{"kind":"field","name":"canUseVoiceDictation","privacy":"private","readonly":true},{"kind":"method","name":"isMessageNotAllowed","privacy":"private","return":{"type":{"text":"boolean"}},"parameters":[{"name":"message","type":{"text":"string"}}]},{"kind":"method","name":"validateInput","privacy":"private"},{"kind":"method","name":"initSpeechRecognition","privacy":"private"},{"kind":"method","name":"toggleRecording","privacy":"private"},{"kind":"method","name":"handleChange","privacy":"private"},{"kind":"method","name":"handleInput","privacy":"private"},{"kind":"field","name":"handleFeedbackClosed","privacy":"private"},{"kind":"method","name":"closeFeedbackIfOpen","privacy":"private"},{"kind":"method","name":"handleSendMessage","privacy":"private","parameters":[{"name":"messageOverride","optional":true,"type":{"text":"string"}},{"name":"source","default":"'typed'","type":{"text":"'typed' | 'suggested_question'"}}]},{"kind":"method","name":"handleStopMessage","privacy":"private"},{"kind":"method","name":"resolveHostContext","privacy":"private","return":{"type":{"text":"Promise<HostContext | null>"}}},{"kind":"method","name":"dispatchToSupport","privacy":"private","return":{"type":{"text":"void"}},"parameters":[{"name":"message","type":{"text":"string"}}]},{"kind":"method","name":"dispatchToAssistant","privacy":"private","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"message","type":{"text":"string"}},{"name":"source","type":{"text":"'typed' | 'suggested_question'"}}]},{"kind":"method","name":"handleAttachmentButtonClick","privacy":"private"},{"kind":"method","name":"clearPendingAttachment","privacy":"private","parameters":[{"name":"errorMessage","default":"null","type":{"text":"string | null"}}]},{"kind":"method","name":"handleAttachmentSelected","privacy":"private","parameters":[{"name":"event","type":{"text":"Event"}}]},{"kind":"method","name":"handleSuggestedQuestionClick","privacy":"private","parameters":[{"name":"question","type":{"text":"string"}}]},{"kind":"method","name":"handleKeyDown","privacy":"private","parameters":[{"name":"e","type":{"text":"KeyboardEvent"}}]},{"kind":"method","name":"maybeEmitTyping","privacy":"private"},{"kind":"method","name":"createPreviewUrl","privacy":"private","return":{"type":{"text":"string | null"}},"parameters":[{"name":"file","type":{"text":"File"}}]},{"kind":"method","name":"revokePendingAttachmentPreviewUrl","privacy":"private"},{"kind":"method","name":"focus","parameters":[{"name":"options","optional":true,"type":{"text":"FocusOptions"}}],"description":"Sets focus on the textarea."},{"kind":"method","name":"blur","description":"Removes focus from the textarea."},{"kind":"method","name":"select","description":"Selects all the text in the textarea."},{"kind":"method","name":"getPendingAttachmentPreview","privacy":"private","return":{"type":{"text":"MessageAttachment"}}},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"events":[{"name":"message","type":{"text":"MessageSentEvent"}},{"type":{"text":"MessageSentEvent"},"description":"When the user sends a message","name":"message-sent"}],"attributes":[{"name":"profile-id","type":{"text":"string"},"default":"'default'","fieldName":"profileId"},{"name":"rows","type":{"text":"number"},"default":"1","fieldName":"rows"},{"name":"max-rows","type":{"text":"number"},"default":"5","fieldName":"maxRows"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-message-composer","customElement":true}],"exports":[{"kind":"js","name":"GaiaMessageComposer","declaration":{"name":"GaiaMessageComposer","module":"components/composer/message-composer.js"}},{"kind":"custom-element-definition","name":"gaia-message-composer","declaration":{"name":"GaiaMessageComposer","module":"components/composer/message-composer.js"}}]},{"kind":"javascript-module","path":"components/conversation/activity-indicator/activity-indicator.stories.js","declarations":[{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Components/Activity Indicator', component: 'gaia-activity-indicator', argTypes: { activityType: { control: 'select', options: ['SUPPORT_SESSION_BEGIN', 'SUPPORT_SESSION_END'], }, }, }"},{"kind":"variable","name":"SupportBegin","type":{"text":"Story"},"default":"{ args: { activityType: 'SUPPORT_SESSION_BEGIN' }, render: ({ activityType }) => html`<div style=\"max-width: 400px;\"> <gaia-activity-indicator activity-type=${activityType}></gaia-activity-indicator> </div>`, }"},{"kind":"variable","name":"SupportEnd","type":{"text":"Story"},"default":"{ args: { activityType: 'SUPPORT_SESSION_END' }, render: ({ activityType }) => html`<div style=\"max-width: 400px;\"> <gaia-activity-indicator activity-type=${activityType}></gaia-activity-indicator> </div>`, }"}],"exports":[{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/conversation/activity-indicator/activity-indicator.stories.js"}},{"kind":"js","name":"SupportBegin","declaration":{"name":"SupportBegin","module":"components/conversation/activity-indicator/activity-indicator.stories.js"}},{"kind":"js","name":"SupportEnd","declaration":{"name":"SupportEnd","module":"components/conversation/activity-indicator/activity-indicator.stories.js"}}]},{"kind":"javascript-module","path":"components/conversation/activity-indicator/activity-indicator.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"components/conversation/activity-indicator/activity-indicator.js","declarations":[{"kind":"class","description":"Inline divider that marks support session transitions in the conversation.\n\nRenders a horizontal rule with an icon and label indicating a support\nsession has started or ended (e.g. \"You have been connected to support\").","name":"GaiaActivityIndicator","members":[{"kind":"field","name":"activityType","type":{"text":"SupportSessionActivityType | undefined"},"description":"The activity type to display.","attribute":"activity-type"},{"kind":"method","name":"getActivityContent","privacy":"private","return":{"type":{"text":"{ icon: IconName; text: string } | null"}}},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"attributes":[{"name":"activity-type","type":{"text":"SupportSessionActivityType | undefined"},"description":"The activity type to display.","fieldName":"activityType"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-activity-indicator","customElement":true}],"exports":[{"kind":"js","name":"GaiaActivityIndicator","declaration":{"name":"GaiaActivityIndicator","module":"components/conversation/activity-indicator/activity-indicator.js"}},{"kind":"custom-element-definition","name":"gaia-activity-indicator","declaration":{"name":"GaiaActivityIndicator","module":"components/conversation/activity-indicator/activity-indicator.js"}}]},{"kind":"javascript-module","path":"components/conversation/context-changed-divider/context-changed-divider.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"components/conversation/context-changed-divider/context-changed-divider.js","declarations":[{"kind":"class","description":"Visual divider rendered between two adjacent user messages whose host-supplied\ncontext differs (e.g. the host app pivoted from one customer to another mid-chat).\n\nRenders a centered \"Context changed\" disclosure button between two horizontal\nrules. Clicking the button toggles a panel below that lists the per-key diff —\nadded / changed / removed entries — so the user can compare what shifted.","name":"GaiaContextChangedDivider","members":[{"kind":"field","name":"diff","type":{"text":"HostContextDiff | undefined"},"description":"Per-key diff of host context. Drives the expanded comparison view."},{"kind":"field","name":"expanded","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"field","name":"toggle","privacy":"private"},{"kind":"method","name":"renderEntries","privacy":"private","parameters":[{"name":"entries","type":{"text":"Array<readonly [string, unknown]>"}},{"name":"formatValue","type":{"text":"(v: unknown) => unknown"}}]},{"kind":"method","name":"renderDetails","privacy":"private"},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-context-changed-divider","customElement":true}],"exports":[{"kind":"js","name":"GaiaContextChangedDivider","declaration":{"name":"GaiaContextChangedDivider","module":"components/conversation/context-changed-divider/context-changed-divider.js"}},{"kind":"custom-element-definition","name":"gaia-context-changed-divider","declaration":{"name":"GaiaContextChangedDivider","module":"components/conversation/context-changed-divider/context-changed-divider.js"}}]},{"kind":"javascript-module","path":"components/conversation/context-divider.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"components/conversation/context-divider.js","declarations":[{"kind":"function","name":"shouldFireContextChangedDivider","return":{"type":{"text":"boolean"}},"parameters":[{"name":"previous","type":{"text":"HostContextSnapshot | undefined"}},{"name":"current","type":{"text":"HostContextSnapshot | undefined"}}],"description":"Decide whether a \"Context changed\" divider should fire between two adjacent user\nmessages' host-context snapshots. Fires whenever the two snapshots differ, treating\n`undefined`/`null` as a first-class \"no host context\" state — so a transition from\n`{ companyId: 123 }` to `undefined` (e.g. user switched profile and the host stopped\nforwarding companyId) draws a line, just like any other change. The first user\nmessage in a conversation never fires; that gating happens in\n`computeContextChangedMessageIds`, not here.\n\nBoth ends of the pipeline serialize via JSON-shaped objects, so a key-sorted\nrecursive deep-equal is sufficient — we don't need to handle Maps, Dates, or other\nnon-JSON types."},{"kind":"function","name":"describeHostContextDiff","return":{"type":{"text":"HostContextDiff"}},"parameters":[{"name":"previous","type":{"text":"HostContextSnapshot | undefined"}},{"name":"current","type":{"text":"HostContextSnapshot | undefined"}}],"description":"Classify the differences between two host-context snapshots into added / removed /\nchanged keys. The result is passed straight into `<gaia-context-changed-divider>`,\nwhich renders it as the expandable comparison view shown when the user opens the\ndivider."},{"kind":"function","name":"computeContextChangedMessageIds","return":{"type":{"text":"Map<string, HostContextDiff>"}},"parameters":[{"name":"messages","type":{"text":"UiMessage[]"}},{"name":"contexts","type":{"text":"Record<string, HostContextSnapshot>"}}],"description":"Identify user messages that need a \"Context changed\" divider rendered above them,\npaired with the summary the divider should display. A user message qualifies when\nits recorded host-context differs from the previous user message's — including\ntransitions to/from \"no recorded context\". The very first user message never\nqualifies because there's no prior turn to compare to.\n\nWorks identically for live sends (snapshot written by the run-coordinator) and\nrehydrated chats (snapshot loaded from `conversation_v2_messages` via the restore\npath) — both populate the same `messageHostContexts` map.\n\nReturns a Map of message id → diff describing the per-key change. The divider\nuses the diff to render its expanded comparison view on demand. O(1) lookup per\ngroup."},{"kind":"function","name":"deepEqual","return":{"type":{"text":"boolean"}},"parameters":[{"name":"a","type":{"text":"unknown"}},{"name":"b","type":{"text":"unknown"}}],"description":"Internal JSON-shape deep-equal. Exported solely for unit tests that lock in the\nkey-order-independence and array-vs-object behavior the divider gating depends on.\nNot part of the module's public API — callers should use `shouldFireContextChangedDivider`\nor `describeHostContextDiff` instead of comparing snapshots directly."}],"exports":[{"kind":"js","name":"shouldFireContextChangedDivider","declaration":{"name":"shouldFireContextChangedDivider","module":"components/conversation/context-divider.js"}},{"kind":"js","name":"describeHostContextDiff","declaration":{"name":"describeHostContextDiff","module":"components/conversation/context-divider.js"}},{"kind":"js","name":"computeContextChangedMessageIds","declaration":{"name":"computeContextChangedMessageIds","module":"components/conversation/context-divider.js"}},{"kind":"js","name":"deepEqual","declaration":{"name":"deepEqual","module":"components/conversation/context-divider.js"}}]},{"kind":"javascript-module","path":"components/conversation/conversation.stories.js","declarations":[{"kind":"class","description":"","name":"StoryConversationWrapper","members":[{"kind":"field","name":"store"}],"superclass":{"name":"LitElement","package":"lit"},"tagName":"story-conversation-wrapper","customElement":true},{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Components/Conversation', component: 'gaia-conversation', }"},{"kind":"variable","name":"Default","type":{"text":"Story"},"default":"{ render: () => { const store = createStoryStore({ messages: allMessages }); return html` <story-conversation-wrapper .store=${store}> <gaia-conversation></gaia-conversation> </story-conversation-wrapper> `; }, }"},{"kind":"variable","name":"Empty","type":{"text":"Story"},"default":"{ render: () => { const store = createStoryStore({ welcomeMessages: { en: { title: 'Welcome to Gaia!', body: 'How can I help you today?', blocks: [], callToAction: 'Ask me anything', }, }, }); return html` <story-conversation-wrapper .store=${store}> <gaia-conversation></gaia-conversation> </story-conversation-wrapper> `; }, }"},{"kind":"variable","name":"Thinking","type":{"text":"Story"},"default":"{ render: () => { const store = createStoryStore({ messages: [userMessage], runState: 'thinking', }); return html` <story-conversation-wrapper .store=${store}> <gaia-conversation></gaia-conversation> </story-conversation-wrapper> `; }, }"},{"kind":"variable","name":"ToolCallFlow","type":{"text":"Story"},"default":"{ render: () => { const store = createStoryStore({ messages: toolFlowMessages, toolCallSummaries: { 'tc-fail-1': 'Searching documents…', 'tc-ok-1': 'Searched documents', }, }); return html` <story-conversation-wrapper .store=${store}> <gaia-conversation></gaia-conversation> </story-conversation-wrapper> `; }, }"},{"kind":"variable","name":"MultiMessageRunGroup","type":{"text":"Story"},"default":"{ render: () => { const store = createStoryStore({ messages: multiMessageRunMessages, messageRunIds: { 'mr-asst-1': 'run-multi', 'mr-op-1': 'run-multi', 'mr-asst-2': 'run-multi', }, }); return html` <story-conversation-wrapper .store=${store}> <gaia-conversation></gaia-conversation> </story-conversation-wrapper> `; }, }"},{"kind":"variable","name":"SupportFlow","type":{"text":"Story"},"default":"{ render: () => { const store = createStoryStore({ messages: supportFlowMessages, channel: 'support', features: { conversationSharing: true }, }); return html` <story-conversation-wrapper .store=${store}> <gaia-conversation></gaia-conversation> </story-conversation-wrapper> `; }, }"}],"exports":[{"kind":"custom-element-definition","name":"story-conversation-wrapper","declaration":{"name":"StoryConversationWrapper","module":"components/conversation/conversation.stories.js"}},{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/conversation/conversation.stories.js"}},{"kind":"js","name":"Default","declaration":{"name":"Default","module":"components/conversation/conversation.stories.js"}},{"kind":"js","name":"Empty","declaration":{"name":"Empty","module":"components/conversation/conversation.stories.js"}},{"kind":"js","name":"Thinking","declaration":{"name":"Thinking","module":"components/conversation/conversation.stories.js"}},{"kind":"js","name":"ToolCallFlow","declaration":{"name":"ToolCallFlow","module":"components/conversation/conversation.stories.js"}},{"kind":"js","name":"MultiMessageRunGroup","declaration":{"name":"MultiMessageRunGroup","module":"components/conversation/conversation.stories.js"}},{"kind":"js","name":"SupportFlow","declaration":{"name":"SupportFlow","module":"components/conversation/conversation.stories.js"}}]},{"kind":"javascript-module","path":"components/conversation/conversation.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/conversation/conversation.styles.js"}}]},{"kind":"javascript-module","path":"components/conversation/conversation.js","declarations":[{"kind":"class","description":"Scrollable message list that renders the full conversation.\r\n\r\nDisplays welcome content when the conversation is empty, then switches\r\nto a block-based message list as messages arrive. Handles auto-scrolling,\r\nthinking indicators, inline error notifications, the feedback form, and\r\nfeedback confirmation.","name":"GaiaConversation","members":[{"kind":"field","name":"containerRef","privacy":"private"},{"kind":"field","name":"scrollViewRef","privacy":"private"},{"kind":"field","name":"lastMessageRef","privacy":"private"},{"kind":"field","name":"selectConversationState","privacy":"private"},{"kind":"field","name":"ctrl","privacy":"private","default":"new StoreController(this, (s) => this.selectConversationState(s, getLocale()))"},{"kind":"field","name":"sharingCtrl","privacy":"private","default":"new StoreController(this, selectSharingPromptState)"},{"kind":"field","name":"sharingPromptTriggered","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"field","name":"handleThumb","privacy":"private"},{"kind":"field","name":"scrollCtrl","privacy":"private","default":"new ConversationScrollController( this, this.containerRef, this.scrollViewRef, () => this.ctrl.value, () => this.lastMessageRef.value as HTMLElement | undefined )"},{"kind":"method","name":"handleSharingPromptResponse","privacy":"private","return":{"type":{"text":"void"}},"parameters":[{"name":"e","type":{"text":"CustomEvent<{ accepted: boolean }>"}}]},{"kind":"method","name":"shouldShowThinking","privacy":"private","return":{"type":{"text":"boolean"}},"parameters":[{"name":"renderableMessages","type":{"text":"UiMessage[]"}}],"description":"Whether the thinking indicator should be visible.\r\nHidden when the last message is a pending tool call with a visible\r\nsummary — its status block shows its own shimmer animation."},{"kind":"method","name":"isMessageInActiveRun","privacy":"private","return":{"type":{"text":"boolean"}},"parameters":[{"name":"messageId","type":{"text":"string"}}],"description":"Check if a message belongs to the currently active (non-idle) run."},{"kind":"method","name":"renderRunGroup","privacy":"private","parameters":[{"name":"group","type":{"text":"RunGroup"}},{"name":"isLastGroup","type":{"text":"boolean"}},{"name":"contextChangedDiffs","type":{"text":"ReadonlyMap<string, HostContextDiff>"}}]},{"kind":"method","name":"renderRunGroupBody","privacy":"private","parameters":[{"name":"group","type":{"text":"RunGroup"}},{"name":"isLastGroup","type":{"text":"boolean"}}]},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-conversation","customElement":true}],"exports":[{"kind":"js","name":"GaiaConversation","declaration":{"name":"GaiaConversation","module":"components/conversation/conversation.js"}},{"kind":"custom-element-definition","name":"gaia-conversation","declaration":{"name":"GaiaConversation","module":"components/conversation/conversation.js"}}]},{"kind":"javascript-module","path":"components/conversation/markdown-content/citation-injector.js","declarations":[{"kind":"function","name":"injectCitationLinks","return":{"type":{"text":"void"}},"parameters":[{"name":"container","type":{"text":"HTMLElement"}},{"name":"citationMap","type":{"text":"Map<string, SearchCitation>"}}],"description":"Walk text nodes in the container and replace citation markers with\n<gaia-citation-link> elements."}],"exports":[{"kind":"js","name":"injectCitationLinks","declaration":{"name":"injectCitationLinks","module":"components/conversation/markdown-content/citation-injector.js"}}]},{"kind":"javascript-module","path":"components/conversation/markdown-content/markdown-content.stories.js","declarations":[{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Components/Markdown Content', component: 'gaia-markdown-content', argTypes: { value: { control: 'text' }, streaming: { control: 'boolean' }, }, }"},{"kind":"variable","name":"Default","type":{"text":"Story"},"default":"{ args: { value: 'Hello, this is a **bold** and *italic* message with a [link](https://example.com).', streaming: false, }, render: ({ value, streaming }) => html`<div style=\"max-width: 500px;\"> <gaia-markdown-content .value=${value} ?streaming=${streaming}></gaia-markdown-content> </div>`, }"},{"kind":"variable","name":"RichContent","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"max-width: 500px;\"> <gaia-markdown-content .value=${`# Heading 1 ## Heading 2 Here is a paragraph with **bold**, *italic*, and \\`inline code\\`. - Item one - Item two - Item three \\`\\`\\`javascript function hello() { console.log(\"Hello, world!\"); } \\`\\`\\` > This is a blockquote | Column A | Column B | |----------|----------| | Cell 1 | Cell 2 | | Cell 3 | Cell 4 |`} ></gaia-markdown-content> </div>`, }"},{"kind":"variable","name":"Streaming","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"max-width: 500px;\"> <gaia-markdown-content .value=${'This message is currently being **streamed** from the AI agent...'} streaming ></gaia-markdown-content> </div>`, }"}],"exports":[{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/conversation/markdown-content/markdown-content.stories.js"}},{"kind":"js","name":"Default","declaration":{"name":"Default","module":"components/conversation/markdown-content/markdown-content.stories.js"}},{"kind":"js","name":"RichContent","declaration":{"name":"RichContent","module":"components/conversation/markdown-content/markdown-content.stories.js"}},{"kind":"js","name":"Streaming","declaration":{"name":"Streaming","module":"components/conversation/markdown-content/markdown-content.stories.js"}}]},{"kind":"javascript-module","path":"components/conversation/markdown-content/markdown-content.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/conversation/markdown-content/markdown-content.styles.js"}}]},{"kind":"javascript-module","path":"components/conversation/markdown-content/markdown-content.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"components/conversation/markdown-content/markdown-content.js","declarations":[{"kind":"class","description":"Renders a Markdown string as sanitized HTML with optional citation links.\r\n\r\nUses `marked` for parsing and `DOMPurify` for XSS protection. After the\r\ninitial render, footnote-style reference markers in the HTML are replaced\r\nwith interactive `<gaia-citation-link>` elements when citations are present.","name":"GaiaMarkdownContent","members":[{"kind":"field","name":"value","type":{"text":"string"},"default":"''"},{"kind":"field","name":"citations","type":{"text":"SearchCitation[]"},"default":"[]"},{"kind":"field","name":"streaming","type":{"text":"boolean"},"default":"false","attribute":"streaming"},{"kind":"field","name":"boundaryElement","type":{"text":"HTMLElement | null"},"default":"null","description":"Positioning boundary element passed through to citation links."},{"kind":"field","name":"markdownEl","type":{"text":"HTMLDivElement"},"privacy":"private"},{"kind":"field","name":"citationMap","privacy":"private","default":"new Map<string, SearchCitation>()","description":"Index of citations by referenceId for quick lookup."},{"kind":"method","name":"updateCitationLinks","privacy":"private","return":{"type":{"text":"void"}},"description":"Propagate boundaryElement and disabled state to all injected citation links."},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"attributes":[{"name":"streaming","type":{"text":"boolean"},"default":"false","fieldName":"streaming"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-markdown-content","customElement":true}],"exports":[{"kind":"js","name":"GaiaMarkdownContent","declaration":{"name":"GaiaMarkdownContent","module":"components/conversation/markdown-content/markdown-content.js"}},{"kind":"custom-element-definition","name":"gaia-markdown-content","declaration":{"name":"GaiaMarkdownContent","module":"components/conversation/markdown-content/markdown-content.js"}}]},{"kind":"javascript-module","path":"components/conversation/markdown-content/markdown-kitchen-sink.stories.js","declarations":[{"kind":"class","description":"","name":"KitchenSinkWrapper","members":[{"kind":"field","name":"store"}],"superclass":{"name":"LitElement","package":"lit"},"tagName":"kitchen-sink-wrapper","customElement":true},{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Components/Markdown Content/Kitchen Sink', component: 'gaia-message', }"},{"kind":"variable","name":"AllVariants","type":{"text":"Story"},"default":"{ render: () => { const store = createStoryStore(); return html` <kitchen-sink-wrapper .store=${store}> <gaia-message .message=${markdownMessage}></gaia-message> </kitchen-sink-wrapper> `; }, }"},{"kind":"variable","name":"Streaming","type":{"text":"Story"},"default":"{ render: () => { const store = createStoryStore({ runState: 'streaming' }); const streamingMessage: UiAssistantMessage = { ...markdownMessage, id: 'msg-markdown-streaming', isStreaming: true, }; return html` <kitchen-sink-wrapper .store=${store}> <gaia-message .message=${streamingMessage}></gaia-message> </kitchen-sink-wrapper> `; }, }"}],"exports":[{"kind":"custom-element-definition","name":"kitchen-sink-wrapper","declaration":{"name":"KitchenSinkWrapper","module":"components/conversation/markdown-content/markdown-kitchen-sink.stories.js"}},{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/conversation/markdown-content/markdown-kitchen-sink.stories.js"}},{"kind":"js","name":"AllVariants","declaration":{"name":"AllVariants","module":"components/conversation/markdown-content/markdown-kitchen-sink.stories.js"}},{"kind":"js","name":"Streaming","declaration":{"name":"Streaming","module":"components/conversation/markdown-content/markdown-kitchen-sink.stories.js"}}]},{"kind":"javascript-module","path":"components/conversation/markdown-content/markdown-renderer.js","declarations":[{"kind":"function","name":"renderMarkdown","return":{"type":{"text":"string"}},"parameters":[{"name":"value","type":{"text":"string"}}],"description":"Parse markdown to sanitized HTML string.\nUses module-level marked + DOMPurify configuration."}],"exports":[{"kind":"js","name":"renderMarkdown","declaration":{"name":"renderMarkdown","module":"components/conversation/markdown-content/markdown-renderer.js"}}]},{"kind":"javascript-module","path":"components/conversation/welcome-message/welcome-message.stories.js","declarations":[{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Components/Welcome Message', component: 'gaia-welcome-message', }"},{"kind":"variable","name":"Default","type":{"text":"Story"},"default":"{ render: () => { return html`<div style=\"width: 400px;\"> <gaia-welcome-message .welcomeMessage=${data}></gaia-welcome-message> </div>`; }, }"}],"exports":[{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/conversation/welcome-message/welcome-message.stories.js"}},{"kind":"js","name":"Default","declaration":{"name":"Default","module":"components/conversation/welcome-message/welcome-message.stories.js"}}]},{"kind":"javascript-module","path":"components/conversation/welcome-message/welcome-message.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/conversation/welcome-message/welcome-message.styles.js"}}]},{"kind":"javascript-module","path":"components/conversation/welcome-message/welcome-message.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"components/conversation/welcome-message/welcome-message.js","declarations":[{"kind":"class","description":"Welcome screen shown when the conversation is empty.\n\nRenders a greeting title, optional body text, a call-to-action prompt,\noptional informational cards, and an optional inline consent prompt.","name":"GaiaWelcomeMessage","members":[{"kind":"field","name":"welcomeMessage","type":{"text":"WelcomeMessage | undefined"}},{"kind":"field","name":"showSharingPrompt","type":{"text":"boolean"},"default":"false","description":"Whether to show the inline sharing consent prompt below block cards."},{"kind":"method","name":"handleYes","privacy":"private"},{"kind":"method","name":"handleNo","privacy":"private"},{"kind":"method","name":"renderSharingPrompt","privacy":"private"},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"events":[{"name":"sharing-prompt-response","type":{"text":"CustomEvent"}}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-welcome-message","customElement":true}],"exports":[{"kind":"js","name":"GaiaWelcomeMessage","declaration":{"name":"GaiaWelcomeMessage","module":"components/conversation/welcome-message/welcome-message.js"}},{"kind":"custom-element-definition","name":"gaia-welcome-message","declaration":{"name":"GaiaWelcomeMessage","module":"components/conversation/welcome-message/welcome-message.js"}}]},{"kind":"javascript-module","path":"components/feedback/consent-dialog.stories.js","declarations":[{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Components/Consent Dialog', component: 'gaia-consent-dialog', }"},{"kind":"variable","name":"Default","type":{"text":"Story"},"default":"{ render: () => html`<div> <gaia-button @click=${(e: Event) => { const dialog = (e.target as HTMLElement) .closest('div')! .querySelector<GaiaConsentDialog>('gaia-consent-dialog'); dialog?.show(); }} >Open Consent Dialog</gaia-button > <gaia-consent-dialog></gaia-consent-dialog> </div>`, }"}],"exports":[{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/feedback/consent-dialog.stories.js"}},{"kind":"js","name":"Default","declaration":{"name":"Default","module":"components/feedback/consent-dialog.stories.js"}}]},{"kind":"javascript-module","path":"components/feedback/consent-dialog.js","declarations":[{"kind":"class","description":"Consent dialog asking whether to share the conversation for feedback review.\n\nOpened by the feedback form when conversation sharing is enabled.\nRenders a modal with Yes/No buttons and a privacy statement link.","name":"GaiaConsentDialog","members":[{"kind":"field","name":"isOpen","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"method","name":"show","privacy":"public","return":{"type":{"text":"Promise<void>"}},"description":"Shows the consent dialog and moves focus into it."},{"kind":"method","name":"close","privacy":"public","return":{"type":{"text":"void"}},"description":"Closes the consent dialog and restores focus."},{"kind":"method","name":"handleConsentConfirmed","privacy":"private","return":{"type":{"text":"void"}},"parameters":[{"name":"consent","type":{"text":"boolean"}}]},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"events":[{"name":"consent-confirmed","type":{"text":"CustomEvent"},"description":"When the user confirms or declines consent. `event.detail` contains `{ consent: boolean }`."}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-consent-dialog","customElement":true}],"exports":[{"kind":"js","name":"GaiaConsentDialog","declaration":{"name":"GaiaConsentDialog","module":"components/feedback/consent-dialog.js"}},{"kind":"custom-element-definition","name":"gaia-consent-dialog","declaration":{"name":"GaiaConsentDialog","module":"components/feedback/consent-dialog.js"}}]},{"kind":"javascript-module","path":"components/feedback/feedback-confirmation.test.js","declarations":[{"kind":"class","description":"","name":"TestWrapper","members":[{"kind":"field","name":"store","type":{"text":"MockChatStore"}}],"superclass":{"name":"LitElement","package":"lit"},"tagName":"test-wrapper-canvas-revision-selector","customElement":true}],"exports":[{"kind":"custom-element-definition","name":"test-wrapper-feedback-confirmation","declaration":{"name":"TestWrapper","module":"components/feedback/feedback-confirmation.test.js"}}]},{"kind":"javascript-module","path":"components/feedback/feedback-confirmation.js","declarations":[{"kind":"class","description":"Success notification shown after feedback is submitted.\n\nDisplays a \"Thank you\" message as a success notification. When the\nuser consented to share their conversation, also shows a Privacy ID\nwith a copy button so they can save it for data-deletion requests.","name":"GaiaFeedbackConfirmation","members":[{"kind":"field","name":"ctrl","privacy":"private","default":"new StoreController(this, selectFeedbackConfirmationState)"},{"kind":"field","name":"copyTimeoutId","type":{"text":"ReturnType<typeof setTimeout> | null"},"privacy":"private","default":"null"},{"kind":"field","name":"copied","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"field","name":"visitorUserId","type":{"text":"string | null"},"privacy":"private","readonly":true},{"kind":"field","name":"shouldShowPrivacyId","type":{"text":"boolean"},"privacy":"private","readonly":true},{"kind":"method","name":"handleClose","privacy":"private"},{"kind":"method","name":"clearCopyTimeout","privacy":"private"},{"kind":"method","name":"handleCopyPrivacyId","privacy":"private"},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-feedback-confirmation","customElement":true}],"exports":[{"kind":"js","name":"GaiaFeedbackConfirmation","declaration":{"name":"GaiaFeedbackConfirmation","module":"components/feedback/feedback-confirmation.js"}},{"kind":"custom-element-definition","name":"gaia-feedback-confirmation","declaration":{"name":"GaiaFeedbackConfirmation","module":"components/feedback/feedback-confirmation.js"}}]},{"kind":"javascript-module","path":"components/feedback/feedback.stories.js","declarations":[{"kind":"class","description":"","name":"StoryFeedbackWrapper","members":[{"kind":"field","name":"store"}],"superclass":{"name":"LitElement","package":"lit"},"tagName":"story-feedback-wrapper","customElement":true},{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Components/Feedback', component: 'gaia-feedback', }"},{"kind":"variable","name":"Default","type":{"text":"Story"},"default":"{ render: () => html` <story-feedback-wrapper> <gaia-feedback></gaia-feedback> </story-feedback-wrapper> `, }"},{"kind":"variable","name":"SupportTarget","type":{"text":"Story"},"default":"{ render: () => html` <story-feedback-wrapper .store=${createStoryStore({ feedbackFormTarget: 'support' })}> <gaia-feedback></gaia-feedback> </story-feedback-wrapper> `, }"},{"kind":"variable","name":"WithConversationSharing","type":{"text":"Story"},"default":"{ render: () => html` <story-feedback-wrapper .store=${createStoryStore({ features: { conversationSharing: true } })}> <gaia-feedback></gaia-feedback> </story-feedback-wrapper> `, }"},{"kind":"variable","name":"Confirmation","type":{"text":"Story"},"default":"{ render: () => html` <story-feedback-wrapper .store=${createStoryStore({ feedbackConfirmationVisible: true })}> <gaia-feedback-confirmation></gaia-feedback-confirmation> </story-feedback-wrapper> `, }"},{"kind":"variable","name":"ConfirmationWithPrivacyId","type":{"text":"Story"},"default":"{ render: () => html` <story-feedback-wrapper .store=${createStoryStore({ feedbackConfirmationVisible: true, features: { conversationSharing: true }, feedbackConsentGiven: true, })} > <gaia-feedback-confirmation></gaia-feedback-confirmation> </story-feedback-wrapper> `, }"}],"exports":[{"kind":"custom-element-definition","name":"story-feedback-wrapper","declaration":{"name":"StoryFeedbackWrapper","module":"components/feedback/feedback.stories.js"}},{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/feedback/feedback.stories.js"}},{"kind":"js","name":"Default","declaration":{"name":"Default","module":"components/feedback/feedback.stories.js"}},{"kind":"js","name":"SupportTarget","declaration":{"name":"SupportTarget","module":"components/feedback/feedback.stories.js"}},{"kind":"js","name":"WithConversationSharing","declaration":{"name":"WithConversationSharing","module":"components/feedback/feedback.stories.js"}},{"kind":"js","name":"Confirmation","declaration":{"name":"Confirmation","module":"components/feedback/feedback.stories.js"}},{"kind":"js","name":"ConfirmationWithPrivacyId","declaration":{"name":"ConfirmationWithPrivacyId","module":"components/feedback/feedback.stories.js"}}]},{"kind":"javascript-module","path":"components/feedback/feedback.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/feedback/feedback.styles.js"}}]},{"kind":"javascript-module","path":"components/feedback/feedback.test.js","declarations":[{"kind":"class","description":"","name":"TestWrapper","members":[{"kind":"field","name":"mockStore","type":{"text":"MockChatStore"},"readonly":true},{"kind":"field","name":"store","type":{"text":"ChatStore"},"default":"this.mockStore as unknown"}],"superclass":{"name":"LitElement","package":"lit"},"tagName":"test-wrapper-canvas-revision-selector","customElement":true}],"exports":[{"kind":"custom-element-definition","name":"test-wrapper-feedback","declaration":{"name":"TestWrapper","module":"components/feedback/feedback.test.js"}}]},{"kind":"javascript-module","path":"components/feedback/feedback.js","declarations":[{"kind":"class","description":"Feedback form for rating and commenting on the chat experience.\r\n\r\nRenders a 1–5 emoji rating scale and an optional comment textarea\r\ninside a focus-trapped dialog surface. When conversation sharing\r\nis enabled, submitting opens a consent dialog before finalizing.","name":"GaiaFeedback","members":[{"kind":"field","name":"ctrl","privacy":"private","default":"new StoreController(this, selectFeedbackState)"},{"kind":"field","name":"focusTrap","privacy":"private","default":"new FocusTrapController(this, 'gaia-surface', () => this.handleClose())"},{"kind":"field","name":"ratingInput","type":{"text":"HTMLFieldSetElement"},"privacy":"private"},{"kind":"field","name":"consentDialog","type":{"text":"HTMLElement & {\r\n show: () => void;\r\n }"},"privacy":"private"},{"kind":"field","name":"closeButton","type":{"text":"HTMLButtonElement"},"privacy":"private"},{"kind":"field","name":"selectedRating","type":{"text":"number"},"privacy":"private","default":"0"},{"kind":"field","name":"comment","type":{"text":"string"},"privacy":"private","default":"''"},{"kind":"method","name":"canSubmit","privacy":"private"},{"kind":"field","name":"ratingIcons","type":{"text":"array"},"privacy":"private","default":"[ { name: 'angry', value: 1, label: 'Very dissatisfied' }, { name: 'frown', value: 2, label: 'Dissatisfied' }, { name: 'meh', value: 3, label: 'Neutral' }, { name: 'smile', value: 4, label: 'Satisfied' }, { name: 'laugh', value: 5, label: 'Very satisfied' }, ]"},{"kind":"method","name":"handleRatingChange","privacy":"private","parameters":[{"name":"event","type":{"text":"Event"}}]},{"kind":"method","name":"handleCommentChange","privacy":"private","parameters":[{"name":"event","type":{"text":"Event"}}]},{"kind":"method","name":"handleSubmit","privacy":"private"},{"kind":"method","name":"handleConsentConfirmed","privacy":"private","parameters":[{"name":"event","type":{"text":"CustomEvent<ConsentConfirmedEvent>"}}]},{"kind":"method","name":"submitAndClose","privacy":"private","parameters":[{"name":"consent","type":{"text":"boolean"}}]},{"kind":"method","name":"handleKeyDown","privacy":"private","parameters":[{"name":"e","type":{"text":"KeyboardEvent"}}]},{"kind":"method","name":"handleClose","privacy":"private"},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"events":[{"type":{"text":"FeedbackSubmittedEvent"}},{"type":{"text":"FeedbackSubmittedEvent"},"description":"When feedback is successfully submitted","name":"feedback-submitted"},{"type":{"text":"FeedbackClosedEvent"},"description":"When the form is closed (via submit or dismiss)","name":"feedback-closed"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-feedback","customElement":true}],"exports":[{"kind":"js","name":"GaiaFeedback","declaration":{"name":"GaiaFeedback","module":"components/feedback/feedback.js"}},{"kind":"custom-element-definition","name":"gaia-feedback","declaration":{"name":"GaiaFeedback","module":"components/feedback/feedback.js"}}]},{"kind":"javascript-module","path":"components/history/history-item.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"components/history/history-item.js","declarations":[{"kind":"class","description":"A single row in GaiaHistoryView. Shows the title, a context label\nwhen available (customer / company / partner), a relative timestamp, and\nrow-level rename / delete actions.\n\nStays stateless w.r.t. the store — actions bubble up as CustomEvents and\nare handled by the parent `<gaia-history-view>` which forwards them to\n`HistoryCoordinator`. Rename uses a minimal inline edit mode to keep the\nMVP scope small (no modal component dependency).","name":"GaiaHistoryItem","members":[{"kind":"field","name":"summary","type":{"text":"ConversationSummary"}},{"kind":"field","name":"active","type":{"text":"boolean"},"default":"false","attribute":"active","reflects":true},{"kind":"field","name":"editing","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"field","name":"draftTitle","type":{"text":"string"},"privacy":"private","default":"''"},{"kind":"field","name":"handleSelect","privacy":"private"},{"kind":"field","name":"handleKeyDown","privacy":"private"},{"kind":"field","name":"startRename","privacy":"private"},{"kind":"field","name":"cancelRename","privacy":"private"},{"kind":"field","name":"confirmRename","privacy":"private"},{"kind":"field","name":"handleEditKey","privacy":"private"},{"kind":"field","name":"handleInput","privacy":"private"},{"kind":"field","name":"handleDelete","privacy":"private"},{"kind":"method","name":"getContextLabel","privacy":"private","return":{"type":{"text":"string | null"}}},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"events":[{"description":"When the row is activated. Detail: `{ summary }`.","name":"history-item-select"},{"description":"After the user confirms a new title. Detail: `{ id, title }`.","name":"history-item-rename"},{"description":"After the user confirms deletion. Detail: `{ id }`.","name":"history-item-delete"}],"attributes":[{"name":"active","type":{"text":"boolean"},"default":"false","fieldName":"active"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-history-item","customElement":true}],"exports":[{"kind":"js","name":"GaiaHistoryItem","declaration":{"name":"GaiaHistoryItem","module":"components/history/history-item.js"}},{"kind":"custom-element-definition","name":"gaia-history-item","declaration":{"name":"GaiaHistoryItem","module":"components/history/history-item.js"}}]},{"kind":"javascript-module","path":"components/history/history-view.test.js","declarations":[{"kind":"class","description":"","name":"TestWrapper","members":[{"kind":"field","name":"store","type":{"text":"MockChatStore"}}],"superclass":{"name":"LitElement","package":"lit"},"tagName":"test-wrapper-canvas-revision-selector","customElement":true}],"exports":[{"kind":"custom-element-definition","name":"test-wrapper-history-view","declaration":{"name":"TestWrapper","module":"components/history/history-view.test.js"}}]},{"kind":"javascript-module","path":"components/history/history-view.js","declarations":[{"kind":"class","description":"Full-area conversation history panel. Replaces the chat area inside\n`<gaia-chat>` when `historyOpen` is true.\n\nRenders a profile-scoped list of previous conversations. Row actions (rename,\ndelete) are delegated to `<gaia-history-item>`. Clicking a row restores the\nconversation into the active chat and fires a `conversation-restored` event\nvia ChatStore.restoreConversationById.","name":"GaiaHistoryView","members":[{"kind":"field","name":"ctrl","privacy":"private","default":"new StoreController(this, selectHistoryViewState)"},{"kind":"field","name":"sentinelObserver","type":{"text":"IntersectionObserver | undefined"},"privacy":"private"},{"kind":"field","name":"observedSentinel","type":{"text":"Element | undefined"},"privacy":"private"},{"kind":"field","name":"handleClose","privacy":"private"},{"kind":"field","name":"handleRetry","privacy":"private"},{"kind":"field","name":"handleSelect","privacy":"private"},{"kind":"field","name":"handleRename","privacy":"private"},{"kind":"field","name":"handleDelete","privacy":"private"},{"kind":"method","name":"syncSentinelObserver","privacy":"private","return":{"type":{"text":"void"}},"description":"Attach or tear down the IntersectionObserver that watches the bottom-of-list\nsentinel. The sentinel is only rendered while more pages are available, so\nthis runs on every update and follows the DOM: observe when the sentinel is\npresent, detach when it isn't. The observer's root is the scrollable list\ncontainer, not the viewport, so nested scroll regions (embedded widget) fire\ncorrectly."},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-history-view","customElement":true}],"exports":[{"kind":"js","name":"GaiaHistoryView","declaration":{"name":"GaiaHistoryView","module":"components/history/history-view.js"}},{"kind":"custom-element-definition","name":"gaia-history-view","declaration":{"name":"GaiaHistoryView","module":"components/history/history-view.js"}}]},{"kind":"javascript-module","path":"components/layout/app-header/app-header.stories.js","declarations":[{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Components/App Header', component: 'gaia-app-header', }"},{"kind":"variable","name":"Default","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"width: 400px;\"> <gaia-app-header></gaia-app-header> </div>`, }"}],"exports":[{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/layout/app-header/app-header.stories.js"}},{"kind":"js","name":"Default","declaration":{"name":"Default","module":"components/layout/app-header/app-header.stories.js"}}]},{"kind":"javascript-module","path":"components/layout/app-header/app-header.test.js","declarations":[{"kind":"class","description":"","name":"TestWrapper","members":[{"kind":"field","name":"store","type":{"text":"MockChatStore"}}],"superclass":{"name":"LitElement","package":"lit"},"tagName":"test-wrapper-canvas-revision-selector","customElement":true}],"exports":[{"kind":"custom-element-definition","name":"test-wrapper-app-header","declaration":{"name":"TestWrapper","module":"components/layout/app-header/app-header.test.js"}}]},{"kind":"javascript-module","path":"components/layout/app-header/app-header.js","declarations":[{"kind":"class","description":"Application header bar with data settings, feedback, new-chat, and close actions.","name":"GaiaAppHeader","members":[{"kind":"field","name":"ctrl","privacy":"private","default":"new StoreController(this, selectAppHeaderState)"},{"kind":"field","name":"toolbar","privacy":"private","default":"new ToolbarController(this, () => this.getToolbarButtons())"},{"kind":"field","name":"closeable","type":{"text":"boolean"},"default":"true"},{"kind":"field","name":"enableHistory","type":{"text":"boolean"},"default":"true"},{"kind":"method","name":"getToolbarButtons","privacy":"private","return":{"type":{"text":"HTMLButtonElement[]"}}},{"kind":"field","name":"handleFeedbackClosed","privacy":"private"},{"kind":"method","name":"handleClearConversation","privacy":"private"},{"kind":"method","name":"handleToggleHistory","privacy":"private"},{"kind":"method","name":"handleToggleFeedback","privacy":"private"},{"kind":"method","name":"handleCloseChat","privacy":"private"},{"kind":"method","name":"toggleDataSettings","privacy":"private"},{"kind":"method","name":"renderDataSettingsButton","privacy":"private"},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"events":[{"type":{"text":"ConversationClearedEvent"}},{"type":{"text":"ConversationClearedEvent"},"description":"When the user starts a new chat","name":"conversation-cleared"},{"type":{"text":"CloseRequestedEvent"},"description":"When the user clicks the close button","name":"close-requested"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-app-header","customElement":true}],"exports":[{"kind":"js","name":"GaiaAppHeader","declaration":{"name":"GaiaAppHeader","module":"components/layout/app-header/app-header.js"}},{"kind":"custom-element-definition","name":"gaia-app-header","declaration":{"name":"GaiaAppHeader","module":"components/layout/app-header/app-header.js"}}]},{"kind":"javascript-module","path":"components/layout/connection-status-overlay/connection-status-overlay.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/layout/connection-status-overlay/connection-status-overlay.styles.js"}}]},{"kind":"javascript-module","path":"components/layout/connection-status-overlay/connection-status-overlay.test.js","declarations":[{"kind":"class","description":"","name":"TestWrapper","members":[{"kind":"field","name":"store","type":{"text":"MockChatStore"}}],"superclass":{"name":"LitElement","package":"lit"},"tagName":"test-wrapper-canvas-revision-selector","customElement":true}],"exports":[{"kind":"custom-element-definition","name":"test-wrapper-connection-status-overlay","declaration":{"name":"TestWrapper","module":"components/layout/connection-status-overlay/connection-status-overlay.test.js"}}]},{"kind":"javascript-module","path":"components/layout/connection-status-overlay/connection-status-overlay.js","declarations":[{"kind":"class","description":"Overlay displayed when the backend is unreachable.\r\n\r\nShows a warning icon, a \"Service temporarily unavailable\" message,\r\nand a reconnecting dot animation. Automatically hides when the\r\nconnection is restored.","name":"GaiaConnectionStatusOverlay","members":[{"kind":"field","name":"ctrl","privacy":"private","default":"new StoreController(this, selectConnectionStatus)"},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-connection-status-overlay","customElement":true}],"exports":[{"kind":"js","name":"GaiaConnectionStatusOverlay","declaration":{"name":"GaiaConnectionStatusOverlay","module":"components/layout/connection-status-overlay/connection-status-overlay.js"}},{"kind":"custom-element-definition","name":"gaia-connection-status-overlay","declaration":{"name":"GaiaConnectionStatusOverlay","module":"components/layout/connection-status-overlay/connection-status-overlay.js"}}]},{"kind":"javascript-module","path":"components/message/animated-reply.stories.js","declarations":[{"kind":"class","description":"","name":"AnimatedReplyWrapper","members":[{"kind":"field","name":"store"},{"kind":"field","name":"message","type":{"text":"UiAssistantMessage"},"privacy":"private","default":"{ type: 'assistant', id: 'msg-animated-1', parts: [{ kind: 'reasoning', id: 'reasoning-msg-animated-1', content: '', isStreaming: true }], isStreaming: true, }"},{"kind":"field","name":"phase","type":{"text":"'idle' | 'reasoning' | 'tool-call' | 'answering' | 'done'"},"privacy":"private","default":"'idle'"},{"kind":"field","name":"running","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"field","name":"timers","type":{"text":"ReturnType<typeof setTimeout>[]"},"privacy":"private","default":"[]"},{"kind":"method","name":"cleanup","privacy":"private"},{"kind":"method","name":"schedule","privacy":"private","parameters":[{"name":"fn","type":{"text":"() => void"}},{"name":"delay","type":{"text":"number"}}]},{"kind":"method","name":"reset","privacy":"private"},{"kind":"method","name":"start","privacy":"private"}],"superclass":{"name":"LitElement","package":"lit"},"tagName":"animated-reply-wrapper","customElement":true},{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Demos/Animated Assistant Reply', component: 'animated-reply-wrapper', parameters: { layout: 'padded', }, }"},{"kind":"variable","name":"Default","type":{"text":"Story"},"default":"{ name: 'Full Reply Lifecycle', render: () => html`<animated-reply-wrapper></animated-reply-wrapper>`, }"}],"exports":[{"kind":"custom-element-definition","name":"animated-reply-wrapper","declaration":{"name":"AnimatedReplyWrapper","module":"components/message/animated-reply.stories.js"}},{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/message/animated-reply.stories.js"}},{"kind":"js","name":"Default","declaration":{"name":"Default","module":"components/message/animated-reply.stories.js"}}]},{"kind":"javascript-module","path":"components/message/assistant-message.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/message/assistant-message.styles.js"}}]},{"kind":"javascript-module","path":"components/message/assistant-message.js","declarations":[{"kind":"class","description":"","name":"GaiaAssistantMessage","members":[{"kind":"field","name":"message","type":{"text":"UiAssistantMessage"}},{"kind":"field","name":"isStreaming","type":{"text":"boolean"},"default":"false","attribute":"is-streaming"},{"kind":"field","name":"bodyEl","type":{"text":"HTMLElement"},"privacy":"private"},{"kind":"field","name":"expandedToolCallIds","privacy":"private","default":"new Set<string>()"},{"kind":"method","name":"renderPart","privacy":"private","parameters":[{"name":"part","type":{"text":"UiAssistantPart"}}]},{"kind":"method","name":"renderToolCall","privacy":"private","parameters":[{"name":"toolCall","type":{"text":"UiToolCall"}}]},{"kind":"method","name":"toggleToolCall","privacy":"private","parameters":[{"name":"toolCallId","type":{"text":"string"}}]},{"kind":"method","name":"handleInlineQuestionClick","privacy":"private","parameters":[{"name":"question","type":{"text":"string"}}]},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"events":[{"name":"question","type":{"text":"InlineQuestionClickEvent"}}],"attributes":[{"name":"is-streaming","type":{"text":"boolean"},"default":"false","fieldName":"isStreaming"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-assistant-message","customElement":true}],"exports":[{"kind":"js","name":"GaiaAssistantMessage","declaration":{"name":"GaiaAssistantMessage","module":"components/message/assistant-message.js"}},{"kind":"custom-element-definition","name":"gaia-assistant-message","declaration":{"name":"GaiaAssistantMessage","module":"components/message/assistant-message.js"}}]},{"kind":"javascript-module","path":"components/message/message-actions.stories.js","declarations":[{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Components/Message Actions', component: 'gaia-message-actions', argTypes: { messageType: { control: 'select', options: ['user', 'assistant', 'operator'], }, inActiveRun: { control: 'boolean' }, }, }"},{"kind":"variable","name":"AssistantActions","type":{"text":"Story"},"default":"{ args: { messageType: 'assistant', inActiveRun: false, }, render: ({ messageType, inActiveRun }) => html`<div style=\"display: flex; gap: 4px;\"> <gaia-message-actions .messageId=${'msg-1'} .messageType=${messageType} .copyContent=${'This is a message to copy'} ?in-active-run=${inActiveRun} .onThumb=${mockThumb} ></gaia-message-actions> </div>`, }"},{"kind":"variable","name":"UserActions","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"display: flex; gap: 4px;\"> <gaia-message-actions .messageId=${'msg-2'} .messageType=${'user'} .copyContent=${'User message content'} ></gaia-message-actions> </div>`, }"},{"kind":"variable","name":"DuringActiveRun","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"display: flex; gap: 4px;\"> <gaia-message-actions .messageId=${'msg-3'} .messageType=${'assistant'} .copyContent=${'Streaming content...'} in-active-run ></gaia-message-actions> </div>`, }"}],"exports":[{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/message/message-actions.stories.js"}},{"kind":"js","name":"AssistantActions","declaration":{"name":"AssistantActions","module":"components/message/message-actions.stories.js"}},{"kind":"js","name":"UserActions","declaration":{"name":"UserActions","module":"components/message/message-actions.stories.js"}},{"kind":"js","name":"DuringActiveRun","declaration":{"name":"DuringActiveRun","module":"components/message/message-actions.stories.js"}}]},{"kind":"javascript-module","path":"components/message/message-actions.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/message/message-actions.styles.js"}}]},{"kind":"javascript-module","path":"components/message/message-actions.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"components/message/message-actions.js","declarations":[{"kind":"class","description":"Copy and thumbs-up/down feedback buttons for a message.\n\nRenders a copy-to-clipboard button and, for assistant messages, thumbs\nup/down feedback toggle buttons. Actions are hidden while the message\nbelongs to an active run. Rendered once per run group by the conversation\ncomponent (not per message).\n\nThe component self-manages its visibility: when no buttons would be\nrendered it sets `display: none` via the `has-actions` host attribute,\nso no spacing is reserved in the layout.\n\nReceives callbacks as props instead of using `StoreController` so\nthe component stays independently testable without a store context.","name":"GaiaMessageActions","members":[{"kind":"field","name":"messageId","type":{"text":"string"},"default":"''","description":"The message ID for feedback submission."},{"kind":"field","name":"messageType","type":{"text":"| 'user'\n | 'assistant'\n | 'operator'"},"default":"'user'","description":"The message type (only assistant messages show feedback buttons).","attribute":"message-type","reflects":true},{"kind":"field","name":"copyContent","type":{"text":"string"},"default":"''","description":"The content to copy. Empty string hides the copy button."},{"kind":"field","name":"inActiveRun","type":{"text":"boolean"},"default":"false","description":"Whether this message belongs to the currently active run. Hides actions while active.","attribute":"in-active-run"},{"kind":"field","name":"readonly","type":{"text":"boolean"},"default":"false","description":"Readonly mode: shows static feedback indicator instead of interactive buttons."},{"kind":"field","name":"thumb","type":{"text":"'up' | 'down' | null"},"default":"null","description":"Persisted feedback state from API. Used in readonly mode to display the thumb icon."},{"kind":"field","name":"onThumb","type":{"text":"(\n messageId: string,\n isPositive: boolean | null\n ) => Promise<boolean> | undefined"},"description":"Callback for submitting message thumbs. Set by parent message component."},{"kind":"field","name":"isCopied","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"field","name":"feedbackState","type":{"text":"'none' | 'up' | 'down'"},"privacy":"private","default":"'none'"},{"kind":"field","name":"copyTimeoutId","type":{"text":"ReturnType<typeof setTimeout> | undefined"},"privacy":"private"},{"kind":"field","name":"hasVisibleActions","type":{"text":"boolean"},"privacy":"private","readonly":true},{"kind":"method","name":"renderCopyButton","privacy":"private"},{"kind":"method","name":"renderFeedbackButtons","privacy":"private"},{"kind":"method","name":"renderFeedbackIndicator","privacy":"private"},{"kind":"method","name":"handleCopyClick","privacy":"private"},{"kind":"method","name":"handleFeedbackClick","privacy":"private","parameters":[{"name":"direction","type":{"text":"'up' | 'down'"}}]},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"attributes":[{"name":"message-type","type":{"text":"| 'user'\n | 'assistant'\n | 'operator'"},"default":"'user'","description":"The message type (only assistant messages show feedback buttons).","fieldName":"messageType"},{"name":"in-active-run","type":{"text":"boolean"},"default":"false","description":"Whether this message belongs to the currently active run. Hides actions while active.","fieldName":"inActiveRun"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-message-actions","customElement":true}],"exports":[{"kind":"js","name":"GaiaMessageActions","declaration":{"name":"GaiaMessageActions","module":"components/message/message-actions.js"}},{"kind":"custom-element-definition","name":"gaia-message-actions","declaration":{"name":"GaiaMessageActions","module":"components/message/message-actions.js"}}]},{"kind":"javascript-module","path":"components/message/message-attachments.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/message/message-attachments.styles.js"}}]},{"kind":"javascript-module","path":"components/message/message-attachments.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"components/message/message-attachments.js","declarations":[{"kind":"class","description":"","name":"GaiaMessageAttachments","members":[{"kind":"field","name":"attachments","type":{"text":"MessageAttachment[]"},"default":"[]"},{"kind":"field","name":"onRemoveAttachment","type":{"text":"(attachment: MessageAttachment) => void | undefined"}},{"kind":"field","name":"fullWidth","type":{"text":"boolean"},"default":"false","attribute":"full-width"},{"kind":"method","name":"renderAttachment","privacy":"private","parameters":[{"name":"attachment","type":{"text":"MessageAttachment"}}]},{"kind":"method","name":"renderRemoveButton","privacy":"private","parameters":[{"name":"attachment","type":{"text":"MessageAttachment"}}]},{"kind":"method","name":"handleRemoveClick","privacy":"private","parameters":[{"name":"event","type":{"text":"Event"}},{"name":"attachment","type":{"text":"MessageAttachment"}}]},{"kind":"method","name":"isImageAttachment","privacy":"private","return":{"type":{"text":"boolean"}},"parameters":[{"name":"attachment","type":{"text":"MessageAttachment"}}]},{"kind":"method","name":"isPdfAttachment","privacy":"private","return":{"type":{"text":"boolean"}},"parameters":[{"name":"attachment","type":{"text":"MessageAttachment"}}]},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"attributes":[{"name":"full-width","type":{"text":"boolean"},"default":"false","fieldName":"fullWidth"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-message-attachments","customElement":true}],"exports":[{"kind":"js","name":"GaiaMessageAttachments","declaration":{"name":"GaiaMessageAttachments","module":"components/message/message-attachments.js"}},{"kind":"custom-element-definition","name":"gaia-message-attachments","declaration":{"name":"GaiaMessageAttachments","module":"components/message/message-attachments.js"}}]},{"kind":"javascript-module","path":"components/message/message.stories.js","declarations":[{"kind":"class","description":"","name":"StoryMessageWrapper","members":[{"kind":"field","name":"store"}],"superclass":{"name":"LitElement","package":"lit"},"tagName":"story-message-wrapper","customElement":true},{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Components/Message', component: 'gaia-message', }"},{"kind":"variable","name":"UserMessage","type":{"text":"Story"},"default":"{ render: () => { const store = createStoryStore(); return html` <story-message-wrapper .store=${store}> <gaia-message .message=${userMessage}></gaia-message> </story-message-wrapper> `; }, }"},{"kind":"variable","name":"AssistantMessage","type":{"text":"Story"},"default":"{ render: () => { const store = createStoryStore(); return html` <story-message-wrapper .store=${store}> <gaia-message .message=${assistantMessage}></gaia-message> </story-message-wrapper> `; }, }"},{"kind":"variable","name":"AssistantMessageWithCitations","type":{"text":"Story"},"default":"{ render: () => { const store = createStoryStore(); return html` <story-message-wrapper .store=${store}> <gaia-message .message=${assistantMessageWithCitations}></gaia-message> </story-message-wrapper> `; }, }"},{"kind":"variable","name":"OperatorMessage","type":{"text":"Story"},"default":"{ render: () => { const store = createStoryStore(); return html` <story-message-wrapper .store=${store}> <gaia-message .message=${operatorMessage}></gaia-message> </story-message-wrapper> `; }, }"},{"kind":"variable","name":"OperatorTyping","type":{"text":"Story"},"default":"{ render: () => { const store = createStoryStore(); return html` <story-message-wrapper .store=${store}> <gaia-message .message=${operatorMessageTyping}></gaia-message> </story-message-wrapper> `; }, }"},{"kind":"variable","name":"ToolCallSuccess","type":{"text":"Story"},"default":"{ render: () => { const store = createStoryStore({ toolCallSummaries: { 'tc-1': 'Searched documents' }, }); return html` <story-message-wrapper .store=${store}> <gaia-message .message=${toolCallSuccess}></gaia-message> </story-message-wrapper> `; }, }"},{"kind":"variable","name":"ToolCallPendingApproval","type":{"text":"Story"},"default":"{ render: () => { const store = createStoryStore(); return html` <story-message-wrapper .store=${store}> <gaia-message .message=${toolCallPendingApproval}></gaia-message> </story-message-wrapper> `; }, }"},{"kind":"variable","name":"ThinkingIndicator","type":{"text":"Story"},"default":"{ render: () => { const store = createStoryStore({ runState: 'thinking' }); return html` <story-message-wrapper .store=${store}> <gaia-message from=\"assistant\"> <gaia-avatar size=\"small\" icon=\"sparkles\" slot=\"avatar\"></gaia-avatar> <gaia-typing-indicator></gaia-typing-indicator> </gaia-message> </story-message-wrapper> `; }, }"}],"exports":[{"kind":"custom-element-definition","name":"story-message-wrapper","declaration":{"name":"StoryMessageWrapper","module":"components/message/message.stories.js"}},{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/message/message.stories.js"}},{"kind":"js","name":"UserMessage","declaration":{"name":"UserMessage","module":"components/message/message.stories.js"}},{"kind":"js","name":"AssistantMessage","declaration":{"name":"AssistantMessage","module":"components/message/message.stories.js"}},{"kind":"js","name":"AssistantMessageWithCitations","declaration":{"name":"AssistantMessageWithCitations","module":"components/message/message.stories.js"}},{"kind":"js","name":"OperatorMessage","declaration":{"name":"OperatorMessage","module":"components/message/message.stories.js"}},{"kind":"js","name":"OperatorTyping","declaration":{"name":"OperatorTyping","module":"components/message/message.stories.js"}},{"kind":"js","name":"ToolCallSuccess","declaration":{"name":"ToolCallSuccess","module":"components/message/message.stories.js"}},{"kind":"js","name":"ToolCallPendingApproval","declaration":{"name":"ToolCallPendingApproval","module":"components/message/message.stories.js"}},{"kind":"js","name":"ThinkingIndicator","declaration":{"name":"ThinkingIndicator","module":"components/message/message.stories.js"}}]},{"kind":"javascript-module","path":"components/message/message.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/message/message.styles.js"}}]},{"kind":"javascript-module","path":"components/message/message.test.js","declarations":[{"kind":"class","description":"","name":"TestWrapper","members":[{"kind":"field","name":"store","type":{"text":"MockChatStore"}}],"superclass":{"name":"LitElement","package":"lit"},"tagName":"test-wrapper-canvas-revision-selector","customElement":true}],"exports":[{"kind":"custom-element-definition","name":"test-wrapper-message","declaration":{"name":"TestWrapper","module":"components/message/message.test.js"}}]},{"kind":"javascript-module","path":"components/message/message.js","declarations":[{"kind":"class","description":"Unified message container for user, assistant, and operator messages.\n\nDispatches to `<gaia-assistant-message>` for assistant messages, and\nrenders user/operator messages inline. Actions (copy, feedback) are\nrendered at the conversation level, not by this component.","name":"GaiaMessage","members":[{"kind":"field","name":"from","type":{"text":"FromRole"},"default":"'user'","attribute":"from","reflects":true},{"kind":"field","name":"message","type":{"text":"RenderableMessage | undefined"}},{"kind":"field","name":"showAvatar","type":{"text":"boolean"},"default":"true","attribute":"show-avatar"},{"kind":"field","name":"isStreaming","type":{"text":"boolean"},"default":"false","attribute":"is-streaming"},{"kind":"field","name":"messageAriaLabel","type":{"text":"string"},"privacy":"private","readonly":true},{"kind":"method","name":"renderAvatar","privacy":"private"},{"kind":"method","name":"renderContent","privacy":"private"},{"kind":"method","name":"renderUserContent","privacy":"private","parameters":[{"name":"message","type":{"text":"UiUserMessage"}}]},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"attributes":[{"name":"from","type":{"text":"FromRole"},"default":"'user'","fieldName":"from"},{"name":"show-avatar","type":{"text":"boolean"},"default":"true","fieldName":"showAvatar"},{"name":"is-streaming","type":{"text":"boolean"},"default":"false","fieldName":"isStreaming"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-message","customElement":true}],"exports":[{"kind":"js","name":"GaiaMessage","declaration":{"name":"GaiaMessage","module":"components/message/message.js"}},{"kind":"custom-element-definition","name":"gaia-message","declaration":{"name":"GaiaMessage","module":"components/message/message.js"}}]},{"kind":"javascript-module","path":"components/message/renderers/canvas-tool-card.stories.js","declarations":[{"kind":"class","description":"","name":"StoryCanvasToolCardWrapper","members":[{"kind":"field","name":"store","default":"createCanvasStore() as unknown"}],"superclass":{"name":"LitElement","package":"lit"},"tagName":"story-canvas-tool-card-wrapper","customElement":true},{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Canvas/ToolCard', component: 'gaia-canvas-tool-card', }"},{"kind":"variable","name":"Pending","type":{"text":"Story"},"default":"{ render: () => withCanvasStore( { status: 'creating', title: 'My Canvas' }, html`<gaia-canvas-tool-card .message=${baseToolCall} .status=${'pending'} ></gaia-canvas-tool-card>` ), }"},{"kind":"variable","name":"Ready","type":{"text":"Story"},"default":"{ render: () => withCanvasStore( { canvasId: 'c-1', status: 'ready', title: 'My Canvas' }, html`<gaia-canvas-tool-card .message=${{ ...baseToolCall, response: { status: 'ready', title: 'My Canvas' } }} .status=${'done'} ></gaia-canvas-tool-card>` ), }"},{"kind":"variable","name":"Active","type":{"text":"Story"},"default":"{ render: () => withCanvasStore( { canvasId: 'c-1', status: 'ready', title: 'My Canvas', active: true }, html`<gaia-canvas-tool-card .message=${{ ...baseToolCall, response: { status: 'ready', title: 'My Canvas' } }} .status=${'done'} ></gaia-canvas-tool-card>` ), }"},{"kind":"variable","name":"LongTitle","type":{"text":"Story"},"default":"{ render: () => withCanvasStore( { canvasId: 'c-1', status: 'ready', title: 'This is a very long canvas title that should be truncated with an ellipsis', }, html`<gaia-canvas-tool-card .message=${{ ...baseToolCall, response: { status: 'ready', title: 'This is a very long canvas title that should be truncated with an ellipsis', }, }} .status=${'done'} ></gaia-canvas-tool-card>` ), }"}],"exports":[{"kind":"custom-element-definition","name":"story-canvas-tool-card-wrapper","declaration":{"name":"StoryCanvasToolCardWrapper","module":"components/message/renderers/canvas-tool-card.stories.js"}},{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/message/renderers/canvas-tool-card.stories.js"}},{"kind":"js","name":"Pending","declaration":{"name":"Pending","module":"components/message/renderers/canvas-tool-card.stories.js"}},{"kind":"js","name":"Ready","declaration":{"name":"Ready","module":"components/message/renderers/canvas-tool-card.stories.js"}},{"kind":"js","name":"Active","declaration":{"name":"Active","module":"components/message/renderers/canvas-tool-card.stories.js"}},{"kind":"js","name":"LongTitle","declaration":{"name":"LongTitle","module":"components/message/renderers/canvas-tool-card.stories.js"}}]},{"kind":"javascript-module","path":"components/message/renderers/canvas-tool-card.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/message/renderers/canvas-tool-card.styles.js"}}]},{"kind":"javascript-module","path":"components/message/renderers/canvas-tool-card.js","declarations":[{"kind":"class","description":"Card representing a canvas tool call in the message list.\n\nShows a shimmer animation while the canvas is being created or updated,\nand a clickable card to reopen the canvas workspace once ready.","name":"GaiaCanvasToolCard","members":[{"kind":"field","name":"message","type":{"text":"UiToolCall"}},{"kind":"field","name":"status","type":{"text":"ToolStatus"},"default":"'pending'"},{"kind":"field","name":"canvasCtrl","privacy":"private","default":"new CanvasStoreController(this, (s) => ({ canvasId: s.canvasId, title: s.title, active: s.active, canvasStatus: s.status, }))"},{"kind":"method","name":"handleCanvasClick","privacy":"private"},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-canvas-tool-card","customElement":true}],"exports":[{"kind":"js","name":"GaiaCanvasToolCard","declaration":{"name":"GaiaCanvasToolCard","module":"components/message/renderers/canvas-tool-card.js"}},{"kind":"custom-element-definition","name":"gaia-canvas-tool-card","declaration":{"name":"GaiaCanvasToolCard","module":"components/message/renderers/canvas-tool-card.js"}}]},{"kind":"javascript-module","path":"components/message/renderers/citation-link/citation-link.stories.js","declarations":[{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Components/Citation Link', component: 'gaia-citation-link', }"},{"kind":"variable","name":"Single","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"padding: 100px;\"> <p> Here is some text with a citation <gaia-citation-link .citations=${singleCitation}></gaia-citation-link> at the end. </p> </div>`, }"},{"kind":"variable","name":"Multiple","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"padding: 100px;\"> <p> This text has multiple sources <gaia-citation-link .citations=${multipleCitations}></gaia-citation-link> referenced together. </p> </div>`, }"}],"exports":[{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/message/renderers/citation-link/citation-link.stories.js"}},{"kind":"js","name":"Single","declaration":{"name":"Single","module":"components/message/renderers/citation-link/citation-link.stories.js"}},{"kind":"js","name":"Multiple","declaration":{"name":"Multiple","module":"components/message/renderers/citation-link/citation-link.stories.js"}}]},{"kind":"javascript-module","path":"components/message/renderers/citation-link/citation-link.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/message/renderers/citation-link/citation-link.styles.js"}}]},{"kind":"javascript-module","path":"components/message/renderers/citation-link/citation-link.js","declarations":[{"kind":"class","description":"Inline citation pill with a hover/focus popover showing source details.\n\nRendered inside markdown content to replace footnote-style reference\nmarkers. Displays a small pill linking to the first citation source.\nOn hover or focus, a floating popover shows the source title, snippet,\nand icon. Multiple citations are paginated within the popover.\n\nUses the Popover API (popover=\"manual\") to render in the top layer,\nescaping overflow clipping from ancestor scroll containers.","name":"GaiaCitationLink","members":[{"kind":"field","name":"citations","type":{"text":"SearchCitation[]"},"default":"[]"},{"kind":"field","name":"disabled","type":{"text":"boolean"},"default":"false","description":"When true, the pill is greyed out and the popover is suppressed.","attribute":"disabled","reflects":true},{"kind":"field","name":"boundaryElement","type":{"text":"HTMLElement | null"},"default":"null","description":"Positioning boundary element for the popover.\nWhen set, the popover is centered within this element instead of walking the shadow DOM."},{"kind":"field","name":"anchorEl","type":{"text":"HTMLAnchorElement"},"privacy":"private"},{"kind":"field","name":"popoverEl","type":{"text":"HTMLElement"},"privacy":"private"},{"kind":"field","name":"arrowEl","type":{"text":"HTMLElement"},"privacy":"private"},{"kind":"field","name":"popoverVisible","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"field","name":"currentPage","type":{"text":"number"},"privacy":"private","default":"0"},{"kind":"field","name":"floating","privacy":"private","default":"new FloatingController(this, { placement: 'top', strategy: 'fixed', showDelay: 300, hideDelay: 200, })"},{"kind":"field","name":"activeCitation","type":{"text":"SearchCitation"},"privacy":"private","readonly":true},{"kind":"field","name":"isMulti","type":{"text":"boolean"},"privacy":"private","readonly":true},{"kind":"field","name":"handleMouseEnter","privacy":"private"},{"kind":"field","name":"handleMouseLeave","privacy":"private"},{"kind":"field","name":"handleFocus","privacy":"private"},{"kind":"field","name":"handleBlur","privacy":"private"},{"kind":"field","name":"handleKeyDown","privacy":"private"},{"kind":"method","name":"show","privacy":"private"},{"kind":"method","name":"hide","privacy":"private"},{"kind":"method","name":"prevPage","privacy":"private"},{"kind":"method","name":"nextPage","privacy":"private"},{"kind":"method","name":"startPositionUpdates","privacy":"private"},{"kind":"method","name":"getPositioningBoundary","privacy":"private","return":{"type":{"text":"HTMLElement | null"}},"description":"Get the positioning boundary for the popover.\nUses the explicitly passed boundaryElement, falling back to offsetParent."},{"kind":"method","name":"renderPopover","privacy":"private"},{"kind":"method","name":"renderPopoverNav","privacy":"private"},{"kind":"method","name":"renderMarkdownSnippet","privacy":"private","parameters":[{"name":"text","type":{"text":"string"}}]},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"attributes":[{"name":"disabled","type":{"text":"boolean"},"default":"false","description":"When true, the pill is greyed out and the popover is suppressed.","fieldName":"disabled"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-citation-link","customElement":true}],"exports":[{"kind":"js","name":"GaiaCitationLink","declaration":{"name":"GaiaCitationLink","module":"components/message/renderers/citation-link/citation-link.js"}},{"kind":"custom-element-definition","name":"gaia-citation-link","declaration":{"name":"GaiaCitationLink","module":"components/message/renderers/citation-link/citation-link.js"}}]},{"kind":"javascript-module","path":"components/message/renderers/reasoning-block.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/message/renderers/reasoning-block.styles.js"}}]},{"kind":"javascript-module","path":"components/message/renderers/reasoning-block.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"components/message/renderers/reasoning-block.js","declarations":[{"kind":"class","description":"","name":"GaiaReasoningBlock","members":[{"kind":"field","name":"content","type":{"text":"string"},"default":"''"},{"kind":"field","name":"isStreaming","type":{"text":"boolean"},"default":"false","attribute":"is-streaming"},{"kind":"field","name":"expanded","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"field","name":"elapsedMs","type":{"text":"number"},"privacy":"private","default":"0"},{"kind":"field","name":"streamStartTime","type":{"text":"number | null"},"privacy":"private","default":"null"},{"kind":"field","name":"durationInterval","type":{"text":"ReturnType<typeof setInterval> | null"},"privacy":"private","default":"null"},{"kind":"field","name":"hasValidSections","type":{"text":"boolean"},"privacy":"private","description":"Whether the content has at least one valid `**Title**` section.","readonly":true},{"kind":"field","name":"label","type":{"text":"string"},"privacy":"private","description":"Block title text.\n- Streaming: latest section title, or \"Thinking\\u2026\" fallback\n- Complete: latest section title, or \"Thinking\" fallback","readonly":true},{"kind":"field","name":"displayDuration","type":{"text":"number | null"},"privacy":"private","description":"Total thinking duration in seconds, or null if below display threshold","readonly":true},{"kind":"field","name":"steps","type":{"text":"ReasoningStep[]"},"privacy":"private","readonly":true},{"kind":"method","name":"startDurationTimer","privacy":"private"},{"kind":"method","name":"stopDurationTimer","privacy":"private"},{"kind":"method","name":"toggle","privacy":"private"},{"kind":"method","name":"renderDuration","privacy":"private"},{"kind":"method","name":"renderStep","privacy":"private","return":{"type":{"text":"TemplateResult"}},"parameters":[{"name":"step","type":{"text":"ReasoningStep"}},{"name":"index","type":{"text":"number"}},{"name":"total","type":{"text":"number"}}]},{"kind":"method","name":"renderTimeline","privacy":"private","return":{"type":{"text":"TemplateResult"}}},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"attributes":[{"name":"is-streaming","type":{"text":"boolean"},"default":"false","fieldName":"isStreaming"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-reasoning-block","customElement":true}],"exports":[{"kind":"js","name":"GaiaReasoningBlock","declaration":{"name":"GaiaReasoningBlock","module":"components/message/renderers/reasoning-block.js"}},{"kind":"custom-element-definition","name":"gaia-reasoning-block","declaration":{"name":"GaiaReasoningBlock","module":"components/message/renderers/reasoning-block.js"}}]},{"kind":"javascript-module","path":"components/message/renderers/tool-approval-block.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/message/renderers/tool-approval-block.styles.js"}}]},{"kind":"javascript-module","path":"components/message/renderers/tool-approval-block.test.js","declarations":[{"kind":"class","description":"","name":"TestWrapper","members":[{"kind":"field","name":"mockStore","type":{"text":"MockChatStore"},"readonly":true},{"kind":"field","name":"store","type":{"text":"ChatStore"},"default":"this.mockStore as unknown"}],"superclass":{"name":"LitElement","package":"lit"},"tagName":"test-wrapper-canvas-revision-selector","customElement":true}],"exports":[{"kind":"custom-element-definition","name":"test-wrapper-tool-approval","declaration":{"name":"TestWrapper","module":"components/message/renderers/tool-approval-block.test.js"}}]},{"kind":"javascript-module","path":"components/message/renderers/tool-approval-block.js","declarations":[{"kind":"class","description":"Approve/decline prompt for a tool call that requires user consent.\r\n\r\nShows the approval message from the agent and Yes/No buttons.\r\nFor support-handoff tool calls, also renders a consent checkbox\r\nand privacy ID. Disappears once the user approves or declines.","name":"GaiaToolApprovalBlock","members":[{"kind":"field","name":"message","type":{"text":"UiToolCall"}},{"kind":"field","name":"ctrl","privacy":"private","default":"new StoreController(this, selectToolApprovalState)"},{"kind":"field","name":"resolved","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"field","name":"resolvedAction","type":{"text":"'approved' | 'declined' | null"},"privacy":"private","default":"null"},{"kind":"field","name":"consentChecked","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"field","name":"isSupportHandoff","type":{"text":"boolean"},"privacy":"private","readonly":true},{"kind":"field","name":"visitorUserId","type":{"text":"string | null"},"privacy":"private","readonly":true},{"kind":"method","name":"handleConsentChange","privacy":"private","parameters":[{"name":"e","type":{"text":"Event"}}]},{"kind":"method","name":"handleApprove","privacy":"private"},{"kind":"method","name":"handleReject","privacy":"private"},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"events":[{"name":"approvalId","type":{"text":"ToolCallApprovedEvent"}},{"type":{"text":"ToolCallApprovedEvent"},"description":"When the user approves the tool call","name":"tool-call-approved"},{"type":{"text":"ToolCallDeclinedEvent"},"description":"When the user declines the tool call","name":"tool-call-declined"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-tool-approval-block","customElement":true}],"exports":[{"kind":"js","name":"GaiaToolApprovalBlock","declaration":{"name":"GaiaToolApprovalBlock","module":"components/message/renderers/tool-approval-block.js"}},{"kind":"custom-element-definition","name":"gaia-tool-approval-block","declaration":{"name":"GaiaToolApprovalBlock","module":"components/message/renderers/tool-approval-block.js"}}]},{"kind":"javascript-module","path":"components/message/renderers/tool-status-block.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/message/renderers/tool-status-block.styles.js"}}]},{"kind":"javascript-module","path":"components/message/renderers/tool-status-block.test.js","declarations":[{"kind":"class","description":"","name":"TestWrapper","members":[{"kind":"field","name":"store","type":{"text":"MockChatStore"}}],"superclass":{"name":"LitElement","package":"lit"},"tagName":"test-wrapper-canvas-revision-selector","customElement":true}],"exports":[{"kind":"custom-element-definition","name":"test-wrapper-tool-status","declaration":{"name":"TestWrapper","module":"components/message/renderers/tool-status-block.test.js"}}]},{"kind":"javascript-module","path":"components/message/renderers/tool-status-block.js","declarations":[{"kind":"function","name":"isCanvasToolCall","return":{"type":{"text":"boolean"}},"parameters":[{"name":"toolCall","type":{"text":"UiToolCall"}}],"description":"Whether the given tool call should be treated as a canvas tool. Exported so\r\nother components (notably `<gaia-assistant-message>`) can decide to render\r\nthe canvas visualization inline rather than collapsing it behind a toggle."},{"kind":"class","description":"Status indicator for a tool call, showing summary text with a colored dot.\r\n\r\nDisplays a blinking dot and shimmer text while the tool is pending,\r\na solid green dot on success, or a solid red dot on rejection.\r\nCompleted tool calls with a response are expandable — clicking the\r\nstatus line reveals a dropdown with citation links (for search tools)\r\nor a structured key-value view of the raw response.\r\n\r\nFor canvas tool calls, delegates rendering to `<gaia-canvas-tool-card>`.","name":"GaiaToolStatusBlock","members":[{"kind":"field","name":"message","type":{"text":"UiToolCall"}},{"kind":"field","name":"ctrl","privacy":"private","default":"new StoreController(this, selectToolStatusState)"},{"kind":"field","name":"expanded","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"field","name":"resultExpanded","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"field","name":"isCanvasTool","type":{"text":"boolean"},"privacy":"private","readonly":true},{"kind":"field","name":"expandable","type":{"text":"boolean"},"privacy":"private","description":"Whether the status line is expandable.","readonly":true},{"kind":"field","name":"statusLabel","type":{"text":"string"},"privacy":"private","readonly":true},{"kind":"field","name":"status","type":{"text":"ToolStatus"},"privacy":"private","readonly":true},{"kind":"method","name":"toggleExpand","privacy":"private"},{"kind":"method","name":"renderCanvasStatus","privacy":"private"},{"kind":"method","name":"renderExpandedContent","privacy":"private"},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-tool-status-block","customElement":true}],"exports":[{"kind":"js","name":"isCanvasToolCall","declaration":{"name":"isCanvasToolCall","module":"components/message/renderers/tool-status-block.js"}},{"kind":"js","name":"GaiaToolStatusBlock","declaration":{"name":"GaiaToolStatusBlock","module":"components/message/renderers/tool-status-block.js"}},{"kind":"custom-element-definition","name":"gaia-tool-status-block","declaration":{"name":"GaiaToolStatusBlock","module":"components/message/renderers/tool-status-block.js"}}]},{"kind":"javascript-module","path":"components/message/renderers/typing-indicator/typing-indicator.stories.js","declarations":[{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Components/Typing Indicator', component: 'gaia-typing-indicator', }"},{"kind":"variable","name":"Default","type":{"text":"Story"},"default":"{ render: () => html`<gaia-typing-indicator></gaia-typing-indicator>`, }"},{"kind":"variable","name":"InMessageContext","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"background: var(--gaia-color-surface, #f5f5f5); padding: 12px; border-radius: 8px; display: inline-block;\" > <gaia-typing-indicator></gaia-typing-indicator> </div>`, }"}],"exports":[{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/message/renderers/typing-indicator/typing-indicator.stories.js"}},{"kind":"js","name":"Default","declaration":{"name":"Default","module":"components/message/renderers/typing-indicator/typing-indicator.stories.js"}},{"kind":"js","name":"InMessageContext","declaration":{"name":"InMessageContext","module":"components/message/renderers/typing-indicator/typing-indicator.stories.js"}}]},{"kind":"javascript-module","path":"components/message/renderers/typing-indicator/typing-indicator.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/message/renderers/typing-indicator/typing-indicator.styles.js"}}]},{"kind":"javascript-module","path":"components/message/renderers/typing-indicator/typing-indicator.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"components/message/renderers/typing-indicator/typing-indicator.js","declarations":[{"kind":"class","description":"Three-dot animation indicating a support operator is typing.\n\nRendered inside an operator message when the operator is actively\ncomposing a reply via the SignalR support channel.","name":"GaiaTypingIndicator","members":[{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-typing-indicator","customElement":true}],"exports":[{"kind":"js","name":"GaiaTypingIndicator","declaration":{"name":"GaiaTypingIndicator","module":"components/message/renderers/typing-indicator/typing-indicator.js"}},{"kind":"custom-element-definition","name":"gaia-typing-indicator","declaration":{"name":"GaiaTypingIndicator","module":"components/message/renderers/typing-indicator/typing-indicator.js"}}]},{"kind":"javascript-module","path":"components/primitives/avatar/avatar.stories.js","declarations":[{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Primitives/Avatar', component: 'gaia-avatar', argTypes: { size: { control: 'select', options: [...sizes], }, name: { control: 'text' }, image: { control: 'text' }, }, }"},{"kind":"variable","name":"Default","type":{"text":"Story"},"default":"{ args: { size: 'medium', name: 'Robin Banks', image: '', }, render: ({ size, name, image }) => html`<gaia-avatar size=${size} name=${name} .image=${image || undefined}></gaia-avatar>`, }"},{"kind":"variable","name":"Text","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"display: flex; gap: 8px; align-items: center;\"> ${sizes.map((s) => html`<gaia-avatar size=${s} name=\"Robin Banks\"></gaia-avatar>`)} </div>`, }"},{"kind":"variable","name":"Icon","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"display: flex; gap: 8px; align-items: center;\"> ${sizes.map((s) => html`<gaia-avatar size=${s}></gaia-avatar>`)} </div>`, }"},{"kind":"variable","name":"Image","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"display: flex; gap: 8px; align-items: center;\"> ${sizes.map( (s) => html`<gaia-avatar size=${s} name=\"Robin Banks\" image=\"https://i.pravatar.cc/64?img=70\" ></gaia-avatar>` )} </div>`, }"}],"exports":[{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/primitives/avatar/avatar.stories.js"}},{"kind":"js","name":"Default","declaration":{"name":"Default","module":"components/primitives/avatar/avatar.stories.js"}},{"kind":"js","name":"Text","declaration":{"name":"Text","module":"components/primitives/avatar/avatar.stories.js"}},{"kind":"js","name":"Icon","declaration":{"name":"Icon","module":"components/primitives/avatar/avatar.stories.js"}},{"kind":"js","name":"Image","declaration":{"name":"Image","module":"components/primitives/avatar/avatar.stories.js"}}]},{"kind":"javascript-module","path":"components/primitives/avatar/avatar.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/primitives/avatar/avatar.styles.js"}}]},{"kind":"javascript-module","path":"components/primitives/avatar/avatar.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"components/primitives/avatar/avatar.js","declarations":[{"kind":"function","name":"computeInitials","return":{"type":{"text":"string"}},"parameters":[{"name":"name","type":{"text":"string"}}],"description":"Computes display initials from a name string.\n\n- Two-word names: first letter of each word (e.g. \"Jane Doe\" → \"JD\")\n- Single-word names: first two letters, first upper + second lower (e.g. \"Acme\" → \"Ac\")\n- Max 2 characters"},{"kind":"class","description":"Displays an image, initials, or icon to represent a user or entity.\n\nContent is resolved in priority order: **image → initials → icon**.\nWhen an `image` URL is provided it is rendered as a circular photo;\nif the image fails to load, the component falls back to initials\nderived from `name`, and finally to a generic user icon.","name":"GaiaAvatar","cssProperties":[{"description":"Border and text colour (inherited via `currentcolor`).","name":"--ga-color-text-headings"}],"cssParts":[{"description":"Shadow parts are not exposed; style via the host element.","name":"(none)"}],"members":[{"kind":"field","name":"size","type":{"text":"AvatarSize"},"default":"'medium'","description":"Diameter variant of the avatar circle. Reflected as a host attribute for CSS styling.","attribute":"size","reflects":true},{"kind":"field","name":"name","type":{"text":"string"},"default":"''","description":"Full name of the person or entity.\n\nUsed to compute up to two display initials (e.g. \"Jane Doe\" → \"JD\")\nand as the `aria-label` for screen readers. When empty, the component\nrenders a generic icon and marks itself `aria-hidden`.","attribute":"name"},{"kind":"field","name":"image","type":{"text":"string | undefined"},"default":"undefined","description":"URL of a profile image.\n\nWhen set, the image is rendered as a circular photo that fills the\navatar. If the image fails to load the component automatically falls\nback to initials (when `name` is provided) or to the default icon.","attribute":"image"},{"kind":"field","name":"icon","type":{"text":"string | undefined"},"default":"undefined","description":"Custom icon name for the fallback icon.\n\nWhen set, this icon is used instead of the default `user-round` icon.\nThe icon is only visible when neither `image` nor `name` resolves content\n(or at `extra-small` size where only icons are shown).","attribute":"icon"},{"kind":"method","name":"handleImageError","privacy":"private"},{"kind":"field","name":"contentType","type":{"text":"'image' | 'initials' | 'icon'"},"privacy":"private","readonly":true},{"kind":"field","name":"iconSize","type":{"text":"'sm' | 'md' | 'xl' | '2xl'"},"privacy":"private","readonly":true},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"events":[{"description":"This component does not dispatch custom events.","name":"(none)"}],"attributes":[{"type":{"text":"AvatarSize"},"description":"Diameter variant of the avatar circle. Reflected as a host attribute for CSS styling.","name":"size","default":"'medium'","fieldName":"size"},{"type":{"text":"string"},"description":"Full name of the person or entity.\n\nUsed to compute up to two display initials (e.g. \"Jane Doe\" → \"JD\")\nand as the `aria-label` for screen readers. When empty, the component\nrenders a generic icon and marks itself `aria-hidden`.","name":"name","default":"''","fieldName":"name"},{"type":{"text":"string | undefined"},"description":"URL of a profile image.\n\nWhen set, the image is rendered as a circular photo that fills the\navatar. If the image fails to load the component automatically falls\nback to initials (when `name` is provided) or to the default icon.","name":"image","default":"undefined","fieldName":"image"},{"type":{"text":"string | undefined"},"description":"Custom icon name for the fallback icon.\n\nWhen set, this icon is used instead of the default `user-round` icon.\nThe icon is only visible when neither `image` nor `name` resolves content\n(or at `extra-small` size where only icons are shown).","name":"icon","default":"undefined","fieldName":"icon"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-avatar","customElement":true}],"exports":[{"kind":"js","name":"computeInitials","declaration":{"name":"computeInitials","module":"components/primitives/avatar/avatar.js"}},{"kind":"js","name":"GaiaAvatar","declaration":{"name":"GaiaAvatar","module":"components/primitives/avatar/avatar.js"}},{"kind":"custom-element-definition","name":"gaia-avatar","declaration":{"name":"GaiaAvatar","module":"components/primitives/avatar/avatar.js"}}]},{"kind":"javascript-module","path":"components/primitives/badge/badge.stories.js","declarations":[{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Primitives/Badge', component: 'gaia-badge', argTypes: { type: { control: 'select', options: ['text', 'dot'], }, label: { control: 'text', if: { arg: 'type', neq: 'dot' }, }, status: { control: 'select', options: [...statuses], }, }, }"},{"kind":"variable","name":"Default","type":{"text":"Story"},"default":"{ args: { type: 'text', label: '99', status: 'default', }, render: ({ type, label, status }) => html`<gaia-badge type=${type} label=${label} status=${status}></gaia-badge>`, }"},{"kind":"variable","name":"Text","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"display: flex; gap: 8px; align-items: center;\"> <gaia-badge type=\"text\" label=\"25\" status=\"default\"></gaia-badge> <gaia-badge type=\"text\" label=\"99\" status=\"default-inverted\"></gaia-badge> <gaia-badge type=\"text\" label=\"9\" status=\"muted\"></gaia-badge> <gaia-badge type=\"text\" label=\"7\" status=\"information\"></gaia-badge> <gaia-badge type=\"text\" label=\"-237%\" status=\"error\"></gaia-badge> <gaia-badge type=\"text\" label=\"9\" status=\"warning\"></gaia-badge> <gaia-badge type=\"text\" label=\"+25K\" status=\"success\"></gaia-badge> <gaia-badge type=\"text\" label=\"0\" status=\"disabled\"></gaia-badge> <gaia-badge type=\"text\" label=\"0\" status=\"disabled-inverted\"></gaia-badge> </div>`, }"},{"kind":"variable","name":"Dot","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"display: flex; gap: 8px; align-items: center;\"> ${statuses.map((s) => html`<gaia-badge type=\"dot\" status=${s}></gaia-badge>`)} </div>`, }"}],"exports":[{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/primitives/badge/badge.stories.js"}},{"kind":"js","name":"Default","declaration":{"name":"Default","module":"components/primitives/badge/badge.stories.js"}},{"kind":"js","name":"Text","declaration":{"name":"Text","module":"components/primitives/badge/badge.stories.js"}},{"kind":"js","name":"Dot","declaration":{"name":"Dot","module":"components/primitives/badge/badge.stories.js"}}]},{"kind":"javascript-module","path":"components/primitives/badge/badge.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/primitives/badge/badge.styles.js"}}]},{"kind":"javascript-module","path":"components/primitives/badge/badge.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"components/primitives/badge/badge.js","declarations":[{"kind":"class","description":"Small status indicator badge in text or dot form.\n\nThe `text` variant displays a numeric or short label; the `dot`\nvariant renders a small colored circle. Marked `aria-hidden` by\ndefault since badges are decorative.","name":"GaiaBadge","members":[{"kind":"field","name":"type","type":{"text":"BadgeType"},"default":"'text'","description":"Badge display type: 'text' shows a label, 'dot' shows a small circle.","attribute":"type","reflects":true},{"kind":"field","name":"label","type":{"text":"string"},"default":"'99'","description":"Label text displayed in the text variant. Ignored for dot.","attribute":"label","reflects":true},{"kind":"field","name":"status","type":{"text":"BadgeStatus"},"default":"'default'","description":"Semantic status controlling the badge color.","attribute":"status","reflects":true},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"attributes":[{"name":"type","type":{"text":"BadgeType"},"default":"'text'","description":"Badge display type: 'text' shows a label, 'dot' shows a small circle.","fieldName":"type"},{"name":"label","type":{"text":"string"},"default":"'99'","description":"Label text displayed in the text variant. Ignored for dot.","fieldName":"label"},{"name":"status","type":{"text":"BadgeStatus"},"default":"'default'","description":"Semantic status controlling the badge color.","fieldName":"status"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-badge","customElement":true}],"exports":[{"kind":"js","name":"GaiaBadge","declaration":{"name":"GaiaBadge","module":"components/primitives/badge/badge.js"}},{"kind":"custom-element-definition","name":"gaia-badge","declaration":{"name":"GaiaBadge","module":"components/primitives/badge/badge.js"}}]},{"kind":"javascript-module","path":"components/primitives/button/button.stories.js","declarations":[{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Primitives/Button', component: 'gaia-button', argTypes: { variant: { control: 'select', options: ['primary', 'secondary', 'ghost', 'transparent', 'danger'], }, size: { control: 'select', options: ['sm', 'md'], }, disabled: { control: 'boolean', }, }, }"},{"kind":"variable","name":"Default","type":{"text":"Story"},"default":"{ args: { variant: 'primary', size: 'md', disabled: false, }, render: ({ variant, size, disabled }) => html`<div style=\"display: flex; gap: 8px; align-items: center;\"> <gaia-button variant=${variant} size=${size} ?disabled=${disabled} ><gaia-icon name=\"sparkles\"></gaia-icon ></gaia-button> <gaia-button variant=${variant} size=${size} ?disabled=${disabled} ><gaia-icon slot=\"prefix\" name=\"sparkles\"></gaia-icon>With Prefix</gaia-button > <gaia-button variant=${variant} size=${size} ?disabled=${disabled}>Only Label</gaia-button> </div>`, }"},{"kind":"variable","name":"Variants","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"display: flex; gap: 8px; align-items: center;\"> <gaia-button variant=\"primary\">Primary</gaia-button> <gaia-button variant=\"secondary\">Secondary</gaia-button> <gaia-button variant=\"ghost\">Ghost</gaia-button> <gaia-button variant=\"transparent\">Transparent</gaia-button> </div>`, }"},{"kind":"variable","name":"Disabled","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"display: flex; gap: 8px; align-items: center;\"> <gaia-button disabled>Disabled</gaia-button> <gaia-button variant=\"secondary\" disabled>Disabled</gaia-button> <gaia-button variant=\"ghost\" disabled>Disabled</gaia-button> </div>`, }"},{"kind":"variable","name":"Sizes","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"display: flex; gap: 16px; align-items: center;\"> <div style=\"display: flex; gap: 8px; align-items: center;\"> <gaia-button size=\"sm\">Small</gaia-button> <gaia-button size=\"sm\" variant=\"secondary\">Small</gaia-button> <gaia-button size=\"sm\" variant=\"ghost\"><gaia-icon name=\"x\"></gaia-icon></gaia-button> </div> <div style=\"display: flex; gap: 8px; align-items: center;\"> <gaia-button size=\"md\">Medium</gaia-button> <gaia-button size=\"md\" variant=\"secondary\">Medium</gaia-button> <gaia-button size=\"md\" variant=\"ghost\"><gaia-icon name=\"x\"></gaia-icon></gaia-button> </div> </div>`, }"},{"kind":"variable","name":"IconButtons","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"display: flex; gap: 8px; align-items: center;\"> <gaia-button variant=\"ghost\"><gaia-icon name=\"x\"></gaia-icon></gaia-button> <gaia-button variant=\"ghost\"><gaia-icon name=\"copy\"></gaia-icon></gaia-button> <gaia-button variant=\"ghost\"><gaia-icon name=\"thumbs-up\"></gaia-icon></gaia-button> <gaia-button variant=\"ghost\"><gaia-icon name=\"megaphone\"></gaia-icon></gaia-button> </div>`, }"},{"kind":"variable","name":"Loading","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"display: flex; gap: 8px; align-items: center;\"> <gaia-button disabled><gaia-spinner></gaia-spinner></gaia-button> <gaia-button variant=\"secondary\" disabled><gaia-spinner></gaia-spinner></gaia-button> <gaia-button variant=\"ghost\" disabled><gaia-spinner></gaia-spinner></gaia-button> </div>`, }"}],"exports":[{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/primitives/button/button.stories.js"}},{"kind":"js","name":"Default","declaration":{"name":"Default","module":"components/primitives/button/button.stories.js"}},{"kind":"js","name":"Variants","declaration":{"name":"Variants","module":"components/primitives/button/button.stories.js"}},{"kind":"js","name":"Disabled","declaration":{"name":"Disabled","module":"components/primitives/button/button.stories.js"}},{"kind":"js","name":"Sizes","declaration":{"name":"Sizes","module":"components/primitives/button/button.stories.js"}},{"kind":"js","name":"IconButtons","declaration":{"name":"IconButtons","module":"components/primitives/button/button.stories.js"}},{"kind":"js","name":"Loading","declaration":{"name":"Loading","module":"components/primitives/button/button.stories.js"}}]},{"kind":"javascript-module","path":"components/primitives/button/button.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/primitives/button/button.styles.js"}}]},{"kind":"javascript-module","path":"components/primitives/button/button.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"components/primitives/button/button.js","declarations":[{"kind":"class","description":"General-purpose button with multiple style variants.\n\nAutomatically detects whether the default slot contains only an icon\n(and no text) and applies compact icon-button styling accordingly.","name":"GaiaButton","slots":[{"description":"Leading icon or element before the label","name":"prefix"},{"description":"Default slot for the button label text or icon","name":""}],"members":[{"kind":"field","name":"labelSlot","type":{"text":"HTMLSlotElement"}},{"kind":"field","name":"isIconButton","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"field","name":"variant","type":{"text":"| 'primary'\n | 'secondary'\n | 'ghost'\n | 'transparent'\n | 'danger'"},"default":"'primary'","attribute":"variant","reflects":true},{"kind":"field","name":"size","type":{"text":"'sm' | 'md'"},"default":"'md'","attribute":"size","reflects":true},{"kind":"field","name":"disabled","type":{"text":"boolean"},"default":"false","attribute":"disabled","reflects":true},{"kind":"method","name":"handleLabelSlotChange","privacy":"private"},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"attributes":[{"name":"variant","type":{"text":"| 'primary'\n | 'secondary'\n | 'ghost'\n | 'transparent'\n | 'danger'"},"default":"'primary'","fieldName":"variant"},{"name":"size","type":{"text":"'sm' | 'md'"},"default":"'md'","fieldName":"size"},{"name":"disabled","type":{"text":"boolean"},"default":"false","fieldName":"disabled"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-button","customElement":true}],"exports":[{"kind":"js","name":"GaiaButton","declaration":{"name":"GaiaButton","module":"components/primitives/button/button.js"}},{"kind":"custom-element-definition","name":"gaia-button","declaration":{"name":"GaiaButton","module":"components/primitives/button/button.js"}}]},{"kind":"javascript-module","path":"components/primitives/checkbox/checkbox.stories.js","declarations":[{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Primitives/Checkbox', component: 'gaia-checkbox', argTypes: { checked: { control: 'boolean' }, indeterminate: { control: 'boolean' }, disabled: { control: 'boolean' }, invalid: { control: 'boolean' }, required: { control: 'boolean' }, label: { control: 'text' }, value: { control: 'text' }, name: { control: 'text' }, }, }"},{"kind":"variable","name":"Default","type":{"text":"Story"},"default":"{ args: { label: 'Checkbox label', checked: false, indeterminate: false, disabled: false, invalid: false, required: false, value: 'on', }, render: ({ label, checked, indeterminate, disabled, invalid, required, value }) => html`<gaia-checkbox label=${label} ?checked=${checked} ?indeterminate=${indeterminate} ?disabled=${disabled} ?invalid=${invalid} ?required=${required} value=${value} ></gaia-checkbox>`, }"},{"kind":"variable","name":"Checked","type":{"text":"Story"},"default":"{ render: () => html`<gaia-checkbox label=\"Checked checkbox\" checked></gaia-checkbox>`, }"},{"kind":"variable","name":"Indeterminate","type":{"text":"Story"},"default":"{ render: () => html`<gaia-checkbox label=\"Indeterminate checkbox\" indeterminate></gaia-checkbox>`, }"},{"kind":"variable","name":"Disabled","type":{"text":"Story"},"default":"{ render: () => html` <div style=\"display: flex; flex-direction: column; gap: 8px;\"> <gaia-checkbox label=\"Disabled unchecked\" disabled></gaia-checkbox> <gaia-checkbox label=\"Disabled checked\" disabled checked></gaia-checkbox> <gaia-checkbox label=\"Disabled indeterminate\" disabled indeterminate></gaia-checkbox> </div> `, }"},{"kind":"variable","name":"Invalid","type":{"text":"Story"},"default":"{ render: () => html` <div style=\"display: flex; flex-direction: column; gap: 8px;\"> <gaia-checkbox label=\"Invalid unchecked\" invalid></gaia-checkbox> <gaia-checkbox label=\"Invalid checked\" invalid checked></gaia-checkbox> </div> `, }"},{"kind":"variable","name":"Nolabel","type":{"text":"Story"},"default":"{ render: () => html`<gaia-checkbox aria-label=\"Checkbox without visible label\"></gaia-checkbox>`, }"},{"kind":"variable","name":"WithFormField","type":{"text":"Story"},"default":"{ render: () => html` <gaia-form-field label=\"Agreement\"> <gaia-checkbox label=\"I agree to the terms and conditions\"></gaia-checkbox> </gaia-form-field> `, }"},{"kind":"variable","name":"WithFormFieldError","type":{"text":"Story"},"default":"{ render: () => html` <gaia-form-field label=\"Agreement\" error=\"You must agree to continue\" invalid> <gaia-checkbox label=\"I agree to the terms and conditions\" invalid></gaia-checkbox> </gaia-form-field> `, }"},{"kind":"variable","name":"Group","type":{"text":"Story"},"default":"{ render: () => html` <fieldset style=\"border: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 8px;\" > <legend style=\"font-weight: 600; margin-bottom: 4px;\">Select your interests</legend> <gaia-checkbox label=\"Design\" name=\"interests\" value=\"design\"></gaia-checkbox> <gaia-checkbox label=\"Development\" name=\"interests\" value=\"development\" checked ></gaia-checkbox> <gaia-checkbox label=\"Marketing\" name=\"interests\" value=\"marketing\"></gaia-checkbox> <gaia-checkbox label=\"Research\" name=\"interests\" value=\"research\"></gaia-checkbox> </fieldset> `, }"}],"exports":[{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/primitives/checkbox/checkbox.stories.js"}},{"kind":"js","name":"Default","declaration":{"name":"Default","module":"components/primitives/checkbox/checkbox.stories.js"}},{"kind":"js","name":"Checked","declaration":{"name":"Checked","module":"components/primitives/checkbox/checkbox.stories.js"}},{"kind":"js","name":"Indeterminate","declaration":{"name":"Indeterminate","module":"components/primitives/checkbox/checkbox.stories.js"}},{"kind":"js","name":"Disabled","declaration":{"name":"Disabled","module":"components/primitives/checkbox/checkbox.stories.js"}},{"kind":"js","name":"Invalid","declaration":{"name":"Invalid","module":"components/primitives/checkbox/checkbox.stories.js"}},{"kind":"js","name":"Nolabel","declaration":{"name":"Nolabel","module":"components/primitives/checkbox/checkbox.stories.js"}},{"kind":"js","name":"WithFormField","declaration":{"name":"WithFormField","module":"components/primitives/checkbox/checkbox.stories.js"}},{"kind":"js","name":"WithFormFieldError","declaration":{"name":"WithFormFieldError","module":"components/primitives/checkbox/checkbox.stories.js"}},{"kind":"js","name":"Group","declaration":{"name":"Group","module":"components/primitives/checkbox/checkbox.stories.js"}}]},{"kind":"javascript-module","path":"components/primitives/checkbox/checkbox.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/primitives/checkbox/checkbox.styles.js"}}]},{"kind":"javascript-module","path":"components/primitives/checkbox/checkbox.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"components/primitives/checkbox/checkbox.js","declarations":[{"kind":"class","description":"A checkbox component aligned with the GAIA design system.\n\nRenders a native `<input type=\"checkbox\">` visually hidden behind a custom\nmarker, with optional label text. Supports checked, indeterminate, disabled,\ninvalid, and required states. Form-associated for native form submission.","name":"GaiaCheckbox","cssParts":[{"description":"The outer container element.","name":"checkbox"},{"description":"The native checkbox input element.","name":"native"},{"description":"The visual marker element.","name":"marker"},{"description":"The label text element.","name":"label"}],"members":[{"kind":"field","name":"formAssociated","type":{"text":"boolean"},"static":true,"default":"true"},{"kind":"field","name":"checked","type":{"text":"boolean"},"default":"false","description":"Whether the checkbox is checked","attribute":"checked","reflects":true},{"kind":"field","name":"indeterminate","type":{"text":"boolean"},"default":"false","description":"Whether the checkbox is in an indeterminate state","attribute":"indeterminate","reflects":true},{"kind":"field","name":"disabled","type":{"text":"boolean"},"default":"false","description":"Whether the checkbox is disabled","attribute":"disabled","reflects":true},{"kind":"field","name":"invalid","type":{"text":"boolean"},"default":"false","description":"Whether the checkbox is in an invalid/error state","attribute":"invalid","reflects":true},{"kind":"field","name":"required","type":{"text":"boolean"},"default":"false","description":"Whether the checkbox is required","attribute":"required","reflects":true},{"kind":"field","name":"value","type":{"text":"string"},"default":"'on'","description":"The value of the checkbox for form submission","attribute":"value"},{"kind":"field","name":"name","type":{"text":"string"},"default":"''","description":"Name for form submission","attribute":"name"},{"kind":"field","name":"label","type":{"text":"string"},"default":"''","description":"Visible label text for the checkbox","attribute":"label"},{"kind":"field","name":"ariaLabel","type":{"text":"string | null"},"default":"null","description":"Accessible label for the checkbox (use when no visible label is present)","attribute":"aria-label"},{"kind":"field","name":"ariaLabelledBy","type":{"text":"string | null"},"default":"null","description":"ID of the element that labels this checkbox","attribute":"aria-labelledby"},{"kind":"field","name":"ariaDescribedBy","type":{"text":"string | null"},"default":"null","description":"ID(s) of elements that describe this checkbox","attribute":"aria-describedby"},{"kind":"field","name":"inputEl","type":{"text":"HTMLInputElement"},"privacy":"private"},{"kind":"method","name":"focus","parameters":[{"name":"options","optional":true,"type":{"text":"FocusOptions"}}],"description":"Focus the checkbox"},{"kind":"method","name":"blur","description":"Blur the checkbox"},{"kind":"method","name":"toggle","description":"Toggle the checked state programmatically"},{"kind":"method","name":"handleChange","privacy":"private"},{"kind":"method","name":"renderCheckIcon","privacy":"private"},{"kind":"method","name":"renderMinusIcon","privacy":"private"},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"events":[{"name":"change","type":{"text":"Event"},"description":"Fires when the checked state changes via user interaction."},{"name":"input","type":{"text":"Event"},"description":"Fires when the checked state changes via user interaction."}],"attributes":[{"name":"checked","type":{"text":"boolean"},"default":"false","description":"Whether the checkbox is checked","fieldName":"checked"},{"name":"indeterminate","type":{"text":"boolean"},"default":"false","description":"Whether the checkbox is in an indeterminate state","fieldName":"indeterminate"},{"name":"disabled","type":{"text":"boolean"},"default":"false","description":"Whether the checkbox is disabled","fieldName":"disabled"},{"name":"invalid","type":{"text":"boolean"},"default":"false","description":"Whether the checkbox is in an invalid/error state","fieldName":"invalid"},{"name":"required","type":{"text":"boolean"},"default":"false","description":"Whether the checkbox is required","fieldName":"required"},{"name":"value","type":{"text":"string"},"default":"'on'","description":"The value of the checkbox for form submission","fieldName":"value"},{"name":"name","type":{"text":"string"},"default":"''","description":"Name for form submission","fieldName":"name"},{"name":"label","type":{"text":"string"},"default":"''","description":"Visible label text for the checkbox","fieldName":"label"},{"name":"aria-label","type":{"text":"string | null"},"default":"null","description":"Accessible label for the checkbox (use when no visible label is present)","fieldName":"ariaLabel"},{"name":"aria-labelledby","type":{"text":"string | null"},"default":"null","description":"ID of the element that labels this checkbox","fieldName":"ariaLabelledBy"},{"name":"aria-describedby","type":{"text":"string | null"},"default":"null","description":"ID(s) of elements that describe this checkbox","fieldName":"ariaDescribedBy"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-checkbox","customElement":true}],"exports":[{"kind":"js","name":"GaiaCheckbox","declaration":{"name":"GaiaCheckbox","module":"components/primitives/checkbox/checkbox.js"}},{"kind":"custom-element-definition","name":"gaia-checkbox","declaration":{"name":"GaiaCheckbox","module":"components/primitives/checkbox/checkbox.js"}}]},{"kind":"javascript-module","path":"components/primitives/dropdown/dropdown-item.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/primitives/dropdown/dropdown-item.styles.js"}}]},{"kind":"javascript-module","path":"components/primitives/dropdown/dropdown-item.js","declarations":[{"kind":"class","description":"A single option item within a `<gaia-dropdown>` list.\n\nAligns with the GAIA design system `ga-dropdown__item` element.\nManages its own `role=\"option\"`, `aria-selected`, and `aria-disabled`\nattributes.","name":"GaiaDropdownItem","slots":[{"description":"Default slot for the item label text","name":""}],"members":[{"kind":"field","name":"selected","type":{"text":"boolean"},"default":"false","description":"Whether this item is currently selected","attribute":"selected","reflects":true},{"kind":"field","name":"disabled","type":{"text":"boolean"},"default":"false","description":"Whether this item is disabled and non-interactive","attribute":"disabled","reflects":true},{"kind":"field","name":"active","type":{"text":"boolean"},"default":"false","description":"Whether this item has active (visual focus) state","attribute":"active","reflects":true},{"kind":"field","name":"value","type":{"text":"string"},"default":"''","description":"The value associated with this item","attribute":"value"},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"attributes":[{"name":"selected","type":{"text":"boolean"},"default":"false","description":"Whether this item is currently selected","fieldName":"selected"},{"name":"disabled","type":{"text":"boolean"},"default":"false","description":"Whether this item is disabled and non-interactive","fieldName":"disabled"},{"name":"active","type":{"text":"boolean"},"default":"false","description":"Whether this item has active (visual focus) state","fieldName":"active"},{"name":"value","type":{"text":"string"},"default":"''","description":"The value associated with this item","fieldName":"value"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-dropdown-item","customElement":true}],"exports":[{"kind":"js","name":"GaiaDropdownItem","declaration":{"name":"GaiaDropdownItem","module":"components/primitives/dropdown/dropdown-item.js"}},{"kind":"custom-element-definition","name":"gaia-dropdown-item","declaration":{"name":"GaiaDropdownItem","module":"components/primitives/dropdown/dropdown-item.js"}}]},{"kind":"javascript-module","path":"components/primitives/dropdown/dropdown.stories.js","declarations":[{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Primitives/Dropdown', component: 'gaia-dropdown', argTypes: { placeholder: { control: 'text' }, value: { control: 'text' }, caption: { control: 'text' }, emptyText: { control: 'text' }, loading: { control: 'boolean' }, disabled: { control: 'boolean' }, invalid: { control: 'boolean' }, success: { control: 'boolean' }, }, }"},{"kind":"variable","name":"Default","type":{"text":"Story"},"default":"{ args: { placeholder: 'Placeholder', value: '', caption: '', emptyText: '', loading: false, disabled: false, invalid: false, success: false, }, render: ({ placeholder, value, caption, emptyText, loading, disabled, invalid, success }) => html`<gaia-dropdown placeholder=${placeholder || nothing} value=${value || nothing} caption=${caption || nothing} empty-text=${emptyText || nothing} ?loading=${loading} ?disabled=${disabled} ?invalid=${invalid} ?success=${success} aria-label=\"Example dropdown\" > <gaia-dropdown-item value=\"apple\">Apple</gaia-dropdown-item> <gaia-dropdown-item value=\"banana\">Banana</gaia-dropdown-item> <gaia-dropdown-item value=\"cherry\">Cherry</gaia-dropdown-item> <gaia-dropdown-item value=\"date\">Date</gaia-dropdown-item> <gaia-dropdown-item value=\"elderberry\">Elderberry</gaia-dropdown-item> </gaia-dropdown>`, }"},{"kind":"variable","name":"WithValue","type":{"text":"Story"},"default":"{ render: () => html`<gaia-dropdown placeholder=\"Choose a fruit\" value=\"banana\" aria-label=\"Fruit\"> <gaia-dropdown-item value=\"apple\">Apple</gaia-dropdown-item> <gaia-dropdown-item value=\"banana\">Banana</gaia-dropdown-item> <gaia-dropdown-item value=\"cherry\">Cherry</gaia-dropdown-item> </gaia-dropdown>`, }"},{"kind":"variable","name":"WithCaption","type":{"text":"Story"},"default":"{ render: () => html`<gaia-dropdown placeholder=\"Choose an item\" caption=\"Group A\" aria-label=\"Grouped\"> <gaia-dropdown-item value=\"a1\">Alpha</gaia-dropdown-item> <gaia-dropdown-item value=\"a2\">Beta</gaia-dropdown-item> <gaia-dropdown-item value=\"a3\">Charlie</gaia-dropdown-item> </gaia-dropdown>`, }"},{"kind":"variable","name":"Disabled","type":{"text":"Story"},"default":"{ render: () => html` <div style=\"display: flex; flex-direction: column; gap: 8px; max-width: 300px;\"> <gaia-dropdown placeholder=\"Placeholder\" disabled aria-label=\"Disabled empty\"> <gaia-dropdown-item value=\"1\">Item 1</gaia-dropdown-item> </gaia-dropdown> <gaia-dropdown placeholder=\"Placeholder\" value=\"1\" disabled aria-label=\"Disabled filled\"> <gaia-dropdown-item value=\"1\">Item 1</gaia-dropdown-item> </gaia-dropdown> </div> `, }"},{"kind":"variable","name":"Invalid","type":{"text":"Story"},"default":"{ render: () => html`<gaia-dropdown placeholder=\"Placeholder\" invalid aria-label=\"Invalid\"> <gaia-dropdown-item value=\"1\">Item 1</gaia-dropdown-item> <gaia-dropdown-item value=\"2\">Item 2</gaia-dropdown-item> </gaia-dropdown>`, }"},{"kind":"variable","name":"Success","type":{"text":"Story"},"default":"{ render: () => html`<gaia-dropdown placeholder=\"Placeholder\" value=\"1\" success aria-label=\"Success\"> <gaia-dropdown-item value=\"1\">Item 1</gaia-dropdown-item> <gaia-dropdown-item value=\"2\">Item 2</gaia-dropdown-item> </gaia-dropdown>`, }"},{"kind":"variable","name":"WithDisabledItems","type":{"text":"Story"},"default":"{ render: () => html`<gaia-dropdown placeholder=\"Choose an option\" aria-label=\"Mixed\"> <gaia-dropdown-item value=\"1\">Available</gaia-dropdown-item> <gaia-dropdown-item value=\"2\" disabled>Unavailable</gaia-dropdown-item> <gaia-dropdown-item value=\"3\">Available</gaia-dropdown-item> </gaia-dropdown>`, }"},{"kind":"variable","name":"Empty","type":{"text":"Story"},"default":"{ render: () => html`<gaia-dropdown placeholder=\"Search...\" empty-text=\"No items found\" aria-label=\"Empty\" ></gaia-dropdown>`, }"},{"kind":"variable","name":"Loading","type":{"text":"Story"},"default":"{ render: () => html`<gaia-dropdown placeholder=\"Loading...\" loading aria-label=\"Loading\"></gaia-dropdown>`, }"},{"kind":"variable","name":"Overflow","type":{"text":"Story"},"default":"{ render: () => html`<gaia-dropdown placeholder=\"Choose a country\" caption=\"Nordic\" aria-label=\"Countries\"> <gaia-dropdown-item value=\"no\">Norway</gaia-dropdown-item> <gaia-dropdown-item value=\"se\">Sweden</gaia-dropdown-item> <gaia-dropdown-item value=\"dk\">Denmark</gaia-dropdown-item> <gaia-dropdown-item value=\"fi\">Finland</gaia-dropdown-item> <gaia-dropdown-item value=\"is\">Iceland</gaia-dropdown-item> <gaia-dropdown-item value=\"fo\">Faroe Islands</gaia-dropdown-item> <gaia-dropdown-item value=\"gl\">Greenland</gaia-dropdown-item> <gaia-dropdown-item value=\"ax\">Åland Islands</gaia-dropdown-item> <gaia-dropdown-item value=\"sj\">Svalbard</gaia-dropdown-item> <gaia-dropdown-item value=\"bv\">Bouvet Island</gaia-dropdown-item> </gaia-dropdown>`, }"},{"kind":"variable","name":"WithFormField","type":{"text":"Story"},"default":"{ render: () => html`<gaia-form-field label=\"Country\" info=\"Select your country of residence\"> <gaia-dropdown placeholder=\"Select a country\" aria-label=\"Country\"> <gaia-dropdown-item value=\"no\">Norway</gaia-dropdown-item> <gaia-dropdown-item value=\"se\">Sweden</gaia-dropdown-item> <gaia-dropdown-item value=\"dk\">Denmark</gaia-dropdown-item> <gaia-dropdown-item value=\"fi\">Finland</gaia-dropdown-item> </gaia-dropdown> </gaia-form-field>`, }"},{"kind":"variable","name":"ItemStatuses","type":{"text":"Story"},"default":"{ name: 'Item Statuses (Panel)', render: () => html`<gaia-dropdown placeholder=\"Statuses demo\" aria-label=\"Statuses\"> <gaia-dropdown-item value=\"1\" selected>Selected</gaia-dropdown-item> <gaia-dropdown-item value=\"2\" active>Active (non focused)</gaia-dropdown-item> <gaia-dropdown-item value=\"3\">Default</gaia-dropdown-item> <gaia-dropdown-item value=\"4\" disabled>Disabled</gaia-dropdown-item> <gaia-dropdown-item value=\"5\" disabled selected>Disabled Selected</gaia-dropdown-item> </gaia-dropdown>`, }"}],"exports":[{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/primitives/dropdown/dropdown.stories.js"}},{"kind":"js","name":"Default","declaration":{"name":"Default","module":"components/primitives/dropdown/dropdown.stories.js"}},{"kind":"js","name":"WithValue","declaration":{"name":"WithValue","module":"components/primitives/dropdown/dropdown.stories.js"}},{"kind":"js","name":"WithCaption","declaration":{"name":"WithCaption","module":"components/primitives/dropdown/dropdown.stories.js"}},{"kind":"js","name":"Disabled","declaration":{"name":"Disabled","module":"components/primitives/dropdown/dropdown.stories.js"}},{"kind":"js","name":"Invalid","declaration":{"name":"Invalid","module":"components/primitives/dropdown/dropdown.stories.js"}},{"kind":"js","name":"Success","declaration":{"name":"Success","module":"components/primitives/dropdown/dropdown.stories.js"}},{"kind":"js","name":"WithDisabledItems","declaration":{"name":"WithDisabledItems","module":"components/primitives/dropdown/dropdown.stories.js"}},{"kind":"js","name":"Empty","declaration":{"name":"Empty","module":"components/primitives/dropdown/dropdown.stories.js"}},{"kind":"js","name":"Loading","declaration":{"name":"Loading","module":"components/primitives/dropdown/dropdown.stories.js"}},{"kind":"js","name":"Overflow","declaration":{"name":"Overflow","module":"components/primitives/dropdown/dropdown.stories.js"}},{"kind":"js","name":"WithFormField","declaration":{"name":"WithFormField","module":"components/primitives/dropdown/dropdown.stories.js"}},{"kind":"js","name":"ItemStatuses","declaration":{"name":"ItemStatuses","module":"components/primitives/dropdown/dropdown.stories.js"}}]},{"kind":"javascript-module","path":"components/primitives/dropdown/dropdown.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/primitives/dropdown/dropdown.styles.js"}}]},{"kind":"javascript-module","path":"components/primitives/dropdown/dropdown.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"components/primitives/dropdown/dropdown.js","declarations":[{"kind":"class","description":"A dropdown select component with a trigger button and a positioned listbox panel.\n\nAligns with the GAIA design system dropdown molecule. Displays a trigger\nwith placeholder or selected value text and a chevron icon. Opens a\npositioned dropdown panel with selectable items on click or keyboard.\n\nSupports keyboard navigation (arrow keys, Home, End, Enter, Space, Escape,\ntype-ahead), single selection, caption groups, empty state, and loading state.","name":"GaiaDropdown","cssParts":[{"description":"The trigger button element","name":"trigger"},{"description":"The dropdown panel container","name":"panel"},{"description":"The listbox element inside the panel","name":"listbox"},{"description":"The optional caption element","name":"caption"},{"description":"The empty state container","name":"empty"},{"description":"The loading spinner container","name":"spinner"}],"slots":[{"description":"Default slot for `<gaia-dropdown-item>` elements","name":""}],"members":[{"kind":"field","name":"placeholder","type":{"text":"string"},"default":"''","description":"Placeholder text displayed when no item is selected","attribute":"placeholder"},{"kind":"field","name":"value","type":{"text":"string"},"default":"''","description":"The currently selected value","attribute":"value"},{"kind":"field","name":"caption","type":{"text":"string"},"default":"''","description":"Optional caption text displayed above the items","attribute":"caption"},{"kind":"field","name":"emptyText","type":{"text":"string"},"default":"''","description":"Text shown when the dropdown has no items","attribute":"empty-text"},{"kind":"field","name":"loading","type":{"text":"boolean"},"default":"false","description":"Whether the dropdown is in a loading state","attribute":"loading","reflects":true},{"kind":"field","name":"disabled","type":{"text":"boolean"},"default":"false","description":"Whether the dropdown is disabled","attribute":"disabled","reflects":true},{"kind":"field","name":"invalid","type":{"text":"boolean"},"default":"false","description":"Whether the dropdown is in an invalid state","attribute":"invalid","reflects":true},{"kind":"field","name":"success","type":{"text":"boolean"},"default":"false","description":"Whether the dropdown is in a success state","attribute":"success","reflects":true},{"kind":"field","name":"ariaLabel","type":{"text":"string | null"},"default":"null","description":"Accessible label for the dropdown","attribute":"aria-label"},{"kind":"field","name":"_isOpen","type":{"text":"boolean"},"privacy":"private","default":"false","description":"Whether the dropdown panel is currently open"},{"kind":"field","name":"_focused","type":{"text":"boolean"},"privacy":"private","default":"false","description":"Whether the trigger is focused"},{"kind":"field","name":"_displayText","type":{"text":"string"},"privacy":"private","default":"''","description":"Display text for the selected item"},{"kind":"field","name":"_activeIndex","type":{"text":"number"},"privacy":"private","default":"-1","description":"Index of the currently active (keyboard-focused) item, -1 if none"},{"kind":"field","name":"_triggerEl","type":{"text":"HTMLElement"},"privacy":"private"},{"kind":"field","name":"_panelEl","type":{"text":"HTMLElement"},"privacy":"private"},{"kind":"field","name":"_floating","privacy":"private","default":"new FloatingController(this, { placement: 'bottom-start', offsetPx: 4, shiftPadding: 8, showDelay: 0, hideDelay: 0, })"},{"kind":"field","name":"_items","type":{"text":"GaiaDropdownItem[]"},"privacy":"private","default":"[]","description":"Cached list of item elements"},{"kind":"field","name":"_typeAheadTimeout","type":{"text":"ReturnType<typeof setTimeout> | null"},"privacy":"private","default":"null","description":"Type-ahead state"},{"kind":"field","name":"_typeAheadBuffer","type":{"text":"string"},"privacy":"private","default":"''"},{"kind":"method","name":"_onSlotChange","privacy":"private"},{"kind":"method","name":"_refreshItems","privacy":"private"},{"kind":"method","name":"_syncDisplayText","privacy":"private"},{"kind":"method","name":"_updateActiveDescendant","privacy":"private"},{"kind":"method","name":"_selectItem","privacy":"private","parameters":[{"name":"item","type":{"text":"GaiaDropdownItem"}}]},{"kind":"field","name":"_handleTriggerClick","privacy":"private"},{"kind":"field","name":"_handleOutsideClick","privacy":"private"},{"kind":"field","name":"_handleKeydown","privacy":"private"},{"kind":"method","name":"_findNextNavigable","privacy":"private","return":{"type":{"text":"number"}},"parameters":[{"name":"currentIndex","type":{"text":"number"}},{"name":"direction","type":{"text":"1 | -1"}}]},{"kind":"method","name":"_findLastNavigable","privacy":"private","return":{"type":{"text":"number"}}},{"kind":"method","name":"_typeAhead","privacy":"private","parameters":[{"name":"char","type":{"text":"string"}}]},{"kind":"method","name":"_close","privacy":"private"},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"events":[{"name":"change","type":{"text":"CustomEvent"},"description":"Fired when the selected value changes. `event.detail` contains `{ value: string, item: GaiaDropdownItem }`."}],"attributes":[{"name":"placeholder","type":{"text":"string"},"default":"''","description":"Placeholder text displayed when no item is selected","fieldName":"placeholder"},{"name":"value","type":{"text":"string"},"default":"''","description":"The currently selected value","fieldName":"value"},{"name":"caption","type":{"text":"string"},"default":"''","description":"Optional caption text displayed above the items","fieldName":"caption"},{"name":"empty-text","type":{"text":"string"},"default":"''","description":"Text shown when the dropdown has no items","fieldName":"emptyText"},{"name":"loading","type":{"text":"boolean"},"default":"false","description":"Whether the dropdown is in a loading state","fieldName":"loading"},{"name":"disabled","type":{"text":"boolean"},"default":"false","description":"Whether the dropdown is disabled","fieldName":"disabled"},{"name":"invalid","type":{"text":"boolean"},"default":"false","description":"Whether the dropdown is in an invalid state","fieldName":"invalid"},{"name":"success","type":{"text":"boolean"},"default":"false","description":"Whether the dropdown is in a success state","fieldName":"success"},{"name":"aria-label","type":{"text":"string | null"},"default":"null","description":"Accessible label for the dropdown","fieldName":"ariaLabel"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-dropdown","customElement":true}],"exports":[{"kind":"js","name":"GaiaDropdown","declaration":{"name":"GaiaDropdown","module":"components/primitives/dropdown/dropdown.js"}},{"kind":"custom-element-definition","name":"gaia-dropdown","declaration":{"name":"GaiaDropdown","module":"components/primitives/dropdown/dropdown.js"}}]},{"kind":"javascript-module","path":"components/primitives/empty-state/empty-state.stories.js","declarations":[{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Primitives/Empty State', component: 'gaia-empty-state', argTypes: { title: { control: 'text' }, }, }"},{"kind":"variable","name":"Default","type":{"text":"Story"},"default":"{ args: { title: 'No conversations yet' }, render: ({ title }) => html`<gaia-empty-state title=${title}> <span>Start a new conversation to get help from GAiA.</span> </gaia-empty-state>`, }"},{"kind":"variable","name":"WithIllustrationAndAction","type":{"text":"Story"},"default":"{ render: () => html`<gaia-empty-state title=\"No results found\"> <gaia-icon slot=\"illustration\" name=\"search\" size=\"2xl\"></gaia-icon> <span>Try adjusting your search terms or filters.</span> <gaia-button slot=\"action\" variant=\"secondary\">Clear filters</gaia-button> </gaia-empty-state>`, }"},{"kind":"variable","name":"MinimalNoTitle","type":{"text":"Story"},"default":"{ render: () => html`<gaia-empty-state> <span>Nothing to show here.</span> </gaia-empty-state>`, }"}],"exports":[{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/primitives/empty-state/empty-state.stories.js"}},{"kind":"js","name":"Default","declaration":{"name":"Default","module":"components/primitives/empty-state/empty-state.stories.js"}},{"kind":"js","name":"WithIllustrationAndAction","declaration":{"name":"WithIllustrationAndAction","module":"components/primitives/empty-state/empty-state.stories.js"}},{"kind":"js","name":"MinimalNoTitle","declaration":{"name":"MinimalNoTitle","module":"components/primitives/empty-state/empty-state.stories.js"}}]},{"kind":"javascript-module","path":"components/primitives/empty-state/empty-state.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/primitives/empty-state/empty-state.styles.js"}}]},{"kind":"javascript-module","path":"components/primitives/empty-state/empty-state.js","declarations":[{"kind":"class","description":"Centered empty-state primitive for displaying placeholder content\nwhen there is no data to show.","name":"GaiaEmptyState","cssParts":[{"description":"The outer container element","name":"container"}],"slots":[{"description":"Slot for an icon or image above the title","name":"illustration"},{"description":"Default slot for description text","name":""},{"description":"Slot for a call-to-action button","name":"action"}],"members":[{"kind":"field","name":"title","type":{"text":"string"},"default":"''","description":"Heading text displayed in the empty state","attribute":"title"},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"attributes":[{"name":"title","type":{"text":"string"},"default":"''","description":"Heading text displayed in the empty state","fieldName":"title"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-empty-state","customElement":true}],"exports":[{"kind":"js","name":"GaiaEmptyState","declaration":{"name":"GaiaEmptyState","module":"components/primitives/empty-state/empty-state.js"}},{"kind":"custom-element-definition","name":"gaia-empty-state","declaration":{"name":"GaiaEmptyState","module":"components/primitives/empty-state/empty-state.js"}}]},{"kind":"javascript-module","path":"components/primitives/form-field/form-field.stories.js","declarations":[{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Primitives/Form Field', component: 'gaia-form-field', argTypes: { label: { control: 'text' }, labelState: { control: 'text' }, info: { control: 'text' }, defined: { control: 'boolean' }, disabled: { control: 'boolean' }, }, }"},{"kind":"variable","name":"Regular","type":{"text":"Story"},"default":"{ args: { label: 'Label', labelState: '', info: '', defined: false, disabled: false, }, render: ({ label, labelState, info, defined, disabled }) => html`<gaia-form-field label=${label} label-state=${labelState} info=${info} ?defined=${defined} ?disabled=${disabled} > <input type=\"text\" placeholder=\"Text\" ?disabled=${disabled} /> </gaia-form-field>`, }"},{"kind":"variable","name":"WithInfo","type":{"text":"Story"},"default":"{ render: () => html`<gaia-form-field label=\"Label\" info=\"Use special characters if available.\"> <input type=\"text\" placeholder=\"Text\" /> </gaia-form-field>`, }"},{"kind":"variable","name":"LabelWithDefinition","type":{"text":"Story"},"default":"{ render: () => html`<gaia-form-field label=\"Label\" label-state=\"(optional)\" defined> <input type=\"text\" placeholder=\"Text\" /> </gaia-form-field>`, }"},{"kind":"variable","name":"Disabled","type":{"text":"Story"},"default":"{ render: () => html`<gaia-form-field label=\"Label\" label-state=\"(optional)\" defined disabled> <input type=\"text\" placeholder=\"Text\" disabled /> </gaia-form-field>`, }"}],"exports":[{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/primitives/form-field/form-field.stories.js"}},{"kind":"js","name":"Regular","declaration":{"name":"Regular","module":"components/primitives/form-field/form-field.stories.js"}},{"kind":"js","name":"WithInfo","declaration":{"name":"WithInfo","module":"components/primitives/form-field/form-field.stories.js"}},{"kind":"js","name":"LabelWithDefinition","declaration":{"name":"LabelWithDefinition","module":"components/primitives/form-field/form-field.stories.js"}},{"kind":"js","name":"Disabled","declaration":{"name":"Disabled","module":"components/primitives/form-field/form-field.stories.js"}}]},{"kind":"javascript-module","path":"components/primitives/form-field/form-field.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/primitives/form-field/form-field.styles.js"}}]},{"kind":"javascript-module","path":"components/primitives/form-field/form-field.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"components/primitives/form-field/form-field.js","declarations":[{"kind":"class","description":"Form field component that wraps an input element with a label,\noptional state text, and optional info message.\n\nAligns with the GAIA design system `ga-form-field` molecule.","name":"GaiaFormField","cssParts":[{"description":"The label element","name":"label"},{"description":"The info container","name":"info"}],"slots":[{"description":"Default slot for the form control (e.g. input, select, textarea)","name":""},{"description":"Slot for additional information or validation messages below the input","name":"info"}],"members":[{"kind":"field","name":"label","type":{"text":"string"},"default":"''","description":"Label text displayed above the input","attribute":"label"},{"kind":"field","name":"labelState","type":{"text":"string"},"default":"''","description":"Optional state text shown next to the label (e.g. \"optional\", \"required\")","attribute":"label-state"},{"kind":"field","name":"info","type":{"text":"string"},"default":"''","description":"Info text displayed below the input","attribute":"info"},{"kind":"field","name":"defined","type":{"text":"boolean"},"default":"false","description":"Whether the label has a definition style (dotted underline, interactive color)","attribute":"defined","reflects":true},{"kind":"field","name":"disabled","type":{"text":"boolean"},"default":"false","description":"Whether the field is in a disabled state","attribute":"disabled","reflects":true},{"kind":"field","name":"error","type":{"text":"string"},"default":"''","description":"Error message displayed below the input","attribute":"error"},{"kind":"field","name":"invalid","type":{"text":"boolean"},"default":"false","description":"Whether the field is in an invalid visual state","attribute":"invalid","reflects":true},{"kind":"field","name":"hint","type":{"text":"string"},"default":"''","description":"Hint text displayed below the input","attribute":"hint"},{"kind":"field","name":"count","type":{"text":"string"},"default":"''","description":"Character count text (e.g. \"0/500\")","attribute":"count"},{"kind":"field","name":"_hasInfoSlotContent","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"method","name":"_onInfoSlotChange","privacy":"private","parameters":[{"name":"e","type":{"text":"Event"}}]},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"attributes":[{"name":"label","type":{"text":"string"},"default":"''","description":"Label text displayed above the input","fieldName":"label"},{"name":"label-state","type":{"text":"string"},"default":"''","description":"Optional state text shown next to the label (e.g. \"optional\", \"required\")","fieldName":"labelState"},{"name":"info","type":{"text":"string"},"default":"''","description":"Info text displayed below the input","fieldName":"info"},{"name":"defined","type":{"text":"boolean"},"default":"false","description":"Whether the label has a definition style (dotted underline, interactive color)","fieldName":"defined"},{"name":"disabled","type":{"text":"boolean"},"default":"false","description":"Whether the field is in a disabled state","fieldName":"disabled"},{"name":"error","type":{"text":"string"},"default":"''","description":"Error message displayed below the input","fieldName":"error"},{"name":"invalid","type":{"text":"boolean"},"default":"false","description":"Whether the field is in an invalid visual state","fieldName":"invalid"},{"name":"hint","type":{"text":"string"},"default":"''","description":"Hint text displayed below the input","fieldName":"hint"},{"name":"count","type":{"text":"string"},"default":"''","description":"Character count text (e.g. \"0/500\")","fieldName":"count"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-form-field","customElement":true}],"exports":[{"kind":"js","name":"GaiaFormField","declaration":{"name":"GaiaFormField","module":"components/primitives/form-field/form-field.js"}},{"kind":"custom-element-definition","name":"gaia-form-field","declaration":{"name":"GaiaFormField","module":"components/primitives/form-field/form-field.js"}}]},{"kind":"javascript-module","path":"components/primitives/icon/icon-library.generated.js","declarations":[{"kind":"variable","name":"icons","type":{"text":"Record<string, SVGTemplateResult>"},"default":"{ angry: svg`<svg xmlns=\"http://www.w3.org/2000/svg\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.75\" viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"M16 16s-1.5-2-4-2-4 2-4 2\"/><path d=\"M7.5 8 10 9\"/><path d=\"m14 9 2.5-1\"/><path d=\"M9 10h.01\"/><path d=\"M15 10h.01\"/></svg>`, 'arrow-up': svg`<svg xmlns=\"http://www.w3.org/2000/svg\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><path d=\"m5 12 7-7 7 7\"/><path d=\"M12 19V5\"/></svg>`, 'bell-ring': svg`<svg xmlns=\"http://www.w3.org/2000/svg\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><path d=\"M10.268 21a2 2 0 0 0 3.464 0\"/><path d=\"M22 8c0-2.3-.8-4.3-2-6\"/><path d=\"M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326\"/><path d=\"M4 2C2.8 3.7 2 5.7 2 8\"/></svg>`, check: svg`<svg xmlns=\"http://www.w3.org/2000/svg\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><path d=\"M20 6 9 17l-5-5\"/></svg>`, 'chevron-down': svg`<svg xmlns=\"http://www.w3.org/2000/svg\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><path d=\"m6 9 6 6 6-6\"/></svg>`, 'chevron-left': svg`<svg xmlns=\"http://www.w3.org/2000/svg\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><path d=\"m15 18-6-6 6-6\"/></svg>`, 'chevron-right': svg`<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><path d=\"m9 18 6-6-6-6\"/></svg>`, 'circle-alert': svg`<svg xmlns=\"http://www.w3.org/2000/svg\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"10\"/><line x1=\"12\" x2=\"12\" y1=\"8\" y2=\"12\"/><line x1=\"12\" x2=\"12.01\" y1=\"16\" y2=\"16\"/></svg>`, 'circle-check': svg`<svg xmlns=\"http://www.w3.org/2000/svg\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"m9 12 2 2 4-4\"/></svg>`, 'circle-x': svg`<svg xmlns=\"http://www.w3.org/2000/svg\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"m15 9-6 6\"/><path d=\"m9 9 6 6\"/></svg>`, copy: svg`<svg xmlns=\"http://www.w3.org/2000/svg\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\"/><path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"/></svg>`, download: svg`<svg xmlns=\"http://www.w3.org/2000/svg\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><path d=\"M12 15V3\"/><path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"/><path d=\"m7 10 5 5 5-5\"/></svg>`, file: svg`<svg xmlns=\"http://www.w3.org/2000/svg\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><path d=\"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z\"/><path d=\"M14 2v4a2 2 0 0 0 2 2h4\"/></svg>`, frown: svg`<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.75\" viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"M16 16s-1.5-2-4-2-4 2-4 2\"/><line x1=\"9\" x2=\"9.01\" y1=\"9\" y2=\"9\"/><line x1=\"15\" x2=\"15.01\" y1=\"9\" y2=\"9\"/></svg>`, globe: svg`<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20\"/><path d=\"M2 12h20\"/></svg>`, headset: svg`<svg xmlns=\"http://www.w3.org/2000/svg\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><path d=\"M3 11h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2zm0 0a9 9 0 1 1 18 0m0 0v5a2 2 0 0 1-2 2h-1a2 2 0 0 1-2-2v-3a2 2 0 0 1 2-2z\"/><path d=\"M21 16v2a4 4 0 0 1-4 4h-5\"/></svg>`, history: svg`<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-history-icon lucide-history\" viewBox=\"0 0 24 24\"><path d=\"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\"/><path d=\"M3 3v5h5\"/><path d=\"M12 7v5l4 2\"/></svg>`, info: svg`<svg xmlns=\"http://www.w3.org/2000/svg\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"M12 16v-4\"/><path d=\"M12 8h.01\"/></svg>`, laugh: svg`<svg xmlns=\"http://www.w3.org/2000/svg\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.75\" viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"M18 13a6 6 0 0 1-6 5 6 6 0 0 1-6-5z\"/><line x1=\"9\" x2=\"9.01\" y1=\"9\" y2=\"9\"/><line x1=\"15\" x2=\"15.01\" y1=\"9\" y2=\"9\"/></svg>`, 'learning-universe': svg`<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xml:space=\"preserve\" id=\"LOGO\" x=\"0\" y=\"0\" version=\"1.1\" viewBox=\"0 0 96 96\"><style>.st0{fill:url(#SVGID_1_)}</style><linearGradient id=\"SVGID_1_\" x1=\"1.547\" x2=\"95.006\" y1=\"23.618\" y2=\"65.189\" gradientTransform=\"matrix(1 0 0 -1 0 98)\" gradientUnits=\"userSpaceOnUse\"><stop offset=\".14\" style=\"stop-color:#003356\"/><stop offset=\".26\" style=\"stop-color:#092d54\"/><stop offset=\".47\" style=\"stop-color:#241e4f\"/><stop offset=\".74\" style=\"stop-color:#4e0648\"/><stop offset=\".8\" style=\"stop-color:#5a0047\"/><stop offset=\".87\" style=\"stop-color:#5c0148\"/><stop offset=\".9\" style=\"stop-color:#64044d\"/><stop offset=\".93\" style=\"stop-color:#720a56\"/><stop offset=\".96\" style=\"stop-color:#861362\"/><stop offset=\".98\" style=\"stop-color:#a01e71\"/><stop offset=\"1\" style=\"stop-color:#b6287f\"/></linearGradient><path d=\"M80.1 39.2c-.7-11.3-10.9-16.4-19.8-15.8-13.2.9-23.2 7.6-29.1 16.2-10 16.7 7 13.3 5 6.4-.7-2.6-.4-4.3 1.3-6.8 3.4-4.1 7.1-6.8 12.8-9.1 7.4-2.6 14.5-1.9 19.5 3.6 5.8 7 2.9 21.1-9.3 33.4-10.8 10.7-24.8 16-35.9 16-5.1 0-11.8-.6-16.8-5.5-7.9-7.9-5.2-18.7-5-20.1.3-1-1.3-1.6-1.7.1C-5 83 17.3 87.6 20.3 88.2c2.9.3 27.1 3.4 49.2-21.6 9.3-11.2 11-20.6 10.6-27.4M44 72.5c11.4-4.6 18.7-12 22.8-20.3 3.6-7.6 2-14.7-1.4-18-5.1-5.1-14.4-2.9-16.9-.4s-1.1 5.3 2 4.6c9-1.9 10.6 3 10.5 5.6-.3 7.1-6.8 14.8-13.2 18.9C37.4 69.4 27 70 20.6 65.8c-6.7-4.5-7.4-13.5-2.9-22.6 3.7-7.6 12.5-18 25.4-25.3 8.8-5 15.9-7.6 25.4-8.9 1.3-.4 1-1.6-.3-1.4-10 1.6-18 4.4-25.4 8.5-9.7 5.3-24.5 16.7-30.3 31-3.2 8.1-2.9 15.1.3 20.2 5.4 8.8 20.2 9.5 31 5.1zm47-47.3c-4.5-5.8-11.1-8.7-18.3-9.4-8.1-.8-16.9 1-24.5 4.2-25.4 11-28.1 29.3-28.1 29.3-.9 3.8-2.2 15.8 13.1 15.1 7.8-.3 15.5-4.5 20.3-11.3 2.3-4.2-2.6-6.8-6.8-2.3-2.3 2.5-6.5 7-13.3 6.8-9.5-.2-11.2-10.3-1.9-21.6 0 0 11.4-14.5 31-16.7C74.8 18 85.4 23.5 89 33.2c2.5 6.7 2.2 15-2.5 26.1-3.3 8-8.3 14.8-15.6 21.3-2 1.9 0 3.7 2 2C86.8 71.5 96 54.8 96 40.8c0-4.2-.9-9.8-5-15.6\" class=\"st0\"/></svg>`, lightbulb: svg`<svg xmlns=\"http://www.w3.org/2000/svg\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><path d=\"M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5\"/><path d=\"M9 18h6\"/><path d=\"M10 22h4\"/></svg>`, 'maximize-2': svg`<svg xmlns=\"http://www.w3.org/2000/svg\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><path d=\"M15 3h6v6\"/><path d=\"m21 3-7 7\"/><path d=\"m3 21 7-7\"/><path d=\"M9 21H3v-6\"/></svg>`, megaphone: svg`<svg xmlns=\"http://www.w3.org/2000/svg\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><path d=\"M11 6a13 13 0 0 0 8.4-2.8A1 1 0 0 1 21 4v12a1 1 0 0 1-1.6.8A13 13 0 0 0 11 14H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2z\"/><path d=\"M6 14a12 12 0 0 0 2.4 7.2 2 2 0 0 0 3.2-2.4A8 8 0 0 1 10 14\"/><path d=\"M8 6v8\"/></svg>`, meh: svg`<svg xmlns=\"http://www.w3.org/2000/svg\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.75\" viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"10\"/><line x1=\"8\" x2=\"16\" y1=\"15\" y2=\"15\"/><line x1=\"9\" x2=\"9.01\" y1=\"9\" y2=\"9\"/><line x1=\"15\" x2=\"15.01\" y1=\"9\" y2=\"9\"/></svg>`, 'message-circle': svg`<svg xmlns=\"http://www.w3.org/2000/svg\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><path d=\"M2.992 16.342a2 2 0 0 1 .094 1.167l-1.065 3.29a1 1 0 0 0 1.236 1.168l3.413-.998a2 2 0 0 1 1.099.092 10 10 0 1 0-4.777-4.719\"/></svg>`, mic: svg`<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-mic-icon lucide-mic\" viewBox=\"0 0 24 24\"><path d=\"M12 19v3\"/><path d=\"M19 10v2a7 7 0 0 1-14 0v-2\"/><rect width=\"6\" height=\"13\" x=\"9\" y=\"2\" rx=\"3\"/></svg>`, 'minimize-2': svg`<svg xmlns=\"http://www.w3.org/2000/svg\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><path d=\"m14 10 7-7\"/><path d=\"M20 10h-6V4\"/><path d=\"m3 21 7-7\"/><path d=\"M4 14h6v6\"/></svg>`, 'octagon-alert': svg`<svg xmlns=\"http://www.w3.org/2000/svg\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><path d=\"M12 16h.01\"/><path d=\"M12 8v4\"/><path d=\"M15.312 2a2 2 0 0 1 1.414.586l4.688 4.688A2 2 0 0 1 22 8.688v6.624a2 2 0 0 1-.586 1.414l-4.688 4.688a2 2 0 0 1-1.414.586H8.688a2 2 0 0 1-1.414-.586l-4.688-4.688A2 2 0 0 1 2 15.312V8.688a2 2 0 0 1 .586-1.414l4.688-4.688A2 2 0 0 1 8.688 2z\"/></svg>`, paperclip: svg`<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-paperclip-icon lucide-paperclip\" viewBox=\"0 0 24 24\"><path d=\"m16 6-8.414 8.586a2 2 0 0 0 2.829 2.829l8.414-8.586a4 4 0 1 0-5.657-5.657l-8.379 8.551a6 6 0 1 0 8.485 8.485l8.379-8.551\"/></svg>`, 'pen-line': svg`<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-pen-line-icon lucide-pen-line\" viewBox=\"0 0 24 24\"><path d=\"M13 21h8\"/><path d=\"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z\"/></svg>`, plus: svg`<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><path d=\"M5 12h14\"/><path d=\"M12 5v14\"/></svg>`, send: svg`<svg xmlns=\"http://www.w3.org/2000/svg\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><path d=\"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z\"/><path d=\"m21.854 2.147-10.94 10.939\"/></svg>`, smile: svg`<svg xmlns=\"http://www.w3.org/2000/svg\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.75\" viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"M8 14s1.5 2 4 2 4-2 4-2\"/><line x1=\"9\" x2=\"9.01\" y1=\"9\" y2=\"9\"/><line x1=\"15\" x2=\"15.01\" y1=\"9\" y2=\"9\"/></svg>`, sparkles: svg`<svg xmlns=\"http://www.w3.org/2000/svg\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><path d=\"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z\"/><path d=\"M20 2v4\"/><path d=\"M22 4h-4\"/><circle cx=\"4\" cy=\"20\" r=\"2\"/></svg>`, 'square-pen': svg`<svg xmlns=\"http://www.w3.org/2000/svg\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><path d=\"M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"/><path d=\"M18.375 2.625a1 1 0 0 1 3 3l-9.013 9.014a2 2 0 0 1-.853.505l-2.873.84a.5.5 0 0 1-.62-.62l.84-2.873a2 2 0 0 1 .506-.852z\"/></svg>`, 'thumbs-down': svg`<svg xmlns=\"http://www.w3.org/2000/svg\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><path d=\"M17 14V2\"/><path d=\"M9 18.12 10 14H4.17a2 2 0 0 1-1.92-2.56l2.33-8A2 2 0 0 1 6.5 2H20a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-2.76a2 2 0 0 0-1.79 1.11L12 22a3.13 3.13 0 0 1-3-3.88\"/></svg>`, 'thumbs-up': svg`<svg xmlns=\"http://www.w3.org/2000/svg\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><path d=\"M7 10v12\"/><path d=\"M15 5.88 14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2a3.13 3.13 0 0 1 3 3.88\"/></svg>`, 'trash-2': svg`<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-trash2-icon lucide-trash-2\" viewBox=\"0 0 24 24\"><path d=\"M10 11v6\"/><path d=\"M14 11v6\"/><path d=\"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6\"/><path d=\"M3 6h18\"/><path d=\"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\"/></svg>`, 'triangle-alert': svg`<svg xmlns=\"http://www.w3.org/2000/svg\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3\"/><path d=\"M12 9v4\"/><path d=\"M12 17h.01\"/></svg>`, 'user-cog': svg`<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-user-cog-icon lucide-user-cog\" viewBox=\"0 0 24 24\"><path d=\"M10 15H6a4 4 0 0 0-4 4v2\"/><path d=\"m14.305 16.53.923-.382\"/><path d=\"m15.228 13.852-.923-.383\"/><path d=\"m16.852 12.228-.383-.923\"/><path d=\"m16.852 17.772-.383.924\"/><path d=\"m19.148 12.228.383-.923\"/><path d=\"m19.53 18.696-.382-.924\"/><path d=\"m20.772 13.852.924-.383\"/><path d=\"m20.772 16.148.924.383\"/><circle cx=\"18\" cy=\"15\" r=\"3\"/><circle cx=\"9\" cy=\"7\" r=\"4\"/></svg>`, 'user-round': svg`<svg xmlns=\"http://www.w3.org/2000/svg\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"8\" r=\"5\"/><path d=\"M20 21a8 8 0 0 0-16 0\"/></svg>`, vsn: svg`<svg xmlns=\"http://www.w3.org/2000/svg\" id=\"LOGO\" style=\"background-color:#133445;border-radius:4px;padding:1px\" viewBox=\"0 0 605 220\"><defs><style>.cls-1{fill:#0080a4}.cls-2{fill:#fff}</style></defs><path d=\"M189.5 3.41c-1.34-1.23-2.83-1.85-4.47-1.85h-27.12c-2.88 0-5.08.77-6.63 2.31q-2.31 2.31-3.24 4.47L96.25 167.03l-.05-.15-13.7 41.54c-1.44 4.36 1.81 8.84 6.39 8.84h24.3c3.28 0 5.85-.81 7.7-2.46 1.85-1.64 3.18-3.7 4.01-6.16l65.99-197.83c.41-1.03.62-1.95.62-2.77 0-1.85-.67-3.39-2-4.62ZM45.16 11.42c-.41-2.66-1.39-4.98-2.93-6.93s-3.85-2.93-6.93-2.93H6.95c-1.64 0-2.98.57-4.01 1.7S1.4 5.78 1.4 7.42c0 1.44.31 2.77.92 4.01l19.73 51.15c.82 2.05 1.96 3.85 3.39 5.39q2.16 2.31 6.78 2.31h15.72c1.85 0 3.24-.62 4.16-1.86q1.38-1.845 1.08-4.62l-8.02-52.39Z\" class=\"cls-2\"/><path d=\"M547.39 215.55c-1.34 1.23-2.83 1.85-4.47 1.85H515.8c-2.88 0-5.08-.76-6.63-2.3q-2.31-2.31-3.24-4.47L454.12 51.96l-.05.15-13.71-41.53c-1.44-4.36 1.81-8.84 6.39-8.85h24.3c3.28 0 5.85.81 7.7 2.46 1.85 1.64 3.18 3.7 4.01 6.16l66 197.8c.41 1.03.62 1.95.62 2.77 0 1.85-.67 3.39-2 4.62Z\" class=\"cls-2\"/><path d=\"M572.54 70.43q4.62 0 6.78-2.31c1.43-1.54 2.57-3.34 3.39-5.39l19.72-51.15c.62-1.23.92-2.57.92-4.01 0-1.64-.51-3.03-1.54-4.16s-2.36-1.7-4.01-1.7h-28.35c-3.08 0-5.39.98-6.93 2.93-1.54 1.96-2.52 4.27-2.93 6.93l-8.01 52.38q-.315 2.775 1.08 4.62c.92 1.23 2.31 1.85 4.16 1.85h15.71Z\" class=\"cls-1\"/><path d=\"M437.52 210.12c0 2.23-.66 4-1.98 5.32-1.31 1.32-3.09 1.97-5.32 1.97h-21.87c-2.02 0-3.75-.65-5.16-1.97-1.42-1.31-2.13-3.09-2.13-5.32v-27.65c0-2.23.71-4.05 2.13-5.47q2.13-2.13 5.16-2.13h21.87c2.23 0 4 .71 5.32 2.13s1.98 3.24 1.98 5.47z\" class=\"cls-2\"/><path d=\"M294.4 1.62c-7.18 1.33-13.8 3.31-19.81 5.99-12.01 5.34-21.24 12.62-27.71 21.85s-9.7 19.81-9.7 31.7c0 12.31 2.61 22.47 7.84 30.48 5.23 8 13.03 14.62 23.39 19.86 7.29 3.68 15.86 6.98 25.65 9.9 2.17.65 4.36-.95 4.36-3.22V85.24c0-1.31-.77-2.48-1.95-3.05-4.72-2.29-8.33-4.83-10.82-7.63-3.39-3.8-5.08-8.57-5.08-14.32 0-8.62 3.39-14.98 10.16-19.08 1.73-1.05 3.6-1.95 5.61-2.72 1.27-.49 2.08-1.75 2.08-3.11V4.93c0-2.12-1.94-3.69-4.03-3.31Zm-31.65 154.69c-.82-2.05-1.95-3.85-3.39-5.39s-3.69-2.31-6.77-2.31h-15.7c-1.85 0-3.23.62-4.16 1.85-.92 1.23-1.28 2.77-1.08 4.61l8.01 52.33c.41 2.66 1.38 4.97 2.93 6.92 1.54 1.95 3.85 2.92 6.93 2.92h28.32c1.64 0 2.97-.57 4-1.7s1.54-2.51 1.54-4.15c0-1.44-.31-2.77-.92-4l-19.71-51.09Z\" class=\"cls-2\"/><path d=\"M371.13 1.56c2.23 0 4 .66 5.32 1.98 1.32 1.31 1.97 3.09 1.97 5.32v21.87c0 2.02-.65 3.75-1.97 5.16-1.31 1.42-3.09 2.13-5.32 2.13h-27.65c-2.23 0-4.05-.71-5.47-2.13q-2.13-2.13-2.13-5.16V8.85c0-2.23.71-4 2.13-5.32s3.24-1.98 5.47-1.98h27.65Z\" class=\"cls-2\"/></svg>`, wrench: svg`<svg xmlns=\"http://www.w3.org/2000/svg\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><path d=\"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z\"/></svg>`, x: svg`<svg xmlns=\"http://www.w3.org/2000/svg\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><path d=\"M18 6 6 18\"/><path d=\"m6 6 12 12\"/></svg>`, }"}],"exports":[{"kind":"js","name":"icons","declaration":{"name":"icons","module":"components/primitives/icon/icon-library.generated.js"}}]},{"kind":"javascript-module","path":"components/primitives/icon/icon-registry.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"components/primitives/icon/icon-registry.js","declarations":[{"kind":"function","name":"getIcon","return":{"type":{"text":"SVGTemplateResult | null"}},"parameters":[{"name":"name","type":{"text":"string"}}],"description":"Synchronous lookup. Returns a core or previously-registered icon."},{"kind":"function","name":"registerIcons","return":{"type":{"text":"void"}},"parameters":[{"name":"newIcons","type":{"text":"Record<string, SVGTemplateResult>"}}],"description":"Register additional icons at runtime.\nAccepts Lit svg template results."},{"kind":"function","name":"loadIcon","return":{"type":{"text":"Promise<SVGTemplateResult | null>"}},"parameters":[{"name":"name","type":{"text":"string"}}],"description":"Lazy-load an icon from the extended set.\nReturns null if the icon doesn't exist.\nOnce loaded, the icon is cached in the custom registry."},{"kind":"function","name":"hasIcon","return":{"type":{"text":"boolean"}},"parameters":[{"name":"name","type":{"text":"string"}}],"description":"Check if an icon is available synchronously (core or registered)."},{"kind":"function","name":"getIconNames","return":{"type":{"text":"string[]"}},"description":"List all available icon names (core + registered)."}],"exports":[{"kind":"js","name":"CoreIconName","declaration":{"name":"CoreIconName","module":"components/primitives/icon/icon-registry.js"}},{"kind":"js","name":"getIcon","declaration":{"name":"getIcon","module":"components/primitives/icon/icon-registry.js"}},{"kind":"js","name":"registerIcons","declaration":{"name":"registerIcons","module":"components/primitives/icon/icon-registry.js"}},{"kind":"js","name":"loadIcon","declaration":{"name":"loadIcon","module":"components/primitives/icon/icon-registry.js"}},{"kind":"js","name":"hasIcon","declaration":{"name":"hasIcon","module":"components/primitives/icon/icon-registry.js"}},{"kind":"js","name":"getIconNames","declaration":{"name":"getIconNames","module":"components/primitives/icon/icon-registry.js"}}]},{"kind":"javascript-module","path":"components/primitives/icon/icon.stories.js","declarations":[{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Primitives/Icon', component: 'gaia-icon', argTypes: { name: { control: 'select', options: Object.keys(icons) }, size: { control: 'select', options: ['sm', 'md', 'lg', 'xl', '2xl'] }, }, }"},{"kind":"variable","name":"Default","type":{"text":"Story"},"default":"{ args: { name: 'sparkles', size: 'sm', }, render: (args) => html`<gaia-icon .name=${args.name} .size=${args.size}></gaia-icon>`, }"},{"kind":"variable","name":"AllSizes","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"display: flex; gap: 16px; align-items: center;\"> <gaia-icon name=\"sparkles\" size=\"sm\"></gaia-icon> <gaia-icon name=\"sparkles\" size=\"md\"></gaia-icon> <gaia-icon name=\"sparkles\" size=\"lg\"></gaia-icon> <gaia-icon name=\"sparkles\" size=\"xl\"></gaia-icon> <gaia-icon name=\"sparkles\" size=\"2xl\"></gaia-icon> </div>`, }"},{"kind":"variable","name":"Gallery","type":{"text":"Story"},"default":"{ render: () => { const names = Object.keys(icons).slice(0, 30); return html`<div style=\"display: flex; flex-wrap: wrap; gap: 16px;\"> ${names.map( (name) => html` <div style=\"display: flex; flex-direction: column; align-items: center; gap: 4px; width: 64px;\" > <gaia-icon .name=${name} size=\"md\"></gaia-icon> <span style=\"font-size: 10px; text-align: center; word-break: break-all;\">${name}</span> </div> ` )} </div>`; }, }"}],"exports":[{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/primitives/icon/icon.stories.js"}},{"kind":"js","name":"Default","declaration":{"name":"Default","module":"components/primitives/icon/icon.stories.js"}},{"kind":"js","name":"AllSizes","declaration":{"name":"AllSizes","module":"components/primitives/icon/icon.stories.js"}},{"kind":"js","name":"Gallery","declaration":{"name":"Gallery","module":"components/primitives/icon/icon.stories.js"}}]},{"kind":"javascript-module","path":"components/primitives/icon/icon.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"components/primitives/icon/icon.js","declarations":[{"kind":"class","description":"SVG icon from the GAIA icon registry.\n\nRenders an inline SVG for the given icon `name`. Icons not present in\nthe synchronous registry are lazy-loaded on demand. When a `label` is\nset, the host receives `role=\"img\"` and `aria-label`; otherwise it is\nmarked `aria-hidden=\"true\"`.","name":"GaiaIcon","members":[{"kind":"field","name":"name","type":{"text":"IconName | null"},"default":"null","attribute":"name","reflects":true},{"kind":"field","name":"label","type":{"text":"string"},"default":"''","attribute":"label"},{"kind":"field","name":"size","type":{"text":"'sm' | 'md' | 'lg' | 'xl' | '2xl'"},"default":"'sm'","attribute":"size","reflects":true},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"attributes":[{"name":"name","type":{"text":"IconName | null"},"default":"null","fieldName":"name"},{"name":"label","type":{"text":"string"},"default":"''","fieldName":"label"},{"name":"size","type":{"text":"'sm' | 'md' | 'lg' | 'xl' | '2xl'"},"default":"'sm'","fieldName":"size"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-icon","customElement":true}],"exports":[{"kind":"js","name":"GaiaIcon","declaration":{"name":"GaiaIcon","module":"components/primitives/icon/icon.js"}},{"kind":"custom-element-definition","name":"gaia-icon","declaration":{"name":"GaiaIcon","module":"components/primitives/icon/icon.js"}}]},{"kind":"javascript-module","path":"components/primitives/modal/modal.stories.js","declarations":[{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Primitives/Modal', component: 'gaia-modal', argTypes: { size: { control: 'select', options: ['small', 'medium', 'large'] }, type: { control: 'select', options: ['default', 'danger', 'warning', 'success', 'information'], }, label: { control: 'text' }, title: { control: 'text' }, description: { control: 'text' }, open: { control: 'boolean' }, }, }"},{"kind":"variable","name":"Default","type":{"text":"Story"},"default":"{ args: { open: true, size: 'small', type: 'default', label: 'Modal Label', title: 'Modal Title', description: 'Modal Description', }, render: ({ open, size, type, label, title, description }) => html`<gaia-modal .open=${open} .size=${size} .type=${type} .label=${label} .title=${title} .description=${description} @close=${closeModal} > <gaia-button slot=\"actions\" variant=\"secondary\">Cancel</gaia-button> <gaia-button slot=\"actions\">Confirm</gaia-button> </gaia-modal>`, }"},{"kind":"variable","name":"WithForm","type":{"text":"Story"},"default":"{ args: { open: true }, render: ({ open }) => html`<gaia-modal .open=${open}> <gaia-button slot=\"actions\" variant=\"secondary\">Cancel</gaia-button> <gaia-button slot=\"actions\">Confirm</gaia-button> </gaia-modal>`, }"}],"exports":[{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/primitives/modal/modal.stories.js"}},{"kind":"js","name":"Default","declaration":{"name":"Default","module":"components/primitives/modal/modal.stories.js"}},{"kind":"js","name":"WithForm","declaration":{"name":"WithForm","module":"components/primitives/modal/modal.stories.js"}}]},{"kind":"javascript-module","path":"components/primitives/modal/modal.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/primitives/modal/modal.styles.js"}}]},{"kind":"javascript-module","path":"components/primitives/modal/modal.test.js","declarations":[{"kind":"class","description":"","name":"TestModalHost","members":[{"kind":"field","name":"opener","type":{"text":"HTMLButtonElement"}},{"kind":"field","name":"modal","type":{"text":"GaiaModal"}}],"superclass":{"name":"LitElement","package":"lit"},"tagName":"test-modal-host","customElement":true}],"exports":[{"kind":"custom-element-definition","name":"test-modal-host","declaration":{"name":"TestModalHost","module":"components/primitives/modal/modal.test.js"}}]},{"kind":"javascript-module","path":"components/primitives/modal/modal.js","declarations":[{"kind":"class","description":"Modal overlay primitive following GAIA overlay elevation spec.\n\nUses GAIA z-index tokens (scrim z:400, overlay z:500), brand-tinted\nbackdrop, focus trapping, and Escape key dismissal.","name":"GaiaModal","slots":[{"description":"Default slot for modal body content","name":""},{"description":"Slot for footer action buttons","name":"actions"}],"members":[{"kind":"field","name":"open","type":{"text":"boolean"},"default":"false","description":"Whether the modal is visible","attribute":"open","reflects":true},{"kind":"field","name":"title","type":{"text":"string"},"default":"''","attribute":"title"},{"kind":"field","name":"description","type":{"text":"string"},"default":"''","attribute":"description"},{"kind":"field","name":"label","type":{"text":"string | undefined"},"default":"undefined","attribute":"label"},{"kind":"field","name":"icon","type":{"text":"IconName | undefined"},"default":"undefined","attribute":"icon"},{"kind":"field","name":"size","type":{"text":"'small' | 'medium' | 'large'"},"default":"'small'","attribute":"size","reflects":true},{"kind":"field","name":"type","type":{"text":"'default' | 'danger' | 'warning' | 'success' | 'information'"},"default":"'default'","attribute":"type","reflects":true},{"kind":"field","name":"previouslyFocused","type":{"text":"HTMLElement | null"},"privacy":"private","default":"null"},{"kind":"field","name":"focusTrap","privacy":"private","default":"new FocusTrapController(this, '.modal', () => this.handleClose())"},{"kind":"field","name":"hasLabel","privacy":"private","readonly":true},{"kind":"field","name":"hasDescription","privacy":"private","readonly":true},{"kind":"field","name":"dialogRole","type":{"text":"'dialog' | 'alertdialog'"},"privacy":"private","readonly":true},{"kind":"method","name":"resolveIcon","privacy":"private","return":{"type":{"text":"IconName | undefined"}}},{"kind":"method","name":"captureActiveElement","privacy":"private","return":{"type":{"text":"HTMLElement | null"}},"description":"Walk up through shadow root hosts to find the deepest focused element.\nThis is needed because the opener may live in a parent shadow root\n(e.g. the submit button in gaia-feedback when opened via gaia-consent-dialog)."},{"kind":"method","name":"handleClose","privacy":"private"},{"kind":"method","name":"handleBackdropClick","privacy":"private","parameters":[{"name":"e","type":{"text":"MouseEvent"}}]},{"kind":"method","name":"handleKeyDown","privacy":"private","parameters":[{"name":"e","type":{"text":"KeyboardEvent"}}]},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"events":[{"name":"close","type":{"text":"Event"},"description":"Dispatched when modal is dismissed via Escape, backdrop click, or close button"}],"attributes":[{"name":"open","type":{"text":"boolean"},"default":"false","description":"Whether the modal is visible","fieldName":"open"},{"name":"title","type":{"text":"string"},"default":"''","fieldName":"title"},{"name":"description","type":{"text":"string"},"default":"''","fieldName":"description"},{"name":"label","type":{"text":"string | undefined"},"default":"undefined","fieldName":"label"},{"name":"icon","type":{"text":"IconName | undefined"},"default":"undefined","fieldName":"icon"},{"name":"size","type":{"text":"'small' | 'medium' | 'large'"},"default":"'small'","fieldName":"size"},{"name":"type","type":{"text":"'default' | 'danger' | 'warning' | 'success' | 'information'"},"default":"'default'","fieldName":"type"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-modal","customElement":true}],"exports":[{"kind":"js","name":"GaiaModal","declaration":{"name":"GaiaModal","module":"components/primitives/modal/modal.js"}},{"kind":"custom-element-definition","name":"gaia-modal","declaration":{"name":"GaiaModal","module":"components/primitives/modal/modal.js"}}]},{"kind":"javascript-module","path":"components/primitives/notification/notification.stories.js","declarations":[{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Primitives/Notification', component: 'gaia-notification', argTypes: { open: { control: 'boolean' }, type: { control: 'select', options: ['brand', 'information', 'success', 'warning', 'error', 'transparent'], }, dismissible: { control: 'boolean' }, titleMessage: { control: 'text' }, message: { control: 'text' }, showProgress: { control: 'boolean' }, showNotificationIcon: { control: 'boolean' }, autoDismiss: { control: 'number' }, }, }"},{"kind":"variable","name":"Default","type":{"text":"Story"},"default":"{ args: { open: true, type: 'brand', dismissible: true, titleMessage: 'Title', message: 'This is an information notification message.', showProgress: false, showNotificationIcon: true, autoDismiss: 6000, }, render: ({ open, type, dismissible, titleMessage, message, showProgress, showNotificationIcon, autoDismiss, }) => html`<gaia-notification .open=${open} .type=${type} .dismissible=${dismissible} .titleMessage=${titleMessage} .message=${message} .showProgress=${showProgress} .showNotificationIcon=${showNotificationIcon} .autoDismiss=${autoDismiss} > </gaia-notification>`, }"},{"kind":"variable","name":"AllVariants","type":{"text":"Story"},"default":"{ render: () => html` <div style=\"display: flex; flex-direction: column; gap: 12px; max-width: 480px;\"> <gaia-notification type=\"brand\" title-message=\"Brand\" message=\"This is a brand notification.\" ></gaia-notification> <gaia-notification type=\"information\" title-message=\"Information\" message=\"This is an informational notification.\" .autoDismiss=${0} ></gaia-notification> <gaia-notification type=\"success\" title-message=\"Success\" message=\"Operation completed successfully.\" .autoDismiss=${0} ></gaia-notification> <gaia-notification type=\"warning\" title-message=\"Warning\" message=\"Please review before continuing.\" ></gaia-notification> <gaia-notification type=\"error\" title-message=\"Error\" message=\"Something went wrong. Please try again.\" ></gaia-notification> <gaia-notification type=\"transparent\" title-message=\"Transparent\" message=\"This is a transparent notification.\" ></gaia-notification> </div> `, }"},{"kind":"variable","name":"WithAction","type":{"text":"Story"},"default":"{ render: () => html` <gaia-notification type=\"success\" title-message=\"Item deleted\" message=\"The item has been removed.\" .autoDismiss=${0} > <gaia-button slot=\"action\" variant=\"ghost\">Undo</gaia-button> </gaia-notification> `, }"},{"kind":"variable","name":"WithProgress","type":{"text":"Story"},"default":"{ render: () => html` <gaia-notification type=\"information\" title-message=\"Uploading...\" message=\"Your file is being uploaded.\" show-progress .autoDismiss=${0} ></gaia-notification> `, }"},{"kind":"variable","name":"MessageOnly","type":{"text":"Story"},"default":"{ render: () => html` <gaia-notification type=\"information\" message=\"A simple notification without a title.\" .autoDismiss=${0} ></gaia-notification> `, }"}],"exports":[{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/primitives/notification/notification.stories.js"}},{"kind":"js","name":"Default","declaration":{"name":"Default","module":"components/primitives/notification/notification.stories.js"}},{"kind":"js","name":"AllVariants","declaration":{"name":"AllVariants","module":"components/primitives/notification/notification.stories.js"}},{"kind":"js","name":"WithAction","declaration":{"name":"WithAction","module":"components/primitives/notification/notification.stories.js"}},{"kind":"js","name":"WithProgress","declaration":{"name":"WithProgress","module":"components/primitives/notification/notification.stories.js"}},{"kind":"js","name":"MessageOnly","declaration":{"name":"MessageOnly","module":"components/primitives/notification/notification.stories.js"}}]},{"kind":"javascript-module","path":"components/primitives/notification/notification.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/primitives/notification/notification.styles.js"}}]},{"kind":"javascript-module","path":"components/primitives/notification/notification.js","declarations":[{"kind":"class","description":"Inline notification banner for success, error, warning, and informational messages.\n\nSupports auto-dismiss with a countdown progress bar (for success and\ninformation types), pause-on-hover, an optional title, a dismiss button,\nand custom action/title-action slots. The timer pauses on hover/focus\nand resumes on leave/blur.","name":"GaiaNotification","cssParts":[{"description":"The outer notification container","name":"container"}],"slots":[{"description":"Custom description content (overrides the `message` prop)","name":"description"},{"description":"Actions displayed next to the title","name":"title-actions"},{"description":"Call-to-action buttons below the description","name":"action"}],"members":[{"kind":"field","name":"type","type":{"text":"NotificationType"},"default":"'brand'","attribute":"type","reflects":true},{"kind":"field","name":"open","type":{"text":"boolean"},"default":"true","attribute":"open","reflects":true},{"kind":"field","name":"dismissible","type":{"text":"boolean"},"default":"true","attribute":"dismissible","reflects":true},{"kind":"field","name":"titleMessage","type":{"text":"string | undefined"},"default":"undefined","attribute":"title-message"},{"kind":"field","name":"message","type":{"text":"string"},"default":"''","attribute":"message"},{"kind":"field","name":"notificationIcon","type":{"text":"IconName | undefined | undefined"},"default":"undefined","attribute":"notification-icon"},{"kind":"field","name":"dismissibleIcon","type":{"text":"IconName"},"default":"'x'","attribute":"dismissible-icon"},{"kind":"field","name":"showProgress","type":{"text":"boolean"},"default":"false","attribute":"show-progress"},{"kind":"field","name":"showNotificationIcon","type":{"text":"boolean"},"default":"true","attribute":"show-notification-icon"},{"kind":"field","name":"autoDismiss","default":"6000","description":"Auto-dismiss duration in ms. Set to 0 to disable.","attribute":"auto-dismiss","type":{"text":"number"}},{"kind":"field","name":"_timerPaused","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"field","name":"_timerActive","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"field","name":"_dismissTimer","type":{"text":"ReturnType<typeof setTimeout> | null"},"privacy":"private","default":"null"},{"kind":"field","name":"_dismissRemaining","type":{"text":"number"},"privacy":"private","default":"0"},{"kind":"field","name":"_dismissStartedAt","type":{"text":"number"},"privacy":"private","default":"0"},{"kind":"field","name":"_hasActions","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"method","name":"resolveIcon","privacy":"private","return":{"type":{"text":"IconName | undefined"}}},{"kind":"field","name":"_showHeader","type":{"text":"boolean"},"privacy":"private","readonly":true},{"kind":"field","name":"_shouldAutoDismiss","type":{"text":"boolean"},"privacy":"private","readonly":true},{"kind":"field","name":"_ariaRole","type":{"text":"'alert' | 'status'"},"privacy":"private","readonly":true},{"kind":"field","name":"_ariaLive","type":{"text":"'assertive' | 'polite'"},"privacy":"private","readonly":true},{"kind":"method","name":"_startDismissTimer","privacy":"private","return":{"type":{"text":"void"}},"parameters":[{"name":"duration","type":{"text":"number"}}]},{"kind":"method","name":"_clearDismissTimer","privacy":"private","return":{"type":{"text":"void"}}},{"kind":"field","name":"_pauseDismissTimer","privacy":"private"},{"kind":"field","name":"_resumeDismissTimer","privacy":"private"},{"kind":"method","name":"dismiss","return":{"type":{"text":"void"}}},{"kind":"method","name":"_handleKeyDown","privacy":"private","return":{"type":{"text":"void"}},"parameters":[{"name":"e","type":{"text":"KeyboardEvent"}}]},{"kind":"method","name":"_handleActionsSlotChange","privacy":"private","return":{"type":{"text":"void"}},"parameters":[{"name":"e","type":{"text":"Event"}}]},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"events":[{"name":"close","type":{"text":"Event"},"description":"When the notification is dismissed (via button, auto-dismiss, or Escape)"}],"attributes":[{"name":"type","type":{"text":"NotificationType"},"default":"'brand'","fieldName":"type"},{"name":"open","type":{"text":"boolean"},"default":"true","fieldName":"open"},{"name":"dismissible","type":{"text":"boolean"},"default":"true","fieldName":"dismissible"},{"name":"title-message","type":{"text":"string | undefined"},"default":"undefined","fieldName":"titleMessage"},{"name":"message","type":{"text":"string"},"default":"''","fieldName":"message"},{"name":"notification-icon","type":{"text":"IconName | undefined | undefined"},"default":"undefined","fieldName":"notificationIcon"},{"name":"dismissible-icon","type":{"text":"IconName"},"default":"'x'","fieldName":"dismissibleIcon"},{"name":"show-progress","type":{"text":"boolean"},"default":"false","fieldName":"showProgress"},{"name":"show-notification-icon","type":{"text":"boolean"},"default":"true","fieldName":"showNotificationIcon"},{"name":"auto-dismiss","default":"DEFAULT_AUTO_DISMISS_MS","description":"Auto-dismiss duration in ms. Set to 0 to disable.","fieldName":"autoDismiss"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-notification","customElement":true}],"exports":[{"kind":"js","name":"GaiaNotification","declaration":{"name":"GaiaNotification","module":"components/primitives/notification/notification.js"}},{"kind":"custom-element-definition","name":"gaia-notification","declaration":{"name":"GaiaNotification","module":"components/primitives/notification/notification.js"}}]},{"kind":"javascript-module","path":"components/primitives/radio-button/radio-button.stories.js","declarations":[{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Primitives/Radio Button', component: 'gaia-radio-button', argTypes: { checked: { control: 'boolean' }, disabled: { control: 'boolean' }, invalid: { control: 'boolean' }, required: { control: 'boolean' }, label: { control: 'text' }, value: { control: 'text' }, name: { control: 'text' }, }, }"},{"kind":"variable","name":"Default","type":{"text":"Story"},"default":"{ args: { label: 'Option A', checked: false, disabled: false, invalid: false, required: false, value: 'a', name: 'option', }, render: ({ label, checked, disabled, invalid, required, value, name }) => html`<gaia-radio-button label=${label} ?checked=${checked} ?disabled=${disabled} ?invalid=${invalid} ?required=${required} value=${value} name=${name} ></gaia-radio-button>`, }"},{"kind":"variable","name":"Disabled","type":{"text":"Story"},"default":"{ render: () => html` <div style=\"display: flex; flex-direction: column; gap: 8px;\"> <gaia-radio-button label=\"Disabled unchecked\" disabled name=\"disabled-demo\" ></gaia-radio-button> <gaia-radio-button label=\"Disabled checked\" disabled checked name=\"disabled-checked-demo\" ></gaia-radio-button> </div> `, }"},{"kind":"variable","name":"Invalid","type":{"text":"Story"},"default":"{ render: () => html` <div style=\"display: flex; flex-direction: column; gap: 8px;\"> <gaia-radio-button label=\"Invalid unchecked\" invalid name=\"invalid-demo\"></gaia-radio-button> <gaia-radio-button label=\"Invalid checked\" invalid checked name=\"invalid-checked-demo\" ></gaia-radio-button> </div> `, }"},{"kind":"variable","name":"NoLabel","type":{"text":"Story"},"default":"{ render: () => html`<gaia-radio-button aria-label=\"Radio button without visible label\" name=\"no-label-demo\" ></gaia-radio-button>`, }"},{"kind":"variable","name":"Group","type":{"text":"Story"},"default":"{ render: () => html` <fieldset style=\"border: none; padding: 0; margin: 0; display: inline-flex; flex-direction: column; gap: 8px;\" > <legend style=\"font-weight: 600; margin-bottom: 4px;\">Select an option</legend> <gaia-radio-button label=\"Option A\" name=\"group\" value=\"a\" checked></gaia-radio-button> <gaia-radio-button label=\"Option B\" name=\"group\" value=\"b\"></gaia-radio-button> <gaia-radio-button label=\"Option C\" name=\"group\" value=\"c\"></gaia-radio-button> </fieldset> `, }"},{"kind":"variable","name":"WithFormField","type":{"text":"Story"},"default":"{ render: () => html` <gaia-form-field label=\"Preferred contact method\"> <div style=\"display: flex; flex-direction: column; gap: 8px;\"> <gaia-radio-button label=\"Email\" name=\"contact\" value=\"email\" checked></gaia-radio-button> <gaia-radio-button label=\"Phone\" name=\"contact\" value=\"phone\"></gaia-radio-button> <gaia-radio-button label=\"Mail\" name=\"contact\" value=\"mail\"></gaia-radio-button> </div> </gaia-form-field> `, }"},{"kind":"variable","name":"WithFormFieldError","type":{"text":"Story"},"default":"{ render: () => html` <gaia-form-field label=\"Preferred contact method\" error=\"Please select an option\" invalid> <div style=\"display: flex; flex-direction: column; gap: 8px;\"> <gaia-radio-button label=\"Email\" name=\"contact-error\" value=\"email\" invalid ></gaia-radio-button> <gaia-radio-button label=\"Phone\" name=\"contact-error\" value=\"phone\" invalid ></gaia-radio-button> <gaia-radio-button label=\"Mail\" name=\"contact-error\" value=\"mail\" invalid ></gaia-radio-button> </div> </gaia-form-field> `, }"}],"exports":[{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/primitives/radio-button/radio-button.stories.js"}},{"kind":"js","name":"Default","declaration":{"name":"Default","module":"components/primitives/radio-button/radio-button.stories.js"}},{"kind":"js","name":"Disabled","declaration":{"name":"Disabled","module":"components/primitives/radio-button/radio-button.stories.js"}},{"kind":"js","name":"Invalid","declaration":{"name":"Invalid","module":"components/primitives/radio-button/radio-button.stories.js"}},{"kind":"js","name":"NoLabel","declaration":{"name":"NoLabel","module":"components/primitives/radio-button/radio-button.stories.js"}},{"kind":"js","name":"Group","declaration":{"name":"Group","module":"components/primitives/radio-button/radio-button.stories.js"}},{"kind":"js","name":"WithFormField","declaration":{"name":"WithFormField","module":"components/primitives/radio-button/radio-button.stories.js"}},{"kind":"js","name":"WithFormFieldError","declaration":{"name":"WithFormFieldError","module":"components/primitives/radio-button/radio-button.stories.js"}}]},{"kind":"javascript-module","path":"components/primitives/radio-button/radio-button.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/primitives/radio-button/radio-button.styles.js"}}]},{"kind":"javascript-module","path":"components/primitives/radio-button/radio-button.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"components/primitives/radio-button/radio-button.js","declarations":[{"kind":"class","description":"A radio button component aligned with the GAIA design system.\n\nRenders a native `<input type=\"radio\">` visually hidden behind a custom\ncircular marker, with optional label text. Supports checked, disabled,\ninvalid, and required states. Form-associated for native form submission.\n\nRadio buttons should be used in groups where only one option can be selected\nat a time. All radio buttons in a group must share the same `name` attribute.","name":"GaiaRadioButton","cssParts":[{"description":"The outer container element.","name":"radio"},{"description":"The native radio input element.","name":"native"},{"description":"The visual circular marker element.","name":"marker"},{"description":"The label text element.","name":"label"}],"members":[{"kind":"field","name":"formAssociated","type":{"text":"boolean"},"static":true,"default":"true"},{"kind":"field","name":"checked","type":{"text":"boolean"},"default":"false","description":"Whether the radio button is checked","attribute":"checked","reflects":true},{"kind":"field","name":"disabled","type":{"text":"boolean"},"default":"false","description":"Whether the radio button is disabled","attribute":"disabled","reflects":true},{"kind":"field","name":"invalid","type":{"text":"boolean"},"default":"false","description":"Whether the radio button is in an invalid/error state","attribute":"invalid","reflects":true},{"kind":"field","name":"required","type":{"text":"boolean"},"default":"false","description":"Whether the radio button is required","attribute":"required","reflects":true},{"kind":"field","name":"value","type":{"text":"string"},"default":"''","description":"The value of the radio button for form submission","attribute":"value"},{"kind":"field","name":"name","type":{"text":"string"},"default":"''","description":"Name for form submission (must match other radio buttons in the group)","attribute":"name"},{"kind":"field","name":"label","type":{"text":"string"},"default":"''","description":"Visible label text for the radio button","attribute":"label"},{"kind":"field","name":"ariaLabel","type":{"text":"string | null"},"default":"null","description":"Accessible label for the radio button (use when no visible label is present)","attribute":"aria-label"},{"kind":"field","name":"ariaLabelledBy","type":{"text":"string | null"},"default":"null","description":"ID of the element that labels this radio button","attribute":"aria-labelledby"},{"kind":"field","name":"ariaDescribedBy","type":{"text":"string | null"},"default":"null","description":"ID(s) of elements that describe this radio button","attribute":"aria-describedby"},{"kind":"field","name":"inputEl","type":{"text":"HTMLInputElement"},"privacy":"private"},{"kind":"method","name":"focus","parameters":[{"name":"options","optional":true,"type":{"text":"FocusOptions"}}],"description":"Focus the radio button"},{"kind":"method","name":"blur","description":"Blur the radio button"},{"kind":"method","name":"handleChange","privacy":"private"},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"events":[{"name":"change","type":{"text":"Event"},"description":"Fires when the checked state changes via user interaction."},{"name":"input","type":{"text":"Event"},"description":"Fires when the checked state changes via user interaction."}],"attributes":[{"name":"checked","type":{"text":"boolean"},"default":"false","description":"Whether the radio button is checked","fieldName":"checked"},{"name":"disabled","type":{"text":"boolean"},"default":"false","description":"Whether the radio button is disabled","fieldName":"disabled"},{"name":"invalid","type":{"text":"boolean"},"default":"false","description":"Whether the radio button is in an invalid/error state","fieldName":"invalid"},{"name":"required","type":{"text":"boolean"},"default":"false","description":"Whether the radio button is required","fieldName":"required"},{"name":"value","type":{"text":"string"},"default":"''","description":"The value of the radio button for form submission","fieldName":"value"},{"name":"name","type":{"text":"string"},"default":"''","description":"Name for form submission (must match other radio buttons in the group)","fieldName":"name"},{"name":"label","type":{"text":"string"},"default":"''","description":"Visible label text for the radio button","fieldName":"label"},{"name":"aria-label","type":{"text":"string | null"},"default":"null","description":"Accessible label for the radio button (use when no visible label is present)","fieldName":"ariaLabel"},{"name":"aria-labelledby","type":{"text":"string | null"},"default":"null","description":"ID of the element that labels this radio button","fieldName":"ariaLabelledBy"},{"name":"aria-describedby","type":{"text":"string | null"},"default":"null","description":"ID(s) of elements that describe this radio button","fieldName":"ariaDescribedBy"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-radio-button","customElement":true}],"exports":[{"kind":"js","name":"GaiaRadioButton","declaration":{"name":"GaiaRadioButton","module":"components/primitives/radio-button/radio-button.js"}},{"kind":"custom-element-definition","name":"gaia-radio-button","declaration":{"name":"GaiaRadioButton","module":"components/primitives/radio-button/radio-button.js"}}]},{"kind":"javascript-module","path":"components/primitives/skeleton/skeleton.stories.js","declarations":[{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Primitives/Skeleton', component: 'gaia-skeleton', argTypes: { variant: { control: 'select', options: ['text', 'circular', 'rectangular'], }, width: { control: 'text' }, height: { control: 'text' }, lines: { control: 'number' }, }, }"},{"kind":"variable","name":"Default","type":{"text":"Story"},"default":"{ args: { variant: 'text', width: '100%', lines: 1, }, render: ({ variant, width, height, lines }) => html`<div style=\"max-width: 400px;\"> <gaia-skeleton variant=${variant} width=${width} height=${height ?? ''} lines=${lines} ></gaia-skeleton> </div>`, }"},{"kind":"variable","name":"TextLines","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"max-width: 400px;\"> <gaia-skeleton variant=\"text\" lines=${3}></gaia-skeleton> </div>`, }"},{"kind":"variable","name":"Circular","type":{"text":"Story"},"default":"{ render: () => html`<gaia-skeleton variant=\"circular\" width=\"48px\" height=\"48px\"></gaia-skeleton>`, }"},{"kind":"variable","name":"Rectangular","type":{"text":"Story"},"default":"{ render: () => html`<gaia-skeleton variant=\"rectangular\" width=\"200px\" height=\"120px\"></gaia-skeleton>`, }"},{"kind":"variable","name":"CardPlaceholder","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"display: flex; gap: 12px; align-items: flex-start; max-width: 400px;\"> <gaia-skeleton variant=\"circular\" width=\"40px\" height=\"40px\"></gaia-skeleton> <div style=\"flex: 1;\"> <gaia-skeleton variant=\"text\" width=\"60%\"></gaia-skeleton> <div style=\"margin-top: 8px;\"> <gaia-skeleton variant=\"text\" lines=${2}></gaia-skeleton> </div> </div> </div>`, }"}],"exports":[{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/primitives/skeleton/skeleton.stories.js"}},{"kind":"js","name":"Default","declaration":{"name":"Default","module":"components/primitives/skeleton/skeleton.stories.js"}},{"kind":"js","name":"TextLines","declaration":{"name":"TextLines","module":"components/primitives/skeleton/skeleton.stories.js"}},{"kind":"js","name":"Circular","declaration":{"name":"Circular","module":"components/primitives/skeleton/skeleton.stories.js"}},{"kind":"js","name":"Rectangular","declaration":{"name":"Rectangular","module":"components/primitives/skeleton/skeleton.stories.js"}},{"kind":"js","name":"CardPlaceholder","declaration":{"name":"CardPlaceholder","module":"components/primitives/skeleton/skeleton.stories.js"}}]},{"kind":"javascript-module","path":"components/primitives/skeleton/skeleton.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/primitives/skeleton/skeleton.styles.js"}}]},{"kind":"javascript-module","path":"components/primitives/skeleton/skeleton.js","declarations":[{"kind":"class","description":"Loading placeholder primitive following GAIA design guidelines.\n\nRenders a shimmer animation to indicate content is loading.\nSupports text (single or multi-line), circular, and rectangular shapes.","name":"GaiaSkeleton","cssParts":[{"description":"The skeleton shape element","name":"bone"}],"members":[{"kind":"field","name":"variant","type":{"text":"'text' | 'circular' | 'rectangular'"},"default":"'text'","description":"Shape variant","attribute":"variant","reflects":true},{"kind":"field","name":"width","type":{"text":"string"},"default":"'100%'","description":"CSS width value","attribute":"width"},{"kind":"field","name":"height","type":{"text":"string | undefined"},"description":"CSS height value","attribute":"height"},{"kind":"field","name":"lines","type":{"text":"number"},"default":"1","description":"Number of lines to render (text variant only)","attribute":"lines"},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"attributes":[{"name":"variant","type":{"text":"'text' | 'circular' | 'rectangular'"},"default":"'text'","description":"Shape variant","fieldName":"variant"},{"name":"width","type":{"text":"string"},"default":"'100%'","description":"CSS width value","fieldName":"width"},{"name":"height","type":{"text":"string | undefined"},"description":"CSS height value","fieldName":"height"},{"name":"lines","type":{"text":"number"},"default":"1","description":"Number of lines to render (text variant only)","fieldName":"lines"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-skeleton","customElement":true}],"exports":[{"kind":"js","name":"GaiaSkeleton","declaration":{"name":"GaiaSkeleton","module":"components/primitives/skeleton/skeleton.js"}},{"kind":"custom-element-definition","name":"gaia-skeleton","declaration":{"name":"GaiaSkeleton","module":"components/primitives/skeleton/skeleton.js"}}]},{"kind":"javascript-module","path":"components/primitives/spinner/spinner.stories.js","declarations":[{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Primitives/Spinner', component: 'gaia-spinner', }"},{"kind":"variable","name":"Default","type":{"text":"Story"},"default":"{ render: () => html`<gaia-spinner></gaia-spinner>`, }"},{"kind":"variable","name":"Sizes","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"display: flex; gap: 24px; align-items: center;\"> <gaia-spinner style=\"width: 16px; height: 16px;\"></gaia-spinner> <gaia-spinner style=\"width: 24px; height: 24px;\"></gaia-spinner> <gaia-spinner style=\"width: 40px; height: 40px;\"></gaia-spinner> <gaia-spinner style=\"width: 64px; height: 64px;\"></gaia-spinner> </div>`, }"}],"exports":[{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/primitives/spinner/spinner.stories.js"}},{"kind":"js","name":"Default","declaration":{"name":"Default","module":"components/primitives/spinner/spinner.stories.js"}},{"kind":"js","name":"Sizes","declaration":{"name":"Sizes","module":"components/primitives/spinner/spinner.stories.js"}}]},{"kind":"javascript-module","path":"components/primitives/spinner/spinner.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/primitives/spinner/spinner.styles.js"}}]},{"kind":"javascript-module","path":"components/primitives/spinner/spinner.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"components/primitives/spinner/spinner.js","declarations":[{"kind":"class","description":"Indeterminate loading spinner rendered as an animated SVG circle.","name":"GaiaSpinner","cssParts":[{"description":"The SVG root element","name":"base"}],"members":[{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-spinner","customElement":true}],"exports":[{"kind":"js","name":"GaiaSpinner","declaration":{"name":"GaiaSpinner","module":"components/primitives/spinner/spinner.js"}},{"kind":"custom-element-definition","name":"gaia-spinner","declaration":{"name":"GaiaSpinner","module":"components/primitives/spinner/spinner.js"}}]},{"kind":"javascript-module","path":"components/primitives/status-dot/status-dot.stories.js","declarations":[{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Primitives/Status Dot', component: 'gaia-status-dot', argTypes: { status: { control: 'select', options: ['pending', 'success', 'error', 'warning'], }, }, }"},{"kind":"variable","name":"Default","type":{"text":"Story"},"default":"{ args: { status: 'success' }, render: ({ status }) => html`<gaia-status-dot status=${status}></gaia-status-dot>`, }"},{"kind":"variable","name":"AllStatuses","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"display: flex; gap: 16px; align-items: center;\"> <div style=\"display: flex; align-items: center; gap: 6px;\"> <gaia-status-dot status=\"pending\"></gaia-status-dot> <span>Pending</span> </div> <div style=\"display: flex; align-items: center; gap: 6px;\"> <gaia-status-dot status=\"success\"></gaia-status-dot> <span>Success</span> </div> <div style=\"display: flex; align-items: center; gap: 6px;\"> <gaia-status-dot status=\"error\"></gaia-status-dot> <span>Error</span> </div> <div style=\"display: flex; align-items: center; gap: 6px;\"> <gaia-status-dot status=\"warning\"></gaia-status-dot> <span>Warning</span> </div> </div>`, }"}],"exports":[{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/primitives/status-dot/status-dot.stories.js"}},{"kind":"js","name":"Default","declaration":{"name":"Default","module":"components/primitives/status-dot/status-dot.stories.js"}},{"kind":"js","name":"AllStatuses","declaration":{"name":"AllStatuses","module":"components/primitives/status-dot/status-dot.stories.js"}}]},{"kind":"javascript-module","path":"components/primitives/status-dot/status-dot.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/primitives/status-dot/status-dot.styles.js"}}]},{"kind":"javascript-module","path":"components/primitives/status-dot/status-dot.js","declarations":[{"kind":"class","description":"","name":"GaiaStatusDot","members":[{"kind":"field","name":"status","type":{"text":"StatusDotStatus"},"default":"'pending'","attribute":"status","reflects":true},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"attributes":[{"name":"status","type":{"text":"StatusDotStatus"},"default":"'pending'","fieldName":"status"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-status-dot","customElement":true}],"exports":[{"kind":"js","name":"GaiaStatusDot","declaration":{"name":"GaiaStatusDot","module":"components/primitives/status-dot/status-dot.js"}},{"kind":"custom-element-definition","name":"gaia-status-dot","declaration":{"name":"GaiaStatusDot","module":"components/primitives/status-dot/status-dot.js"}}]},{"kind":"javascript-module","path":"components/primitives/surface/surface.stories.js","declarations":[{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Primitives/Surface', component: 'gaia-surface', argTypes: { variant: { control: 'select', options: ['flat', 'outlined', 'elevated'], }, padding: { control: 'select', options: ['compact', 'default', 'spacious'], }, interactive: { control: 'boolean', }, }, }"},{"kind":"variable","name":"Default","type":{"text":"Story"},"default":"{ args: { variant: 'outlined', padding: 'default', interactive: false, }, render: ({ variant, padding, interactive }) => html`<gaia-surface variant=${variant} padding=${padding} ?interactive=${interactive}> <p style=\"margin: 0;\">Surface content goes here</p> </gaia-surface>`, }"},{"kind":"variable","name":"Variants","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"display: flex; flex-direction: column; gap: 16px; max-width: 400px;\"> <gaia-surface variant=\"flat\"> <p style=\"margin: 0;\"><strong>Flat</strong> — no border or shadow</p> </gaia-surface> <gaia-surface variant=\"outlined\"> <p style=\"margin: 0;\"><strong>Outlined</strong> — subtle border</p> </gaia-surface> <gaia-surface variant=\"elevated\"> <p style=\"margin: 0;\"><strong>Elevated</strong> — box shadow</p> </gaia-surface> </div>`, }"},{"kind":"variable","name":"Padding","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"display: flex; flex-direction: column; gap: 16px; max-width: 400px;\"> <gaia-surface padding=\"compact\"> <p style=\"margin: 0;\">Compact padding</p> </gaia-surface> <gaia-surface padding=\"default\"> <p style=\"margin: 0;\">Default padding</p> </gaia-surface> <gaia-surface padding=\"spacious\"> <p style=\"margin: 0;\">Spacious padding</p> </gaia-surface> </div>`, }"},{"kind":"variable","name":"Interactive","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"max-width: 400px;\"> <gaia-surface interactive> <p style=\"margin: 0;\">Hover or click me</p> </gaia-surface> </div>`, }"}],"exports":[{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/primitives/surface/surface.stories.js"}},{"kind":"js","name":"Default","declaration":{"name":"Default","module":"components/primitives/surface/surface.stories.js"}},{"kind":"js","name":"Variants","declaration":{"name":"Variants","module":"components/primitives/surface/surface.stories.js"}},{"kind":"js","name":"Padding","declaration":{"name":"Padding","module":"components/primitives/surface/surface.stories.js"}},{"kind":"js","name":"Interactive","declaration":{"name":"Interactive","module":"components/primitives/surface/surface.stories.js"}}]},{"kind":"javascript-module","path":"components/primitives/surface/surface.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/primitives/surface/surface.styles.js"}}]},{"kind":"javascript-module","path":"components/primitives/surface/surface.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"components/primitives/surface/surface.js","declarations":[{"kind":"class","description":"Surface container primitive following GAIA elevation guidelines.\n\nA foundational building block that provides background, border/shadow,\npadding, and optional interactivity. Higher-level composed components\n(cards, panels, dialogs) can be built on top of this.","name":"GaiaSurface","cssParts":[{"description":"The surface container element","name":"surface"}],"slots":[{"description":"Default slot for surface content","name":""}],"members":[{"kind":"field","name":"variant","type":{"text":"'flat' | 'outlined' | 'elevated'"},"default":"'outlined'","description":"Visual variant controlling border and shadow","attribute":"variant","reflects":true},{"kind":"field","name":"padding","type":{"text":"'compact' | 'default' | 'spacious'"},"default":"'default'","description":"Padding size","attribute":"padding","reflects":true},{"kind":"field","name":"interactive","type":{"text":"boolean"},"default":"false","description":"Whether the surface responds to hover/active interactions","attribute":"interactive","reflects":true},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"attributes":[{"name":"variant","type":{"text":"'flat' | 'outlined' | 'elevated'"},"default":"'outlined'","description":"Visual variant controlling border and shadow","fieldName":"variant"},{"name":"padding","type":{"text":"'compact' | 'default' | 'spacious'"},"default":"'default'","description":"Padding size","fieldName":"padding"},{"name":"interactive","type":{"text":"boolean"},"default":"false","description":"Whether the surface responds to hover/active interactions","fieldName":"interactive"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-surface","customElement":true}],"exports":[{"kind":"js","name":"GaiaSurface","declaration":{"name":"GaiaSurface","module":"components/primitives/surface/surface.js"}},{"kind":"custom-element-definition","name":"gaia-surface","declaration":{"name":"GaiaSurface","module":"components/primitives/surface/surface.js"}}]},{"kind":"javascript-module","path":"components/primitives/switch/switch.stories.js","declarations":[{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Primitives/Switch', component: 'gaia-switch', argTypes: { checked: { control: 'boolean' }, disabled: { control: 'boolean' }, invalid: { control: 'boolean' }, required: { control: 'boolean' }, label: { control: 'text' }, value: { control: 'text' }, name: { control: 'text' }, }, }"},{"kind":"variable","name":"Default","type":{"text":"Story"},"default":"{ args: { label: '', checked: false, disabled: false, invalid: false, required: false, value: 'on', }, render: ({ label, checked, disabled, invalid, required, value }) => html`<gaia-switch label=${label} ?checked=${checked} ?disabled=${disabled} ?invalid=${invalid} ?required=${required} value=${value} ></gaia-switch>`, }"},{"kind":"variable","name":"WithLabel","type":{"text":"Story"},"default":"{ render: () => html`<gaia-switch label=\"Label\"></gaia-switch>`, }"},{"kind":"variable","name":"DisabledOff","type":{"text":"Story"},"default":"{ render: () => html`<gaia-switch disabled></gaia-switch>`, }"},{"kind":"variable","name":"DisabledOn","type":{"text":"Story"},"default":"{ render: () => html`<gaia-switch disabled checked></gaia-switch>`, }"},{"kind":"variable","name":"Invalid","type":{"text":"Story"},"default":"{ render: () => html` <div style=\"display: flex; flex-direction: column; gap: 8px;\"> <gaia-switch label=\"Invalid unchecked\" invalid></gaia-switch> <gaia-switch label=\"Invalid checked\" invalid checked></gaia-switch> </div> `, }"},{"kind":"variable","name":"WithFormField","type":{"text":"Story"},"default":"{ render: () => html` <gaia-form-field label=\"Notifications\"> <gaia-switch label=\"Enable email notifications\"></gaia-switch> </gaia-form-field> `, }"},{"kind":"variable","name":"WithFormFieldError","type":{"text":"Story"},"default":"{ render: () => html` <gaia-form-field label=\"Agreement\" error=\"You must accept to continue\" invalid> <gaia-switch label=\"I accept the terms and conditions\" invalid></gaia-switch> </gaia-form-field> `, }"},{"kind":"variable","name":"Group","type":{"text":"Story"},"default":"{ render: () => html` <fieldset style=\"border: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 8px;\" > <legend style=\"font-weight: 600; margin-bottom: 4px;\">Notification preferences</legend> <gaia-switch label=\"Email notifications\" name=\"notifications\" value=\"email\"></gaia-switch> <gaia-switch label=\"Push notifications\" name=\"notifications\" value=\"push\" checked ></gaia-switch> <gaia-switch label=\"SMS notifications\" name=\"notifications\" value=\"sms\"></gaia-switch> <gaia-switch label=\"Desktop notifications\" name=\"notifications\" value=\"desktop\" disabled ></gaia-switch> </fieldset> `, }"}],"exports":[{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/primitives/switch/switch.stories.js"}},{"kind":"js","name":"Default","declaration":{"name":"Default","module":"components/primitives/switch/switch.stories.js"}},{"kind":"js","name":"WithLabel","declaration":{"name":"WithLabel","module":"components/primitives/switch/switch.stories.js"}},{"kind":"js","name":"DisabledOff","declaration":{"name":"DisabledOff","module":"components/primitives/switch/switch.stories.js"}},{"kind":"js","name":"DisabledOn","declaration":{"name":"DisabledOn","module":"components/primitives/switch/switch.stories.js"}},{"kind":"js","name":"Invalid","declaration":{"name":"Invalid","module":"components/primitives/switch/switch.stories.js"}},{"kind":"js","name":"WithFormField","declaration":{"name":"WithFormField","module":"components/primitives/switch/switch.stories.js"}},{"kind":"js","name":"WithFormFieldError","declaration":{"name":"WithFormFieldError","module":"components/primitives/switch/switch.stories.js"}},{"kind":"js","name":"Group","declaration":{"name":"Group","module":"components/primitives/switch/switch.stories.js"}}]},{"kind":"javascript-module","path":"components/primitives/switch/switch.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/primitives/switch/switch.styles.js"}}]},{"kind":"javascript-module","path":"components/primitives/switch/switch.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"components/primitives/switch/switch.js","declarations":[{"kind":"class","description":"A switch (toggle) component aligned with the GAIA design system.\n\nRenders a native `<input type=\"checkbox\">` with `role=\"switch\"` visually\nhidden behind a custom track and slider. Supports checked, disabled,\ninvalid, and required states with an optional label. Form-associated\nfor native form submission.","name":"GaiaSwitch","cssParts":[{"description":"The outer container element.","name":"switch"},{"description":"The native checkbox input element.","name":"native"},{"description":"The visual track element.","name":"marker"},{"description":"The sliding thumb element.","name":"slider"},{"description":"The label text element.","name":"label"}],"members":[{"kind":"field","name":"formAssociated","type":{"text":"boolean"},"static":true,"default":"true"},{"kind":"field","name":"checked","type":{"text":"boolean"},"default":"false","description":"Whether the switch is on","attribute":"checked","reflects":true},{"kind":"field","name":"disabled","type":{"text":"boolean"},"default":"false","description":"Whether the switch is disabled","attribute":"disabled","reflects":true},{"kind":"field","name":"invalid","type":{"text":"boolean"},"default":"false","description":"Whether the switch is in an invalid/error state","attribute":"invalid","reflects":true},{"kind":"field","name":"required","type":{"text":"boolean"},"default":"false","description":"Whether the switch is required","attribute":"required","reflects":true},{"kind":"field","name":"value","type":{"text":"string"},"default":"'on'","description":"The value of the switch for form submission","attribute":"value"},{"kind":"field","name":"name","type":{"text":"string"},"default":"''","description":"Name for form submission","attribute":"name"},{"kind":"field","name":"label","type":{"text":"string"},"default":"''","description":"Visible label text for the switch","attribute":"label"},{"kind":"field","name":"ariaLabel","type":{"text":"string | null"},"default":"null","description":"Accessible label for the switch (use when no visible label is present)","attribute":"aria-label"},{"kind":"field","name":"ariaLabelledBy","type":{"text":"string | null"},"default":"null","description":"ID of the element that labels this switch","attribute":"aria-labelledby"},{"kind":"field","name":"ariaDescribedBy","type":{"text":"string | null"},"default":"null","description":"ID(s) of elements that describe this switch","attribute":"aria-describedby"},{"kind":"field","name":"ariaControls","type":{"text":"string | null"},"default":"null","description":"ID of the element controlled by this switch","attribute":"aria-controls"},{"kind":"field","name":"inputEl","type":{"text":"HTMLInputElement"},"privacy":"private"},{"kind":"method","name":"focus","parameters":[{"name":"options","optional":true,"type":{"text":"FocusOptions"}}],"description":"Focus the switch"},{"kind":"method","name":"blur","description":"Blur the switch"},{"kind":"method","name":"toggle","description":"Toggle the checked state programmatically"},{"kind":"method","name":"handleChange","privacy":"private"},{"kind":"method","name":"renderCheckIcon","privacy":"private"},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"events":[{"name":"change","type":{"text":"Event"},"description":"Fires when the checked state changes via user interaction."},{"name":"input","type":{"text":"Event"},"description":"Fires when the checked state changes via user interaction."}],"attributes":[{"name":"checked","type":{"text":"boolean"},"default":"false","description":"Whether the switch is on","fieldName":"checked"},{"name":"disabled","type":{"text":"boolean"},"default":"false","description":"Whether the switch is disabled","fieldName":"disabled"},{"name":"invalid","type":{"text":"boolean"},"default":"false","description":"Whether the switch is in an invalid/error state","fieldName":"invalid"},{"name":"required","type":{"text":"boolean"},"default":"false","description":"Whether the switch is required","fieldName":"required"},{"name":"value","type":{"text":"string"},"default":"'on'","description":"The value of the switch for form submission","fieldName":"value"},{"name":"name","type":{"text":"string"},"default":"''","description":"Name for form submission","fieldName":"name"},{"name":"label","type":{"text":"string"},"default":"''","description":"Visible label text for the switch","fieldName":"label"},{"name":"aria-label","type":{"text":"string | null"},"default":"null","description":"Accessible label for the switch (use when no visible label is present)","fieldName":"ariaLabel"},{"name":"aria-labelledby","type":{"text":"string | null"},"default":"null","description":"ID of the element that labels this switch","fieldName":"ariaLabelledBy"},{"name":"aria-describedby","type":{"text":"string | null"},"default":"null","description":"ID(s) of elements that describe this switch","fieldName":"ariaDescribedBy"},{"name":"aria-controls","type":{"text":"string | null"},"default":"null","description":"ID of the element controlled by this switch","fieldName":"ariaControls"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-switch","customElement":true}],"exports":[{"kind":"js","name":"GaiaSwitch","declaration":{"name":"GaiaSwitch","module":"components/primitives/switch/switch.js"}},{"kind":"custom-element-definition","name":"gaia-switch","declaration":{"name":"GaiaSwitch","module":"components/primitives/switch/switch.js"}}]},{"kind":"javascript-module","path":"components/primitives/tag/tag.stories.js","declarations":[{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Primitives/Tag', component: 'gaia-tag', argTypes: { type: { control: 'select', options: [undefined, 'success', 'warning', 'information', 'error', 'disabled'], }, utilityColor: { control: 'select', options: [ undefined, 'grey', 'indigo', 'teal', 'lime', 'purple', 'pink', 'rose', 'yellow', 'blue', 'green', 'orange', ], }, icon: { control: 'text' }, interactive: { control: 'boolean' }, selected: { control: 'boolean' }, disabled: { control: 'boolean' }, dismissible: { control: 'boolean' }, separator: { control: 'boolean' }, }, }"},{"kind":"variable","name":"Default","type":{"text":"Story"},"default":"{ args: { type: undefined, utilityColor: undefined, icon: undefined, interactive: false, selected: false, disabled: false, dismissible: false, }, render: ({ type, utilityColor, icon, interactive, selected, disabled, dismissible, separator }) => html`<gaia-tag .type=${type} .utilityColor=${utilityColor} .icon=${icon} .interactive=${interactive} .selected=${selected} .disabled=${disabled} .dismissible=${dismissible} .separator=${separator} > Tag label </gaia-tag>`, }"},{"kind":"variable","name":"Regular","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"display: flex; gap: 8px; flex-wrap: wrap; align-items: center;\"> <gaia-tag type=\"success\" icon=\"circle-check\">Success</gaia-tag> <gaia-tag type=\"warning\" icon=\"triangle-alert\">Warning</gaia-tag> <gaia-tag type=\"information\" icon=\"info\">Information</gaia-tag> <gaia-tag type=\"error\" icon=\"octagon-alert\">Error</gaia-tag> <gaia-tag type=\"disabled\">Disabled</gaia-tag> </div>`, }"},{"kind":"variable","name":"Interactive","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"display: flex; gap: 8px; flex-wrap: wrap; align-items: center;\"> <gaia-tag interactive icon=\"plus\">Default</gaia-tag> <gaia-tag interactive dismissible separator icon=\"plus\">With separator</gaia-tag> <gaia-tag interactive disabled icon=\"plus\">Disabled</gaia-tag> <gaia-tag interactive selected icon=\"check\">Selected</gaia-tag> <gaia-tag interactive selected disabled icon=\"check\">Selected disabled</gaia-tag> </div>`, }"},{"kind":"variable","name":"Utility","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"display: flex; gap: 8px; flex-wrap: wrap; align-items: center;\"> <gaia-tag utility-color=\"grey\">Grey</gaia-tag> <gaia-tag utility-color=\"indigo\">Indigo</gaia-tag> <gaia-tag utility-color=\"teal\">Teal</gaia-tag> <gaia-tag utility-color=\"lime\">Lime</gaia-tag> <gaia-tag utility-color=\"purple\">Purple</gaia-tag> <gaia-tag utility-color=\"pink\">Pink</gaia-tag> <gaia-tag utility-color=\"rose\">Rose</gaia-tag> <gaia-tag utility-color=\"yellow\">Yellow</gaia-tag> <gaia-tag utility-color=\"blue\">Blue</gaia-tag> <gaia-tag utility-color=\"green\">Green</gaia-tag> <gaia-tag utility-color=\"orange\">Orange</gaia-tag> <gaia-tag utility-color=\"grey\" disabled>Disabled</gaia-tag> </div>`, }"},{"kind":"variable","name":"UtilityWithIcons","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"display: flex; gap: 8px; flex-wrap: wrap; align-items: center;\"> <gaia-tag utility-color=\"blue\" icon=\"tag\">Blue</gaia-tag> <gaia-tag utility-color=\"green\" icon=\"tag\">Green</gaia-tag> <gaia-tag utility-color=\"purple\" icon=\"tag\">Purple</gaia-tag> </div>`, }"},{"kind":"variable","name":"Dismissible","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"display: flex; gap: 8px; flex-wrap: wrap; align-items: center;\"> <gaia-tag dismissible>Removable</gaia-tag> <gaia-tag dismissible type=\"information\">Info</gaia-tag> <gaia-tag dismissible separator icon=\"tag\">With separator</gaia-tag> </div>`, }"}],"exports":[{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/primitives/tag/tag.stories.js"}},{"kind":"js","name":"Default","declaration":{"name":"Default","module":"components/primitives/tag/tag.stories.js"}},{"kind":"js","name":"Regular","declaration":{"name":"Regular","module":"components/primitives/tag/tag.stories.js"}},{"kind":"js","name":"Interactive","declaration":{"name":"Interactive","module":"components/primitives/tag/tag.stories.js"}},{"kind":"js","name":"Utility","declaration":{"name":"Utility","module":"components/primitives/tag/tag.stories.js"}},{"kind":"js","name":"UtilityWithIcons","declaration":{"name":"UtilityWithIcons","module":"components/primitives/tag/tag.stories.js"}},{"kind":"js","name":"Dismissible","declaration":{"name":"Dismissible","module":"components/primitives/tag/tag.stories.js"}}]},{"kind":"javascript-module","path":"components/primitives/tag/tag.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/primitives/tag/tag.styles.js"}}]},{"kind":"javascript-module","path":"components/primitives/tag/tag.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"components/primitives/tag/tag.js","declarations":[{"kind":"class","description":"Compact label for categorizing, filtering, or status indication.\n\nSupports semantic status types (success, warning, error, etc.) and\nutility colors for category labelling. Can be interactive (toggle on\nclick), dismissible (with a close button), and optionally shows a\nleading icon or separator.","name":"GaiaTag","slots":[{"description":"Default slot for the tag label text","name":""}],"members":[{"kind":"field","name":"type","type":{"text":"TagType | undefined"},"default":"undefined","description":"Semantic status type for regular tags.","attribute":"type","reflects":true},{"kind":"field","name":"utilityColor","type":{"text":"| TagUtilityColor\n | undefined"},"default":"undefined","description":"Utility color for category/label tags. Overrides `type`.","attribute":"utility-color","reflects":true},{"kind":"field","name":"interactive","type":{"text":"boolean"},"default":"false","description":"Makes the tag an interactive toggle (dashed border, clickable).","attribute":"interactive","reflects":true},{"kind":"field","name":"selected","type":{"text":"boolean"},"default":"false","description":"Whether an interactive tag is currently selected.","attribute":"selected","reflects":true},{"kind":"field","name":"disabled","type":{"text":"boolean"},"default":"false","description":"Disables the tag.","attribute":"disabled","reflects":true},{"kind":"field","name":"dismissible","type":{"text":"boolean"},"default":"false","description":"Shows a dismiss button.","attribute":"dismissible","reflects":true},{"kind":"field","name":"icon","type":{"text":"IconName | undefined"},"default":"undefined","description":"Optional leading icon name.","attribute":"icon"},{"kind":"field","name":"separator","type":{"text":"boolean"},"default":"false","description":"Whether to show a separator before the dismiss button.","attribute":"separator","reflects":true},{"kind":"method","name":"handleDismiss","privacy":"private","parameters":[{"name":"e","type":{"text":"Event"}}]},{"kind":"method","name":"handleClick","privacy":"private"},{"kind":"method","name":"handleKeyDown","privacy":"private","parameters":[{"name":"e","type":{"text":"KeyboardEvent"}}]},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"events":[{"name":"dismiss","type":{"text":"Event"},"description":"When the dismiss button is clicked"},{"name":"change","type":{"text":"Event"},"description":"When an interactive tag is toggled"}],"attributes":[{"name":"type","type":{"text":"TagType | undefined"},"default":"undefined","description":"Semantic status type for regular tags.","fieldName":"type"},{"name":"utility-color","type":{"text":"| TagUtilityColor\n | undefined"},"default":"undefined","description":"Utility color for category/label tags. Overrides `type`.","fieldName":"utilityColor"},{"name":"interactive","type":{"text":"boolean"},"default":"false","description":"Makes the tag an interactive toggle (dashed border, clickable).","fieldName":"interactive"},{"name":"selected","type":{"text":"boolean"},"default":"false","description":"Whether an interactive tag is currently selected.","fieldName":"selected"},{"name":"disabled","type":{"text":"boolean"},"default":"false","description":"Disables the tag.","fieldName":"disabled"},{"name":"dismissible","type":{"text":"boolean"},"default":"false","description":"Shows a dismiss button.","fieldName":"dismissible"},{"name":"icon","type":{"text":"IconName | undefined"},"default":"undefined","description":"Optional leading icon name.","fieldName":"icon"},{"name":"separator","type":{"text":"boolean"},"default":"false","description":"Whether to show a separator before the dismiss button.","fieldName":"separator"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-tag","customElement":true}],"exports":[{"kind":"js","name":"GaiaTag","declaration":{"name":"GaiaTag","module":"components/primitives/tag/tag.js"}},{"kind":"custom-element-definition","name":"gaia-tag","declaration":{"name":"GaiaTag","module":"components/primitives/tag/tag.js"}}]},{"kind":"javascript-module","path":"components/primitives/text-area/text-area.stories.js","declarations":[{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Primitives/Text Area', component: 'gaia-text-area', argTypes: { value: { control: 'text' }, placeholder: { control: 'text' }, disabled: { control: 'boolean' }, readonly: { control: 'boolean' }, invalid: { control: 'boolean' }, required: { control: 'boolean' }, rows: { control: 'number' }, cols: { control: 'number' }, maxlength: { control: 'number' }, minlength: { control: 'number' }, resize: { control: 'select', options: ['none', 'vertical', 'horizontal', 'both', 'auto'], }, }, }"},{"kind":"variable","name":"Regular","type":{"text":"Story"},"default":"{ args: { placeholder: 'Placeholder', disabled: false, invalid: false, readonly: false, required: false, rows: 4, resize: 'vertical', }, render: ({ placeholder, disabled, invalid, readonly, required, rows, resize }) => html`<gaia-text-area placeholder=${placeholder} ?disabled=${disabled} ?invalid=${invalid} ?readonly=${readonly} ?required=${required} rows=${rows} resize=${resize} ></gaia-text-area>`, }"},{"kind":"variable","name":"Disabled","type":{"text":"Story"},"default":"{ render: () => html`<gaia-text-area placeholder=\"Placeholder\" disabled></gaia-text-area>`, }"},{"kind":"variable","name":"Invalid","type":{"text":"Story"},"default":"{ render: () => html`<gaia-text-area placeholder=\"Placeholder\" invalid></gaia-text-area>`, }"},{"kind":"variable","name":"WithValue","type":{"text":"Story"},"default":"{ render: () => html`<gaia-text-area value=\"This is some pre-filled text content.\"></gaia-text-area>`, }"},{"kind":"variable","name":"AutoResize","type":{"text":"Story"},"default":"{ render: () => html`<gaia-text-area placeholder=\"Type here and the textarea will grow...\" resize=\"auto\" rows=\"2\" ></gaia-text-area>`, }"},{"kind":"variable","name":"WithFormField","type":{"text":"Story"},"default":"{ render: () => html` <gaia-form-field label=\"Description\" hint=\"Enter a detailed description\" count=\"0/500\"> <gaia-text-area placeholder=\"Enter description...\" rows=\"4\"></gaia-text-area> </gaia-form-field> `, }"},{"kind":"variable","name":"WithFormFieldError","type":{"text":"Story"},"default":"{ render: () => html` <gaia-form-field label=\"Comment\" error=\"This field is required\" invalid> <gaia-text-area placeholder=\"Enter comment...\" invalid></gaia-text-area> </gaia-form-field> `, }"}],"exports":[{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/primitives/text-area/text-area.stories.js"}},{"kind":"js","name":"Regular","declaration":{"name":"Regular","module":"components/primitives/text-area/text-area.stories.js"}},{"kind":"js","name":"Disabled","declaration":{"name":"Disabled","module":"components/primitives/text-area/text-area.stories.js"}},{"kind":"js","name":"Invalid","declaration":{"name":"Invalid","module":"components/primitives/text-area/text-area.stories.js"}},{"kind":"js","name":"WithValue","declaration":{"name":"WithValue","module":"components/primitives/text-area/text-area.stories.js"}},{"kind":"js","name":"AutoResize","declaration":{"name":"AutoResize","module":"components/primitives/text-area/text-area.stories.js"}},{"kind":"js","name":"WithFormField","declaration":{"name":"WithFormField","module":"components/primitives/text-area/text-area.stories.js"}},{"kind":"js","name":"WithFormFieldError","declaration":{"name":"WithFormFieldError","module":"components/primitives/text-area/text-area.stories.js"}}]},{"kind":"javascript-module","path":"components/primitives/text-area/text-area.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/primitives/text-area/text-area.styles.js"}}]},{"kind":"javascript-module","path":"components/primitives/text-area/text-area.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"components/primitives/text-area/text-area.js","declarations":[{"kind":"class","description":"A text area component for multi-line text input, aligned with the GAIA design system.\n\nForm-associated for native form submission.","name":"GaiaTextArea","cssParts":[{"description":"The native textarea element.","name":"textarea"}],"members":[{"kind":"field","name":"formAssociated","type":{"text":"boolean"},"static":true,"default":"true"},{"kind":"field","name":"value","type":{"text":"string"},"default":"''","description":"Current value of the textarea","attribute":"value"},{"kind":"field","name":"placeholder","type":{"text":"string"},"default":"''","description":"Placeholder text displayed when the textarea is empty","attribute":"placeholder"},{"kind":"field","name":"disabled","type":{"text":"boolean"},"default":"false","description":"Whether the textarea is disabled","attribute":"disabled","reflects":true},{"kind":"field","name":"readonly","type":{"text":"boolean"},"default":"false","description":"Whether the textarea is read-only","attribute":"readonly","reflects":true},{"kind":"field","name":"invalid","type":{"text":"boolean"},"default":"false","description":"Whether the textarea is in an invalid state","attribute":"invalid","reflects":true},{"kind":"field","name":"required","type":{"text":"boolean"},"default":"false","description":"Whether the textarea is required","attribute":"required","reflects":true},{"kind":"field","name":"rows","type":{"text":"number"},"default":"4","description":"Number of visible text rows","attribute":"rows"},{"kind":"field","name":"cols","type":{"text":"number | undefined"},"description":"Number of visible text columns","attribute":"cols"},{"kind":"field","name":"maxlength","type":{"text":"number | undefined"},"description":"Maximum number of characters allowed","attribute":"maxlength"},{"kind":"field","name":"minlength","type":{"text":"number | undefined"},"description":"Minimum number of characters required","attribute":"minlength"},{"kind":"field","name":"resize","type":{"text":"'none' | 'vertical' | 'horizontal' | 'both' | 'auto'"},"default":"'vertical'","description":"Resize behavior: 'none' | 'vertical' | 'horizontal' | 'both' | 'auto'","attribute":"resize","reflects":true},{"kind":"field","name":"ariaLabel","type":{"text":"string | null"},"default":"null","description":"Accessible label for the textarea (use when no visible label is present)","attribute":"aria-label"},{"kind":"field","name":"ariaLabelledBy","type":{"text":"string | null"},"default":"null","description":"ID of the element that labels this textarea","attribute":"aria-labelledby"},{"kind":"field","name":"ariaDescribedBy","type":{"text":"string | null"},"default":"null","description":"ID(s) of elements that describe this textarea","attribute":"aria-describedby"},{"kind":"field","name":"name","type":{"text":"string"},"default":"''","description":"Name for form submission","attribute":"name"},{"kind":"field","name":"autocomplete","type":{"text":"string"},"default":"''","description":"Autocomplete hint","attribute":"autocomplete"},{"kind":"field","name":"textareaEl","type":{"text":"HTMLTextAreaElement"},"privacy":"private"},{"kind":"method","name":"focus","parameters":[{"name":"options","optional":true,"type":{"text":"FocusOptions"}}],"description":"Focus the textarea"},{"kind":"method","name":"blur","description":"Blur the textarea"},{"kind":"method","name":"select","description":"Select all text in the textarea"},{"kind":"method","name":"handleInput","privacy":"private","parameters":[{"name":"e","type":{"text":"Event"}}]},{"kind":"method","name":"handleChange","privacy":"private"},{"kind":"method","name":"autoResize","privacy":"private"},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"events":[{"name":"input","type":{"text":"Event"},"description":"Fires when the user types in the textarea."},{"name":"change","type":{"text":"Event"},"description":"Fires when the value changes and the textarea loses focus."}],"attributes":[{"name":"value","type":{"text":"string"},"default":"''","description":"Current value of the textarea","fieldName":"value"},{"name":"placeholder","type":{"text":"string"},"default":"''","description":"Placeholder text displayed when the textarea is empty","fieldName":"placeholder"},{"name":"disabled","type":{"text":"boolean"},"default":"false","description":"Whether the textarea is disabled","fieldName":"disabled"},{"name":"readonly","type":{"text":"boolean"},"default":"false","description":"Whether the textarea is read-only","fieldName":"readonly"},{"name":"invalid","type":{"text":"boolean"},"default":"false","description":"Whether the textarea is in an invalid state","fieldName":"invalid"},{"name":"required","type":{"text":"boolean"},"default":"false","description":"Whether the textarea is required","fieldName":"required"},{"name":"rows","type":{"text":"number"},"default":"4","description":"Number of visible text rows","fieldName":"rows"},{"name":"cols","type":{"text":"number | undefined"},"description":"Number of visible text columns","fieldName":"cols"},{"name":"maxlength","type":{"text":"number | undefined"},"description":"Maximum number of characters allowed","fieldName":"maxlength"},{"name":"minlength","type":{"text":"number | undefined"},"description":"Minimum number of characters required","fieldName":"minlength"},{"name":"resize","type":{"text":"'none' | 'vertical' | 'horizontal' | 'both' | 'auto'"},"default":"'vertical'","description":"Resize behavior: 'none' | 'vertical' | 'horizontal' | 'both' | 'auto'","fieldName":"resize"},{"name":"aria-label","type":{"text":"string | null"},"default":"null","description":"Accessible label for the textarea (use when no visible label is present)","fieldName":"ariaLabel"},{"name":"aria-labelledby","type":{"text":"string | null"},"default":"null","description":"ID of the element that labels this textarea","fieldName":"ariaLabelledBy"},{"name":"aria-describedby","type":{"text":"string | null"},"default":"null","description":"ID(s) of elements that describe this textarea","fieldName":"ariaDescribedBy"},{"name":"name","type":{"text":"string"},"default":"''","description":"Name for form submission","fieldName":"name"},{"name":"autocomplete","type":{"text":"string"},"default":"''","description":"Autocomplete hint","fieldName":"autocomplete"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-text-area","customElement":true}],"exports":[{"kind":"js","name":"GaiaTextArea","declaration":{"name":"GaiaTextArea","module":"components/primitives/text-area/text-area.js"}},{"kind":"custom-element-definition","name":"gaia-text-area","declaration":{"name":"GaiaTextArea","module":"components/primitives/text-area/text-area.js"}}]},{"kind":"javascript-module","path":"components/primitives/text-input/text-input.stories.js","declarations":[{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Primitives/Text Input', component: 'gaia-text-input', argTypes: { value: { control: 'text' }, placeholder: { control: 'text' }, type: { control: 'select', options: ['text', 'email', 'password', 'search', 'tel', 'url', 'number'], }, disabled: { control: 'boolean' }, readonly: { control: 'boolean' }, invalid: { control: 'boolean' }, success: { control: 'boolean' }, required: { control: 'boolean' }, maxlength: { control: 'number' }, minlength: { control: 'number' }, }, }"},{"kind":"variable","name":"Regular","type":{"text":"Story"},"default":"{ args: { placeholder: 'Placeholder', type: 'text', disabled: false, invalid: false, success: false, readonly: false, required: false, }, render: ({ placeholder, type, disabled, invalid, success, readonly, required }) => html`<gaia-text-input placeholder=${placeholder} type=${type} ?disabled=${disabled} ?invalid=${invalid} ?success=${success} ?readonly=${readonly} ?required=${required} ></gaia-text-input>`, }"},{"kind":"variable","name":"Prefix","type":{"text":"Story"},"default":"{ render: () => html`<gaia-text-input placeholder=\"Placeholder\"> <gaia-icon slot=\"prefix\" name=\"globe\"></gaia-icon> </gaia-text-input>`, }"},{"kind":"variable","name":"Suffix","type":{"text":"Story"},"default":"{ render: () => html`<gaia-text-input placeholder=\"Placeholder\"> <gaia-icon slot=\"suffix\" name=\"circle-x\"></gaia-icon> </gaia-text-input>`, }"},{"kind":"variable","name":"Disabled","type":{"text":"Story"},"default":"{ render: () => html` <div style=\"display: flex; flex-direction: column; gap: 8px;\"> <gaia-text-input placeholder=\"Placeholder\" disabled></gaia-text-input> <gaia-text-input value=\"Filled\" disabled></gaia-text-input> </div> `, }"},{"kind":"variable","name":"Invalid","type":{"text":"Story"},"default":"{ render: () => html`<gaia-text-input placeholder=\"Placeholder\" invalid> <gaia-icon slot=\"suffix\" name=\"triangle-alert\"></gaia-icon> </gaia-text-input>`, }"},{"kind":"variable","name":"Success","type":{"text":"Story"},"default":"{ render: () => html`<gaia-text-input placeholder=\"Placeholder\" success></gaia-text-input>`, }"},{"kind":"variable","name":"WithFormField","type":{"text":"Story"},"default":"{ render: () => html` <gaia-form-field label=\"Email\" hint=\"Enter your email address\"> <gaia-text-input placeholder=\"email@example.com\" type=\"email\"> <gaia-icon slot=\"prefix\" name=\"send\"></gaia-icon> </gaia-text-input> </gaia-form-field> `, }"},{"kind":"variable","name":"WithFormFieldError","type":{"text":"Story"},"default":"{ render: () => html` <gaia-form-field label=\"Email\" error=\"Please enter a valid email\" invalid> <gaia-text-input placeholder=\"email@example.com\" type=\"email\" invalid> <gaia-icon slot=\"suffix\" name=\"triangle-alert\"></gaia-icon> </gaia-text-input> </gaia-form-field> `, }"}],"exports":[{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/primitives/text-input/text-input.stories.js"}},{"kind":"js","name":"Regular","declaration":{"name":"Regular","module":"components/primitives/text-input/text-input.stories.js"}},{"kind":"js","name":"Prefix","declaration":{"name":"Prefix","module":"components/primitives/text-input/text-input.stories.js"}},{"kind":"js","name":"Suffix","declaration":{"name":"Suffix","module":"components/primitives/text-input/text-input.stories.js"}},{"kind":"js","name":"Disabled","declaration":{"name":"Disabled","module":"components/primitives/text-input/text-input.stories.js"}},{"kind":"js","name":"Invalid","declaration":{"name":"Invalid","module":"components/primitives/text-input/text-input.stories.js"}},{"kind":"js","name":"Success","declaration":{"name":"Success","module":"components/primitives/text-input/text-input.stories.js"}},{"kind":"js","name":"WithFormField","declaration":{"name":"WithFormField","module":"components/primitives/text-input/text-input.stories.js"}},{"kind":"js","name":"WithFormFieldError","declaration":{"name":"WithFormFieldError","module":"components/primitives/text-input/text-input.stories.js"}}]},{"kind":"javascript-module","path":"components/primitives/text-input/text-input.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/primitives/text-input/text-input.styles.js"}}]},{"kind":"javascript-module","path":"components/primitives/text-input/text-input.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"components/primitives/text-input/text-input.js","declarations":[{"kind":"class","description":"A text input component for single-line text entry, aligned with the GAIA design system.\n\nForm-associated for native form submission.","name":"GaiaTextInput","cssParts":[{"description":"The native input element.","name":"input"},{"description":"The container wrapping the input and slots.","name":"container"}],"slots":[{"description":"An icon or element placed before the input text.","name":"prefix"},{"description":"An icon or element placed after the input text.","name":"suffix"}],"members":[{"kind":"field","name":"formAssociated","type":{"text":"boolean"},"static":true,"default":"true"},{"kind":"field","name":"value","type":{"text":"string"},"default":"''","description":"Current value of the input","attribute":"value"},{"kind":"field","name":"placeholder","type":{"text":"string"},"default":"''","description":"Placeholder text displayed when the input is empty","attribute":"placeholder"},{"kind":"field","name":"type","type":{"text":"TextInputType"},"default":"'text'","description":"Input type","attribute":"type","reflects":true},{"kind":"field","name":"disabled","type":{"text":"boolean"},"default":"false","description":"Whether the input is disabled","attribute":"disabled","reflects":true},{"kind":"field","name":"readonly","type":{"text":"boolean"},"default":"false","description":"Whether the input is read-only","attribute":"readonly","reflects":true},{"kind":"field","name":"invalid","type":{"text":"boolean"},"default":"false","description":"Whether the input is in an invalid state","attribute":"invalid","reflects":true},{"kind":"field","name":"success","type":{"text":"boolean"},"default":"false","description":"Whether the input is in a success state","attribute":"success","reflects":true},{"kind":"field","name":"required","type":{"text":"boolean"},"default":"false","description":"Whether the input is required","attribute":"required","reflects":true},{"kind":"field","name":"maxlength","type":{"text":"number | undefined"},"description":"Maximum number of characters allowed","attribute":"maxlength"},{"kind":"field","name":"minlength","type":{"text":"number | undefined"},"description":"Minimum number of characters required","attribute":"minlength"},{"kind":"field","name":"pattern","type":{"text":"string | undefined"},"description":"Pattern for input validation","attribute":"pattern"},{"kind":"field","name":"ariaLabel","type":{"text":"string | null"},"default":"null","description":"Accessible label for the input (use when no visible label is present)","attribute":"aria-label"},{"kind":"field","name":"ariaLabelledBy","type":{"text":"string | null"},"default":"null","description":"ID of the element that labels this input","attribute":"aria-labelledby"},{"kind":"field","name":"ariaDescribedBy","type":{"text":"string | null"},"default":"null","description":"ID(s) of elements that describe this input","attribute":"aria-describedby"},{"kind":"field","name":"name","type":{"text":"string"},"default":"''","description":"Name for form submission","attribute":"name"},{"kind":"field","name":"autocomplete","type":{"text":"string"},"default":"''","description":"Autocomplete hint","attribute":"autocomplete"},{"kind":"field","name":"inputmode","type":{"text":"| 'none'\n | 'text'\n | 'decimal'\n | 'numeric'\n | 'tel'\n | 'search'\n | 'email'\n | 'url' | undefined"},"description":"Hint for virtual keyboard on mobile","attribute":"inputmode"},{"kind":"field","name":"focused","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"field","name":"inputEl","type":{"text":"HTMLInputElement"},"privacy":"private"},{"kind":"method","name":"focus","parameters":[{"name":"options","optional":true,"type":{"text":"FocusOptions"}}],"description":"Focus the input"},{"kind":"method","name":"blur","description":"Blur the input"},{"kind":"method","name":"select","description":"Select all text in the input"},{"kind":"method","name":"setSelectionRange","parameters":[{"name":"start","type":{"text":"number"}},{"name":"end","type":{"text":"number"}},{"name":"direction","optional":true,"type":{"text":"'forward' | 'backward' | 'none'"}}],"description":"Set the selection range"},{"kind":"method","name":"handleInput","privacy":"private","parameters":[{"name":"e","type":{"text":"Event"}}]},{"kind":"method","name":"handleChange","privacy":"private"},{"kind":"method","name":"handleFocus","privacy":"private"},{"kind":"method","name":"handleBlur","privacy":"private"},{"kind":"method","name":"handlePrefixSlotChange","privacy":"private"},{"kind":"method","name":"handleSuffixSlotChange","privacy":"private"},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"events":[{"name":"input","type":{"text":"Event"},"description":"Fires when the user types in the input."},{"name":"change","type":{"text":"Event"},"description":"Fires when the value changes and the input loses focus."}],"attributes":[{"name":"value","type":{"text":"string"},"default":"''","description":"Current value of the input","fieldName":"value"},{"name":"placeholder","type":{"text":"string"},"default":"''","description":"Placeholder text displayed when the input is empty","fieldName":"placeholder"},{"name":"type","type":{"text":"TextInputType"},"default":"'text'","description":"Input type","fieldName":"type"},{"name":"disabled","type":{"text":"boolean"},"default":"false","description":"Whether the input is disabled","fieldName":"disabled"},{"name":"readonly","type":{"text":"boolean"},"default":"false","description":"Whether the input is read-only","fieldName":"readonly"},{"name":"invalid","type":{"text":"boolean"},"default":"false","description":"Whether the input is in an invalid state","fieldName":"invalid"},{"name":"success","type":{"text":"boolean"},"default":"false","description":"Whether the input is in a success state","fieldName":"success"},{"name":"required","type":{"text":"boolean"},"default":"false","description":"Whether the input is required","fieldName":"required"},{"name":"maxlength","type":{"text":"number | undefined"},"description":"Maximum number of characters allowed","fieldName":"maxlength"},{"name":"minlength","type":{"text":"number | undefined"},"description":"Minimum number of characters required","fieldName":"minlength"},{"name":"pattern","type":{"text":"string | undefined"},"description":"Pattern for input validation","fieldName":"pattern"},{"name":"aria-label","type":{"text":"string | null"},"default":"null","description":"Accessible label for the input (use when no visible label is present)","fieldName":"ariaLabel"},{"name":"aria-labelledby","type":{"text":"string | null"},"default":"null","description":"ID of the element that labels this input","fieldName":"ariaLabelledBy"},{"name":"aria-describedby","type":{"text":"string | null"},"default":"null","description":"ID(s) of elements that describe this input","fieldName":"ariaDescribedBy"},{"name":"name","type":{"text":"string"},"default":"''","description":"Name for form submission","fieldName":"name"},{"name":"autocomplete","type":{"text":"string"},"default":"''","description":"Autocomplete hint","fieldName":"autocomplete"},{"name":"inputmode","type":{"text":"| 'none'\n | 'text'\n | 'decimal'\n | 'numeric'\n | 'tel'\n | 'search'\n | 'email'\n | 'url' | undefined"},"description":"Hint for virtual keyboard on mobile","fieldName":"inputmode"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-text-input","customElement":true}],"exports":[{"kind":"js","name":"GaiaTextInput","declaration":{"name":"GaiaTextInput","module":"components/primitives/text-input/text-input.js"}},{"kind":"custom-element-definition","name":"gaia-text-input","declaration":{"name":"GaiaTextInput","module":"components/primitives/text-input/text-input.js"}}]},{"kind":"javascript-module","path":"components/primitives/tooltip/tooltip.stories.js","declarations":[{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Primitives/Tooltip', component: 'gaia-tooltip', argTypes: { content: { control: 'text', }, title: { control: 'text', }, placement: { control: 'select', options: [ 'top', 'top-start', 'top-end', 'bottom', 'bottom-start', 'bottom-end', 'left', 'left-start', 'left-end', 'right', 'right-start', 'right-end', ], }, delay: { control: 'number', }, }, }"},{"kind":"variable","name":"Default","type":{"text":"Story"},"default":"{ args: { content: 'Tooltip content', placement: 'top', delay: 500, }, render: ({ content, placement, delay }) => html`<div style=\"display: flex; justify-content: center; align-items: center; height: 200px;\"> <gaia-tooltip content=${content} placement=${placement} delay=${delay}> <gaia-button>Hover or focus me</gaia-button> </gaia-tooltip> </div>`, }"},{"kind":"variable","name":"WithTitle","type":{"text":"Story"},"default":"{ args: { title: 'Tooltip title', content: 'This tooltip has a bold title above the body text.', placement: 'top', delay: 500, }, render: ({ title, content, placement, delay }) => html`<div style=\"display: flex; justify-content: center; align-items: center; height: 200px;\"> <gaia-tooltip title=${title} content=${content} placement=${placement} delay=${delay}> <gaia-button>With title</gaia-button> </gaia-tooltip> </div>`, }"},{"kind":"variable","name":"TopPlacements","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"display: flex; gap: 32px; justify-content: center; align-items: center; height: 200px; padding-top: 80px;\" > <gaia-tooltip content=\"Top start\" placement=\"top-start\" delay=\"0\"> <gaia-button>Top Start</gaia-button> </gaia-tooltip> <gaia-tooltip content=\"Top center\" placement=\"top\" delay=\"0\"> <gaia-button>Top</gaia-button> </gaia-tooltip> <gaia-tooltip content=\"Top end\" placement=\"top-end\" delay=\"0\"> <gaia-button>Top End</gaia-button> </gaia-tooltip> </div>`, }"},{"kind":"variable","name":"BottomPlacements","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"display: flex; gap: 32px; justify-content: center; align-items: center; height: 200px;\" > <gaia-tooltip content=\"Bottom start\" placement=\"bottom-start\" delay=\"0\"> <gaia-button>Bottom Start</gaia-button> </gaia-tooltip> <gaia-tooltip content=\"Bottom center\" placement=\"bottom\" delay=\"0\"> <gaia-button>Bottom</gaia-button> </gaia-tooltip> <gaia-tooltip content=\"Bottom end\" placement=\"bottom-end\" delay=\"0\"> <gaia-button>Bottom End</gaia-button> </gaia-tooltip> </div>`, }"},{"kind":"variable","name":"LeftPlacements","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"display: flex; flex-direction: column; gap: 16px; align-items: center; height: 300px; justify-content: center; padding-left: 160px;\" > <gaia-tooltip content=\"Left start\" placement=\"left-start\" delay=\"0\"> <gaia-button>Left Start</gaia-button> </gaia-tooltip> <gaia-tooltip content=\"Left center\" placement=\"left\" delay=\"0\"> <gaia-button>Left</gaia-button> </gaia-tooltip> <gaia-tooltip content=\"Left end\" placement=\"left-end\" delay=\"0\"> <gaia-button>Left End</gaia-button> </gaia-tooltip> </div>`, }"},{"kind":"variable","name":"RightPlacements","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"display: flex; flex-direction: column; gap: 16px; align-items: center; height: 300px; justify-content: center; padding-right: 160px;\" > <gaia-tooltip content=\"Right start\" placement=\"right-start\" delay=\"0\"> <gaia-button>Right Start</gaia-button> </gaia-tooltip> <gaia-tooltip content=\"Right center\" placement=\"right\" delay=\"0\"> <gaia-button>Right</gaia-button> </gaia-tooltip> <gaia-tooltip content=\"Right end\" placement=\"right-end\" delay=\"0\"> <gaia-button>Right End</gaia-button> </gaia-tooltip> </div>`, }"},{"kind":"variable","name":"WithIconButton","type":{"text":"Story"},"default":"{ args: { content: 'Settings', placement: 'bottom', delay: 500, }, render: ({ content, placement, delay }) => html`<div style=\"display: flex; justify-content: center; align-items: center; height: 200px;\"> <gaia-tooltip content=${content} placement=${placement} delay=${delay}> <gaia-button variant=\"ghost\" aria-label=\"Settings\"> <gaia-icon name=\"settings\"></gaia-icon> </gaia-button> </gaia-tooltip> </div>`, }"},{"kind":"variable","name":"LongContent","type":{"text":"Story"},"default":"{ args: { content: 'This is a much longer tooltip that demonstrates how the component handles text wrapping when content exceeds the maximum width.', placement: 'top', delay: 500, }, render: ({ content, placement, delay }) => html`<div style=\"display: flex; justify-content: center; align-items: center; height: 200px;\"> <gaia-tooltip content=${content} placement=${placement} delay=${delay}> <gaia-button>Long content</gaia-button> </gaia-tooltip> </div>`, }"},{"kind":"variable","name":"NoDelay","type":{"text":"Story"},"default":"{ args: { content: 'Appears instantly', placement: 'top', delay: 0, }, render: ({ content, placement, delay }) => html`<div style=\"display: flex; justify-content: center; align-items: center; height: 200px;\"> <gaia-tooltip content=${content} placement=${placement} delay=${delay}> <gaia-button>No delay</gaia-button> </gaia-tooltip> </div>`, }"},{"kind":"variable","name":"DisabledTrigger","type":{"text":"Story"},"default":"{ args: { content: 'This should not appear', placement: 'top', delay: 0, }, render: ({ content, placement, delay }) => html`<div style=\"display: flex; justify-content: center; align-items: center; height: 200px;\"> <gaia-tooltip content=${content} placement=${placement} delay=${delay}> <button disabled>Disabled trigger</button> </gaia-tooltip> </div>`, }"}],"exports":[{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/primitives/tooltip/tooltip.stories.js"}},{"kind":"js","name":"Default","declaration":{"name":"Default","module":"components/primitives/tooltip/tooltip.stories.js"}},{"kind":"js","name":"WithTitle","declaration":{"name":"WithTitle","module":"components/primitives/tooltip/tooltip.stories.js"}},{"kind":"js","name":"TopPlacements","declaration":{"name":"TopPlacements","module":"components/primitives/tooltip/tooltip.stories.js"}},{"kind":"js","name":"BottomPlacements","declaration":{"name":"BottomPlacements","module":"components/primitives/tooltip/tooltip.stories.js"}},{"kind":"js","name":"LeftPlacements","declaration":{"name":"LeftPlacements","module":"components/primitives/tooltip/tooltip.stories.js"}},{"kind":"js","name":"RightPlacements","declaration":{"name":"RightPlacements","module":"components/primitives/tooltip/tooltip.stories.js"}},{"kind":"js","name":"WithIconButton","declaration":{"name":"WithIconButton","module":"components/primitives/tooltip/tooltip.stories.js"}},{"kind":"js","name":"LongContent","declaration":{"name":"LongContent","module":"components/primitives/tooltip/tooltip.stories.js"}},{"kind":"js","name":"NoDelay","declaration":{"name":"NoDelay","module":"components/primitives/tooltip/tooltip.stories.js"}},{"kind":"js","name":"DisabledTrigger","declaration":{"name":"DisabledTrigger","module":"components/primitives/tooltip/tooltip.stories.js"}}]},{"kind":"javascript-module","path":"components/primitives/tooltip/tooltip.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/primitives/tooltip/tooltip.styles.js"}}]},{"kind":"javascript-module","path":"components/primitives/tooltip/tooltip.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"components/primitives/tooltip/tooltip.js","declarations":[{"kind":"class","description":"A tooltip component that displays supplementary context on hover or focus.\n\nWraps a trigger element and shows a floating tooltip with an arrow caret\nwhen the user hovers over, focuses, or taps the trigger. Positioning is\nhandled by floating-ui with automatic flip/shift for viewport edges.\n\nFollows the GAIA design system tooltip spec:\n- 300 ms hover delay (configurable via `delay`)\n- Escape key dismissal\n- Disabled-trigger detection via MutationObserver\n- `role=\"tooltip\"` with `aria-describedby` association","name":"GaiaTooltip","cssParts":[{"description":"The floating tooltip container (for external style overrides)","name":"tooltip"}],"slots":[{"description":"The trigger element that activates the tooltip. Must be focusable (e.g. `<button>`, `<a>`, or an element with `tabindex=\"0\"`).","name":""}],"members":[{"kind":"field","name":"triggerElement","type":{"text":"HTMLElement"}},{"kind":"field","name":"tooltipElement","type":{"text":"HTMLElement"}},{"kind":"field","name":"arrowElement","type":{"text":"HTMLElement"}},{"kind":"field","name":"slotElement","type":{"text":"HTMLSlotElement"}},{"kind":"field","name":"isVisible","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"field","name":"tooltipId","privacy":"private","default":"`tooltip-${Math.random().toString(36).substring(2, 9)}`"},{"kind":"field","name":"disabled","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"field","name":"content","type":{"text":"string"},"default":"''","description":"The text content displayed in the tooltip body.\nAt least one of `content` or `title` must be set for the tooltip to appear.","attribute":"content"},{"kind":"field","name":"title","type":{"text":"string"},"default":"''","description":"An optional bold title displayed above the content.\nRendered with `font-weight: 600` per the GAIA tooltip spec.","attribute":"title"},{"kind":"field","name":"placement","type":{"text":"Placement"},"default":"'bottom'","description":"Preferred placement of the tooltip relative to its trigger.\nSupports all 12 floating-ui placements. The tooltip will automatically\nflip to the opposite side if it would overflow the viewport.","attribute":"placement"},{"kind":"field","name":"delay","type":{"text":"number"},"default":"500","description":"Delay in milliseconds before the tooltip appears on hover.\nSet to `0` for instant display (e.g. sequential tooltips).\nFocus-triggered display uses the same delay via FloatingController.","attribute":"delay"},{"kind":"field","name":"floating","type":{"text":"FloatingController"},"privacy":"private"},{"kind":"field","name":"triggerNode","type":{"text":"HTMLElement | null"},"privacy":"private","default":"null"},{"kind":"field","name":"mutationObserver","type":{"text":"MutationObserver | null"},"privacy":"private","default":"null"},{"kind":"method","name":"disconnectMutationObserver","privacy":"private"},{"kind":"method","name":"checkTriggerDisabled","privacy":"private"},{"kind":"method","name":"handleSlotChange","privacy":"private"},{"kind":"method","name":"attachTriggerBehavior","privacy":"private","parameters":[{"name":"element","type":{"text":"HTMLElement"}}]},{"kind":"method","name":"detachTriggerBehavior","privacy":"private","parameters":[{"name":"element","type":{"text":"HTMLElement"}}]},{"kind":"method","name":"addTriggerListeners","privacy":"private","parameters":[{"name":"element","type":{"text":"HTMLElement"}}]},{"kind":"method","name":"removeTriggerListeners","privacy":"private","parameters":[{"name":"element","type":{"text":"HTMLElement"}}]},{"kind":"field","name":"handleMouseEnter","privacy":"private"},{"kind":"field","name":"handleMouseLeave","privacy":"private"},{"kind":"field","name":"handleFocus","privacy":"private"},{"kind":"field","name":"handleBlur","privacy":"private"},{"kind":"field","name":"handleKeyDown","privacy":"private"},{"kind":"method","name":"show","privacy":"private"},{"kind":"method","name":"hide","privacy":"private"},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"attributes":[{"name":"content","type":{"text":"string"},"default":"''","description":"The text content displayed in the tooltip body.\nAt least one of `content` or `title` must be set for the tooltip to appear.","fieldName":"content","attribute":"content"},{"name":"title","type":{"text":"string"},"default":"''","description":"An optional bold title displayed above the content.\nRendered with `font-weight: 600` per the GAIA tooltip spec.","fieldName":"title","attribute":"title"},{"name":"placement","type":{"text":"Placement"},"default":"'bottom'","description":"Preferred placement of the tooltip relative to its trigger.\nSupports all 12 floating-ui placements. The tooltip will automatically\nflip to the opposite side if it would overflow the viewport.","fieldName":"placement","attribute":"placement"},{"name":"delay","type":{"text":"number"},"default":"500","description":"Delay in milliseconds before the tooltip appears on hover.\nSet to `0` for instant display (e.g. sequential tooltips).\nFocus-triggered display uses the same delay via FloatingController.","fieldName":"delay","attribute":"delay"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-tooltip","customElement":true}],"exports":[{"kind":"js","name":"GaiaTooltip","declaration":{"name":"GaiaTooltip","module":"components/primitives/tooltip/tooltip.js"}},{"kind":"custom-element-definition","name":"gaia-tooltip","declaration":{"name":"GaiaTooltip","module":"components/primitives/tooltip/tooltip.js"}}]},{"kind":"javascript-module","path":"components/session-ended-actions/session-ended-actions.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/session-ended-actions/session-ended-actions.styles.js"}}]},{"kind":"javascript-module","path":"components/session-ended-actions/session-ended-actions.test.js","declarations":[{"kind":"class","description":"","name":"TestWrapper","members":[{"kind":"field","name":"mockStore","type":{"text":"MockChatStore"},"readonly":true},{"kind":"field","name":"store","type":{"text":"ChatStore"},"default":"this.mockStore as unknown"}],"superclass":{"name":"LitElement","package":"lit"},"tagName":"test-wrapper-canvas-revision-selector","customElement":true}],"exports":[{"kind":"custom-element-definition","name":"test-wrapper-session-ended","declaration":{"name":"TestWrapper","module":"components/session-ended-actions/session-ended-actions.test.js"}}]},{"kind":"javascript-module","path":"components/session-ended-actions/session-ended-actions.js","declarations":[{"kind":"class","description":"Post-session actions shown after a support session ends.\n\nReplaces the message composer when the support session has concluded.\nOffers the user the option to provide feedback on the support operator\nor start a new conversation. After feedback is submitted, only the\nnew conversation option remains.","name":"GaiaSessionEndedActions","members":[{"kind":"field","name":"ctrl","privacy":"private","default":"new StoreController(this, selectSessionEndedState)"},{"kind":"method","name":"handleGiveFeedback","privacy":"private"},{"kind":"method","name":"handleNewConversation","privacy":"private"},{"kind":"field","name":"showFeedbackButton","type":{"text":"boolean"},"privacy":"private","readonly":true},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"events":[{"type":{"text":"ConversationClearedEvent"}},{"type":{"text":"ConversationClearedEvent"},"description":"When the user starts a new conversation","name":"conversation-cleared"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-session-ended-actions","customElement":true}],"exports":[{"kind":"js","name":"GaiaSessionEndedActions","declaration":{"name":"GaiaSessionEndedActions","module":"components/session-ended-actions/session-ended-actions.js"}},{"kind":"custom-element-definition","name":"gaia-session-ended-actions","declaration":{"name":"GaiaSessionEndedActions","module":"components/session-ended-actions/session-ended-actions.js"}}]},{"kind":"javascript-module","path":"components/settings/settings-view.test.js","declarations":[{"kind":"class","description":"","name":"TestWrapper","members":[{"kind":"field","name":"store","type":{"text":"MockChatStore"}}],"superclass":{"name":"LitElement","package":"lit"},"tagName":"test-wrapper-canvas-revision-selector","customElement":true}],"exports":[{"kind":"custom-element-definition","name":"test-wrapper-settings-view","declaration":{"name":"TestWrapper","module":"components/settings/settings-view.test.js"}}]},{"kind":"javascript-module","path":"components/settings/settings-view.js","declarations":[{"kind":"class","description":"","name":"GaiaSettingsView","members":[{"kind":"field","name":"ctrl","privacy":"private","default":"new StoreController(this, selectSettingsViewState)"},{"kind":"field","name":"screen","type":{"text":"SettingsScreen"},"privacy":"private","default":"'menu'"},{"kind":"field","name":"revokeMessage","type":{"text":"string | null"},"privacy":"private","default":"null"},{"kind":"field","name":"expandedPluginTools","privacy":"private","default":"new Set<string>()"},{"kind":"field","name":"revokeTimeoutId","type":{"text":"ReturnType<typeof setTimeout> | null"},"privacy":"private","default":"null"},{"kind":"field","name":"handleBack","privacy":"private"},{"kind":"field","name":"openDataSettings","privacy":"private"},{"kind":"field","name":"openPluginSettings","privacy":"private"},{"kind":"field","name":"handleConsentToggle","privacy":"private"},{"kind":"field","name":"handlePluginSearchInput","privacy":"private"},{"kind":"method","name":"handlePluginToggle","privacy":"private","parameters":[{"name":"pluginId","type":{"text":"string"}},{"name":"e","type":{"text":"Event"}}]},{"kind":"method","name":"handleToolToggle","privacy":"private","parameters":[{"name":"pluginId","type":{"text":"string"}},{"name":"toolName","type":{"text":"string"}},{"name":"e","type":{"text":"Event"}}]},{"kind":"field","name":"blockPluginControlInteraction","privacy":"private"},{"kind":"method","name":"togglePluginTools","privacy":"private","parameters":[{"name":"pluginId","type":{"text":"string"}}]},{"kind":"method","name":"handleRevokeAll","privacy":"private"},{"kind":"method","name":"renderHeaderTitle","privacy":"private"},{"kind":"method","name":"renderMenuScreen","privacy":"private"},{"kind":"method","name":"renderDataSettingsScreen","privacy":"private"},{"kind":"method","name":"renderPluginScreen","privacy":"private"},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-settings-view","customElement":true}],"exports":[{"kind":"js","name":"GaiaSettingsView","declaration":{"name":"GaiaSettingsView","module":"components/settings/settings-view.js"}},{"kind":"custom-element-definition","name":"gaia-settings-view","declaration":{"name":"GaiaSettingsView","module":"components/settings/settings-view.js"}}]},{"kind":"javascript-module","path":"components/shared/__tests__/error-boundary.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"components/shared/animations.styles.js","declarations":[{"kind":"variable","name":"animationStyles","default":"css` @keyframes pulse { 0%, 100% { opacity: 0.3; } 50% { opacity: 1; } } @keyframes shimmer { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } } @keyframes message-enter { from { opacity: 0; transform: translateY(12px); } } @keyframes message-enter-user { from { opacity: 0; transform: translateX(32px); } } @keyframes breathe { 0%, 100% { opacity: 0.4; transform: scale(0.85); } 50% { opacity: 1; transform: scale(1.1); } } @keyframes dot-complete { 0% { transform: scale(1); } 50% { opacity: 0.5; transform: scale(1.8); } 100% { opacity: 1; transform: scale(1); } } @keyframes blink { 50% { opacity: 0; } } @keyframes pill-enter { from { opacity: 0; transform: translateY(6px); } } @keyframes confirm-pop { 0% { transform: scale(1); } 50% { transform: scale(1.15); } 100% { transform: scale(1); } } @keyframes fade-in { from { opacity: 0; transform: scale(0.95); } to { opacity: 1; transform: scale(1); } } @keyframes fade-out { from { opacity: 1; transform: scale(1); } to { opacity: 0; transform: scale(0.95); } } @keyframes fade-in-slide { from { opacity: 0; transform: translateY(-10px); } to { opacity: 1; transform: translateY(0); } } @keyframes fade-out-slide { from { opacity: 1; transform: translateY(0); } to { opacity: 0; transform: translateY(-10px); } } `"},{"kind":"variable","name":"shimmerTextStyles","default":"css` .shimmer-text { color: transparent; background-image: linear-gradient( to right, oklch(30.91% 0.049 233.96deg), oklch(50% 0.049 233.96deg) 40%, oklch(70% 0.049 233.96deg) 50%, oklch(50% 0.049 233.96deg) 60%, oklch(30.91% 0.049 233.96deg) 100% ); background-position: 0 50%; background-clip: text; background-size: 200%; animation: shimmer 3s infinite linear; } @media (prefers-reduced-motion: reduce) { .shimmer-text { animation: none; } } `","description":"Shimmer text gradient mixin — apply to any element to create\nthe animated gradient-text loading effect.\n\nUsage: add `.shimmer-text` class to the element."}],"exports":[{"kind":"js","name":"animationStyles","declaration":{"name":"animationStyles","module":"components/shared/animations.styles.js"}},{"kind":"js","name":"shimmerTextStyles","declaration":{"name":"shimmerTextStyles","module":"components/shared/animations.styles.js"}}]},{"kind":"javascript-module","path":"components/shared/base-element.js","declarations":[{"kind":"class","description":"","name":"BaseElement","members":[{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]"}],"superclass":{"name":"LitElement","package":"lit"},"customElement":true}],"exports":[{"kind":"js","name":"BaseElement","declaration":{"name":"BaseElement","module":"components/shared/base-element.js"}}]},{"kind":"javascript-module","path":"components/shared/controllers/conversation-scroll-controller.js","declarations":[{"kind":"class","description":"","name":"ConversationScrollController","members":[{"kind":"field","name":"scroll","type":{"text":"ScrollController"},"privacy":"private","default":"new ScrollController(host, containerRef, scrollViewRef)"},{"kind":"field","name":"prevMessages","type":{"text":"UiMessage[]"},"privacy":"private","default":"[]"},{"kind":"field","name":"prevFeedbackOpen","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"field","name":"prevFeedbackConfirmationVisible","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"field","name":"prevError","type":{"text":"AppError | null"},"privacy":"private","default":"null"},{"kind":"method","name":"hostConnected","return":{"type":{"text":"void"}}},{"kind":"method","name":"hostDisconnected","return":{"type":{"text":"void"}}},{"kind":"method","name":"processUpdate","return":{"type":{"text":"Promise<void>"}},"description":"Call from the host's `updated()` lifecycle to process scroll changes."},{"kind":"method","name":"handleScrollUpdate","privacy":"private","return":{"type":{"text":"void"}},"parameters":[{"name":"prevMessages","optional":true,"type":{"text":"UiMessage[]"}}]}]}],"exports":[{"kind":"js","name":"ConversationScrollController","declaration":{"name":"ConversationScrollController","module":"components/shared/controllers/conversation-scroll-controller.js"}}]},{"kind":"javascript-module","path":"components/shared/controllers/floating-controller.js","declarations":[{"kind":"class","description":"Reactive controller that manages floating-ui positioning and show/hide timing.\n\nEncapsulates the common pattern of:\n- Delayed show/hide with timeout management\n- `computePosition` + `autoUpdate` lifecycle\n- Arrow element positioning","name":"FloatingController","members":[{"kind":"field","name":"showTimeout","type":{"text":"number | null"},"privacy":"private","default":"null"},{"kind":"field","name":"hideTimeout","type":{"text":"number | null"},"privacy":"private","default":"null"},{"kind":"field","name":"cleanupAutoUpdate","type":{"text":"(() => void) | null"},"privacy":"private","default":"null"},{"kind":"field","name":"placement","type":{"text":"Placement"},"privacy":"private"},{"kind":"field","name":"strategy","type":{"text":"Strategy"},"privacy":"private"},{"kind":"field","name":"offsetPx","type":{"text":"number"},"privacy":"private"},{"kind":"field","name":"shiftPadding","type":{"text":"number"},"privacy":"private"},{"kind":"field","name":"showDelay","type":{"text":"number"}},{"kind":"field","name":"hideDelay","type":{"text":"number"}},{"kind":"field","name":"extraMiddleware","type":{"text":"Middleware[]"},"privacy":"private"},{"kind":"method","name":"updateOptions","parameters":[{"name":"options","type":{"text":"Partial<FloatingOptions>"}}],"description":"Update options that may change at runtime (e.g. placement, delays)."},{"kind":"method","name":"hostConnected"},{"kind":"method","name":"hostDisconnected"},{"kind":"method","name":"clearTimeouts","description":"Cancel any pending show/hide timers."},{"kind":"method","name":"scheduleShow","parameters":[{"name":"onShow","type":{"text":"() => void"}}],"description":"Schedule the show callback after `showDelay` ms. Clears pending timers first."},{"kind":"method","name":"scheduleHide","parameters":[{"name":"onHide","type":{"text":"() => void"}}],"description":"Schedule the hide callback after `hideDelay` ms. Clears pending timers first."},{"kind":"method","name":"stopAutoUpdate","description":"Stop the autoUpdate loop. Safe to call when not running."},{"kind":"method","name":"startAutoUpdate","parameters":[{"name":"reference","type":{"text":"HTMLElement"}},{"name":"floating","type":{"text":"HTMLElement"}},{"name":"arrowEl","type":{"text":"HTMLElement | null"}},{"name":"onPositioned","optional":true,"type":{"text":"(result: PositionResult) => void"}}],"description":"Start the floating-ui autoUpdate loop.\nCalls `updatePosition` each time the reference or floating element moves/resizes."},{"kind":"method","name":"computeAndApply","return":{"type":{"text":"Promise<PositionResult | null>"}},"parameters":[{"name":"reference","type":{"text":"HTMLElement"}},{"name":"floating","type":{"text":"HTMLElement"}},{"name":"arrowEl","type":{"text":"HTMLElement | null"}},{"name":"onPositioned","optional":true,"type":{"text":"(result: PositionResult) => void"}}],"description":"Run a single position computation and apply styles to the floating & arrow elements.\nReturns the computed placement for the caller to use if needed."}]}],"exports":[{"kind":"js","name":"FloatingController","declaration":{"name":"FloatingController","module":"components/shared/controllers/floating-controller.js"}}]},{"kind":"javascript-module","path":"components/shared/controllers/focus-trap-controller.test.js","declarations":[{"kind":"class","description":"","name":"TestHost","members":[{"kind":"field","name":"open","type":{"text":"boolean"},"default":"true","attribute":"open"},{"kind":"field","name":"onEscapeSpy"},{"kind":"field","name":"focusTrap","default":"new FocusTrapController(this, '.container', this.onEscapeSpy)"},{"kind":"method","name":"handleKeyDown","parameters":[{"name":"e","type":{"text":"KeyboardEvent"}}]}],"attributes":[{"name":"open","type":{"text":"boolean"},"default":"true","fieldName":"open"}],"superclass":{"name":"LitElement","package":"lit"},"tagName":"test-focus-trap-host","customElement":true}],"exports":[{"kind":"custom-element-definition","name":"test-focus-trap-host","declaration":{"name":"TestHost","module":"components/shared/controllers/focus-trap-controller.test.js"}}]},{"kind":"javascript-module","path":"components/shared/controllers/focus-trap-controller.js","declarations":[{"kind":"class","description":"Reactive controller that traps focus within a container element.\n\nHandles Tab/Shift+Tab wrapping and Escape key dismissal.\nThe host must call `handleKeyDown(e)` from its keydown handler.","name":"FocusTrapController","members":[{"kind":"field","name":"host","type":{"text":"ReactiveControllerHost & LitElement"},"privacy":"private","default":"host"},{"kind":"field","name":"containerSelector","type":{"text":"string"},"privacy":"private","default":"containerSelector"},{"kind":"field","name":"onEscape","type":{"text":"() => void | undefined"},"privacy":"private","default":"onEscape"},{"kind":"method","name":"hostConnected","return":{"type":{"text":"void"}}},{"kind":"method","name":"hostDisconnected","return":{"type":{"text":"void"}}},{"kind":"method","name":"handleKeyDown","return":{"type":{"text":"void"}},"parameters":[{"name":"e","type":{"text":"KeyboardEvent"}}]}]}],"exports":[{"kind":"js","name":"FocusTrapController","declaration":{"name":"FocusTrapController","module":"components/shared/controllers/focus-trap-controller.js"}}]},{"kind":"javascript-module","path":"components/shared/controllers/iframe-preview-controller.js","declarations":[{"kind":"class","description":"","name":"IframePreviewController","members":[{"kind":"field","name":"errorMessage","type":{"text":"string"},"default":"''"},{"kind":"field","name":"rendererReady","type":{"text":"boolean"},"default":"false"},{"kind":"field","name":"debounceTimer","type":{"text":"ReturnType<typeof setTimeout> | undefined"},"privacy":"private"},{"kind":"field","name":"renderCallback","type":{"text":"() => void | undefined"},"privacy":"private"},{"kind":"field","name":"renderTimeoutId","type":{"text":"ReturnType<typeof setTimeout> | undefined"},"privacy":"private"},{"kind":"method","name":"hostConnected","return":{"type":{"text":"void"}}},{"kind":"method","name":"hostDisconnected","return":{"type":{"text":"void"}}},{"kind":"method","name":"scheduleRender","return":{"type":{"text":"void"}},"parameters":[{"name":"callback","type":{"text":"() => void"}}],"description":"Schedule a debounced render. The callback is invoked after the debounce delay."},{"kind":"method","name":"cancelDebounce","return":{"type":{"text":"void"}},"description":"Cancel any pending debounced render."},{"kind":"method","name":"startRenderTimeout","return":{"type":{"text":"void"}},"description":"Start a timeout that fires if the iframe does not respond with a success\nor error message within `renderTimeoutMs`. This catches the case where the\niframe's main thread is completely blocked (e.g. infinite loop)."},{"kind":"method","name":"clearRenderTimeout","return":{"type":{"text":"void"}},"description":"Cancel any pending render timeout."},{"kind":"method","name":"setError","return":{"type":{"text":"void"}},"parameters":[{"name":"message","type":{"text":"string"}}],"description":"Set error state and dispatch a failed render result."},{"kind":"method","name":"setSuccess","return":{"type":{"text":"void"}},"description":"Clear error state and dispatch a successful render result."},{"kind":"method","name":"dispatchRenderResult","return":{"type":{"text":"void"}},"parameters":[{"name":"detail","type":{"text":"RenderResult"}}],"description":"Dispatch a canvas-render-result custom event on the host."},{"kind":"field","name":"handleMessage","privacy":"private"}]}],"exports":[{"kind":"js","name":"IframePreviewController","declaration":{"name":"IframePreviewController","module":"components/shared/controllers/iframe-preview-controller.js"}}]},{"kind":"javascript-module","path":"components/shared/controllers/resize-controller.js","declarations":[{"kind":"class","description":"","name":"ResizeController","members":[{"kind":"field","name":"host","type":{"text":"ResizeHost"},"privacy":"private"},{"kind":"field","name":"resizeObserver","type":{"text":"ResizeObserver"},"privacy":"private"},{"kind":"method","name":"hostConnected"},{"kind":"method","name":"hostDisconnected"},{"kind":"method","name":"getTextareaBounds","privacy":"private"},{"kind":"method","name":"setTextareaDimensions"}]}],"exports":[{"kind":"js","name":"ResizeController","declaration":{"name":"ResizeController","module":"components/shared/controllers/resize-controller.js"}}]},{"kind":"javascript-module","path":"components/shared/controllers/scroll-controller.js","declarations":[{"kind":"class","description":"","name":"ScrollController","members":[{"kind":"method","name":"hostConnected","return":{"type":{"text":"void"}}},{"kind":"method","name":"hostDisconnected","return":{"type":{"text":"void"}}},{"kind":"method","name":"scrollToBottom","return":{"type":{"text":"void"}},"parameters":[{"name":"behavior","default":"'instant'","type":{"text":"ScrollBehavior"}}],"description":"Scroll the container to the bottom."},{"kind":"method","name":"anchorToElement","return":{"type":{"text":"void"}},"parameters":[{"name":"element","type":{"text":"HTMLElement"}},{"name":"behavior","default":"'instant'","type":{"text":"ScrollBehavior"}}],"description":"Anchor to an element by setting the scroll view height to push it to the top."},{"kind":"method","name":"resetScrollHeight","return":{"type":{"text":"void"}},"description":"Reset scroll view height to auto."}]}],"exports":[{"kind":"js","name":"ScrollController","declaration":{"name":"ScrollController","module":"components/shared/controllers/scroll-controller.js"}}]},{"kind":"javascript-module","path":"components/shared/controllers/toolbar-controller.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"components/shared/controllers/toolbar-controller.js","declarations":[{"kind":"class","description":"","name":"ToolbarController","members":[{"kind":"field","name":"activeIndex","type":{"text":"number"},"default":"0"},{"kind":"method","name":"hostConnected","return":{"type":{"text":"void"}}},{"kind":"method","name":"updateTabindex","return":{"type":{"text":"void"}},"description":"Synchronize tabindex attributes with the active index.\nIf the active button is disabled, moves to the first enabled button."},{"kind":"field","name":"handleKeyDown","description":"Handle keydown events on the toolbar container.\nSupports ArrowRight/Left (wrap-around), Home, End."},{"kind":"method","name":"nextEnabledIndex","privacy":"private","return":{"type":{"text":"number"}},"parameters":[{"name":"buttons","type":{"text":"HTMLButtonElement[]"}},{"name":"from","type":{"text":"number"}},{"name":"direction","type":{"text":"1 | -1"}}]}]}],"exports":[{"kind":"js","name":"ToolbarController","declaration":{"name":"ToolbarController","module":"components/shared/controllers/toolbar-controller.js"}}]},{"kind":"javascript-module","path":"components/shared/disposable-controller.js","declarations":[{"kind":"class","description":"","name":"DisposableController","members":[{"kind":"field","name":"disposables","type":{"text":"(() => void)[]"},"privacy":"private","default":"[]"},{"kind":"method","name":"add","return":{"type":{"text":"void"}},"parameters":[{"name":"dispose","type":{"text":"() => void"}}],"description":"Register a cleanup function to run on disconnection."},{"kind":"method","name":"hostConnected","return":{"type":{"text":"void"}}},{"kind":"method","name":"hostDisconnected","return":{"type":{"text":"void"}}}]}],"exports":[{"kind":"js","name":"DisposableController","declaration":{"name":"DisposableController","module":"components/shared/disposable-controller.js"}}]},{"kind":"javascript-module","path":"components/shared/error-boundary.js","declarations":[{"kind":"class","description":"Error boundary that catches rendering errors from child components.\n\nWraps a section of the UI and, when an error event bubbles up from a\nchild, replaces the children with a fallback \"Something went wrong\"\nmessage. Resets automatically when the conversation is cleared.","name":"GaiaErrorBoundary","slots":[{"description":"Content to render when no error has occurred","name":""}],"members":[{"kind":"field","name":"hasError","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"method","name":"reportError","return":{"type":{"text":"void"}}},{"kind":"method","name":"reset","return":{"type":{"text":"void"}},"description":"Reset the error boundary so children can render again."},{"kind":"field","name":"handleReset","privacy":"private"},{"kind":"field","name":"handleError","privacy":"private"},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-error-boundary","customElement":true}],"exports":[{"kind":"js","name":"GaiaErrorBoundary","declaration":{"name":"GaiaErrorBoundary","module":"components/shared/error-boundary.js"}},{"kind":"custom-element-definition","name":"gaia-error-boundary","declaration":{"name":"GaiaErrorBoundary","module":"components/shared/error-boundary.js"}}]},{"kind":"javascript-module","path":"components/shared/suggested-question-pills.stories.js","declarations":[{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Components/Suggested Questions', component: 'gaia-suggested-questions', }"},{"kind":"variable","name":"Default","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"max-width: 500px;\"> <gaia-suggested-questions .questions=${[ 'How do I reset my password?', 'What are the system requirements?', 'How do I contact support?', ]} ></gaia-suggested-questions> </div>`, }"},{"kind":"variable","name":"SingleQuestion","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"max-width: 500px;\"> <gaia-suggested-questions .questions=${['Tell me more about this feature']} ></gaia-suggested-questions> </div>`, }"},{"kind":"variable","name":"ManyQuestions","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"max-width: 500px;\"> <gaia-suggested-questions .questions=${[ 'How do I get started?', 'What pricing plans are available?', 'Can I integrate with other tools?', 'Where can I find the documentation?', 'How do I export my data?', ]} ></gaia-suggested-questions> </div>`, }"}],"exports":[{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/shared/suggested-question-pills.stories.js"}},{"kind":"js","name":"Default","declaration":{"name":"Default","module":"components/shared/suggested-question-pills.stories.js"}},{"kind":"js","name":"SingleQuestion","declaration":{"name":"SingleQuestion","module":"components/shared/suggested-question-pills.stories.js"}},{"kind":"js","name":"ManyQuestions","declaration":{"name":"ManyQuestions","module":"components/shared/suggested-question-pills.stories.js"}}]},{"kind":"javascript-module","path":"components/shared/suggested-question-pills.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/shared/suggested-question-pills.styles.js"}}]},{"kind":"javascript-module","path":"components/shared/suggested-question-pills.js","declarations":[{"kind":"class","description":"Row of clickable pill buttons showing suggested follow-up questions.\n\nUsed by the message composer (pre-conversation welcome state) and\ninline after assistant messages to offer quick follow-up prompts.","name":"GaiaSuggestedQuestions","members":[{"kind":"field","name":"questions","type":{"text":"ReadonlyArray<string>"},"default":"[]"},{"kind":"method","name":"handleClick","privacy":"private","parameters":[{"name":"question","type":{"text":"string"}}]},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"events":[{"name":"question-click","type":{"text":"CustomEvent"},"description":"When a question pill is clicked. `event.detail` contains `{ question: string }`."}],"superclass":{"name":"BaseElement","module":"/src/components/shared/base-element"},"tagName":"gaia-suggested-questions","customElement":true}],"exports":[{"kind":"js","name":"GaiaSuggestedQuestions","declaration":{"name":"GaiaSuggestedQuestions","module":"components/shared/suggested-question-pills.js"}},{"kind":"custom-element-definition","name":"gaia-suggested-questions","declaration":{"name":"GaiaSuggestedQuestions","module":"components/shared/suggested-question-pills.js"}}]},{"kind":"javascript-module","path":"core/adapters/citation-utils.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"core/adapters/citation-utils.js","declarations":[{"kind":"function","name":"collectCitationsForAssistant","return":{"type":{"text":"SearchCitation[]"}},"parameters":[{"name":"messages","type":{"text":"UiMessage[]"}},{"name":"fromIndex","type":{"text":"number"}}],"description":"Collect search citations for the assistant message at `fromIndex`.\nIncludes citations from:\n1. The message's own tool calls\n2. Tool calls on ALL preceding assistant messages across the entire conversation\n\nCitations are NOT deduplicated here — each entry represents a specific document\nchunk. ReferenceIds are qualified with a turn prefix (e.g., \"0:1\") to ensure\nuniqueness across turns, so the citationMap can use them as keys directly."},{"kind":"function","name":"sortCitations","return":{"type":{"text":"SearchCitation[]"}},"parameters":[{"name":"citations","type":{"text":"SearchCitation[]"}}],"description":"Sort citations by referenceId (turn index ascending, then sequence ascending).\nSupports both qualified \"0:1\" and legacy bare \"1\" formats."},{"kind":"function","name":"groupCitationsByDocument","return":{"type":{"text":"CitationGroup[]"}},"parameters":[{"name":"citations","type":{"text":"SearchCitation[]"}}],"description":"Group citations by document, keyed by documentId or URL fallback.\nCitations are sorted by referenceId before grouping."}],"exports":[{"kind":"js","name":"collectCitationsForAssistant","declaration":{"name":"collectCitationsForAssistant","module":"core/adapters/citation-utils.js"}},{"kind":"js","name":"sortCitations","declaration":{"name":"sortCitations","module":"core/adapters/citation-utils.js"}},{"kind":"js","name":"groupCitationsByDocument","declaration":{"name":"groupCitationsByDocument","module":"core/adapters/citation-utils.js"}}]},{"kind":"javascript-module","path":"core/adapters/index.js","declarations":[],"exports":[{"kind":"js","name":"UiUserMessage","declaration":{"name":"UiUserMessage","module":"./message-types"}},{"kind":"js","name":"UiAssistantMessage","declaration":{"name":"UiAssistantMessage","module":"./message-types"}},{"kind":"js","name":"UiToolCall","declaration":{"name":"UiToolCall","module":"./message-types"}},{"kind":"js","name":"UiAssistantPart","declaration":{"name":"UiAssistantPart","module":"./message-types"}},{"kind":"js","name":"UiAssistantReasoningPart","declaration":{"name":"UiAssistantReasoningPart","module":"./message-types"}},{"kind":"js","name":"UiAssistantTextPart","declaration":{"name":"UiAssistantTextPart","module":"./message-types"}},{"kind":"js","name":"UiAssistantToolCallPart","declaration":{"name":"UiAssistantToolCallPart","module":"./message-types"}},{"kind":"js","name":"UiAssistantSuggestedQuestionsPart","declaration":{"name":"UiAssistantSuggestedQuestionsPart","module":"./message-types"}},{"kind":"js","name":"UiOperatorMessage","declaration":{"name":"UiOperatorMessage","module":"./message-types"}},{"kind":"js","name":"UiActivityMessage","declaration":{"name":"UiActivityMessage","module":"./message-types"}},{"kind":"js","name":"UiMessage","declaration":{"name":"UiMessage","module":"./message-types"}},{"kind":"js","name":"isUiUserMessage","declaration":{"name":"isUiUserMessage","module":"./message-types"}},{"kind":"js","name":"isUiAssistantMessage","declaration":{"name":"isUiAssistantMessage","module":"./message-types"}},{"kind":"js","name":"isUiOperatorMessage","declaration":{"name":"isUiOperatorMessage","module":"./message-types"}},{"kind":"js","name":"isUiActivityMessage","declaration":{"name":"isUiActivityMessage","module":"./message-types"}},{"kind":"js","name":"getToolCallParts","declaration":{"name":"getToolCallParts","module":"./message-types"}},{"kind":"js","name":"getTextPart","declaration":{"name":"getTextPart","module":"./message-types"}},{"kind":"js","name":"getReasoningPart","declaration":{"name":"getReasoningPart","module":"./message-types"}},{"kind":"js","name":"mapToUiMessages","declaration":{"name":"mapToUiMessages","module":"./message-mapper"}},{"kind":"js","name":"createMemoizedMapper","declaration":{"name":"createMemoizedMapper","module":"./memoized-mapper"}},{"kind":"js","name":"ToolStatus","declaration":{"name":"ToolStatus","module":"./tool-utils"}},{"kind":"js","name":"SearchCitation","declaration":{"name":"SearchCitation","module":"./tool-utils"}},{"kind":"js","name":"UnwrappedApproval","declaration":{"name":"UnwrappedApproval","module":"./tool-utils"}},{"kind":"js","name":"safeParseJson","declaration":{"name":"safeParseJson","module":"./tool-utils"}},{"kind":"js","name":"safeParseArguments","declaration":{"name":"safeParseArguments","module":"./tool-utils"}},{"kind":"js","name":"unwrapApproval","declaration":{"name":"unwrapApproval","module":"./tool-utils"}},{"kind":"js","name":"parseSummaryFromArgs","declaration":{"name":"parseSummaryFromArgs","module":"./tool-utils"}},{"kind":"js","name":"isApprovalResponse","declaration":{"name":"isApprovalResponse","module":"./tool-utils"}},{"kind":"js","name":"isDeclined","declaration":{"name":"isDeclined","module":"./tool-utils"}},{"kind":"js","name":"isErrorResponse","declaration":{"name":"isErrorResponse","module":"./tool-utils"}},{"kind":"js","name":"parseSearchCitations","declaration":{"name":"parseSearchCitations","module":"./tool-utils"}},{"kind":"js","name":"parseResponseContent","declaration":{"name":"parseResponseContent","module":"./tool-utils"}},{"kind":"js","name":"resolveToolStatus","declaration":{"name":"resolveToolStatus","module":"./tool-utils"}},{"kind":"js","name":"resolveSourceLabel","declaration":{"name":"resolveSourceLabel","module":"./tool-utils"}},{"kind":"js","name":"resolveSourceIcon","declaration":{"name":"resolveSourceIcon","module":"./tool-utils"}},{"kind":"js","name":"CitationGroup","declaration":{"name":"CitationGroup","module":"./citation-utils"}},{"kind":"js","name":"collectCitationsForAssistant","declaration":{"name":"collectCitationsForAssistant","module":"./citation-utils"}},{"kind":"js","name":"sortCitations","declaration":{"name":"sortCitations","module":"./citation-utils"}},{"kind":"js","name":"groupCitationsByDocument","declaration":{"name":"groupCitationsByDocument","module":"./citation-utils"}}]},{"kind":"javascript-module","path":"core/adapters/memoized-mapper.js","declarations":[{"kind":"class","description":"Class-based memoized message mapper that short-circuits when inputs\nhaven't changed.\n\nDuring streaming, the AG-UI client appends to the messages array and\nmutates the last assistant message's content. Since `AgentService.getMessages()`\nreturns the same array reference (mutated in place), change detection uses\narray length rather than referential equality.\n\nBoth incremental and full-rebuild paths normalize the full message array\n(merge reasoning into assistant turns, drop orphans) then re-map all\nnormalized messages. Normalization can shift message boundaries so\nper-message prefix reuse is not safe. The incremental path still avoids\nrebuilding the tool-response index from scratch.","name":"MemoizedMapper","members":[{"kind":"field","name":"prevLength","type":{"text":"number"},"privacy":"private","default":"0"},{"kind":"field","name":"prevResult","type":{"text":"UiMessage[]"},"privacy":"private","default":"[]"},{"kind":"field","name":"prevToolResponseIndex","privacy":"private","default":"new Map<string, InternalToolMessage[]>()"},{"kind":"field","name":"prevPrefixRefs","type":{"text":"InternalMessage[]"},"privacy":"private","default":"[]","description":"Snapshot of message refs at indices 0..N-2 to detect prefix changes."},{"kind":"field","name":"summaryCache","privacy":"private","readonly":true,"default":"new Map<string, string>()","description":"Cache of tool call summaries from previous mappings. Ensures summaries\nsurvive across re-maps when the original sources (args or store summaries)\nbecome unavailable — e.g. after approve/decline triggers a new agent run\nwith fresh message objects."},{"kind":"method","name":"reset","return":{"type":{"text":"void"}},"description":"Clear all mutable state."},{"kind":"method","name":"map","return":{"type":{"text":"UiMessage[]"}},"parameters":[{"name":"messages","type":{"text":"InternalMessage[]"}},{"name":"summaries","optional":true,"type":{"text":"Record<string, string>"}},{"name":"messageRunIds","optional":true,"type":{"text":"Record<string, string>"}},{"name":"runState","optional":true,"type":{"text":"RunState"}}]},{"kind":"method","name":"incrementalUpdate","privacy":"private","return":{"type":{"text":"UiMessage[]"}},"parameters":[{"name":"messages","type":{"text":"InternalMessage[]"}},{"name":"normalized","type":{"text":"Exclude<InternalMessage, { role: 'reasoning' }>[]"}},{"name":"currentSummaries","type":{"text":"Record<string, string>"}},{"name":"messageRunIds","optional":true,"type":{"text":"Record<string, string>"}},{"name":"runState","optional":true,"type":{"text":"RunState"}}]},{"kind":"method","name":"fullRebuild","privacy":"private","return":{"type":{"text":"UiMessage[]"}},"parameters":[{"name":"messages","type":{"text":"InternalMessage[]"}},{"name":"normalized","type":{"text":"Exclude<InternalMessage, { role: 'reasoning' }>[]"}},{"name":"currentSummaries","type":{"text":"Record<string, string>"}},{"name":"messageRunIds","optional":true,"type":{"text":"Record<string, string>"}},{"name":"runState","optional":true,"type":{"text":"RunState"}}]}]},{"kind":"function","name":"createMemoizedMapper","description":"Factory function for backward compatibility.\nReturns a callable mapper function backed by MemoizedMapper."}],"exports":[{"kind":"js","name":"MemoizedMapper","declaration":{"name":"MemoizedMapper","module":"core/adapters/memoized-mapper.js"}},{"kind":"js","name":"createMemoizedMapper","declaration":{"name":"createMemoizedMapper","module":"core/adapters/memoized-mapper.js"}}]},{"kind":"javascript-module","path":"core/adapters/message-mapper.reasoning.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"core/adapters/message-mapper.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"core/adapters/message-mapper.js","declarations":[{"kind":"function","name":"indexToolResponses","return":{"type":{"text":"Map<string, InternalToolMessage[]>"}},"parameters":[{"name":"messages","type":{"text":"InternalMessage[]"}}],"description":"Index tool response messages by their toolCallId for efficient lookup.\r\nCollects ALL tool responses per tool call ID (approval + execution may share an ID)."},{"kind":"function","name":"mapToUiMessages","return":{"type":{"text":""}},"parameters":[{"name":"messages","type":{"text":"InternalMessage[]"},"description":"InternalMessage[] (converted from AG-UI at the AgentService boundary)"},{"name":"toolCallSummaries","optional":true,"type":{"text":"Record<string, string>"},"description":"Store-tracked summaries (populated during streaming\r\nvia onToolCallArgsEvent) used as fallback when args aren't fully parseable yet."},{"name":"messageRunIds","optional":true,"type":{"text":"Record<string, string>"},"description":"Map of messageId/toolCallId → runId for run grouping."},{"name":"runState","optional":true,"type":{"text":"RunState"},"description":"Current run state, used to set `isStreaming` on the last assistant message."}],"description":"Convert internal messages to UI messages for rendering.\r\nThis is the primary entry point for message transformation.\r\n\r\nEach InternalMessage maps to at most one UiMessage. Tool calls are embedded\r\ninline on UiAssistantMessage.toolCalls rather than being separate entries."},{"kind":"function","name":"convertToUiMessages","return":{"type":{"text":"UiMessage[]"}},"parameters":[{"name":"msg","type":{"text":"InternalMessage"}},{"name":"toolResponsesById","type":{"text":"Map<string, InternalToolMessage[]>"}},{"name":"toolCallSummaries","optional":true,"type":{"text":"Record<string, string>"}},{"name":"messageRunIds","optional":true,"type":{"text":"Record<string, string>"}}],"description":"Convert a single internal message to zero or more UI messages.\r\n\r\nEach InternalMessage maps to at most one UiMessage.\r\nTool calls are embedded inline on the assistant message."},{"kind":"function","name":"enrichAssistantMessages","return":{"type":{"text":"void"}},"parameters":[{"name":"result","type":{"text":"UiMessage[]"}},{"name":"runState","optional":true,"type":{"text":"RunState"}}],"description":"Enrich assistant messages with pre-computed citations and streaming status.\r\nRuns a single O(n) pass over the result array after initial mapping.\r\n\r\nCitations are now collected from the assistant message's own tool calls\r\nplus any tool calls from preceding assistant messages in the same turn."}],"exports":[{"kind":"js","name":"UiUserMessage","declaration":{"name":"UiUserMessage","module":"./message-types"}},{"kind":"js","name":"UiAssistantMessage","declaration":{"name":"UiAssistantMessage","module":"./message-types"}},{"kind":"js","name":"UiToolCall","declaration":{"name":"UiToolCall","module":"./message-types"}},{"kind":"js","name":"UiAssistantPart","declaration":{"name":"UiAssistantPart","module":"./message-types"}},{"kind":"js","name":"UiAssistantReasoningPart","declaration":{"name":"UiAssistantReasoningPart","module":"./message-types"}},{"kind":"js","name":"UiAssistantTextPart","declaration":{"name":"UiAssistantTextPart","module":"./message-types"}},{"kind":"js","name":"UiAssistantToolCallPart","declaration":{"name":"UiAssistantToolCallPart","module":"./message-types"}},{"kind":"js","name":"UiAssistantSuggestedQuestionsPart","declaration":{"name":"UiAssistantSuggestedQuestionsPart","module":"./message-types"}},{"kind":"js","name":"UiOperatorMessage","declaration":{"name":"UiOperatorMessage","module":"./message-types"}},{"kind":"js","name":"UiActivityMessage","declaration":{"name":"UiActivityMessage","module":"./message-types"}},{"kind":"js","name":"UiMessage","declaration":{"name":"UiMessage","module":"./message-types"}},{"kind":"js","name":"isUiUserMessage","declaration":{"name":"isUiUserMessage","module":"./message-types"}},{"kind":"js","name":"isUiAssistantMessage","declaration":{"name":"isUiAssistantMessage","module":"./message-types"}},{"kind":"js","name":"isUiOperatorMessage","declaration":{"name":"isUiOperatorMessage","module":"./message-types"}},{"kind":"js","name":"isUiActivityMessage","declaration":{"name":"isUiActivityMessage","module":"./message-types"}},{"kind":"js","name":"getToolCallParts","declaration":{"name":"getToolCallParts","module":"./message-types"}},{"kind":"js","name":"getTextPart","declaration":{"name":"getTextPart","module":"./message-types"}},{"kind":"js","name":"getReasoningPart","declaration":{"name":"getReasoningPart","module":"./message-types"}},{"kind":"js","name":"indexToolResponses","declaration":{"name":"indexToolResponses","module":"core/adapters/message-mapper.js"}},{"kind":"js","name":"mapToUiMessages","declaration":{"name":"mapToUiMessages","module":"core/adapters/message-mapper.js"}},{"kind":"js","name":"convertToUiMessages","declaration":{"name":"convertToUiMessages","module":"core/adapters/message-mapper.js"}},{"kind":"js","name":"enrichAssistantMessages","declaration":{"name":"enrichAssistantMessages","module":"core/adapters/message-mapper.js"}}]},{"kind":"javascript-module","path":"core/adapters/message-normalizer.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"core/adapters/message-normalizer.js","declarations":[{"kind":"function","name":"normalizeMessages","return":{"type":{"text":"NormalizedMessage[]"}},"parameters":[{"name":"messages","type":{"text":"InternalMessage[]"}},{"name":"runState","type":{"text":"RunState"}}],"description":"Normalize an InternalMessage transcript.\n\n1. Merge each reasoning message into the next assistant message's contentBlocks\n as a `thinking` block (prepended before existing blocks).\n2. If reasoning is trailing (no following assistant) and the run is active,\n create an assembling assistant turn.\n3. Drop orphaned tool responses whose toolCallId doesn't match any known tool call.\n4. Drop reasoning that can't be merged (e.g. followed by a non-assistant message when idle)."}],"exports":[{"kind":"js","name":"normalizeMessages","declaration":{"name":"normalizeMessages","module":"core/adapters/message-normalizer.js"}}]},{"kind":"javascript-module","path":"core/adapters/message-types.js","declarations":[{"kind":"function","name":"isUiUserMessage","return":{"type":{"text":"msg is UiUserMessage"}},"parameters":[{"name":"msg","type":{"text":"UiMessage"}}]},{"kind":"function","name":"isUiAssistantMessage","return":{"type":{"text":"msg is UiAssistantMessage"}},"parameters":[{"name":"msg","type":{"text":"UiMessage"}}]},{"kind":"function","name":"isUiOperatorMessage","return":{"type":{"text":"msg is UiOperatorMessage"}},"parameters":[{"name":"msg","type":{"text":"UiMessage"}}]},{"kind":"function","name":"isUiActivityMessage","return":{"type":{"text":"msg is UiActivityMessage"}},"parameters":[{"name":"msg","type":{"text":"UiMessage"}}]},{"kind":"function","name":"getToolCallParts","return":{"type":{"text":"UiAssistantToolCallPart[]"}},"parameters":[{"name":"msg","type":{"text":"UiAssistantMessage"}}],"description":"Extract all tool-call parts from an assistant message."},{"kind":"function","name":"getTextPart","return":{"type":{"text":"UiAssistantTextPart | null"}},"parameters":[{"name":"msg","type":{"text":"UiAssistantMessage"}}],"description":"Extract the first text part from an assistant message, or null."},{"kind":"function","name":"getReasoningPart","return":{"type":{"text":"UiAssistantReasoningPart | null"}},"parameters":[{"name":"msg","type":{"text":"UiAssistantMessage"}}],"description":"Extract the first reasoning part from an assistant message, or null."}],"exports":[{"kind":"js","name":"isUiUserMessage","declaration":{"name":"isUiUserMessage","module":"core/adapters/message-types.js"}},{"kind":"js","name":"isUiAssistantMessage","declaration":{"name":"isUiAssistantMessage","module":"core/adapters/message-types.js"}},{"kind":"js","name":"isUiOperatorMessage","declaration":{"name":"isUiOperatorMessage","module":"core/adapters/message-types.js"}},{"kind":"js","name":"isUiActivityMessage","declaration":{"name":"isUiActivityMessage","module":"core/adapters/message-types.js"}},{"kind":"js","name":"getToolCallParts","declaration":{"name":"getToolCallParts","module":"core/adapters/message-types.js"}},{"kind":"js","name":"getTextPart","declaration":{"name":"getTextPart","module":"core/adapters/message-types.js"}},{"kind":"js","name":"getReasoningPart","declaration":{"name":"getReasoningPart","module":"core/adapters/message-types.js"}}]},{"kind":"javascript-module","path":"core/adapters/reasoning-utils.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"core/adapters/reasoning-utils.js","declarations":[{"kind":"function","name":"extractLatestSectionTitle","return":{"type":{"text":"string | null"}},"parameters":[{"name":"content","type":{"text":"string"}}],"description":"Extract the latest section title from reasoning content.\n\nReasoning text often contains sections formatted as:\n **[title]**\\n\\n[content]\n\nThis function finds all such titles and returns the last one,\nor null if no section titles are found."},{"kind":"function","name":"parseReasoningSteps","return":{"type":{"text":"ReasoningStep[]"}},"parameters":[{"name":"content","type":{"text":"string"}}],"description":"Parse reasoning content into discrete steps.\n\nSplits on the `**Title**\\n\\n` pattern to produce an array of steps.\nIf no section headers are found, returns a single step with the\nfull content and a generic title."}],"exports":[{"kind":"js","name":"extractLatestSectionTitle","declaration":{"name":"extractLatestSectionTitle","module":"core/adapters/reasoning-utils.js"}},{"kind":"js","name":"parseReasoningSteps","declaration":{"name":"parseReasoningSteps","module":"core/adapters/reasoning-utils.js"}}]},{"kind":"javascript-module","path":"core/adapters/tool-utils.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"core/adapters/tool-utils.js","declarations":[{"kind":"function","name":"sanitizeUrl","return":{"type":{"text":"string"}},"parameters":[{"name":"url","type":{"text":"unknown"}}],"description":"Allow only http(s) URLs for href bindings. Returns `'#'` for missing input,\nunparseable URLs, or non-http(s) protocols (`javascript:`, `data:`, `vbscript:`).\n\nLit auto-escapes attribute values but does not strip URL protocols, and\ncitation/search URLs come from LLM-generated tool output that ultimately\nlands in `<a href>` outside the DOMPurify pipeline."},{"kind":"function","name":"safeParseJson","return":{"type":{"text":"T | null"}},"parameters":[{"name":"input","type":{"text":"unknown"}},{"name":"schema","optional":true,"type":{"text":"ZodType<T>"}}],"description":"Safely parse a value that may be a JSON string or already-parsed object.\nReturns null for falsy input or unparseable strings.\n\nWhen a Zod schema is provided, the parsed value is validated against it.\nReturns null if validation fails."},{"kind":"function","name":"safeParseArguments","return":{"type":{"text":"Record<string, unknown>"}},"parameters":[{"name":"args","type":{"text":"string | object | undefined"}}],"description":"Safely parse tool call arguments from string or object."},{"kind":"function","name":"unwrapApproval","return":{"type":{"text":"UnwrappedApproval | null"}},"parameters":[{"name":"toolCall","type":{"text":"InternalToolCall"}}],"description":"Unwrap a requestApproval tool call to extract the inner function details.\nReturns null if the tool call is not a requestApproval."},{"kind":"function","name":"parseSummaryFromArgs","return":{"type":{"text":"string | null"}},"parameters":[{"name":"toolCall","type":{"text":"InternalToolCall"}}],"description":"Extract a display summary from tool call arguments.\nHandles both direct summary fields and nested requestApproval format."},{"kind":"function","name":"isApprovalResponse","return":{"type":{"text":"boolean"}},"parameters":[{"name":"toolResponse","optional":true,"type":{"text":"InternalToolMessage"}}],"description":"Check if a tool response is an approval response (has `approved` field)."},{"kind":"function","name":"isDeclined","return":{"type":{"text":"boolean"}},"parameters":[{"name":"toolResponse","optional":true,"type":{"text":"InternalToolMessage"}}],"description":"Check if a tool response indicates a declined approval."},{"kind":"function","name":"isErrorResponse","return":{"type":{"text":"boolean"}},"parameters":[{"name":"toolResponse","optional":true,"type":{"text":"InternalToolMessage"}}],"description":"Check if a tool response indicates an error."},{"kind":"function","name":"parseSearchCitations","return":{"type":{"text":"SearchCitation[]"}},"parameters":[{"name":"toolResponse","optional":true,"type":{"text":"InternalToolMessage"}}],"description":"Parse search citations from a tool response.\nThe response is a flat array of search result objects.\nEach entry represents a specific document chunk — no deduplication is performed\nsince different chunks from the same URL have distinct referenceIds used for\ninline [web:N] citation markers."},{"kind":"function","name":"parseResponseContent","return":{"type":{"text":"unknown"}},"parameters":[{"name":"toolResponse","optional":true,"type":{"text":"InternalToolMessage"}}],"description":"Parse tool response content into a structured value."},{"kind":"function","name":"resolveToolStatus","return":{"type":{"text":"ToolStatus"}},"parameters":[{"name":"message","type":{"text":"{ requiresApproval: boolean; approved: boolean | null; executionResponse?: unknown }"}},{"name":"_runIdle","type":{"text":"boolean"}}],"description":"Resolve the display status of a tool call.\nUses the explicit approval fields added in the approval model fix."},{"kind":"function","name":"resolveSourceLabel","return":{"type":{"text":"string"}},"parameters":[{"name":"sourceUrl","type":{"text":"string"}}],"description":"Resolve a human-readable source label based on URL hostname."},{"kind":"function","name":"resolveSourceIcon","return":{"type":{"text":"string"}},"parameters":[{"name":"sourceUrl","type":{"text":"string"}}],"description":"Resolve source icon name based on URL hostname."}],"exports":[{"kind":"js","name":"sanitizeUrl","declaration":{"name":"sanitizeUrl","module":"core/adapters/tool-utils.js"}},{"kind":"js","name":"safeParseJson","declaration":{"name":"safeParseJson","module":"core/adapters/tool-utils.js"}},{"kind":"js","name":"safeParseArguments","declaration":{"name":"safeParseArguments","module":"core/adapters/tool-utils.js"}},{"kind":"js","name":"unwrapApproval","declaration":{"name":"unwrapApproval","module":"core/adapters/tool-utils.js"}},{"kind":"js","name":"parseSummaryFromArgs","declaration":{"name":"parseSummaryFromArgs","module":"core/adapters/tool-utils.js"}},{"kind":"js","name":"isApprovalResponse","declaration":{"name":"isApprovalResponse","module":"core/adapters/tool-utils.js"}},{"kind":"js","name":"isDeclined","declaration":{"name":"isDeclined","module":"core/adapters/tool-utils.js"}},{"kind":"js","name":"isErrorResponse","declaration":{"name":"isErrorResponse","module":"core/adapters/tool-utils.js"}},{"kind":"js","name":"parseSearchCitations","declaration":{"name":"parseSearchCitations","module":"core/adapters/tool-utils.js"}},{"kind":"js","name":"parseResponseContent","declaration":{"name":"parseResponseContent","module":"core/adapters/tool-utils.js"}},{"kind":"js","name":"resolveToolStatus","declaration":{"name":"resolveToolStatus","module":"core/adapters/tool-utils.js"}},{"kind":"js","name":"resolveSourceLabel","declaration":{"name":"resolveSourceLabel","module":"core/adapters/tool-utils.js"}},{"kind":"js","name":"resolveSourceIcon","declaration":{"name":"resolveSourceIcon","module":"core/adapters/tool-utils.js"}}]},{"kind":"javascript-module","path":"core/canvas/canvas-state-container.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"core/canvas/canvas-state-container.js","declarations":[{"kind":"class","description":"","name":"CanvasStateContainer","superclass":{"name":"StateContainer","package":"@/core/shared/state-container"},"members":[{"kind":"field","name":"_state","type":{"text":"T"},"privacy":"private","default":"{ ...initialState }","inheritedFrom":{"name":"StateContainer","module":"core/shared/state-container.js"}},{"kind":"field","name":"listeners","privacy":"private","default":"new Set<StateListener<T>>()","inheritedFrom":{"name":"StateContainer","module":"core/shared/state-container.js"}},{"kind":"field","name":"pendingNotify","type":{"text":"boolean"},"privacy":"private","default":"false","inheritedFrom":{"name":"StateContainer","module":"core/shared/state-container.js"}},{"kind":"field","name":"state","type":{"text":"T"},"readonly":true,"inheritedFrom":{"name":"StateContainer","module":"core/shared/state-container.js"}},{"kind":"method","name":"subscribe","return":{"type":{"text":"() => void"}},"parameters":[{"name":"listener","type":{"text":"StateListener<T>"}}],"inheritedFrom":{"name":"StateContainer","module":"core/shared/state-container.js"}},{"kind":"method","name":"setState","return":{"type":{"text":"void"}},"parameters":[{"name":"partial","type":{"text":"Partial<T>"}}],"inheritedFrom":{"name":"StateContainer","module":"core/shared/state-container.js"}},{"kind":"method","name":"scheduleNotify","privacy":"private","return":{"type":{"text":"void"}},"inheritedFrom":{"name":"StateContainer","module":"core/shared/state-container.js"}}]}],"exports":[{"kind":"js","name":"CanvasStateContainer","declaration":{"name":"CanvasStateContainer","module":"core/canvas/canvas-state-container.js"}}]},{"kind":"javascript-module","path":"core/canvas/canvas-store-controller.js","declarations":[{"kind":"class","description":"","name":"CanvasStoreController","superclass":{"name":"ContextStoreController","package":"@/core/shared/context-store-controller"},"members":[{"kind":"field","name":"_value","type":{"text":"T"},"privacy":"private","inheritedFrom":{"name":"ContextStoreController","module":"core/shared/context-store-controller.js"}},{"kind":"field","name":"_store","type":{"text":"TStore | null"},"privacy":"private","default":"null","inheritedFrom":{"name":"ContextStoreController","module":"core/shared/context-store-controller.js"}},{"kind":"field","name":"unsubscribeStore","type":{"text":"() => void | undefined"},"privacy":"private","inheritedFrom":{"name":"ContextStoreController","module":"core/shared/context-store-controller.js"}},{"kind":"field","name":"value","type":{"text":"T"},"description":"The current selected state slice.","readonly":true,"inheritedFrom":{"name":"ContextStoreController","module":"core/shared/context-store-controller.js"}},{"kind":"field","name":"store","type":{"text":"TStore"},"description":"The underlying store instance for dispatching actions.","readonly":true,"inheritedFrom":{"name":"ContextStoreController","module":"core/shared/context-store-controller.js"}},{"kind":"method","name":"attach","privacy":"private","return":{"type":{"text":"void"}},"parameters":[{"name":"store","type":{"text":"TStore"}}],"inheritedFrom":{"name":"ContextStoreController","module":"core/shared/context-store-controller.js"}},{"kind":"method","name":"detach","privacy":"private","return":{"type":{"text":"void"}},"inheritedFrom":{"name":"ContextStoreController","module":"core/shared/context-store-controller.js"}},{"kind":"method","name":"hostDisconnected","return":{"type":{"text":"void"}},"inheritedFrom":{"name":"ContextStoreController","module":"core/shared/context-store-controller.js"}}]}],"exports":[{"kind":"js","name":"CanvasStoreController","declaration":{"name":"CanvasStoreController","module":"core/canvas/canvas-store-controller.js"}}]},{"kind":"javascript-module","path":"core/canvas/canvas-store.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"core/canvas/canvas-store.js","declarations":[{"kind":"class","description":"","name":"CanvasStore","members":[{"kind":"field","name":"container","type":{"text":"CanvasStateContainer"},"readonly":true,"default":"new CanvasStateContainer(() => this.host.requestUpdate())"},{"kind":"field","name":"getConversationId","type":{"text":"() => string | null"},"privacy":"private","readonly":true},{"kind":"field","name":"exportRefreshTimer","type":{"text":"ReturnType<typeof setTimeout> | undefined"},"privacy":"private"},{"kind":"field","name":"renderResolve","type":{"text":"((result: CanvasRenderResult) => void) | null"},"privacy":"private","default":"null"},{"kind":"field","name":"pendingRenderResult","type":{"text":"CanvasRenderResult | null"},"privacy":"private","default":"null"},{"kind":"field","name":"resetEpoch","type":{"text":"number"},"privacy":"private","default":"0","description":"Incremented on every resetCanvas. Async fetches capture this at entry and\ndrop their response if the epoch has changed — preventing a stale REST\nreply from re-populating a conversation that's been cleared."},{"kind":"method","name":"getRendererUrl","return":{"type":{"text":"string"}},"description":"URL of the canvas renderer app served from the API."},{"kind":"method","name":"getChartsScriptUrl","return":{"type":{"text":"string"}},"description":"URL of the PDF charts bundle served from the API."},{"kind":"method","name":"ensureOpen","return":{"type":{"text":"void"}},"description":"Ensure the canvas is open, expanded, and on the preview tab.\nThe preview tab must be active for the render result to be reported."},{"kind":"method","name":"getCanvasRenderStatus","return":{"type":{"text":"Promise<CanvasRenderResult>"}},"parameters":[{"name":"timeout","default":"RENDER_TIMEOUT_MS"}],"description":"Ensures the canvas is open, then waits for the preview to report a render result.\nResolves immediately if a result is already pending (race-condition safe)."},{"kind":"method","name":"reportRenderResult","return":{"type":{"text":"void"}},"parameters":[{"name":"result","type":{"text":"CanvasRenderResult"}}],"description":"Called by the iframe-preview component (via workspace) when the iframe\nreports a render success or error."},{"kind":"method","name":"hostConnected","return":{"type":{"text":"void"}}},{"kind":"method","name":"hostDisconnected","return":{"type":{"text":"void"}}},{"kind":"method","name":"getState","return":{"type":{"text":"CanvasState"}}},{"kind":"method","name":"subscribe","return":{"type":{"text":"() => void"}},"parameters":[{"name":"listener","type":{"text":"CanvasStoreListener"}}]},{"kind":"method","name":"handleCanvasEvent","return":{"type":{"text":"void"}},"parameters":[{"name":"event","type":{"text":"unknown"}}]},{"kind":"method","name":"handleCanvasActivity","return":{"type":{"text":"void"}},"parameters":[{"name":"event","type":{"text":"{ activityType?: string; content?: unknown }"}}]},{"kind":"method","name":"openCanvas","return":{"type":{"text":"void"}},"parameters":[{"name":"canvasId","type":{"text":"string"}}]},{"kind":"method","name":"toggleExpanded","return":{"type":{"text":"void"}}},{"kind":"method","name":"setExpanded","return":{"type":{"text":"void"}},"parameters":[{"name":"expanded","type":{"text":"boolean"}}]},{"kind":"method","name":"closeCanvas","return":{"type":{"text":"void"}}},{"kind":"method","name":"reopenCanvas","return":{"type":{"text":"void"}}},{"kind":"method","name":"resetCanvas","return":{"type":{"text":"void"}}},{"kind":"method","name":"selectRevision","return":{"type":{"text":"void"}},"parameters":[{"name":"index","type":{"text":"number"}}]},{"kind":"method","name":"setActiveTab","return":{"type":{"text":"void"}},"parameters":[{"name":"tab","type":{"text":"'code' | 'preview'"}}]},{"kind":"method","name":"fetchCanvasState","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"conversationId","type":{"text":"string"}}]},{"kind":"method","name":"restoreRevision","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"canvasId","type":{"text":"string"}},{"name":"version","type":{"text":"number"}}]},{"kind":"method","name":"fetchCanvasContent","privacy":"private","return":{"type":{"text":"Promise<void>"}}},{"kind":"method","name":"scheduleExportRefresh","privacy":"private","return":{"type":{"text":"void"}},"description":"Debounced export refresh — coalesces multiple canvas events\nduring a single agent turn into one fetch after things settle."},{"kind":"method","name":"fetchExports","return":{"type":{"text":"Promise<void>"}}},{"kind":"method","name":"downloadExport","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"exportId","type":{"text":"string"}}]},{"kind":"method","name":"fetchRevisions","privacy":"private","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"_canvasId","type":{"text":"string"}}]}]},{"kind":"variable","name":"canvasStoreContext"}],"exports":[{"kind":"js","name":"CanvasStore","declaration":{"name":"CanvasStore","module":"core/canvas/canvas-store.js"}},{"kind":"js","name":"canvasStoreContext","declaration":{"name":"canvasStoreContext","module":"core/canvas/canvas-store.js"}}]},{"kind":"javascript-module","path":"core/canvas/canvas-types.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"core/canvas/canvas-types.js","declarations":[{"kind":"variable","name":"REPORT_SOURCE_KINDS","default":"new Set(['report-source-html'])","description":"Canvas kinds that represent report sources (support PDF export)."},{"kind":"function","name":"isReportSourceKind","return":{"type":{"text":"boolean"}},"parameters":[{"name":"kind","type":{"text":"string"}}]},{"kind":"variable","name":"initialCanvasState","type":{"text":"CanvasState"},"default":"{ active: false, expanded: false, canvasId: null, title: '', kind: 'react-app', status: 'idle', content: '', language: 'tsx', revision: 0, revisions: [], activeRevisionIndex: -1, activeTab: 'preview', error: null, exports: [], exportInProgress: false, }"}],"exports":[{"kind":"js","name":"REPORT_SOURCE_KINDS","declaration":{"name":"REPORT_SOURCE_KINDS","module":"core/canvas/canvas-types.js"}},{"kind":"js","name":"isReportSourceKind","declaration":{"name":"isReportSourceKind","module":"core/canvas/canvas-types.js"}},{"kind":"js","name":"initialCanvasState","declaration":{"name":"initialCanvasState","module":"core/canvas/canvas-types.js"}}]},{"kind":"javascript-module","path":"core/canvas/index.js","declarations":[],"exports":[{"kind":"js","name":"CanvasStore","declaration":{"name":"CanvasStore","module":"./canvas-store"}},{"kind":"js","name":"canvasStoreContext","declaration":{"name":"canvasStoreContext","module":"./canvas-store"}},{"kind":"js","name":"CanvasStoreDeps","declaration":{"name":"CanvasStoreDeps","module":"./canvas-store"}},{"kind":"js","name":"CanvasStoreController","declaration":{"name":"CanvasStoreController","module":"./canvas-store-controller"}},{"kind":"js","name":"CanvasState","declaration":{"name":"CanvasState","module":"./canvas-types"}},{"kind":"js","name":"CanvasRevision","declaration":{"name":"CanvasRevision","module":"./canvas-types"}},{"kind":"js","name":"CanvasExport","declaration":{"name":"CanvasExport","module":"./canvas-types"}},{"kind":"js","name":"isReportSourceKind","declaration":{"name":"isReportSourceKind","module":"./canvas-types"}},{"kind":"js","name":"REPORT_SOURCE_KINDS","declaration":{"name":"REPORT_SOURCE_KINDS","module":"./canvas-types"}}]},{"kind":"javascript-module","path":"core/constants.js","declarations":[{"kind":"variable","name":"PRIVACY_STATEMENT_URL","type":{"text":"string"},"default":"'https://www.vismasoftware.no/privacy-statement'","description":"Visma Software privacy statement URL."},{"kind":"variable","name":"REQUEST_APPROVAL_TOOL_NAME","type":{"text":"string"},"default":"'requestApproval'","description":"Tool name used by the backend to request user approval for a tool call."},{"kind":"variable","name":"HUMAN_SUPPORT_TOOL_NAME","type":{"text":"string"},"default":"'request_human_support'","description":"Tool name for the human support handoff function."},{"kind":"variable","name":"TOOL_CALL_REJECTED_MESSAGE","type":{"text":"string"},"default":"'Tool call invocation rejected.'","description":"Tool response text when the backend rejects a tool call invocation."},{"kind":"variable","name":"CANVAS_ACTIVITY","type":{"text":"{\n CREATED: 'CANVAS_CREATED',\n UPDATED: 'CANVAS_UPDATED',\n EXPORT_COMPLETED: 'EXPORT_COMPLETED',\n EXPORT_FAILED: 'EXPORT_FAILED',\n}"},"default":"{ CREATED: 'CANVAS_CREATED', UPDATED: 'CANVAS_UPDATED', EXPORT_COMPLETED: 'EXPORT_COMPLETED', EXPORT_FAILED: 'EXPORT_FAILED', }","description":"Canvas activity types sent via AG-UI activity snapshot events."}],"exports":[{"kind":"js","name":"PRIVACY_STATEMENT_URL","declaration":{"name":"PRIVACY_STATEMENT_URL","module":"core/constants.js"}},{"kind":"js","name":"REQUEST_APPROVAL_TOOL_NAME","declaration":{"name":"REQUEST_APPROVAL_TOOL_NAME","module":"core/constants.js"}},{"kind":"js","name":"HUMAN_SUPPORT_TOOL_NAME","declaration":{"name":"HUMAN_SUPPORT_TOOL_NAME","module":"core/constants.js"}},{"kind":"js","name":"TOOL_CALL_REJECTED_MESSAGE","declaration":{"name":"TOOL_CALL_REJECTED_MESSAGE","module":"core/constants.js"}},{"kind":"js","name":"CANVAS_ACTIVITY","declaration":{"name":"CANVAS_ACTIVITY","module":"core/constants.js"}}]},{"kind":"javascript-module","path":"core/errors.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"core/errors.js","declarations":[{"kind":"class","description":"","name":"SignalRError","members":[{"kind":"field","name":"name","type":{"text":"string"},"default":"'SignalRError'"}],"superclass":{"name":"Error","module":"src/core/errors.ts"}},{"kind":"class","description":"","name":"StreamError","members":[{"kind":"field","name":"name","type":{"text":"string"},"default":"'StreamError'"}],"superclass":{"name":"Error","module":"src/core/errors.ts"}},{"kind":"function","name":"responseTokenLimitError","return":{"type":{"text":"AppError"}},"parameters":[{"name":"cause","optional":true,"type":{"text":"unknown"}}]},{"kind":"function","name":"toAppError","return":{"type":{"text":"AppError"}},"parameters":[{"name":"err","type":{"text":"unknown"}}]},{"kind":"function","name":"resolveErrorMessage","return":{"type":{"text":"string"}},"parameters":[{"name":"error","type":{"text":"AppError"}}]},{"kind":"function","name":"ok","return":{"type":{"text":"Result<T, never>"}},"parameters":[{"name":"value","type":{"text":"T"}}]},{"kind":"function","name":"err","return":{"type":{"text":"Result<never, E>"}},"parameters":[{"name":"error","type":{"text":"E"}}]}],"exports":[{"kind":"js","name":"SignalRError","declaration":{"name":"SignalRError","module":"core/errors.js"}},{"kind":"js","name":"StreamError","declaration":{"name":"StreamError","module":"core/errors.js"}},{"kind":"js","name":"responseTokenLimitError","declaration":{"name":"responseTokenLimitError","module":"core/errors.js"}},{"kind":"js","name":"toAppError","declaration":{"name":"toAppError","module":"core/errors.js"}},{"kind":"js","name":"resolveErrorMessage","declaration":{"name":"resolveErrorMessage","module":"core/errors.js"}},{"kind":"js","name":"ok","declaration":{"name":"ok","module":"core/errors.js"}},{"kind":"js","name":"err","declaration":{"name":"err","module":"core/errors.js"}}]},{"kind":"javascript-module","path":"core/messages.js","declarations":[{"kind":"function","name":"createOperatorMessage","return":{"type":{"text":"Extract<InternalMessage, { role: 'operator' }>"}},"parameters":[{"name":"id","type":{"text":"string"}},{"name":"content","type":{"text":"string"}},{"name":"operator","type":{"text":"Operator"}},{"name":"isTyping","default":"false","type":{"text":"boolean"}}],"description":"Create an operator InternalMessage."},{"kind":"function","name":"isAssistantMessage","return":{"type":{"text":"msg is Extract<InternalMessage, { role: 'assistant' }>"}},"parameters":[{"name":"msg","type":{"text":"InternalMessage"}}],"description":"Type guards for narrowing InternalMessage."},{"kind":"function","name":"isToolMessage","return":{"type":{"text":"msg is InternalToolMessage"}},"parameters":[{"name":"msg","type":{"text":"InternalMessage"}}]},{"kind":"function","name":"isOperatorMessage","return":{"type":{"text":"msg is Extract<InternalMessage, { role: 'operator' }>"}},"parameters":[{"name":"msg","type":{"text":"InternalMessage"}}]},{"kind":"function","name":"isActivityMessage","return":{"type":{"text":"msg is Extract<InternalMessage, { role: 'activity' }>"}},"parameters":[{"name":"msg","type":{"text":"InternalMessage"}}]},{"kind":"function","name":"isReasoningMessage","return":{"type":{"text":"msg is Extract<InternalMessage, { role: 'reasoning' }>"}},"parameters":[{"name":"msg","type":{"text":"InternalMessage"}}]},{"kind":"function","name":"getAssistantText","return":{"type":{"text":"string"}},"parameters":[{"name":"msg","type":{"text":"Extract<InternalMessage, { role: 'assistant' }>"}}],"description":"Join all text blocks from an assistant message into a single string.\nUsed where downstream code needs a plain string (e.g. suggested question extraction)."}],"exports":[{"kind":"js","name":"createOperatorMessage","declaration":{"name":"createOperatorMessage","module":"core/messages.js"}},{"kind":"js","name":"isAssistantMessage","declaration":{"name":"isAssistantMessage","module":"core/messages.js"}},{"kind":"js","name":"isToolMessage","declaration":{"name":"isToolMessage","module":"core/messages.js"}},{"kind":"js","name":"isOperatorMessage","declaration":{"name":"isOperatorMessage","module":"core/messages.js"}},{"kind":"js","name":"isActivityMessage","declaration":{"name":"isActivityMessage","module":"core/messages.js"}},{"kind":"js","name":"isReasoningMessage","declaration":{"name":"isReasoningMessage","module":"core/messages.js"}},{"kind":"js","name":"getAssistantText","declaration":{"name":"getAssistantText","module":"core/messages.js"}}]},{"kind":"javascript-module","path":"core/shared/context-store-controller.js","declarations":[{"kind":"class","description":"","name":"ContextStoreController","members":[{"kind":"field","name":"_value","type":{"text":"T"},"privacy":"private"},{"kind":"field","name":"_store","type":{"text":"TStore | null"},"privacy":"private","default":"null"},{"kind":"field","name":"unsubscribeStore","type":{"text":"() => void | undefined"},"privacy":"private"},{"kind":"field","name":"value","type":{"text":"T"},"description":"The current selected state slice.","readonly":true},{"kind":"field","name":"store","type":{"text":"TStore"},"description":"The underlying store instance for dispatching actions.","readonly":true},{"kind":"method","name":"attach","privacy":"private","return":{"type":{"text":"void"}},"parameters":[{"name":"store","type":{"text":"TStore"}}]},{"kind":"method","name":"detach","privacy":"private","return":{"type":{"text":"void"}}},{"kind":"method","name":"hostDisconnected","return":{"type":{"text":"void"}}}]}],"exports":[{"kind":"js","name":"ContextStoreController","declaration":{"name":"ContextStoreController","module":"core/shared/context-store-controller.js"}}]},{"kind":"javascript-module","path":"core/shared/state-container.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"core/shared/state-container.js","declarations":[{"kind":"class","description":"","name":"StateContainer","members":[{"kind":"field","name":"_state","type":{"text":"T"},"privacy":"private","default":"{ ...initialState }"},{"kind":"field","name":"listeners","privacy":"private","default":"new Set<StateListener<T>>()"},{"kind":"field","name":"pendingNotify","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"field","name":"state","type":{"text":"T"},"readonly":true},{"kind":"method","name":"subscribe","return":{"type":{"text":"() => void"}},"parameters":[{"name":"listener","type":{"text":"StateListener<T>"}}]},{"kind":"method","name":"setState","return":{"type":{"text":"void"}},"parameters":[{"name":"partial","type":{"text":"Partial<T>"}}]},{"kind":"method","name":"scheduleNotify","privacy":"private","return":{"type":{"text":"void"}}}]}],"exports":[{"kind":"js","name":"StateContainer","declaration":{"name":"StateContainer","module":"core/shared/state-container.js"}}]},{"kind":"javascript-module","path":"core/store/agent-subscriber.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"core/store/agent-subscriber.js","declarations":[{"kind":"function","name":"createAgentSubscriber","return":{"type":{"text":"AgentSubscriber"}},"parameters":[{"name":"deps","type":{"text":"AgentSubscriberDeps"}}],"description":"Create an AgentSubscriber wired to the store via the deps interface.\nCleanup is scoped to the subscriber's run so overlapping runs do not\nclobber each other's state."}],"exports":[{"kind":"js","name":"createAgentSubscriber","declaration":{"name":"createAgentSubscriber","module":"core/store/agent-subscriber.js"}}]},{"kind":"javascript-module","path":"core/store/auth-coordinator.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"core/store/auth-coordinator.js","declarations":[{"kind":"class","description":"","name":"AuthCoordinator","members":[{"kind":"field","name":"currentIdentifier","type":{"text":"string | null"},"privacy":"private","default":"null"},{"kind":"field","name":"currentProfileId","type":{"text":"string | null"},"privacy":"private","default":"null"},{"kind":"field","name":"authService","type":{"text":"AuthService | null"},"privacy":"private","default":"null"},{"kind":"field","name":"authGeneration","type":{"text":"number"},"privacy":"private","default":"0"},{"kind":"method","name":"getAuthService","return":{"type":{"text":"AuthService | null"}}},{"kind":"method","name":"getVisitorUserId","return":{"type":{"text":"string | null"}}},{"kind":"method","name":"setAuth","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"strategyType","type":{"text":"StrategyType"}},{"name":"profileId","type":{"text":"string"}},{"name":"tokenProvider","optional":true,"type":{"text":"TokenFetcher"}},{"name":"baseUrl","optional":true,"type":{"text":"string"}},{"name":"conversationIdOverride","optional":true,"type":{"text":"string | null"}}],"description":"Set or update authentication, detect identity changes, and re-initialize.\n\n`conversationIdOverride` (#2644) — when the host has set the\n`conversation-id` attribute on `<gaia-chat>`, the value flows through here\nso the post-auth restore picks that exact conversation instead of the one\nin localStorage. This avoids the \"restore-then-switch\" flicker that would\notherwise happen if the attribute were applied after `loadHistory`."},{"kind":"method","name":"emitAuthFailed","privacy":"private","return":{"type":{"text":"void"}},"parameters":[{"name":"strategy","type":{"text":"AuthStrategyType"}},{"name":"reason","type":{"text":"AuthFailedReason"}},{"name":"phase","type":{"text":"'acquire' | 'request'"}}]}]}],"exports":[{"kind":"js","name":"AuthCoordinator","declaration":{"name":"AuthCoordinator","module":"core/store/auth-coordinator.js"}}]},{"kind":"javascript-module","path":"core/store/bootstrap-loader.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"core/store/bootstrap-loader.js","declarations":[{"kind":"function","name":"fetchBootstrapConfig","return":{"type":{"text":"Promise<BootstrapConfigResponse>"}},"parameters":[{"name":"apiClient","type":{"text":"ApiClient"}},{"name":"profileId","type":{"text":"string"}},{"name":"storage","default":"defaultStorageService","type":{"text":"StorageService"}}],"description":"Fetch bootstrap config, using storage cache when available."},{"kind":"function","name":"clearBootstrapStorage","return":{"type":{"text":"void"}},"parameters":[{"name":"storage","default":"defaultStorageService","type":{"text":"StorageService"}}],"description":"Remove cached bootstrap config from storage."}],"exports":[{"kind":"js","name":"fetchBootstrapConfig","declaration":{"name":"fetchBootstrapConfig","module":"core/store/bootstrap-loader.js"}},{"kind":"js","name":"clearBootstrapStorage","declaration":{"name":"clearBootstrapStorage","module":"core/store/bootstrap-loader.js"}}]},{"kind":"javascript-module","path":"core/store/chat-state-container.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"core/store/chat-state-container.js","declarations":[{"kind":"variable","name":"initialState","type":{"text":"ChatStoreState"},"default":"{ // Config initialized: false, maxInputLength: 2000, welcomeMessages: {}, suggestedQuestions: {}, visibleSuggestedQuestions: [], profileId: 'default', features: {}, // Session conversationId: null, channel: 'assistant', isActive: true, runState: 'idle', toolCallSummaries: {}, currentRunId: null, messageRunIds: {}, reasoningLabel: null, // Mode readonly: false, // Support supportSession: null, supportSessionEnded: false, // Messages messages: [], messageHostContexts: {}, // History view historyOpen: false, historyLoading: false, historyPaging: false, historyHasMore: true, historyError: null, conversationsList: [], hostContextSnapshot: null, settingsOpen: false, // UI backendAvailable: true, feedbackFormOpen: false, feedbackFormTarget: 'assistant', feedbackConfirmationVisible: false, feedbackSubmittedInSession: false, feedbackConsentGiven: false, composerDraft: '', sharingPromptVisible: false, sharingPromptAnswered: false, sharingConsentGiven: false, pluginSelections: [], pluginSelectionSearchQuery: '', pluginSelectionLoading: false, pluginSelectionSaving: false, error: null, errorStack: [], }"},{"kind":"class","description":"","name":"ChatStateContainer","members":[{"kind":"method","name":"setError","return":{"type":{"text":"void"}},"parameters":[{"name":"error","type":{"text":"AppError | null"}}]},{"kind":"method","name":"pushError","return":{"type":{"text":"void"}},"parameters":[{"name":"error","type":{"text":"AppError"}}]},{"kind":"method","name":"openFeedbackForm","return":{"type":{"text":"void"}},"parameters":[{"name":"target","type":{"text":"ChatChannel"}}]},{"kind":"method","name":"closeFeedbackForm","return":{"type":{"text":"void"}}},{"kind":"field","name":"_state","type":{"text":"T"},"privacy":"private","default":"{ ...initialState }","inheritedFrom":{"name":"StateContainer","module":"core/shared/state-container.js"}},{"kind":"field","name":"listeners","privacy":"private","default":"new Set<StateListener<T>>()","inheritedFrom":{"name":"StateContainer","module":"core/shared/state-container.js"}},{"kind":"field","name":"pendingNotify","type":{"text":"boolean"},"privacy":"private","default":"false","inheritedFrom":{"name":"StateContainer","module":"core/shared/state-container.js"}},{"kind":"field","name":"state","type":{"text":"T"},"readonly":true,"inheritedFrom":{"name":"StateContainer","module":"core/shared/state-container.js"}},{"kind":"method","name":"subscribe","return":{"type":{"text":"() => void"}},"parameters":[{"name":"listener","type":{"text":"StateListener<T>"}}],"inheritedFrom":{"name":"StateContainer","module":"core/shared/state-container.js"}},{"kind":"method","name":"setState","return":{"type":{"text":"void"}},"parameters":[{"name":"partial","type":{"text":"Partial<T>"}}],"inheritedFrom":{"name":"StateContainer","module":"core/shared/state-container.js"}},{"kind":"method","name":"scheduleNotify","privacy":"private","return":{"type":{"text":"void"}},"inheritedFrom":{"name":"StateContainer","module":"core/shared/state-container.js"}}],"superclass":{"name":"StateContainer","package":"@/core/shared/state-container"}}],"exports":[{"kind":"js","name":"initialState","declaration":{"name":"initialState","module":"core/store/chat-state-container.js"}},{"kind":"js","name":"ChatStateContainer","declaration":{"name":"ChatStateContainer","module":"core/store/chat-state-container.js"}}]},{"kind":"javascript-module","path":"core/store/chat-store.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"core/store/chat-store.js","declarations":[{"kind":"class","description":"","name":"ChatStore","members":[{"kind":"field","name":"state","type":{"text":"ChatStateContainer"},"readonly":true,"default":"new ChatStateContainer(() => this.host.requestUpdate())"},{"kind":"field","name":"run","type":{"text":"RunCoordinator"},"readonly":true,"default":"new RunCoordinator(agentService, { getState: () => this.state.state, setState: (partial) => this.state.setState(partial), pushError: (error) => this.pushError(error), dispatchHostEvent: (event) => { if (this.host instanceof HTMLElement) this.host.dispatchEvent(event); }, getFrontendTools: () => this.tools.tools, saveConversation: (profileId, threadId) => { this.state.setState(saveConversation(profileId, threadId)); }, onCanvasEvent: (event) => this.canvasHandlers?.onCanvasEvent(event), onCanvasActivity: (event) => this.canvasHandlers?.onCanvasActivity(event), })"},{"kind":"field","name":"support","type":{"text":"SupportManager"},"readonly":true,"default":"new SupportManager(supportService, agentService, { getState: () => this.state.state, setState: (partial) => this.state.setState(partial), pushError: (error) => this.pushError(error), openFeedbackForm: (target) => this.state.openFeedbackForm(target), })"},{"kind":"field","name":"auth","type":{"text":"AuthCoordinator"},"readonly":true,"default":"new AuthCoordinator(apiClient, { setState: (partial) => this.state.setState(partial), resetConversation: () => this.resetConversation(), abortCurrentTask: () => this.abortCurrentTask(), stopSupport: () => this.support.stopSupport(), loadConfig: (profileId) => this.doLoadConfig(profileId), loadHistory: (profileId, conversationIdOverride) => this.loadHistory(profileId, conversationIdOverride), clearBootstrapStorage: () => clearBootstrapStorage(), dispatchEvent: (event) => { if (this.host instanceof HTMLElement) this.host.dispatchEvent(event); }, })"},{"kind":"field","name":"tools","type":{"text":"ToolRegistry"},"readonly":true,"default":"new ToolRegistry()"},{"kind":"field","name":"feedback","type":{"text":"FeedbackCoordinator"},"readonly":true,"default":"new FeedbackCoordinator(apiClient, { getState: () => this.state.state, setState: (partial) => this.state.setState(partial), openFeedbackForm: (target) => this.state.openFeedbackForm(target), closeFeedbackForm: () => this.state.closeFeedbackForm(), setError: (error) => this.state.setError(error), setFeedbackToolEnabled: (enabled) => this.tools.setFeedbackToolEnabled(enabled), })"},{"kind":"field","name":"history","type":{"text":"HistoryCoordinator"},"readonly":true,"default":"new HistoryCoordinator(this.conversationsClient, { getState: () => this.state.state, setState: (partial) => this.state.setState(partial), pushError: (error) => this.pushError(error), restoreConversation: (threadId) => this.restoreConversationById(threadId), clearConversation: (profileId) => this.clearConversation(profileId), })"},{"kind":"field","name":"canvasHandlers","type":{"text":"CanvasHandlers | null"},"privacy":"private","default":"null"},{"kind":"field","name":"health","type":{"text":"HealthManager"},"privacy":"private","readonly":true,"default":"new HealthManager(() => apiClient.baseUrl, { getState: () => this.state.state, setState: (partial) => this.state.setState(partial), pushError: (error) => this.pushError(error), onRecovery: () => this.handleHealthRecovery(), })"},{"kind":"field","name":"projection","type":{"text":"MessageProjection"},"privacy":"private","readonly":true,"default":"new MessageProjection({ state: this.state, agentService, })"},{"kind":"field","name":"conversationsClient","type":{"text":"ConversationsClient"},"privacy":"private","readonly":true,"default":"new ConversationsClient(apiClient)"},{"kind":"field","name":"pluginSelectionsHydratedCacheKey","type":{"text":"string | null"},"privacy":"private","default":"null"},{"kind":"field","name":"pluginSelectionLoadGeneration","type":{"text":"number"},"privacy":"private","default":"0"},{"kind":"field","name":"pluginSelectionsIdentityKey","type":{"text":"string | null"},"privacy":"private","default":"null"},{"kind":"method","name":"hostConnected","return":{"type":{"text":"void"}}},{"kind":"method","name":"hostDisconnected","return":{"type":{"text":"void"}}},{"kind":"method","name":"getState","return":{"type":{"text":"ChatStoreState"}}},{"kind":"method","name":"subscribe","return":{"type":{"text":"() => void"}},"parameters":[{"name":"listener","type":{"text":"ChatStoreListener"}}]},{"kind":"method","name":"initialize","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"profileId","type":{"text":"string"}}]},{"kind":"method","name":"dispose","return":{"type":{"text":"void"}}},{"kind":"method","name":"setAuth","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"strategyType","type":{"text":"StrategyType"}},{"name":"profileId","type":{"text":"string"}},{"name":"tokenProvider","optional":true,"type":{"text":"TokenFetcher"}},{"name":"baseUrl","optional":true,"type":{"text":"string"}},{"name":"conversationIdOverride","optional":true,"type":{"text":"string | null"}}]},{"kind":"method","name":"setCanvasHandlers","return":{"type":{"text":"void"}},"parameters":[{"name":"handlers","type":{"text":"CanvasHandlers"}}]},{"kind":"method","name":"doLoadConfig","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"profileId","default":"this.state.state.profileId"}]},{"kind":"method","name":"clearConfig","return":{"type":{"text":"void"}}},{"kind":"method","name":"loadHistory","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"profileId","type":{"text":"string"}},{"name":"conversationIdOverride","optional":true,"type":{"text":"string | null"}}],"description":"Restore the user's conversation on app load.\n\nDefault behavior: read the persisted id from localStorage and hydrate. When\n`conversationIdOverride` is a non-empty string the restore is **scoped** —\nthat conversation is hydrated and localStorage is left untouched (#2644).\n`null` is the explicit \"no override, use localStorage\" signal so callers\ncan distinguish it from \"argument not supplied\" without a magic string."},{"kind":"method","name":"openHistory","return":{"type":{"text":"Promise<void>"}}},{"kind":"method","name":"closeHistory","return":{"type":{"text":"void"}}},{"kind":"method","name":"openSettings","return":{"type":{"text":"void"}}},{"kind":"method","name":"closeSettings","return":{"type":{"text":"void"}}},{"kind":"method","name":"refreshHistory","return":{"type":{"text":"Promise<void>"}}},{"kind":"method","name":"loadMoreHistory","return":{"type":{"text":"Promise<void>"}}},{"kind":"method","name":"selectConversationFromHistory","return":{"type":{"text":"Promise<HostContextSnapshot | null>"}},"parameters":[{"name":"summary","type":{"text":"ConversationSummary"}}],"description":"History-picker entry point: persist the selection to localStorage, restore the\nconversation, and close the history view. Returns the captured host-context\nsnapshot (or null) so callers can react to it.\n\nThis is distinct from restoreConversationById — the latter is the\nshared primitive that does NOT touch localStorage, reserved for the\nattribute-driven restore path in #2644 where the host wants a scoped view."},{"kind":"method","name":"renameConversation","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"id","type":{"text":"string"}},{"name":"title","type":{"text":"string"}}]},{"kind":"method","name":"deleteConversation","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"id","type":{"text":"string"}}]},{"kind":"method","name":"restoreConversationById","return":{"type":{"text":"Promise<HostContextSnapshot | null>"}},"parameters":[{"name":"threadId","type":{"text":"string"}}],"description":"Restore a specific conversation into the active chat and emit\nConversationRestoredEvent so host apps can re-orient their own UI.\n\nShared primitive with the attribute-driven restore from #2644 — both the history\npicker and a future host-provided `conversation-id` prop converge here."},{"kind":"method","name":"resetConversation","return":{"type":{"text":"void"}}},{"kind":"method","name":"clearConversation","return":{"type":{"text":"void"}},"parameters":[{"name":"profileId","default":"this.state.state.profileId","type":{"text":"string"}}]},{"kind":"method","name":"applyConversationReset","privacy":"private","return":{"type":{"text":"void"}},"parameters":[{"name":"resetState","type":{"text":"ReturnType<typeof resetConversationState>"}}]},{"kind":"method","name":"sendMessage","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"message","type":{"text":"string"}},{"name":"profileId","type":{"text":"string"}},{"name":"hostContext","optional":true,"type":{"text":"HostContext | null"}},{"name":"options","optional":true,"type":{"text":"SendMessageOptions"}}]},{"kind":"method","name":"uploadAttachment","return":{"type":{"text":"Promise<MessageAttachment>"}},"parameters":[{"name":"file","type":{"text":"File"}},{"name":"profileId","type":{"text":"string"}}]},{"kind":"method","name":"hideSuggestedQuestions","return":{"type":{"text":"void"}}},{"kind":"method","name":"approveToolCall","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"messageId","type":{"text":"string"}},{"name":"options","optional":true,"type":{"text":"{ consentToShareConversation?: boolean }"}}]},{"kind":"method","name":"declineToolCall","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"messageId","type":{"text":"string"}}]},{"kind":"method","name":"abortCurrentTask","return":{"type":{"text":"void"}}},{"kind":"method","name":"setComposerDraft","return":{"type":{"text":"void"}},"parameters":[{"name":"draft","type":{"text":"string"}}]},{"kind":"method","name":"clearComposerDraft","return":{"type":{"text":"void"}}},{"kind":"method","name":"setFrontendTools","return":{"type":{"text":"void"}},"parameters":[{"name":"tools","type":{"text":"FrontendTool[]"}}]},{"kind":"method","name":"startSupport","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"baseUrl","type":{"text":"string"}},{"name":"conversationId","type":{"text":"string"}}]},{"kind":"method","name":"stopSupport","return":{"type":{"text":"void"}}},{"kind":"method","name":"sendSupportMessage","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"message","type":{"text":"string"}}]},{"kind":"method","name":"sendSupportTyping","return":{"type":{"text":"Promise<void>"}}},{"kind":"method","name":"submitFeedback","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"rating","type":{"text":"number"}},{"name":"comment","type":{"text":"string | null"}},{"name":"consent","type":{"text":"boolean"}}]},{"kind":"method","name":"submitMessageThumb","return":{"type":{"text":"Promise<boolean>"}},"parameters":[{"name":"messageId","type":{"text":"string"}},{"name":"isPositive","type":{"text":"boolean | null"}}]},{"kind":"method","name":"openFeedbackForm","return":{"type":{"text":"void"}},"parameters":[{"name":"target","type":{"text":"ChatChannel"}}]},{"kind":"method","name":"closeFeedbackForm","return":{"type":{"text":"void"}}},{"kind":"method","name":"showFeedbackConfirmation","return":{"type":{"text":"void"}},"parameters":[{"name":"consent","type":{"text":"boolean"}}]},{"kind":"method","name":"hideFeedbackConfirmation","return":{"type":{"text":"void"}}},{"kind":"method","name":"getVisitorUserId","return":{"type":{"text":"string | null"}}},{"kind":"method","name":"getUserIdentifier","privacy":"private","return":{"type":{"text":"string | null"}},"description":"Returns the current user identifier (works for both Visma Connect and visitor strategies)."},{"kind":"method","name":"setError","return":{"type":{"text":"void"}},"parameters":[{"name":"error","type":{"text":"AppError | null"}}]},{"kind":"method","name":"maybeTriggerSharingPrompt","return":{"type":{"text":"void"}},"description":"Shows the sharing prompt if conditions are met:\n- Profile is not public\n- Conversation sharing is allowed\n- The prompt hasn't been answered yet (persisted in localStorage)"},{"kind":"method","name":"respondToSharingPrompt","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"accepted","type":{"text":"boolean"}}],"description":"Handles the user's response to the sharing prompt dialog.\nIf accepted and a conversation exists, marks it as readable immediately.\nIf no conversation exists yet (new chat), stores consent so it's applied\nwhen the conversation is created."},{"kind":"method","name":"tryMarkConversationReadable","privacy":"private","return":{"type":{"text":"Promise<boolean>"}},"description":"Marks the current conversation as readable via the API.\nCalled when sharing consent is given and a conversation ID is available."},{"kind":"method","name":"revokeConversationSharing","return":{"type":{"text":"Promise<void>"}},"description":"Revokes the user's sharing consent for the current conversation.\nMarks the conversation as unreadable via the API and updates local state."},{"kind":"method","name":"updateSharingConsent","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"enabled","type":{"text":"boolean"}}],"description":"Update the persistent sharing consent preference."},{"kind":"method","name":"revokeAllConversationSharing","return":{"type":{"text":"Promise<boolean>"}},"description":"Revoke readable status on all past conversations. Returns true on success."},{"kind":"method","name":"hideSharingPrompt","return":{"type":{"text":"void"}}},{"kind":"method","name":"loadPluginSelections","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"profileId","default":"this.state.state.profileId"},{"name":"options","optional":true,"type":{"text":"{ forceRefresh?: boolean }"}}]},{"kind":"method","name":"isCurrentPluginSelectionLoad","privacy":"private","return":{"type":{"text":"boolean"}},"parameters":[{"name":"loadGeneration","type":{"text":"number"}},{"name":"cacheKey","type":{"text":"string"}}]},{"kind":"method","name":"getPluginSelectionContextKey","privacy":"private","return":{"type":{"text":"string"}}},{"kind":"method","name":"pluginHasActiveContributions","privacy":"private","return":{"type":{"text":"boolean"}},"parameters":[{"name":"plugin","type":{"text":"AgentPluginSelection"}}]},{"kind":"method","name":"resolveToolToggleable","privacy":"private","return":{"type":{"text":"boolean"}},"parameters":[{"name":"plugin","type":{"text":"AgentPluginSelection"}},{"name":"tool","type":{"text":"AgentPluginSelection['tools'][number]"}},{"name":"selectedTool","optional":true,"type":{"text":"AgentToolSelection"}}]},{"kind":"method","name":"resolveLocalToolToggleable","privacy":"private","return":{"type":{"text":"boolean"}},"parameters":[{"name":"plugin","type":{"text":"AgentPluginSelection"}},{"name":"tool","type":{"text":"AgentPluginSelection['tools'][number]"}}]},{"kind":"method","name":"setPluginSelectionSearchQuery","return":{"type":{"text":"void"}},"parameters":[{"name":"query","type":{"text":"string"}}]},{"kind":"method","name":"togglePluginSelection","return":{"type":{"text":"Promise<boolean>"}},"parameters":[{"name":"pluginId","type":{"text":"string"}},{"name":"isActive","type":{"text":"boolean"}}]},{"kind":"method","name":"toggleToolSelection","return":{"type":{"text":"Promise<boolean>"}},"parameters":[{"name":"pluginId","type":{"text":"string"}},{"name":"toolName","type":{"text":"string"}},{"name":"isActive","type":{"text":"boolean"}}]},{"kind":"method","name":"pushError","privacy":"private","return":{"type":{"text":"void"}},"parameters":[{"name":"error","type":{"text":"AppError"}}]},{"kind":"method","name":"handleHealthRecovery","privacy":"private","return":{"type":{"text":"Promise<void>"}},"description":"Re-run loadConfig if app wasn't initialized properly after health recovery.\nUses state.pushError instead of this.pushError to avoid re-reporting to\nHealthManager, which would flip backendAvailable back to false and create\nan oscillation loop."},{"kind":"method","name":"mergePluginToolsWithSelectionState","privacy":"private","return":{"type":{"text":"ReadonlyArray<AgentPluginSelection>"}},"parameters":[{"name":"plugins","type":{"text":"ReadonlyArray<AgentPluginSelection>"}},{"name":"toolSelections","type":{"text":"ReadonlyArray<AgentToolSelection>"}}]},{"kind":"method","name":"collectActiveTools","privacy":"private","return":{"type":{"text":"ReadonlyArray<ScopedToolSelection>"}},"parameters":[{"name":"plugins","type":{"text":"ReadonlyArray<AgentPluginSelection>"}}]}]},{"kind":"variable","name":"chatStoreContext"}],"exports":[{"kind":"js","name":"ChatStore","declaration":{"name":"ChatStore","module":"core/store/chat-store.js"}},{"kind":"js","name":"chatStoreContext","declaration":{"name":"chatStoreContext","module":"core/store/chat-store.js"}}]},{"kind":"javascript-module","path":"core/store/config-manager.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"core/store/config-manager.js","declarations":[{"kind":"function","name":"loadConfig","return":{"type":{"text":"Promise<Result<ConfigState>>"}},"parameters":[{"name":"apiClient","type":{"text":"ApiClient"}},{"name":"profileId","type":{"text":"string"}}],"description":"Fetch bootstrap config. Returns a Result with the config state or an error."},{"kind":"function","name":"clearConfig","return":{"type":{"text":"{\n initialized: false;\n welcomeMessages: Readonly<Record<string, WelcomeMessage>>;\n suggestedQuestions: Readonly<Record<string, ReadonlyArray<string>>>;\n visibleSuggestedQuestions: ReadonlyArray<string>;\n}"}},"description":"Clear cached bootstrap config and return reset state."},{"kind":"function","name":"getSuggestedQuestionsForActiveLocale","return":{"type":{"text":"ReadonlyArray<string>"}},"parameters":[{"name":"suggestedQuestions","type":{"text":"Readonly<Record<string, ReadonlyArray<string>>>"}}],"description":"Get suggested questions for the active locale."},{"kind":"function","name":"pickSuggestedQuestions","return":{"type":{"text":"string[]"}},"parameters":[{"name":"suggestedQuestions","type":{"text":"ReadonlyArray<string>"}}],"description":"Pick up to 3 random suggested questions from the pool."}],"exports":[{"kind":"js","name":"loadConfig","declaration":{"name":"loadConfig","module":"core/store/config-manager.js"}},{"kind":"js","name":"clearConfig","declaration":{"name":"clearConfig","module":"core/store/config-manager.js"}},{"kind":"js","name":"getSuggestedQuestionsForActiveLocale","declaration":{"name":"getSuggestedQuestionsForActiveLocale","module":"core/store/config-manager.js"}},{"kind":"js","name":"pickSuggestedQuestions","declaration":{"name":"pickSuggestedQuestions","module":"core/store/config-manager.js"}}]},{"kind":"javascript-module","path":"core/store/consent-storage.js","declarations":[{"kind":"function","name":"getSharingConsent","return":{"type":{"text":"boolean | null"}},"parameters":[{"name":"profileId","type":{"text":"string"}},{"name":"userId","type":{"text":"string | null"}}]},{"kind":"function","name":"setSharingConsent","return":{"type":{"text":"void"}},"parameters":[{"name":"profileId","type":{"text":"string"}},{"name":"userId","type":{"text":"string | null"}},{"name":"value","type":{"text":"boolean"}}]}],"exports":[{"kind":"js","name":"getSharingConsent","declaration":{"name":"getSharingConsent","module":"core/store/consent-storage.js"}},{"kind":"js","name":"setSharingConsent","declaration":{"name":"setSharingConsent","module":"core/store/consent-storage.js"}}]},{"kind":"javascript-module","path":"core/store/feedback-coordinator.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"core/store/feedback-coordinator.js","declarations":[{"kind":"class","description":"","name":"FeedbackCoordinator","members":[{"kind":"field","name":"feedbackFormPending","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"field","name":"unsubscribeFeedbackWatcher","type":{"text":"() => void | undefined"},"privacy":"private"},{"kind":"method","name":"startWatching","return":{"type":{"text":"void"}},"parameters":[{"name":"subscribe","type":{"text":"(listener: (s: ChatStoreState) => void) => () => void"}}],"description":"Subscribe to state changes to auto-open feedback form when agent finishes streaming.\nMust be called with a subscribe function from the state container."},{"kind":"method","name":"dispose","return":{"type":{"text":"void"}}},{"kind":"method","name":"reset","return":{"type":{"text":"void"}}},{"kind":"method","name":"submit","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"rating","type":{"text":"number"}},{"name":"comment","type":{"text":"string | null"}},{"name":"consent","type":{"text":"boolean"}}]},{"kind":"method","name":"open","return":{"type":{"text":"void"}},"parameters":[{"name":"target","type":{"text":"ChatChannel"}}]},{"kind":"method","name":"close","return":{"type":{"text":"void"}}},{"kind":"method","name":"showConfirmation","return":{"type":{"text":"void"}},"parameters":[{"name":"consent","type":{"text":"boolean"}}]},{"kind":"method","name":"hideConfirmation","return":{"type":{"text":"void"}}},{"kind":"method","name":"handleToolCall","return":{"type":{"text":"{ success: boolean; message: string }"}},"description":"Handler for the feedback tool call from the agent.\nSets pending flag so the form opens after the agent finishes streaming."}]}],"exports":[{"kind":"js","name":"FeedbackCoordinator","declaration":{"name":"FeedbackCoordinator","module":"core/store/feedback-coordinator.js"}}]},{"kind":"javascript-module","path":"core/store/feedback-manager.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"core/store/feedback-manager.js","declarations":[{"kind":"function","name":"submitFeedback","return":{"type":{"text":"Promise<Result<void>>"}},"parameters":[{"name":"apiClient","type":{"text":"ApiClient"}},{"name":"conversationId","type":{"text":"string"}},{"name":"target","type":{"text":"ChatChannel"}},{"name":"profileId","type":{"text":"string"}},{"name":"rating","type":{"text":"number"}},{"name":"comment","type":{"text":"string | null"}},{"name":"consent","type":{"text":"boolean"}}]},{"kind":"function","name":"submitMessageThumb","return":{"type":{"text":"Promise<Result<void>>"}},"parameters":[{"name":"apiClient","type":{"text":"ApiClient"}},{"name":"conversationId","type":{"text":"string"}},{"name":"profileId","type":{"text":"string"}},{"name":"messageId","type":{"text":"string"}},{"name":"isPositive","type":{"text":"boolean | null"}}]}],"exports":[{"kind":"js","name":"submitFeedback","declaration":{"name":"submitFeedback","module":"core/store/feedback-manager.js"}},{"kind":"js","name":"submitMessageThumb","declaration":{"name":"submitMessageThumb","module":"core/store/feedback-manager.js"}}]},{"kind":"javascript-module","path":"core/store/health-manager.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"core/store/health-manager.js","declarations":[{"kind":"class","description":"","name":"HealthManager","members":[{"kind":"field","name":"healthCheck","type":{"text":"PollingTask"},"privacy":"private","default":"new PollingTask(() => this.checkHealth(), HEALTH_CHECK_INTERVAL_MS)"},{"kind":"field","name":"heartbeat","type":{"text":"PollingTask"},"privacy":"private","default":"new PollingTask(() => this.heartbeatTick(), HEARTBEAT_INTERVAL_MS)"},{"kind":"field","name":"stopped","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"method","name":"start","return":{"type":{"text":"void"}},"description":"Start ambient heartbeat and attach browser network listeners."},{"kind":"method","name":"stop","return":{"type":{"text":"void"}},"description":"Stop all polling and remove browser network listeners."},{"kind":"method","name":"reportError","return":{"type":{"text":"void"}},"parameters":[{"name":"error","type":{"text":"AppError"}}],"description":"Called when an error occurs. Decides whether to start fast health checking."},{"kind":"field","name":"onOffline","privacy":"private"},{"kind":"field","name":"onOnline","privacy":"private"},{"kind":"method","name":"heartbeatTick","privacy":"private","return":{"type":{"text":"Promise<void>"}}},{"kind":"method","name":"pingHealthEndpoint","privacy":"private","return":{"type":{"text":"Promise<boolean>"}}},{"kind":"method","name":"checkHealth","privacy":"private","return":{"type":{"text":"Promise<void>"}}},{"kind":"method","name":"markBackendAvailable","privacy":"private","return":{"type":{"text":"void"}}}]}],"exports":[{"kind":"js","name":"HealthManager","declaration":{"name":"HealthManager","module":"core/store/health-manager.js"}}]},{"kind":"javascript-module","path":"core/store/history-coordinator.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"core/store/history-coordinator.js","declarations":[{"kind":"variable","name":"HISTORY_PAGE_SIZE","type":{"text":"number"},"default":"50","description":"Conversations fetched per page. The backend still supports larger limits\n(currently capped at 100), but 50 gives a snappy initial render and keeps\nscroll-triggered fetches small."},{"kind":"class","description":"","name":"HistoryCoordinator","members":[{"kind":"field","name":"#paging","privacy":"private","type":{"text":"boolean"},"default":"false","description":"Synchronous in-flight guard for `loadMore`. `ChatStateContainer` batches\n`setState` via `queueMicrotask`, so two `loadMore` calls in the same microtask\nboth observe `historyPaging: false` through `getState()` and would each issue\na fetch for the same offset. This is reachable in practice from the bottom-of-list\n`IntersectionObserver`, which can fire two entries in the same tick.\n\nThe state-mirror `historyPaging` flag still exists for UI subscribers; this\nprivate field is the actual lock and is set/cleared synchronously around the\nawait."},{"kind":"method","name":"open","return":{"type":{"text":"Promise<void>"}},"description":"Open the history view and fetch (or refetch) the first page."},{"kind":"method","name":"close","return":{"type":{"text":"void"}}},{"kind":"method","name":"refresh","return":{"type":{"text":"Promise<void>"}},"description":"Re-fetch the first page for the currently selected profile. Resets the\naccumulated list and the hasMore flag so the scroll trigger can page again."},{"kind":"method","name":"loadMore","return":{"type":{"text":"Promise<void>"}},"description":"Fetch the next page and append it to the list. No-op while a fetch is\nalready in flight (reentry-safe for scroll handlers), when the list has\nnot been loaded yet, or when the last page indicated end-of-data."},{"kind":"method","name":"rename","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"id","type":{"text":"string"}},{"name":"title","type":{"text":"string"}}],"description":"Rename with optimistic update. Reverts on failure.\nEmpty titles are rejected locally so we never fire a request the backend would 400."},{"kind":"method","name":"remove","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"id","type":{"text":"string"}}],"description":"Soft-delete with optimistic removal. Reverts on failure.\n\nFor the active-conversation case, the chat-surface clear is intentionally NOT\noptimistic: the row vanishes from the history list immediately, but the chat\nitself is only cleared after the backend confirms the delete. There's a brief\ninconsistency window during the round-trip where the row is gone from history\nbut the conversation still renders behind it. The trade-off:\n- Going optimistic on the chat would mean snapshotting and restoring every\n field `clearConversation` touches (AgentService messages, canvas state,\n feedback state, ~13 ChatStoreState fields). The rollback path itself becomes\n a meaningful failure surface for a rare case.\n- On API failure the user keeps their working chat. A fully optimistic version\n would briefly wipe the chat and then un-wipe it on failure, which is a worse\n visible glitch than the row reappearing.\nAcceptable for the MVP; revisit if delete latency grows or the failure path\nbecomes common enough that users notice the mismatch."},{"kind":"method","name":"select","return":{"type":{"text":"Promise<HostContextSnapshot | null>"}},"parameters":[{"name":"summary","type":{"text":"ConversationSummary"}}],"description":"Open a conversation by id: persist the thread id, close the history view\nimmediately so the chat area becomes visible, then restore the messages.\nReturns the host-context snapshot so the caller can emit\nConversationRestoredEvent.\n\nClosing before the restore await keeps the transition snappy — the user sees\nthe chat surface take over right away instead of the history list sitting\nthere during the network round-trip."}]}],"exports":[{"kind":"js","name":"HISTORY_PAGE_SIZE","declaration":{"name":"HISTORY_PAGE_SIZE","module":"core/store/history-coordinator.js"}},{"kind":"js","name":"HistoryCoordinator","declaration":{"name":"HistoryCoordinator","module":"core/store/history-coordinator.js"}}]},{"kind":"javascript-module","path":"core/store/index.js","declarations":[],"exports":[{"kind":"js","name":"ChatStore","declaration":{"name":"ChatStore","module":"./chat-store"}},{"kind":"js","name":"chatStoreContext","declaration":{"name":"chatStoreContext","module":"./chat-store"}},{"kind":"js","name":"CanvasHandlers","declaration":{"name":"CanvasHandlers","module":"./chat-store"}},{"kind":"js","name":"ChatStoreState","declaration":{"name":"ChatStoreState","module":"./chat-store"}},{"kind":"js","name":"RunState","declaration":{"name":"RunState","module":"./chat-store"}},{"kind":"js","name":"StrategyType","declaration":{"name":"StrategyType","module":"./chat-store"}},{"kind":"js","name":"ChatStateContainer","declaration":{"name":"ChatStateContainer","module":"./chat-state-container"}},{"kind":"js","name":"ChatStoreListener","declaration":{"name":"ChatStoreListener","module":"./chat-state-container"}},{"kind":"js","name":"StoreController","declaration":{"name":"StoreController","module":"./store-controller"}},{"kind":"js","name":"AuthCoordinator","declaration":{"name":"AuthCoordinator","module":"./auth-coordinator"}},{"kind":"js","name":"AuthCoordinatorDeps","declaration":{"name":"AuthCoordinatorDeps","module":"./auth-coordinator"}},{"kind":"js","name":"ToolRegistry","declaration":{"name":"ToolRegistry","module":"./tool-registry"}},{"kind":"js","name":"RunCoordinator","declaration":{"name":"RunCoordinator","module":"./run-coordinator"}},{"kind":"js","name":"RunCoordinatorDeps","declaration":{"name":"RunCoordinatorDeps","module":"./run-coordinator"}},{"kind":"js","name":"createAgentSubscriber","declaration":{"name":"createAgentSubscriber","module":"./agent-subscriber"}},{"kind":"js","name":"AgentSubscriberDeps","declaration":{"name":"AgentSubscriberDeps","module":"./agent-subscriber"}},{"kind":"js","name":"PendingToolCall","declaration":{"name":"PendingToolCall","module":"./agent-subscriber"}},{"kind":"js","name":"SupportManager","declaration":{"name":"SupportManager","module":"./support-manager"}},{"kind":"js","name":"SupportManagerDeps","declaration":{"name":"SupportManagerDeps","module":"./support-manager"}},{"kind":"js","name":"HealthManager","declaration":{"name":"HealthManager","module":"./health-manager"}},{"kind":"js","name":"HealthManagerDeps","declaration":{"name":"HealthManagerDeps","module":"./health-manager"}},{"kind":"js","name":"MessageProjection","declaration":{"name":"MessageProjection","module":"./message-projection"}},{"kind":"js","name":"MessageProjectionDeps","declaration":{"name":"MessageProjectionDeps","module":"./message-projection"}},{"kind":"js","name":"HistoryCoordinator","declaration":{"name":"HistoryCoordinator","module":"./history-coordinator"}},{"kind":"js","name":"HistoryCoordinatorDeps","declaration":{"name":"HistoryCoordinatorDeps","module":"./history-coordinator"}},{"kind":"js","name":"clearBootstrapStorage","declaration":{"name":"clearBootstrapStorage","module":"./bootstrap-loader"}},{"kind":"js","name":"fetchBootstrapConfig","declaration":{"name":"fetchBootstrapConfig","module":"./bootstrap-loader"}},{"kind":"js","name":"clearConfig","declaration":{"name":"clearConfig","module":"./config-manager"}},{"kind":"js","name":"getSuggestedQuestionsForActiveLocale","declaration":{"name":"getSuggestedQuestionsForActiveLocale","module":"./config-manager"}},{"kind":"js","name":"loadConfig","declaration":{"name":"loadConfig","module":"./config-manager"}},{"kind":"js","name":"pickSuggestedQuestions","declaration":{"name":"pickSuggestedQuestions","module":"./config-manager"}},{"kind":"js","name":"submitFeedback","declaration":{"name":"submitFeedback","module":"./feedback-manager"}},{"kind":"js","name":"submitMessageThumb","declaration":{"name":"submitMessageThumb","module":"./feedback-manager"}},{"kind":"js","name":"fetchPluginSelections","declaration":{"name":"fetchPluginSelections","module":"./plugin-selection-manager"}},{"kind":"js","name":"savePluginSelections","declaration":{"name":"savePluginSelections","module":"./plugin-selection-manager"}},{"kind":"js","name":"saveSelections","declaration":{"name":"saveSelections","module":"./selection-manager"}},{"kind":"js","name":"fetchToolSelections","declaration":{"name":"fetchToolSelections","module":"./tool-selection-manager"}},{"kind":"js","name":"saveToolSelections","declaration":{"name":"saveToolSelections","module":"./tool-selection-manager"}},{"kind":"js","name":"clearConversation","declaration":{"name":"clearConversation","module":"./session-manager"}},{"kind":"js","name":"restoreSession","declaration":{"name":"restoreSession","module":"./session-manager"}},{"kind":"js","name":"saveConversation","declaration":{"name":"saveConversation","module":"./session-manager"}},{"kind":"js","name":"createSelectConversationState","declaration":{"name":"createSelectConversationState","module":"./selectors"}},{"kind":"js","name":"filterRenderableUiMessages","declaration":{"name":"filterRenderableUiMessages","module":"./selectors"}},{"kind":"js","name":"groupMessagesByRun","declaration":{"name":"groupMessagesByRun","module":"./selectors"}},{"kind":"js","name":"isRenderableUiMessage","declaration":{"name":"isRenderableUiMessage","module":"./selectors"}},{"kind":"js","name":"selectAppHeaderState","declaration":{"name":"selectAppHeaderState","module":"./selectors"}},{"kind":"js","name":"selectComposerState","declaration":{"name":"selectComposerState","module":"./selectors"}},{"kind":"js","name":"selectConnectionStatus","declaration":{"name":"selectConnectionStatus","module":"./selectors"}},{"kind":"js","name":"selectFeedbackConfirmationState","declaration":{"name":"selectFeedbackConfirmationState","module":"./selectors"}},{"kind":"js","name":"selectFeedbackState","declaration":{"name":"selectFeedbackState","module":"./selectors"}},{"kind":"js","name":"selectHistoryViewState","declaration":{"name":"selectHistoryViewState","module":"./selectors"}},{"kind":"js","name":"selectSettingsViewState","declaration":{"name":"selectSettingsViewState","module":"./selectors"}},{"kind":"js","name":"selectIsInActiveRun","declaration":{"name":"selectIsInActiveRun","module":"./selectors"}},{"kind":"js","name":"selectIsStreaming","declaration":{"name":"selectIsStreaming","module":"./selectors"}},{"kind":"js","name":"selectSessionEndedState","declaration":{"name":"selectSessionEndedState","module":"./selectors"}},{"kind":"js","name":"selectSharingPromptState","declaration":{"name":"selectSharingPromptState","module":"./selectors"}},{"kind":"js","name":"selectShouldShowThinking","declaration":{"name":"selectShouldShowThinking","module":"./selectors"}},{"kind":"js","name":"selectToolApprovalState","declaration":{"name":"selectToolApprovalState","module":"./selectors"}},{"kind":"js","name":"selectToolStatusState","declaration":{"name":"selectToolStatusState","module":"./selectors"}},{"kind":"js","name":"RunGroup","declaration":{"name":"RunGroup","module":"./selectors"}}]},{"kind":"javascript-module","path":"core/store/message-projection.js","declarations":[{"kind":"class","description":"","name":"MessageProjection","members":[{"kind":"field","name":"unsubscribeMessages","type":{"text":"() => void | undefined"},"privacy":"private"},{"kind":"field","name":"unsubscribeRunState","type":{"text":"() => void | undefined"},"privacy":"private"},{"kind":"field","name":"memoizedMapper","privacy":"private"},{"kind":"field","name":"prevRunState","type":{"text":"RunState"},"privacy":"private","default":"'idle'"},{"kind":"method","name":"connect","return":{"type":{"text":"void"}},"description":"Subscribe to agent messages and runState changes.\nCall from hostConnected()."},{"kind":"method","name":"disconnect","return":{"type":{"text":"void"}},"description":"Unsubscribe from all sources.\nCall from hostDisconnected() / dispose()."},{"kind":"method","name":"reset","return":{"type":{"text":"void"}},"description":"Reset the memoized mapper (e.g. on clearConversation)."},{"kind":"field","name":"messages","type":{"text":"UiMessage[]"},"description":"Get the current mapped messages (for external reads without triggering a remap).","readonly":true},{"kind":"method","name":"mapMessages","privacy":"private","return":{"type":{"text":"UiMessage[]"}},"parameters":[{"name":"messages","type":{"text":"import('@/core/messages').InternalMessage[]"}}]},{"kind":"method","name":"remapMessages","privacy":"private","return":{"type":{"text":"void"}},"description":"Re-map current messages when runState changes (updates isStreaming flag)."}]}],"exports":[{"kind":"js","name":"MessageProjection","declaration":{"name":"MessageProjection","module":"core/store/message-projection.js"}}]},{"kind":"javascript-module","path":"core/store/plugin-selection-manager.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"core/store/plugin-selection-manager.js","declarations":[{"kind":"function","name":"fetchPluginSelections","return":{"type":{"text":"Promise<Result<ReadonlyArray<AgentPluginSelection>>>"}},"parameters":[{"name":"apiClient","type":{"text":"ApiClient"}},{"name":"profileId","type":{"text":"string"}}]},{"kind":"function","name":"savePluginSelections","return":{"type":{"text":"Promise<Result<void>>"}},"parameters":[{"name":"apiClient","type":{"text":"ApiClient"}},{"name":"profileId","type":{"text":"string"}},{"name":"activePluginIds","type":{"text":"ReadonlyArray<string>"}}]}],"exports":[{"kind":"js","name":"fetchPluginSelections","declaration":{"name":"fetchPluginSelections","module":"core/store/plugin-selection-manager.js"}},{"kind":"js","name":"savePluginSelections","declaration":{"name":"savePluginSelections","module":"core/store/plugin-selection-manager.js"}}]},{"kind":"javascript-module","path":"core/store/run-coordinator.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"core/store/run-coordinator.js","declarations":[{"kind":"variable","name":"MESSAGE_SOURCE_PROP_NAME","type":{"text":"string"},"default":"'_gaiaMessageSource'"},{"kind":"class","description":"","name":"RunCoordinator","members":[{"kind":"field","name":"MAX_EXPLICIT_ABORTED_RUN_IDS","type":{"text":"number"},"privacy":"private","static":true,"readonly":true,"default":"100"},{"kind":"field","name":"MAX_EXPECTED_ABORTED_RUN_IDS","type":{"text":"number"},"privacy":"private","static":true,"readonly":true,"default":"100"},{"kind":"field","name":"MAX_EXPECTED_PREINIT_SUPERSEDE_ABORTS","type":{"text":"number"},"privacy":"private","static":true,"readonly":true,"default":"100"},{"kind":"field","name":"pendingToolCalls","privacy":"private","default":"new Map<string, PendingToolCall>()","description":"Tracks in-flight tool calls during a run. Shared with the agent subscriber\nvia the deps interface — the subscriber populates/clears entries, while\nRunCoordinator reads them to auto-respond with frontend tool results."},{"kind":"field","name":"explicitlyAbortedRunIds","privacy":"private","default":"new Set<string>()"},{"kind":"field","name":"expectedContinuationAbortRunIds","privacy":"private","default":"new Set<string>()"},{"kind":"field","name":"expectedPreInitSupersedeAborts","type":{"text":"number"},"privacy":"private","default":"0"},{"kind":"field","name":"lastHostProps","type":{"text":"Record<string, unknown> | undefined"},"privacy":"private"},{"kind":"field","name":"respondingToFrontendTools","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"method","name":"sendMessage","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"profileId","type":{"text":"string"}},{"name":"message","type":{"text":"string"}},{"name":"hostContext","optional":true,"type":{"text":"HostContext | null"}},{"name":"options","optional":true,"type":{"text":"SendMessageOptions"}}],"description":"Create the user message, unpack host context, and execute an agent run."},{"kind":"method","name":"respondToToolCall","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"messageId","type":{"text":"string"}},{"name":"approved","type":{"text":"boolean"}},{"name":"options","optional":true,"type":{"text":"{ consentToShareConversation?: boolean }"}}],"description":"Respond to a tool call (approve or decline) and re-run the agent."},{"kind":"method","name":"executeRun","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"agent","type":{"text":"HttpAgent"}},{"name":"extraProps","optional":true,"type":{"text":"Record<string, unknown>"}},{"name":"context","optional":true,"type":{"text":"HostContext['context']"}},{"name":"profileId","default":"this.deps.getState().profileId","type":{"text":"string"}}],"description":"Execute an agent run with standard tools and error handling.\n\n`profileId` defaults to the current store value at call time, but callers\nthat already know which profile owns this run (e.g. `sendMessage`) should\npass it explicitly so a concurrent profile switch can't redirect the run's\n`saveConversation` callbacks onto a different profile's storage key."},{"kind":"method","name":"abort","return":{"type":{"text":"void"}},"description":"Abort the current in-flight run."},{"kind":"method","name":"respondToFrontendToolCalls","return":{"type":{"text":"Promise<void>"}},"description":"Invoke handlers for pending frontend tool calls and re-run the agent.\nTools with a `handler` get their return value as the tool result.\nTools without a handler get a default `{ success: true, rendered: true }`."},{"kind":"method","name":"buildSubscriber","privacy":"private","parameters":[{"name":"profileId","type":{"text":"string"}},{"name":"onRunIdCaptured","optional":true,"type":{"text":"(id: string) => void"}}]},{"kind":"method","name":"isExpectedAbort","privacy":"private","return":{"type":{"text":"boolean"}},"parameters":[{"name":"error","type":{"text":"unknown"}},{"name":"runId","type":{"text":"string | null"}}]},{"kind":"method","name":"isExpectedPreInitSupersedeAbort","privacy":"private","return":{"type":{"text":"boolean"}},"parameters":[{"name":"error","type":{"text":"unknown"}},{"name":"runId","type":{"text":"string | null"}}]},{"kind":"method","name":"isAbortExpectedForRun","privacy":"private","return":{"type":{"text":"boolean"}},"parameters":[{"name":"runId","type":{"text":"string | null"}}]},{"kind":"method","name":"isAbortError","privacy":"private","return":{"type":{"text":"boolean"}},"parameters":[{"name":"error","type":{"text":"unknown"}}]},{"kind":"method","name":"clearExpectedAbort","privacy":"private","return":{"type":{"text":"void"}},"parameters":[{"name":"runId","type":{"text":"string | null"}}]},{"kind":"method","name":"trackExplicitAbort","privacy":"private","return":{"type":{"text":"void"}},"parameters":[{"name":"runId","type":{"text":"string"}}]},{"kind":"method","name":"trackContinuationAbort","privacy":"private","return":{"type":{"text":"void"}},"parameters":[{"name":"runId","type":{"text":"string"}}]},{"kind":"method","name":"trackExpectedPreInitSupersedeAbort","privacy":"private","return":{"type":{"text":"void"}}},{"kind":"method","name":"consumeExpectedPreInitSupersedeAbort","privacy":"private","return":{"type":{"text":"void"}}}]}],"exports":[{"kind":"js","name":"MESSAGE_SOURCE_PROP_NAME","declaration":{"name":"MESSAGE_SOURCE_PROP_NAME","module":"core/store/run-coordinator.js"}},{"kind":"js","name":"RunCoordinator","declaration":{"name":"RunCoordinator","module":"core/store/run-coordinator.js"}}]},{"kind":"javascript-module","path":"core/store/selection-manager.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"core/store/selection-manager.js","declarations":[{"kind":"function","name":"saveSelections","return":{"type":{"text":"Promise<Result<void>>"}},"parameters":[{"name":"apiClient","type":{"text":"ApiClient"}},{"name":"profileId","type":{"text":"string"}},{"name":"activePluginIds","type":{"text":"ReadonlyArray<string>"}},{"name":"activeTools","type":{"text":"ReadonlyArray<ScopedToolSelection>"}}]}],"exports":[{"kind":"js","name":"saveSelections","declaration":{"name":"saveSelections","module":"core/store/selection-manager.js"}}]},{"kind":"javascript-module","path":"core/store/selectors.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"core/store/selectors/component-selectors.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"core/store/selectors/component-selectors.js","declarations":[{"kind":"function","name":"createSelectConversationState","description":"Build a per-consumer conversation-state selector.\n\nEach <gaia-conversation> instance must call this once and reuse the\nreturned function — the closure owns the memoization cache for filtering\nand grouping. Sharing one selector across multiple <gaia-chat> instances\nwould defeat the cache (each instance would invalidate the other's cache\non every render). See #2759 for the regression this prevents.\n\nAccepts locale as a parameter to avoid importing getLocale() inside the\nselector."},{"kind":"function","name":"selectComposerState","parameters":[{"name":"s","type":{"text":"ChatStoreState"}}],"description":"Selector for the message composer component."},{"kind":"function","name":"selectAppHeaderState","parameters":[{"name":"s","type":{"text":"ChatStoreState"}}],"description":"Selector for the app header component."},{"kind":"function","name":"selectHistoryViewState","parameters":[{"name":"s","type":{"text":"ChatStoreState"}}],"description":"Selector for the history view component."},{"kind":"function","name":"selectSettingsViewState","parameters":[{"name":"s","type":{"text":"ChatStoreState"}}]},{"kind":"function","name":"selectFeedbackState","parameters":[{"name":"s","type":{"text":"ChatStoreState"}}],"description":"Selector for the feedback form component."},{"kind":"function","name":"selectFeedbackConfirmationState","parameters":[{"name":"s","type":{"text":"ChatStoreState"}}],"description":"Selector for the feedback confirmation component."},{"kind":"function","name":"selectConnectionStatus","parameters":[{"name":"s","type":{"text":"ChatStoreState"}}],"description":"Selector for the connection status overlay component."},{"kind":"function","name":"selectToolApprovalState","parameters":[{"name":"s","type":{"text":"ChatStoreState"}}],"description":"Selector for the tool approval block component."},{"kind":"function","name":"selectToolStatusState","parameters":[{"name":"s","type":{"text":"ChatStoreState"}}],"description":"Selector for the tool status block component."},{"kind":"function","name":"selectSessionEndedState","parameters":[{"name":"s","type":{"text":"ChatStoreState"}}],"description":"Selector for the session-ended actions component."},{"kind":"function","name":"selectSharingPromptState","parameters":[{"name":"s","type":{"text":"ChatStoreState"}}],"description":"Selector for the sharing prompt dialog."}],"exports":[{"kind":"js","name":"createSelectConversationState","declaration":{"name":"createSelectConversationState","module":"core/store/selectors/component-selectors.js"}},{"kind":"js","name":"selectComposerState","declaration":{"name":"selectComposerState","module":"core/store/selectors/component-selectors.js"}},{"kind":"js","name":"selectAppHeaderState","declaration":{"name":"selectAppHeaderState","module":"core/store/selectors/component-selectors.js"}},{"kind":"js","name":"selectHistoryViewState","declaration":{"name":"selectHistoryViewState","module":"core/store/selectors/component-selectors.js"}},{"kind":"js","name":"selectSettingsViewState","declaration":{"name":"selectSettingsViewState","module":"core/store/selectors/component-selectors.js"}},{"kind":"js","name":"selectFeedbackState","declaration":{"name":"selectFeedbackState","module":"core/store/selectors/component-selectors.js"}},{"kind":"js","name":"selectFeedbackConfirmationState","declaration":{"name":"selectFeedbackConfirmationState","module":"core/store/selectors/component-selectors.js"}},{"kind":"js","name":"selectConnectionStatus","declaration":{"name":"selectConnectionStatus","module":"core/store/selectors/component-selectors.js"}},{"kind":"js","name":"selectToolApprovalState","declaration":{"name":"selectToolApprovalState","module":"core/store/selectors/component-selectors.js"}},{"kind":"js","name":"selectToolStatusState","declaration":{"name":"selectToolStatusState","module":"core/store/selectors/component-selectors.js"}},{"kind":"js","name":"selectSessionEndedState","declaration":{"name":"selectSessionEndedState","module":"core/store/selectors/component-selectors.js"}},{"kind":"js","name":"selectSharingPromptState","declaration":{"name":"selectSharingPromptState","module":"core/store/selectors/component-selectors.js"}}]},{"kind":"javascript-module","path":"core/store/selectors/index.js","declarations":[],"exports":[{"kind":"js","name":"filterRenderableUiMessages","declaration":{"name":"filterRenderableUiMessages","module":"./message-selectors"}},{"kind":"js","name":"groupMessagesByRun","declaration":{"name":"groupMessagesByRun","module":"./message-selectors"}},{"kind":"js","name":"isRenderableUiMessage","declaration":{"name":"isRenderableUiMessage","module":"./message-selectors"}},{"kind":"js","name":"selectIsInActiveRun","declaration":{"name":"selectIsInActiveRun","module":"./message-selectors"}},{"kind":"js","name":"selectIsStreaming","declaration":{"name":"selectIsStreaming","module":"./message-selectors"}},{"kind":"js","name":"selectShouldShowThinking","declaration":{"name":"selectShouldShowThinking","module":"./message-selectors"}},{"kind":"js","name":"RunGroup","declaration":{"name":"RunGroup","module":"./message-selectors"}},{"kind":"js","name":"createSelectConversationState","declaration":{"name":"createSelectConversationState","module":"./component-selectors"}},{"kind":"js","name":"selectAppHeaderState","declaration":{"name":"selectAppHeaderState","module":"./component-selectors"}},{"kind":"js","name":"selectComposerState","declaration":{"name":"selectComposerState","module":"./component-selectors"}},{"kind":"js","name":"selectConnectionStatus","declaration":{"name":"selectConnectionStatus","module":"./component-selectors"}},{"kind":"js","name":"selectFeedbackConfirmationState","declaration":{"name":"selectFeedbackConfirmationState","module":"./component-selectors"}},{"kind":"js","name":"selectFeedbackState","declaration":{"name":"selectFeedbackState","module":"./component-selectors"}},{"kind":"js","name":"selectHistoryViewState","declaration":{"name":"selectHistoryViewState","module":"./component-selectors"}},{"kind":"js","name":"selectSettingsViewState","declaration":{"name":"selectSettingsViewState","module":"./component-selectors"}},{"kind":"js","name":"selectSessionEndedState","declaration":{"name":"selectSessionEndedState","module":"./component-selectors"}},{"kind":"js","name":"selectSharingPromptState","declaration":{"name":"selectSharingPromptState","module":"./component-selectors"}},{"kind":"js","name":"selectToolApprovalState","declaration":{"name":"selectToolApprovalState","module":"./component-selectors"}},{"kind":"js","name":"selectToolStatusState","declaration":{"name":"selectToolStatusState","module":"./component-selectors"}}]},{"kind":"javascript-module","path":"core/store/selectors/message-selectors.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"core/store/selectors/message-selectors.js","declarations":[{"kind":"function","name":"selectIsStreaming","return":{"type":{"text":"boolean"}},"parameters":[{"name":"runState","type":{"text":"RunState"}},{"name":"messages","type":{"text":"UiMessage[]"}},{"name":"messageId","type":{"text":"string"}}]},{"kind":"function","name":"selectIsInActiveRun","return":{"type":{"text":"boolean"}},"parameters":[{"name":"runState","type":{"text":"RunState"}},{"name":"currentRunId","type":{"text":"string | null"}},{"name":"messageRunIds","type":{"text":"Record<string, string>"}},{"name":"messageId","type":{"text":"string"}}]},{"kind":"function","name":"selectShouldShowThinking","return":{"type":{"text":"boolean"}},"parameters":[{"name":"isThinking","type":{"text":"boolean"}},{"name":"renderableMessages","type":{"text":"UiMessage[]"}}]},{"kind":"function","name":"isRenderableUiMessage","return":{"type":{"text":"boolean"}},"parameters":[{"name":"message","type":{"text":"UiMessage"}}]},{"kind":"function","name":"filterRenderableUiMessages","return":{"type":{"text":"UiMessage[]"}},"parameters":[{"name":"messages","type":{"text":"UiMessage[]"}}]},{"kind":"function","name":"groupMessagesByRun","return":{"type":{"text":"RunGroup[]"}},"parameters":[{"name":"messages","type":{"text":"UiMessage[]"}},{"name":"currentRunId","type":{"text":"string | null"}}]}],"exports":[{"kind":"js","name":"selectIsStreaming","declaration":{"name":"selectIsStreaming","module":"core/store/selectors/message-selectors.js"}},{"kind":"js","name":"selectIsInActiveRun","declaration":{"name":"selectIsInActiveRun","module":"core/store/selectors/message-selectors.js"}},{"kind":"js","name":"selectShouldShowThinking","declaration":{"name":"selectShouldShowThinking","module":"core/store/selectors/message-selectors.js"}},{"kind":"js","name":"isRenderableUiMessage","declaration":{"name":"isRenderableUiMessage","module":"core/store/selectors/message-selectors.js"}},{"kind":"js","name":"filterRenderableUiMessages","declaration":{"name":"filterRenderableUiMessages","module":"core/store/selectors/message-selectors.js"}},{"kind":"js","name":"groupMessagesByRun","declaration":{"name":"groupMessagesByRun","module":"core/store/selectors/message-selectors.js"}}]},{"kind":"javascript-module","path":"core/store/session-manager.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"core/store/session-manager.js","declarations":[{"kind":"function","name":"loadConversationId","return":{"type":{"text":"string | null"}},"parameters":[{"name":"profileId","type":{"text":"string"}},{"name":"storage","default":"defaultStorageService","type":{"text":"StorageService"}}]},{"kind":"function","name":"saveConversationId","return":{"type":{"text":"void"}},"parameters":[{"name":"profileId","type":{"text":"string"}},{"name":"id","type":{"text":"string"}},{"name":"storage","default":"defaultStorageService","type":{"text":"StorageService"}}]},{"kind":"function","name":"clearConversationId","return":{"type":{"text":"void"}},"parameters":[{"name":"profileId","type":{"text":"string"}},{"name":"storage","default":"defaultStorageService","type":{"text":"StorageService"}}]},{"kind":"function","name":"restoreSession","return":{"type":{"text":"Promise<Result<SessionState | null>>"}},"parameters":[{"name":"agentService","type":{"text":"AgentService"}},{"name":"profileId","type":{"text":"string"}}],"description":"Load conversation from storage and restore via AgentService.\nReturns a Result with the session state or null if nothing to restore."},{"kind":"function","name":"saveConversation","return":{"type":{"text":"{ conversationId: string }"}},"parameters":[{"name":"profileId","type":{"text":"string"}},{"name":"threadId","type":{"text":"string"}}],"description":"Persist a conversation ID and return the state update."},{"kind":"function","name":"distillRestoredMessageContexts","return":{"type":{"text":"Record<string, HostContextSnapshot>"}},"parameters":[{"name":"raw","type":{"text":"Record<string, HostContextSnapshot> | undefined"}}],"description":"Run each restored per-message snapshot through `distillHostContext`. Skips entries\nthat filter down to nothing (e.g. an old row that only had internal-only keys) so\nthe map keeps \"key absent = no context\" as the canonical signal. Used by both\nrehydration paths (page-refresh `restoreSession` and history-picker\n`restoreConversationById`) so they produce the same in-memory shape."},{"kind":"function","name":"resetConversationState","parameters":[{"name":"agentService","type":{"text":"AgentService"}}],"description":"Reset conversation state and agent messages without touching localStorage.\n\nUse this when the active chat needs to be torn down but the stored thread id\nfor the *outgoing* profile must survive — e.g. on profile/identity transitions\ninside `AuthCoordinator`, where wiping storage for the about-to-load profile\nwould race the immediately following `loadHistory` and lose the thread."},{"kind":"function","name":"clearConversation","parameters":[{"name":"profileId","type":{"text":"string"}},{"name":"agentService","type":{"text":"AgentService"}}],"description":"Clear conversation state, agent messages, and the stored thread id for\n`profileId`. Used by the explicit user-driven \"new chat\" / \"delete chat\"\npaths where we want the next page-refresh to start fresh for that profile."}],"exports":[{"kind":"js","name":"loadConversationId","declaration":{"name":"loadConversationId","module":"core/store/session-manager.js"}},{"kind":"js","name":"saveConversationId","declaration":{"name":"saveConversationId","module":"core/store/session-manager.js"}},{"kind":"js","name":"clearConversationId","declaration":{"name":"clearConversationId","module":"core/store/session-manager.js"}},{"kind":"js","name":"restoreSession","declaration":{"name":"restoreSession","module":"core/store/session-manager.js"}},{"kind":"js","name":"saveConversation","declaration":{"name":"saveConversation","module":"core/store/session-manager.js"}},{"kind":"js","name":"distillRestoredMessageContexts","declaration":{"name":"distillRestoredMessageContexts","module":"core/store/session-manager.js"}},{"kind":"js","name":"resetConversationState","declaration":{"name":"resetConversationState","module":"core/store/session-manager.js"}},{"kind":"js","name":"clearConversation","declaration":{"name":"clearConversation","module":"core/store/session-manager.js"}}]},{"kind":"javascript-module","path":"core/store/store-controller.js","declarations":[{"kind":"class","description":"","name":"StoreController","superclass":{"name":"ContextStoreController","package":"@/core/shared/context-store-controller"},"members":[{"kind":"field","name":"_value","type":{"text":"T"},"privacy":"private","inheritedFrom":{"name":"ContextStoreController","module":"core/shared/context-store-controller.js"}},{"kind":"field","name":"_store","type":{"text":"TStore | null"},"privacy":"private","default":"null","inheritedFrom":{"name":"ContextStoreController","module":"core/shared/context-store-controller.js"}},{"kind":"field","name":"unsubscribeStore","type":{"text":"() => void | undefined"},"privacy":"private","inheritedFrom":{"name":"ContextStoreController","module":"core/shared/context-store-controller.js"}},{"kind":"field","name":"value","type":{"text":"T"},"description":"The current selected state slice.","readonly":true,"inheritedFrom":{"name":"ContextStoreController","module":"core/shared/context-store-controller.js"}},{"kind":"field","name":"store","type":{"text":"TStore"},"description":"The underlying store instance for dispatching actions.","readonly":true,"inheritedFrom":{"name":"ContextStoreController","module":"core/shared/context-store-controller.js"}},{"kind":"method","name":"attach","privacy":"private","return":{"type":{"text":"void"}},"parameters":[{"name":"store","type":{"text":"TStore"}}],"inheritedFrom":{"name":"ContextStoreController","module":"core/shared/context-store-controller.js"}},{"kind":"method","name":"detach","privacy":"private","return":{"type":{"text":"void"}},"inheritedFrom":{"name":"ContextStoreController","module":"core/shared/context-store-controller.js"}},{"kind":"method","name":"hostDisconnected","return":{"type":{"text":"void"}},"inheritedFrom":{"name":"ContextStoreController","module":"core/shared/context-store-controller.js"}}]}],"exports":[{"kind":"js","name":"StoreController","declaration":{"name":"StoreController","module":"core/store/store-controller.js"}}]},{"kind":"javascript-module","path":"core/store/support-manager.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"core/store/support-manager.js","declarations":[{"kind":"class","description":"","name":"SupportManager","members":[{"kind":"field","name":"suppressSessionEnded","type":{"text":"boolean"},"privacy":"private","default":"false","description":"Whether the session-ended handler should be suppressed during explicit teardown."},{"kind":"field","name":"listenerCleanups","type":{"text":"Array<() => void>"},"privacy":"private","default":"[]","description":"Cleanup functions for event listeners registered on the SupportEventEmitter."},{"kind":"method","name":"startSupport","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"baseUrl","type":{"text":"string"}},{"name":"conversationId","type":{"text":"string"}}]},{"kind":"method","name":"stopSupport","return":{"type":{"text":"Promise<void>"}}},{"kind":"method","name":"dispose","return":{"type":{"text":"void"}}},{"kind":"method","name":"sendMessage","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"message","type":{"text":"string"}}]},{"kind":"method","name":"sendTyping","return":{"type":{"text":"Promise<void>"}}},{"kind":"method","name":"setupEventListeners","privacy":"private","return":{"type":{"text":"void"}}}]}],"exports":[{"kind":"js","name":"SupportManager","declaration":{"name":"SupportManager","module":"core/store/support-manager.js"}}]},{"kind":"javascript-module","path":"core/store/tool-registry.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"core/store/tool-registry.js","declarations":[{"kind":"class","description":"","name":"ToolRegistry","members":[{"kind":"field","name":"userTools","type":{"text":"FrontendTool[]"},"privacy":"private","default":"[]"},{"kind":"field","name":"canvasEnabled","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"field","name":"canvasToolHandler","type":{"text":"FrontendTool['handler'] | null"},"privacy":"private","default":"null"},{"kind":"field","name":"feedbackToolAllowed","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"field","name":"feedbackToolEnabled","type":{"text":"boolean"},"privacy":"private","default":"true"},{"kind":"field","name":"feedbackToolHandler","type":{"text":"FrontendTool['handler'] | null"},"privacy":"private","default":"null"},{"kind":"field","name":"cachedTools","type":{"text":"FrontendTool[] | null"},"privacy":"private","default":"null"},{"kind":"method","name":"setUserTools","return":{"type":{"text":"void"}},"parameters":[{"name":"tools","type":{"text":"FrontendTool[]"}}],"description":"Set user-provided frontend tools (validates and filters invalid ones)."},{"kind":"method","name":"setCanvasEnabled","return":{"type":{"text":"void"}},"parameters":[{"name":"enabled","type":{"text":"boolean"}}],"description":"Enable or disable the built-in canvas render verification tool."},{"kind":"method","name":"setCanvasToolHandler","return":{"type":{"text":"void"}},"parameters":[{"name":"handler","type":{"text":"FrontendTool['handler']"}}],"description":"Set the handler for the canvas tool.\nCalled once from ChatStore to bind the handler that waits for render results."},{"kind":"method","name":"setFeedbackToolAllowed","return":{"type":{"text":"void"}},"parameters":[{"name":"allowed","type":{"text":"boolean"}}],"description":"Allow or disallow the feedback tool based on the feature flag.\nSet from bootstrap config; false until config is loaded."},{"kind":"method","name":"setFeedbackToolEnabled","return":{"type":{"text":"void"}},"parameters":[{"name":"enabled","type":{"text":"boolean"}}],"description":"Enable or disable the built-in feedback tool.\nDisabled after the tool fires; re-enabled on form dismiss (if not submitted)\nor on conversation clear."},{"kind":"method","name":"setFeedbackToolHandler","return":{"type":{"text":"void"}},"parameters":[{"name":"handler","type":{"text":"FrontendTool['handler']"}}],"description":"Set the handler for the feedback tool.\nCalled once from ChatStore to bind the handler that opens the feedback form."},{"kind":"field","name":"tools","type":{"text":"FrontendTool[]"},"description":"Merged list of built-in + user-provided frontend tools.\nBuilt-in tools are enabled based on feature flags.\nUser tools override built-ins with the same name.","readonly":true},{"kind":"method","name":"isFrontendTool","return":{"type":{"text":"boolean"}},"parameters":[{"name":"name","type":{"text":"string"}}],"description":"Check whether a tool name corresponds to a registered frontend tool."}]}],"exports":[{"kind":"js","name":"ToolRegistry","declaration":{"name":"ToolRegistry","module":"core/store/tool-registry.js"}}]},{"kind":"javascript-module","path":"core/store/tool-selection-manager.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"core/store/tool-selection-manager.js","declarations":[{"kind":"function","name":"fetchToolSelections","return":{"type":{"text":"Promise<Result<ReadonlyArray<AgentToolSelection>>>"}},"parameters":[{"name":"apiClient","type":{"text":"ApiClient"}},{"name":"profileId","type":{"text":"string"}}]},{"kind":"function","name":"saveToolSelections","return":{"type":{"text":"Promise<Result<void>>"}},"parameters":[{"name":"apiClient","type":{"text":"ApiClient"}},{"name":"profileId","type":{"text":"string"}},{"name":"activeTools","type":{"text":"ReadonlyArray<ScopedToolSelection>"}}]}],"exports":[{"kind":"js","name":"fetchToolSelections","declaration":{"name":"fetchToolSelections","module":"core/store/tool-selection-manager.js"}},{"kind":"js","name":"saveToolSelections","declaration":{"name":"saveToolSelections","module":"core/store/tool-selection-manager.js"}}]},{"kind":"javascript-module","path":"core/tools/built-in-tools.js","declarations":[{"kind":"variable","name":"CANVAS_TOOL_NAME","type":{"text":"string"},"default":"'get_canvas_render_status'"},{"kind":"variable","name":"canvasFrontendTool","type":{"text":"FrontendTool"},"default":"{ name: CANVAS_TOOL_NAME, description: 'Opens the canvas preview and returns its render status. ' + 'Returns success or failure with error details. ' + 'Always call this after create_canvas or update_canvas to verify the code renders correctly.', parameters: { type: 'object', properties: {}, }, }"},{"kind":"variable","name":"FEEDBACK_TOOL_NAME","type":{"text":"string"},"default":"'askForFeedback'"},{"kind":"variable","name":"feedbackToolDefinition","type":{"text":"Omit<FrontendTool, 'handler'>"},"default":"{ name: FEEDBACK_TOOL_NAME, description: 'Opens the feedback form so the user can rate their experience. ' + 'RULES — read carefully before calling: ' + '(1) Do not interrupt active problem-solving mid-conversation. Prioritize answering first, then call this. ' + 'If the user immediately follows up with an expression of satisfaction or dissatisfaction in the same turn, finish the answer and then call the feedback form once. ' + '(2) SHOULD call after any emotional signal — satisfaction or dissatisfaction. When in doubt, call it. ' + 'Supported languages: English, Norwegian (Bokmål), Swedish, Danish, Finnish, Dutch. ' + 'Detect feedback in ALL supported languages, not just English. ' + '(3) Satisfaction signals: English — \"Thanks\", \"Thank you\", \"That helped\", \"Perfect\", \"Great\". ' + 'Multilingual keywords — takk, tack, tak, kiitos, dank (and common variants). ' + '(4) Dissatisfaction signals: English — \"That\\'s wrong\", \"Wrong source\", \"That didn\\'t work\", \"You can\\'t help me\", \"Bad response\", \"No\". ' + 'Multilingual keywords — nei, nej, ei, ikke, inte, feil, fel, väärä, forkert, dårlig (and common variants). ' + 'These keywords are high-signal triggers; for ambiguous cases, fall back to sentiment/intent analysis across all supported languages. ' + '(5) NEVER call this more than once per conversation.', parameters: { type: 'object' as const, properties: {}, }, }","description":"Built-in frontend tool that opens the feedback form.\n\nThe description is the LLM's only guidance on when to call this tool,\nso it is deliberately conservative to avoid over-prompting.\n\nThe handler is set dynamically by ChatStore (via ToolRegistry) so the\ntool definition itself stays free of store/framework dependencies."}],"exports":[{"kind":"js","name":"CANVAS_TOOL_NAME","declaration":{"name":"CANVAS_TOOL_NAME","module":"core/tools/built-in-tools.js"}},{"kind":"js","name":"canvasFrontendTool","declaration":{"name":"canvasFrontendTool","module":"core/tools/built-in-tools.js"}},{"kind":"js","name":"FEEDBACK_TOOL_NAME","declaration":{"name":"FEEDBACK_TOOL_NAME","module":"core/tools/built-in-tools.js"}},{"kind":"js","name":"feedbackToolDefinition","declaration":{"name":"feedbackToolDefinition","module":"core/tools/built-in-tools.js"}}]},{"kind":"javascript-module","path":"core/types.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"core/types.js","declarations":[{"kind":"function","name":"distillHostContext","return":{"type":{"text":"HostContextSnapshot | null"}},"parameters":[{"name":"raw","type":{"text":"Record<string, unknown> | null | undefined"}}],"description":"Distill an arbitrary forwardedProps blob (or a stored `HostContextSnapshot`) into the\nshape we want to persist and compare against. Drops internal-only keys; returns null\nif nothing remains. Used on both the in-flight turn write path (run-coordinator) and\nthe session-restore write path (chat-store) so the divider's deep-equal comparison is\napples-to-apples on both sides."},{"kind":"function","name":"isSupportSessionActivityType","return":{"type":{"text":"type is SupportSessionActivityType"}},"parameters":[{"name":"type","type":{"text":"string"}}],"description":"Check if an activity type string is a support session activity type."},{"kind":"function","name":"createSupportSessionActivity","return":{"type":{"text":"Extract<InternalMessage, { role: 'activity' }>"}},"parameters":[{"name":"activityType","type":{"text":"SupportSessionActivityType"}},{"name":"content","default":"{}","type":{"text":"SupportSessionActivityContent"}}],"description":"Create a support session activity message."}],"exports":[{"kind":"js","name":"distillHostContext","declaration":{"name":"distillHostContext","module":"core/types.js"}},{"kind":"js","name":"isSupportSessionActivityType","declaration":{"name":"isSupportSessionActivityType","module":"core/types.js"}},{"kind":"js","name":"createSupportSessionActivity","declaration":{"name":"createSupportSessionActivity","module":"core/types.js"}}]},{"kind":"javascript-module","path":"generated/locale-codes.js","declarations":[{"kind":"variable","name":"sourceLocale","default":"`en`","description":"The locale code that templates in this source code are written in."},{"kind":"variable","name":"targetLocales","type":{"text":"[`da`, `fi`, `nb`, `nl`, `sv`]"},"default":"[`da`, `fi`, `nb`, `nl`, `sv`]","description":"The other locale codes that this application is localized into. Sorted\nlexicographically."},{"kind":"variable","name":"allLocales","type":{"text":"[`da`, `en`, `fi`, `nb`, `nl`, `sv`]"},"default":"[`da`, `en`, `fi`, `nb`, `nl`, `sv`]","description":"All valid project locale codes. Sorted lexicographically."}],"exports":[{"kind":"js","name":"sourceLocale","declaration":{"name":"sourceLocale","module":"generated/locale-codes.js"}},{"kind":"js","name":"targetLocales","declaration":{"name":"targetLocales","module":"generated/locale-codes.js"}},{"kind":"js","name":"allLocales","declaration":{"name":"allLocales","module":"generated/locale-codes.js"}}]},{"kind":"javascript-module","path":"generated/locales/da.js","declarations":[{"kind":"variable","name":"templates","type":{"text":"object"},"default":"{ 'activity-support-begin': `Du er blevet forbundet til support`, 'activity-support-end': `Supportsession afsluttet`, 'app-region-label': `Chatassistent`, 'assistant-message-approve': `Ja`, 'assistant-message-decline': `Nej`, 'attachment-error-too-large': `Vedhæftningen er for stor. Upload en mindre fil.`, 'attachment-error-unsupported-type': `Kun understøttede billedfiler og PDF-filer accepteres.`, 'attachment-upload-failed': `Upload af vedhæftning mislykkedes.`, 'canvas-preview-title': `Canvas-forhåndsvisning`, 'canvas-render-timeout-error': `Canvas-gengivelsen overskred tidsgrænsen på 30 sekunder`, 'canvas-toolbar-close-canvas': `Luk canvas`, 'canvas-toolbar-code-tab': `Kode`, 'canvas-toolbar-download-pdf': `Download PDF`, 'canvas-toolbar-preview-tab': `Forhåndsvisning`, 'citation-link-label': `Kilde`, 'citation-link-next': `Næste kilde`, 'citation-link-previous': `Forrige kilde`, 'citation-popover-label': `Kildehenvisninger`, 'composer-aria-label': `Skriv dit spørgsmål her`, 'composer-error-character-limit': `Tegngrænsen er overskredet.`, 'composer-placeholder': `Skriv dit spørgsmål her...`, 'composer-plugin-empty': `Ingen plugins fundet`, 'composer-plugin-loading': `Indlæser plugins…`, 'composer-plugin-search-placeholder': `Søg efter plugins`, 'composer-plugin-tools-label': `Værktøjer`, 'composer-send-aria-label': `Send besked`, 'connection-overlay-description': `Vi forsøger at oprette forbindelse igen. Vent venligst et øjeblik.`, 'connection-overlay-title': `Tjenesten er midlertidigt utilgængelig`, 'consent-dialog-consent-text': `Ved at klikke \"Ja\" giver jeg samtykke til, at Visma Software AS kan læse denne samtale for at forbedre tjenesten. Jeg kan trække mit samtykke tilbage når som helst. Læs mere om opbevaringsperioder og dine rettigheder i vores`, 'consent-dialog-description': `Hjælp os med at blive bedre! For bedre at forstå din feedback vil vi gerne gennemgå samtalen mellem dig og GAiA.`, 'consent-dialog-no': `Nej`, 'consent-dialog-privacy-link': `privatlivserklæring`, 'consent-dialog-title': `Del samtalehistorikken?`, 'consent-dialog-yes': `Ja`, 'conversation-aria-label': `Samtalebeskeder`, 'data-settings-revoke-all': `Tilbagekald samtykke for tidligere samtaler`, 'data-settings-revoke-error': `Kunne ikke tilbagekalde samtykke. Prøv igen.`, 'data-settings-revoke-note': `Dette påvirker ikke kontakten ovenfor. Slå kontakten fra for at stoppe deling af fremtidige samtaler.`, 'data-settings-revoke-success': `Samtykke tilbagekaldt for alle tidligere samtaler`, 'data-settings-sharing-label': `Del samtaler for at forbedre tjenesten`, 'disclaimer-link': `brugsvilkår`, 'disclaimer-text': `Svar genereres af AI og kan indeholde fejl, læs mere`, 'error-boundary-fallback': `Noget gik galt.`, 'error-forbidden': `Du har ikke adgang til denne handling.`, 'error-network-error': `Netværksfejl. Tjek din forbindelse.`, 'error-not-found': `Ikke fundet.`, 'error-offline': `Du er offline. Tjek din forbindelse.`, 'error-profile-not-found': `Kunne ikke indlæse den aktuelle profil. Bruger du den rigtige profil?`, 'error-rate-limit': `For mange forespørgsler. Vær venlig at sænke farten.`, 'error-request-canceled': `Forespørgsel annulleret.`, 'error-response-token-limit': `Assistentens svar er muligvis ufuldstændigt, fordi det nåede grænsen for maksimalt antal output-tokens. Prøv igen med et mere præcist spørgsmål, eller bed assistenten om at fortsætte.`, 'error-server-error': `Serveren havde et problem. Prøv venligst igen.`, 'error-session-expired': `Din session er udløbet. Log venligst ind igen.`, 'error-something-went-wrong': `Der gik noget galt.`, 'error-sse-error': `Live-svarstrømmen blev afbrudt. Prøv igen.`, 'error-unexpected-error': `Uventet fejl. Prøv venligst igen.`, 'error-ws-error': `Fejl i livechatforbindelsen. At genoprette forbindelsen kan hjælpe.`, 'feedback-close-aria-label': `Luk feedbackformular`, 'feedback-confirmation-message': `Tak for din feedback!`, 'feedback-form-comment-placeholder': `Skriv din kommentar her`, 'feedback-form-comments-title': `Nogle yderligere kommentarer?`, 'feedback-form-description': `Del venligst dine tanker og forslag for at hjælpe os med at blive bedre.`, 'feedback-form-rating-hint-high': `Meget tilfreds`, 'feedback-form-rating-hint-low': `Meget utilfreds`, 'feedback-form-satisfaction-title--assistant': `Hvor tilfreds er du med GAiA assistenten?`, 'feedback-form-satisfaction-title--support': `Hvor tilfreds er du med den hjælp, du fik?`, 'feedback-form-submit': `Indsend`, 'feedback-form-title': `Feedback`, 'feedback-privacy-id-copied': `Kopieret`, 'feedback-privacy-id-copy': `Kopiér privatlivs-ID`, 'feedback-privacy-id-hint': `Gem venligst dette ID; du skal bruge det, hvis du ønsker at anmode om sletning af data.`, 'feedback-privacy-id-label': str`Dit unikke privatlivs-ID er`, 'header-toolbar-label': `Chathandlinger`, 'history-back-aria': `Tilbage til chatten`, 'message-aria-label-assistant': `Assistentbesked`, 'message-aria-label-operator': `Operatørbesked`, 'message-aria-label-system': `Systembesked`, 'message-aria-label-user': `Din besked`, 'message-copy-done': `Kopieret`, 'message-copy-label': `Kopiér besked`, 'message-feedback-down-label': `Dårligt svar`, 'message-feedback-up-label': `Godt svar`, 'modal-close-label': `Luk`, 'notification-close-aria-label': `Luk notifikation`, 'opens-in-new-tab': `åbner i ny fane`, 'session-ended-feedback-prompt': `Hvordan var din oplevelse med supportoperatøren?`, 'session-ended-give-feedback': `Vurder din oplevelse`, 'session-ended-new-conversation': `Start ny samtale`, 'session-ended-title': `Supportsessionen er afsluttet`, 'settings-back-aria': `Tilbage til chatten`, 'settings-back-to-menu-aria': `Tilbage til indstillinger`, 'settings-plugins-title': `Plugins og værktøjer`, 'settings-region-label': `Indstillinger`, 'settings-select-tool-aria': str`Vælg værktøjet ${0}`, 'settings-title': `Indstillinger`, 'source-label-fallback': `Kilde`, 'spinner-aria-label': `Indlæser`, 'suggested-questions-aria-label': `Foreslåede opfølgningsspørgsmål`, 'tag-dismiss-label': `Fjern`, 'thinking-indicator-sr-text': `Assistenten tænker`, 'thinking-indicator-text': `Tænker...`, 'tool-approval-approve-aria-label': `Godkend handling`, 'tool-approval-approved-status': `Værktøj godkendt`, 'tool-approval-aria-label': `Handling kræver godkendelse`, 'tool-approval-decline-aria-label': `Afvis handling`, 'tool-approval-declined-status': `Værktøj afvist`, 'tool-approval-privacy-id-message': str`Dit unikke privatlivs-ID er ${0}. Gem venligst dette ID; du skal bruge det, hvis du ønsker at anmode om sletning af data.`, 'tool-approval-privacy-link': `privatlivserklæring`, 'tool-approval-share-conversation-consent': `Jeg giver samtykke til at dele denne samtale med supportagenten`, 'tool-approval-share-conversation-description': `For at hjælpe supportagenten med at forstå dit problem bedre, kan du vælge at dele din samtale med GAiA. Læs mere om opbevaringsperioder og dine rettigheder i vores`, 'tool-status-no-results': `Ingen resultater fundet`, 'tool-status-show-less': `Vis mindre`, 'tool-status-show-more': `Vis mere`, 'tool-status-unable-display-response': `[Kan ikke vise svaret]`, 'tooltip-close-chat': `Luk chat`, 'tooltip-data-settings': `Dataindstillinger`, 'tooltip-new-chat': `Ny chat`, 'tooltip-open-feedback': `Åbn feedback`, 'tooltip-settings': `Indstillinger`, 'typing-indicator-aria-label': `Operatør skriver`, 'context-changed-section-added': `Tilføjet`, 'context-changed-section-changed': `Ændret`, 'context-changed-section-removed': `Fjernet`, 'context-changed-divider': `Konteksten er ændret`, 'message-attachment-image-alt': `Vedhæftet billede`, 'message-attachment-pdf-label': `PDF-dokument`, 'message-attachment-remove': `Fjern vedhæftning`, 'composer-attachment-error-reset': `Ryd vedhæftningsfejl`, 'composer-attachment-input-label': `Vedhæft en fil`, 'composer-attachment-uploading-label': `Uploader vedhæftning`, 'composer-attachment-button-label': `Vedhæft en fil`, 'composer-attachment-uploading-icon-label': `Uploader vedhæftning`, 'composer-attachment-icon-label': `Vedhæft en fil`, 'composer-dictation-aria-label': `Slå stemmediktering til/fra`, 'composer-stop-aria-label': `Stop svar`, 'reasoning-thinking-indicator': `Tænker…`, 'reasoning-thinking-complete': `Tænker`, 'sharing-prompt-dialog-title': `Hjælp med at forbedre GAiA`, 'sharing-prompt-inline-consent-text': `Ved at klikke på \"Ja\" giver jeg samtykke til, at Visma Software AS gennemgår denne samtale for at forbedre tjenesten. Jeg kan til enhver tid trække mit samtykke tilbage. Læs mere i vores`, 'sharing-prompt-dialog-privacy-link': `privatlivserklæring`, 'sharing-prompt-dialog-yes': `Ja`, 'sharing-prompt-dialog-no': `Nej`, 'history-item-untitled': `Uden titel`, 'history-item-edit-label': `Samtaletitel`, 'history-item-save': `Gem`, 'history-item-cancel': `Annuller`, 'history-item-rename-aria': `Omdøb samtale`, 'history-item-delete-aria': `Slet samtale`, 'history-region-label': `Samtalehistorik`, 'history-title': `Historik`, 'history-loading': `Indlæser samtaler…`, 'history-error': `Kunne ikke indlæse samtaler.`, 'history-retry': `Prøv igen`, 'history-empty': `Ingen tidligere samtaler.`, 'history-paging': `Indlæser flere…`, 'tooltip-history': `Samtalehistorik`, }"}],"exports":[{"kind":"js","name":"templates","declaration":{"name":"templates","module":"generated/locales/da.js"}}]},{"kind":"javascript-module","path":"generated/locales/fi.js","declarations":[{"kind":"variable","name":"templates","type":{"text":"object"},"default":"{ 'activity-support-begin': `Sinut on yhdistetty tukeen`, 'activity-support-end': `Tukisessio päättyi`, 'app-region-label': `Chat-avustaja`, 'assistant-message-approve': `Kyllä`, 'assistant-message-decline': `Ei`, 'attachment-error-too-large': `Liite on liian suuri. Lataa pienempi tiedosto.`, 'attachment-error-unsupported-type': `Vain tuetut kuvatiedostot ja PDF-tiedostot hyväksytään.`, 'attachment-upload-failed': `Liitteen lataus epäonnistui.`, 'canvas-preview-title': `Canvas-esikatselu`, 'canvas-render-timeout-error': `Canvas-renderöinti ylitti 30 sekunnin aikarajan`, 'canvas-toolbar-close-canvas': `Sulje kanvas`, 'canvas-toolbar-code-tab': `Koodi`, 'canvas-toolbar-download-pdf': `Lataa PDF`, 'canvas-toolbar-preview-tab': `Esikatselu`, 'citation-link-label': `Lähde`, 'citation-link-next': `Seuraava lähde`, 'citation-link-previous': `Edellinen lähde`, 'citation-popover-label': `Lähdeviitteet`, 'composer-aria-label': `Kirjoita kysymyksesi tähän`, 'composer-error-character-limit': `Merkkiraja ylitetty.`, 'composer-placeholder': `Kirjoita kysymyksesi tähän...`, 'composer-plugin-empty': `Plugins ei löytynyt`, 'composer-plugin-loading': `Ladataan plugins…`, 'composer-plugin-search-placeholder': `Hae plugins`, 'composer-plugin-tools-label': `Työkalut`, 'composer-send-aria-label': `Lähetä viesti`, 'connection-overlay-description': `Yritämme muodostaa yhteyden uudelleen. Odota hetki.`, 'connection-overlay-title': `Palvelu on tilapäisesti poissa käytöstä`, 'consent-dialog-consent-text': `Klikkaamalla \"Kyllä\" annan suostumukseni siihen, että Visma Software AS voi tarkastella tätä keskustelua palvelun parantamiseksi. Voin peruuttaa suostumukseni milloin tahansa. Lue lisää säilytysajoista ja oikeuksistasi meidän`, 'consent-dialog-description': `Auta meitä parantamaan! Ymmärtääksemme palautettasi paremmin haluaisimme tarkastella sinun ja GAiAn välistä keskustelua.`, 'consent-dialog-no': `Ei`, 'consent-dialog-privacy-link': `tietosuojaseloste`, 'consent-dialog-title': `Jaa nykyinen keskustelu?`, 'consent-dialog-yes': `Kyllä`, 'conversation-aria-label': `Keskusteluviestit`, 'data-settings-revoke-all': `Peru aiempien keskustelujen suostumus`, 'data-settings-revoke-error': `Suostumuksen peruminen epäonnistui. Yritä uudelleen.`, 'data-settings-revoke-note': `Tämä ei vaikuta yllä olevaan kytkimeen. Lopeta tulevien keskustelujen jakaminen poistamalla kytkin käytöstä.`, 'data-settings-revoke-success': `Suostumus peruttu kaikkien aiempien keskustelujen osalta`, 'data-settings-sharing-label': `Jaa keskusteluja palvelun parantamiseksi`, 'disclaimer-link': `käyttöehdot`, 'disclaimer-text': `Vastaukset ovat tekoälyn tuottamia ja voivat sisältää virheitä, lue lisää`, 'error-boundary-fallback': `Jokin meni pieleen.`, 'error-forbidden': `Sinulla ei ole oikeutta tähän toimintoon.`, 'error-network-error': `Verkkoyhteysvirhe. Tarkista yhteytesi.`, 'error-not-found': `Ei löytynyt.`, 'error-offline': `Olet offline-tilassa. Tarkista yhteytesi.`, 'error-profile-not-found': `Nykyisen profiilin lataus epäonnistui. Käytätkö oikeaa profiilia?`, 'error-rate-limit': `Liian monta pyyntöä. Odota hetki.`, 'error-request-canceled': `Pyyntö peruutettiin.`, 'error-response-token-limit': `Avustajan vastaus saattaa olla epätäydellinen, koska se saavutti tulostemerkkien enimmäismäärän. Yritä uudelleen suppeammalla kysymyksellä tai pyydä avustajaa jatkamaan.`, 'error-server-error': `Palvelimella ilmeni ongelma. Yritä uudelleen.`, 'error-session-expired': `Istuntosi on vanhentunut. Kirjaudu uudelleen sisään.`, 'error-something-went-wrong': `Jokin meni pieleen.`, 'error-sse-error': `Reaaliaikainen vastausvirta keskeytyi. Yritä uudelleen.`, 'error-unexpected-error': `Odottamaton virhe. Yritä uudelleen.`, 'error-ws-error': `Reaaliaikaisen chatin yhteysvirhe. Uudelleenyhdistäminen saattaa auttaa.`, 'feedback-close-aria-label': `Sulje palautelomake`, 'feedback-confirmation-message': `Kiitos palautteestasi!`, 'feedback-form-comment-placeholder': `Kirjoita kommenttisi tähän`, 'feedback-form-comments-title': `Muita kommentteja?`, 'feedback-form-description': `Jaa ajatuksesi ja ehdotuksesi, jotta voimme parantaa palvelua.`, 'feedback-form-rating-hint-high': `Erittäin tyytyväinen`, 'feedback-form-rating-hint-low': `Erittäin tyytymätön`, 'feedback-form-satisfaction-title--assistant': `Kuinka tyytyväinen olet GAiA avustajaan?`, 'feedback-form-satisfaction-title--support': `Kuinka tyytyväinen olet saamaasi apuun?`, 'feedback-form-submit': `Lähetä`, 'feedback-form-title': `Palaute`, 'feedback-privacy-id-copied': `Kopioitu`, 'feedback-privacy-id-copy': `Kopioi tietosuojatunnus`, 'feedback-privacy-id-hint': `Tallenna tämä tunnus; tarvitset sitä, jos haluat pyytää tietojen poistamista.`, 'feedback-privacy-id-label': str`Yksilöllinen tietosuojatunnuksesi on`, 'header-toolbar-label': `Chat-toiminnot`, 'history-back-aria': `Takaisin chattiin`, 'message-aria-label-assistant': `Avustajan viesti`, 'message-aria-label-operator': `Operaattorin viesti`, 'message-aria-label-system': `Järjestelmäviesti`, 'message-aria-label-user': `Viestisi`, 'message-copy-done': `Kopioitu`, 'message-copy-label': `Kopioi viesti`, 'message-feedback-down-label': `Huono vastaus`, 'message-feedback-up-label': `Hyvä vastaus`, 'modal-close-label': `Sulje`, 'notification-close-aria-label': `Sulje ilmoitus`, 'opens-in-new-tab': `avautuu uuteen välilehteen`, 'session-ended-feedback-prompt': `Millainen kokemuksesi oli tukihenkilön kanssa?`, 'session-ended-give-feedback': `Arvioi kokemuksesi`, 'session-ended-new-conversation': `Aloita uusi keskustelu`, 'session-ended-title': `Tukiistunto päättyi`, 'settings-back-aria': `Takaisin chattiin`, 'settings-back-to-menu-aria': `Takaisin asetuksiin`, 'settings-plugins-title': `Plugins ja työkalut`, 'settings-region-label': `Asetukset`, 'settings-select-tool-aria': str`Valitse työkalu ${0}`, 'settings-title': `Asetukset`, 'source-label-fallback': `Lähde`, 'spinner-aria-label': `Ladataan`, 'suggested-questions-aria-label': `Ehdotetut jatkokysymykset`, 'tag-dismiss-label': `Poista`, 'thinking-indicator-sr-text': `Avustaja ajattelee`, 'thinking-indicator-text': `Miettii...`, 'tool-approval-approve-aria-label': `Hyväksy toiminto`, 'tool-approval-approved-status': `Työkalu hyväksytty`, 'tool-approval-aria-label': `Toiminto vaatii hyväksyntää`, 'tool-approval-decline-aria-label': `Hylkää toiminto`, 'tool-approval-declined-status': `Työkalu hylätty`, 'tool-approval-privacy-id-message': str`Yksilöllinen yksityisyystunnuksesi on ${0}. Tallenna tämä tunnus; tarvitset sitä, jos haluat pyytää tietojen poistamista.`, 'tool-approval-privacy-link': `tietosuojaseloste`, 'tool-approval-share-conversation-consent': `Suostun jakamaan tämän keskustelun tukihenkilön kanssa`, 'tool-approval-share-conversation-description': `Auttaaksesi tukihenkilöä ymmärtämään asiaasi paremmin, voit valita jakaa keskustelusi GAiAn kanssa. Lue lisää säilytysajoista ja oikeuksistasi meidän`, 'tool-status-no-results': `Tuloksia ei löytynyt`, 'tool-status-show-less': `Näytä vähemmän`, 'tool-status-show-more': `Näytä lisää`, 'tool-status-unable-display-response': `[Vastausta ei voi näyttää]`, 'tooltip-close-chat': `Sulje keskustelu`, 'tooltip-data-settings': `Tietoasetukset`, 'tooltip-new-chat': `Uusi keskustelu`, 'tooltip-open-feedback': `Avoin palaute`, 'tooltip-settings': `Asetukset`, 'typing-indicator-aria-label': `Operaattori kirjoittaa`, 'context-changed-section-added': `Lisätty`, 'context-changed-section-changed': `Muutettu`, 'context-changed-section-removed': `Poistettu`, 'context-changed-divider': `Konteksti muuttui`, 'message-attachment-image-alt': `Liitetty kuva`, 'message-attachment-pdf-label': `PDF-dokumentti`, 'message-attachment-remove': `Poista liite`, 'composer-attachment-error-reset': `Tyhjennä liitevirhe`, 'composer-attachment-input-label': `Liitä tiedosto`, 'composer-attachment-uploading-label': `Ladataan liitettä`, 'composer-attachment-button-label': `Liitä tiedosto`, 'composer-attachment-uploading-icon-label': `Ladataan liitettä`, 'composer-attachment-icon-label': `Liitä tiedosto`, 'composer-dictation-aria-label': `Ota äänisanelu käyttöön tai poista se käytöstä`, 'composer-stop-aria-label': `Pysäytä vastaus`, 'reasoning-thinking-indicator': `Ajattelee…`, 'reasoning-thinking-complete': `Ajattelu`, 'sharing-prompt-dialog-title': `Auta parantamaan GAiA`, 'sharing-prompt-inline-consent-text': `Valitsemalla \"Kyllä\" annan suostumukseni siihen, että Visma Software AS tarkistaa tämän keskustelun palvelun parantamiseksi. Voin peruuttaa suostumukseni milloin tahansa. Lue lisää:`, 'sharing-prompt-dialog-privacy-link': `tietosuojaseloste`, 'sharing-prompt-dialog-yes': `Kyllä`, 'sharing-prompt-dialog-no': `Ei`, 'history-item-untitled': `Nimetön`, 'history-item-edit-label': `Keskustelun otsikko`, 'history-item-save': `Tallenna`, 'history-item-cancel': `Peruuta`, 'history-item-rename-aria': `Nimeä keskustelu uudelleen`, 'history-item-delete-aria': `Poista keskustelu`, 'history-region-label': `Keskusteluhistoria`, 'history-title': `Historia`, 'history-loading': `Ladataan keskusteluja…`, 'history-error': `Keskusteluja ei voitu ladata.`, 'history-retry': `Yritä uudelleen`, 'history-empty': `Ei aiempia keskusteluja.`, 'history-paging': `Ladataan lisää…`, 'tooltip-history': `Keskusteluhistoria`, }"}],"exports":[{"kind":"js","name":"templates","declaration":{"name":"templates","module":"generated/locales/fi.js"}}]},{"kind":"javascript-module","path":"generated/locales/nb.js","declarations":[{"kind":"variable","name":"templates","type":{"text":"object"},"default":"{ 'activity-support-begin': `Du har blitt koblet til support`, 'activity-support-end': `Supportøkten er avsluttet`, 'app-region-label': `Chatassistent`, 'assistant-message-approve': `Ja`, 'assistant-message-decline': `Nei`, 'attachment-error-too-large': `Vedlegget er for stort. Last opp en mindre fil.`, 'attachment-error-unsupported-type': `Bare støttede bildefiler og PDF-er godtas.`, 'attachment-upload-failed': `Opplasting av vedlegg mislyktes.`, 'canvas-preview-title': `Canvas-forhåndsvisning`, 'canvas-render-timeout-error': `Canvas-gjengivelsen overskred tidsgrensen på 30 sekunder`, 'canvas-toolbar-close-canvas': `Lukk lerret`, 'canvas-toolbar-code-tab': `Kode`, 'canvas-toolbar-download-pdf': `Last ned PDF`, 'canvas-toolbar-preview-tab': `Forhåndsvisning`, 'citation-link-label': `Kilde`, 'citation-link-next': `Neste kilde`, 'citation-link-previous': `Forrige kilde`, 'citation-popover-label': `Kildehenvisninger`, 'composer-aria-label': `Skriv spørsmålet ditt her`, 'composer-error-character-limit': `Karakterbegrensning overskredet.`, 'composer-placeholder': `Skriv inn spørsmålet ditt her...`, 'composer-plugin-empty': `Ingen plugins funnet`, 'composer-plugin-loading': `Laster inn plugins…`, 'composer-plugin-search-placeholder': `Søk etter plugins`, 'composer-plugin-tools-label': `Verktøy`, 'composer-send-aria-label': `Send melding`, 'connection-overlay-description': `Vi prøver å koble til på nytt. Vennligst vent et øyeblikk.`, 'connection-overlay-title': `Tjenesten er midlertidig utilgjengelig`, 'consent-dialog-consent-text': `Ved å trykke \"Ja\" samtykker jeg til at Visma Software AS kan lese denne samtalen for å forbedre tjenesten. Jeg kan trekke samtykket når som helst. Les mer om lagringstid og dine rettigheter i vår`, 'consent-dialog-description': `Hjelp oss å bli bedre! For å forstå tilbakemeldingen din bedre vil vi gjerne se hva du og GAiA snakket om.`, 'consent-dialog-no': `Nei`, 'consent-dialog-privacy-link': `personvernerklæring`, 'consent-dialog-title': `Del samtalehistorikken?`, 'consent-dialog-yes': `Ja`, 'conversation-aria-label': `Samtalemeldinger`, 'data-settings-revoke-all': `Trekk tilbake samtykke for tidligere samtaler`, 'data-settings-revoke-error': `Kunne ikke trekke tilbake samtykket. Prøv på nytt.`, 'data-settings-revoke-note': `Dette påvirker ikke bryteren ovenfor. Slå av bryteren for å slutte å dele fremtidige samtaler.`, 'data-settings-revoke-success': `Samtykke trukket tilbake for alle tidligere samtaler`, 'data-settings-sharing-label': `Del samtaler for å forbedre tjenesten`, 'disclaimer-link': `bruksvilkår`, 'disclaimer-text': `Svar er generert av AI og kan inneholde feil, les mer`, 'error-boundary-fallback': `Noe gikk galt.`, 'error-forbidden': `Du har ikke tilgang til denne handlingen.`, 'error-network-error': `Nettverksfeil. Sjekk tilkoblingen.`, 'error-not-found': `Ikke funnet.`, 'error-offline': `Du er frakoblet. Sjekk tilkoblingen din.`, 'error-profile-not-found': `Kunne ikke laste inn nåværende profil. Bruker du riktig profil?`, 'error-rate-limit': `For mange forespørsler. Vennligst sakt ned.`, 'error-request-canceled': `Forespørsel avbrutt.`, 'error-response-token-limit': `Assistentens svar kan være ufullstendig fordi det nådde grensen for maksimalt antall utdatatokens. Prøv igjen med et smalere spørsmål, eller be assistenten om å fortsette.`, 'error-server-error': `Serverproblemer. Vennligst prøv igjen.`, 'error-session-expired': `Din sesjon har utløpt. Vennligst logg inn igjen.`, 'error-something-went-wrong': `Noe gikk galt.`, 'error-sse-error': `Live responsestream avbrutt. Prøv igjen.`, 'error-unexpected-error': `Uventet feil. Vennligst prøv igjen.`, 'error-ws-error': `Live chatsesjon feil. Det kan hjelpe å prøve igjen.`, 'feedback-close-aria-label': `Lukk tilbakemeldingsskjema`, 'feedback-confirmation-message': `Takk for din tilbakemelding!`, 'feedback-form-comment-placeholder': `Skriv inn tilbakemeldingen her`, 'feedback-form-comments-title': `Eventuelle tilbakemeldinger?`, 'feedback-form-description': `Vennligst del dine tanker og forslag for å hjelpe oss å forbedre.`, 'feedback-form-rating-hint-high': `Svært fornøyd`, 'feedback-form-rating-hint-low': `Svært misfornøyd`, 'feedback-form-satisfaction-title--assistant': `Hvor fornøyd er du med GAiA assistenten?`, 'feedback-form-satisfaction-title--support': `Hvor fornøyd er du med hjelpen du fikk?`, 'feedback-form-submit': `Send`, 'feedback-form-title': `Feedback`, 'feedback-privacy-id-copied': `Kopiert`, 'feedback-privacy-id-copy': `Kopier personvern-ID`, 'feedback-privacy-id-hint': `Vennligst lagre denne ID-en; du trenger den hvis du ønsker å be om sletting av data.`, 'feedback-privacy-id-label': str`Din unike personvern-ID er`, 'header-toolbar-label': `Chathandlinger`, 'history-back-aria': `Tilbake til chatten`, 'message-aria-label-assistant': `Assistentmelding`, 'message-aria-label-operator': `Operatørmelding`, 'message-aria-label-system': `Systemmelding`, 'message-aria-label-user': `Din melding`, 'message-copy-done': `Kopiert`, 'message-copy-label': `Kopier melding`, 'message-feedback-down-label': `Dårlig svar`, 'message-feedback-up-label': `Godt svar`, 'modal-close-label': `Lukk`, 'notification-close-aria-label': `Lukk varsel`, 'opens-in-new-tab': `åpner i ny fane`, 'session-ended-feedback-prompt': `Hvordan var opplevelsen din med supportoperatøren?`, 'session-ended-give-feedback': `Vurder opplevelsen din`, 'session-ended-new-conversation': `Start ny samtale`, 'session-ended-title': `Supportøkten er avsluttet`, 'settings-back-aria': `Tilbake til chatten`, 'settings-back-to-menu-aria': `Tilbake til innstillingene`, 'settings-plugins-title': `Plugins og verktøy`, 'settings-region-label': `Innstillinger`, 'settings-select-tool-aria': str`Velg verktøyet ${0}`, 'settings-title': `Innstillinger`, 'source-label-fallback': `Kilde`, 'spinner-aria-label': `Laster`, 'suggested-questions-aria-label': `Foreslåtte oppfølgingsspørsmål`, 'tag-dismiss-label': `Fjern`, 'thinking-indicator-sr-text': `Assistenten tenker`, 'thinking-indicator-text': `Tenker...`, 'tool-approval-approve-aria-label': `Godkjenn handling`, 'tool-approval-approved-status': `Verktøy godkjent`, 'tool-approval-aria-label': `Handling krever godkjenning`, 'tool-approval-decline-aria-label': `Avslå handling`, 'tool-approval-declined-status': `Verktøy avvist`, 'tool-approval-privacy-id-message': str`Din unike personvern-ID er ${0}. Vennligst lagre denne IDen; du vil trenge den hvis du ønsker å be om sletting av data.`, 'tool-approval-privacy-link': `personvernerklæring`, 'tool-approval-share-conversation-consent': `Jeg samtykker til å dele denne samtalen med supportagenten`, 'tool-approval-share-conversation-description': `For å hjelpe supportagenten med å forstå saken din bedre, kan du velge å dele samtalen din med GAiA. Les mer om lagringstid og dine rettigheter i vår`, 'tool-status-no-results': `Ingen resultater funnet`, 'tool-status-show-less': `Vis mindre`, 'tool-status-show-more': `Vis mer`, 'tool-status-unable-display-response': `[Kan ikke vise svaret]`, 'tooltip-close-chat': `Lukk chat`, 'tooltip-data-settings': `Datainnstillinger`, 'tooltip-new-chat': `Ny chat`, 'tooltip-open-feedback': `Åpne tilbakemeldingsskjema`, 'tooltip-settings': `Innstillinger`, 'typing-indicator-aria-label': `Operatør skriver`, 'context-changed-section-added': `Lagt til`, 'context-changed-section-changed': `Endret`, 'context-changed-section-removed': `Fjernet`, 'context-changed-divider': `Konteksten er endret`, 'message-attachment-image-alt': `Vedlagt bilde`, 'message-attachment-pdf-label': `PDF-dokument`, 'message-attachment-remove': `Fjern vedlegg`, 'composer-attachment-error-reset': `Fjern vedleggsfeil`, 'composer-attachment-input-label': `Legg ved en fil`, 'composer-attachment-uploading-label': `Laster opp vedlegg`, 'composer-attachment-button-label': `Legg ved en fil`, 'composer-attachment-uploading-icon-label': `Laster opp vedlegg`, 'composer-attachment-icon-label': `Legg ved en fil`, 'composer-dictation-aria-label': `Slå på/av talediktering`, 'composer-stop-aria-label': `Stopp svaret`, 'reasoning-thinking-indicator': `Tenker…`, 'reasoning-thinking-complete': `Tenker`, 'sharing-prompt-dialog-title': `Hjelp oss å forbedre GAiA`, 'sharing-prompt-inline-consent-text': `Ved å klikke på \"Ja\" samtykker jeg til at Visma Software AS gjennomgår denne samtalen for å forbedre tjenesten. Jeg kan trekke tilbake samtykket mitt når som helst. Les mer i vår`, 'sharing-prompt-dialog-privacy-link': `personvernerklæring`, 'sharing-prompt-dialog-yes': `Ja`, 'sharing-prompt-dialog-no': `Nei`, 'history-item-untitled': `Uten tittel`, 'history-item-edit-label': `Samtaletittel`, 'history-item-save': `Lagre`, 'history-item-cancel': `Avbryt`, 'history-item-rename-aria': `Gi samtalen nytt navn`, 'history-item-delete-aria': `Slett samtale`, 'history-region-label': `Samtalehistorikk`, 'history-title': `Historikk`, 'history-loading': `Laster inn samtaler…`, 'history-error': `Kunne ikke laste inn samtaler.`, 'history-retry': `Prøv på nytt`, 'history-empty': `Ingen tidligere samtaler.`, 'history-paging': `Laster inn mer…`, 'tooltip-history': `Samtalehistorikk`, }"}],"exports":[{"kind":"js","name":"templates","declaration":{"name":"templates","module":"generated/locales/nb.js"}}]},{"kind":"javascript-module","path":"generated/locales/nl.js","declarations":[{"kind":"variable","name":"templates","type":{"text":"object"},"default":"{ 'activity-support-begin': `U bent verbonden met support`, 'activity-support-end': `Supportsessie beëindigd`, 'app-region-label': `Chatassistent`, 'assistant-message-approve': `Ja`, 'assistant-message-decline': `Nee`, 'attachment-error-too-large': `De bijlage is te groot. Upload een kleiner bestand.`, 'attachment-error-unsupported-type': `Alleen ondersteunde afbeeldingsbestanden en pdf's worden geaccepteerd.`, 'attachment-upload-failed': `Uploaden van bijlage mislukt.`, 'canvas-preview-title': `Canvasvoorbeeld`, 'canvas-render-timeout-error': `Canvas-rendering overschreed de tijdslimiet van 30 seconden`, 'canvas-toolbar-close-canvas': `Canvas sluiten`, 'canvas-toolbar-code-tab': `Code`, 'canvas-toolbar-download-pdf': `PDF downloaden`, 'canvas-toolbar-preview-tab': `Voorbeeld`, 'citation-link-label': `Bronvermelding`, 'citation-link-next': `Volgende bronvermelding`, 'citation-link-previous': `Vorige bronvermelding`, 'citation-popover-label': `Bronvermeldingen`, 'composer-aria-label': `Typ hier je vraag`, 'composer-error-character-limit': `Tekenlimiet overschreden.`, 'composer-placeholder': `Typ hier je vraag...`, 'composer-plugin-empty': `Geen plugins gevonden`, 'composer-plugin-loading': `Plugins laden…`, 'composer-plugin-search-placeholder': `Plugins zoeken`, 'composer-plugin-tools-label': `Tools`, 'composer-send-aria-label': `Bericht verzenden`, 'connection-overlay-description': `We proberen opnieuw verbinding te maken. Even geduld alstublieft.`, 'connection-overlay-title': `Service tijdelijk niet beschikbaar`, 'consent-dialog-consent-text': `Door op \"Ja\" te klikken, geef ik toestemming aan Visma Software AS om dit gesprek te bekijken ter verbetering van de dienst. Ik kan mijn toestemming op elk moment intrekken. Lees meer over bewaartermijnen en uw rechten in onze`, 'consent-dialog-description': `Help ons verbeteren! Om uw feedback beter te begrijpen, willen we graag het gesprek tussen u en GAiA bekijken.`, 'consent-dialog-no': `Nee`, 'consent-dialog-privacy-link': `privacyverklaring`, 'consent-dialog-title': `Huidig gesprek delen?`, 'consent-dialog-yes': `Ja`, 'conversation-aria-label': `Gespreksberichten`, 'data-settings-revoke-all': `Toestemming voor eerdere gesprekken intrekken`, 'data-settings-revoke-error': `Toestemming intrekken mislukt. Probeer het opnieuw.`, 'data-settings-revoke-note': `Dit heeft geen invloed op de schakelaar hierboven. Schakel die uit om toekomstige gesprekken niet meer te delen.`, 'data-settings-revoke-success': `Toestemming ingetrokken voor alle eerdere gesprekken`, 'data-settings-sharing-label': `Gesprekken delen om de service te verbeteren`, 'disclaimer-link': `gebruiksvoorwaarden`, 'disclaimer-text': `Antwoorden worden gegenereerd door AI en kunnen fouten bevatten, lees meer`, 'error-boundary-fallback': `Er is iets misgegaan.`, 'error-forbidden': `Je hebt geen toegang tot deze actie.`, 'error-network-error': `Netwerkfout. Controleer je verbinding.`, 'error-not-found': `Niet gevonden.`, 'error-offline': `Je bent offline. Controleer je verbinding.`, 'error-profile-not-found': `Kon het huidige profiel niet laden. Gebruik je het juiste profiel?`, 'error-rate-limit': `Te veel verzoeken. Doe het rustig aan.`, 'error-request-canceled': `Verzoek geannuleerd.`, 'error-response-token-limit': `Het antwoord van de assistent is mogelijk onvolledig omdat het de maximale uitvoertokenlimiet heeft bereikt. Probeer het opnieuw met een specifiekere vraag of vraag de assistent om door te gaan.`, 'error-server-error': `Er is een probleem met de server. Probeer het opnieuw.`, 'error-session-expired': `Je sessie is verlopen. Log opnieuw in.`, 'error-something-went-wrong': `Er is iets misgegaan.`, 'error-sse-error': `Live-responsstroom onderbroken. Probeer het opnieuw.`, 'error-unexpected-error': `Onverwachte fout. Probeer het opnieuw.`, 'error-ws-error': `Verbindingsfout live chat. Opnieuw verbinden kan helpen.`, 'feedback-close-aria-label': `Feedbackformulier sluiten`, 'feedback-confirmation-message': `Bedankt voor je feedback!`, 'feedback-form-comment-placeholder': `Voer hier je opmerking in`, 'feedback-form-comments-title': `Nog andere opmerkingen?`, 'feedback-form-description': `Deel je ideëen en suggesties om ons te helpen verbeteren.`, 'feedback-form-rating-hint-high': `Zeer tevreden`, 'feedback-form-rating-hint-low': `Zeer ontevreden`, 'feedback-form-satisfaction-title--assistant': `Hoe tevreden ben je over de GAiA assistent?`, 'feedback-form-satisfaction-title--support': `Hoe tevreden ben je over de ontvangen hulp?`, 'feedback-form-submit': `Verzenden`, 'feedback-form-title': `Feedback`, 'feedback-privacy-id-copied': `Gekopieerd`, 'feedback-privacy-id-copy': `Kopieer privacy-ID`, 'feedback-privacy-id-hint': `Sla dit ID op; u heeft het nodig als u gegevensverwijdering wilt aanvragen.`, 'feedback-privacy-id-label': str`Uw unieke privacy-ID is`, 'header-toolbar-label': `Chatacties`, 'history-back-aria': `Terug naar chat`, 'message-aria-label-assistant': `Assistentbericht`, 'message-aria-label-operator': `Operatorbericht`, 'message-aria-label-system': `Systeembericht`, 'message-aria-label-user': `Je bericht`, 'message-copy-done': `Gekopieerd`, 'message-copy-label': `Bericht kopiëren`, 'message-feedback-down-label': `Slecht antwoord`, 'message-feedback-up-label': `Goed antwoord`, 'modal-close-label': `Sluiten`, 'notification-close-aria-label': `Melding sluiten`, 'opens-in-new-tab': `opent in nieuw tabblad`, 'session-ended-feedback-prompt': `Hoe was uw ervaring met de supportmedewerker?`, 'session-ended-give-feedback': `Beoordeel uw ervaring`, 'session-ended-new-conversation': `Start nieuw gesprek`, 'session-ended-title': `Supportsessie beëindigd`, 'settings-back-aria': `Terug naar chat`, 'settings-back-to-menu-aria': `Terug naar instellingen`, 'settings-plugins-title': `Plugins en tools`, 'settings-region-label': `Instellingen`, 'settings-select-tool-aria': str`Tool ${0} selecteren`, 'settings-title': `Instellingen`, 'source-label-fallback': `Bron`, 'spinner-aria-label': `Laden`, 'suggested-questions-aria-label': `Voorgestelde vervolgvragen`, 'tag-dismiss-label': `Verwijderen`, 'thinking-indicator-sr-text': `Assistent is aan het nadenken`, 'thinking-indicator-text': `Aan het denken...`, 'tool-approval-approve-aria-label': `Actie goedkeuren`, 'tool-approval-approved-status': `Hulpmiddel goedgekeurd`, 'tool-approval-aria-label': `Actie vereist goedkeuring`, 'tool-approval-decline-aria-label': `Actie afwijzen`, 'tool-approval-declined-status': `Hulpmiddel afgewezen`, 'tool-approval-privacy-id-message': str`Uw unieke privacy-ID is ${0}. Bewaar dit ID; u heeft het nodig als u verwijdering van gegevens wilt aanvragen.`, 'tool-approval-privacy-link': `privacyverklaring`, 'tool-approval-share-conversation-consent': `Ik geef toestemming om dit gesprek te delen met de supportmedewerker`, 'tool-approval-share-conversation-description': `Om de supportmedewerker te helpen uw probleem beter te begrijpen, kunt u ervoor kiezen uw gesprek met GAiA te delen. Lees meer over bewaartermijnen en uw rechten in onze`, 'tool-status-no-results': `Geen resultaten gevonden`, 'tool-status-show-less': `Minder tonen`, 'tool-status-show-more': `Meer tonen`, 'tool-status-unable-display-response': `[Kan antwoord niet weergeven]`, 'tooltip-close-chat': `Chat sluiten`, 'tooltip-data-settings': `Gegevensinstellingen`, 'tooltip-new-chat': `Nieuwe chat`, 'tooltip-open-feedback': `Feedback openen`, 'tooltip-settings': `Instellingen`, 'typing-indicator-aria-label': `Operator is aan het typen`, 'context-changed-section-added': `Toegevoegd`, 'context-changed-section-changed': `Gewijzigd`, 'context-changed-section-removed': `Verwijderd`, 'context-changed-divider': `Context gewijzigd`, 'message-attachment-image-alt': `Bijgevoegde afbeelding`, 'message-attachment-pdf-label': `PDF-document`, 'message-attachment-remove': `Bijlage verwijderen`, 'composer-attachment-error-reset': `Bijlagefout wissen`, 'composer-attachment-input-label': `Bestand bijvoegen`, 'composer-attachment-uploading-label': `Bijlage wordt geüpload`, 'composer-attachment-button-label': `Bestand bijvoegen`, 'composer-attachment-uploading-icon-label': `Bijlage wordt geüpload`, 'composer-attachment-icon-label': `Bestand bijvoegen`, 'composer-dictation-aria-label': `Spraakdicteren in-/uitschakelen`, 'composer-stop-aria-label': `Antwoord stoppen`, 'reasoning-thinking-indicator': `Denkt na…`, 'reasoning-thinking-complete': `Denken`, 'sharing-prompt-dialog-title': `Help GAiA verbeteren`, 'sharing-prompt-inline-consent-text': `Door op \"Ja\" te klikken, geef ik toestemming aan Visma Software AS om dit gesprek te bekijken om de service te verbeteren. Ik kan mijn toestemming op elk moment intrekken. Lees meer in onze`, 'sharing-prompt-dialog-privacy-link': `privacyverklaring`, 'sharing-prompt-dialog-yes': `Ja`, 'sharing-prompt-dialog-no': `Nee`, 'history-item-untitled': `Naamloos`, 'history-item-edit-label': `Gesprekstitel`, 'history-item-save': `Opslaan`, 'history-item-cancel': `Annuleren`, 'history-item-rename-aria': `Gesprek hernoemen`, 'history-item-delete-aria': `Gesprek verwijderen`, 'history-region-label': `Gespreksgeschiedenis`, 'history-title': `Geschiedenis`, 'history-loading': `Gesprekken laden…`, 'history-error': `Gesprekken konden niet worden geladen.`, 'history-retry': `Opnieuw proberen`, 'history-empty': `Geen eerdere gesprekken.`, 'history-paging': `Meer wordt geladen…`, 'tooltip-history': `Gespreksgeschiedenis`, }"}],"exports":[{"kind":"js","name":"templates","declaration":{"name":"templates","module":"generated/locales/nl.js"}}]},{"kind":"javascript-module","path":"generated/locales/sv.js","declarations":[{"kind":"variable","name":"templates","type":{"text":"object"},"default":"{ 'activity-support-begin': `Du har kopplats till support`, 'activity-support-end': `Supportsessionen avslutad`, 'app-region-label': `Chattassistent`, 'assistant-message-approve': `Ja`, 'assistant-message-decline': `Nej`, 'attachment-error-too-large': `Bilagan är för stor. Ladda upp en mindre fil.`, 'attachment-error-unsupported-type': `Endast bildfiler och PDF:er som stöds accepteras.`, 'attachment-upload-failed': `Det gick inte att ladda upp bilagan.`, 'canvas-preview-title': `Canvas-förhandsvisning`, 'canvas-render-timeout-error': `Canvas-renderingen överskred tidsgränsen på 30 sekunder`, 'canvas-toolbar-close-canvas': `Stäng canvas`, 'canvas-toolbar-code-tab': `Kod`, 'canvas-toolbar-download-pdf': `Ladda ner PDF`, 'canvas-toolbar-preview-tab': `Förhandsgranskning`, 'citation-link-label': `Källa`, 'citation-link-next': `Nästa källa`, 'citation-link-previous': `Föregående källa`, 'citation-popover-label': `Källhänvisningar`, 'composer-aria-label': `Skriv din fråga här`, 'composer-error-character-limit': `Teckenbegränsningen har överskridits.`, 'composer-placeholder': `Skriv din fråga här...`, 'composer-plugin-empty': `Inga plugins hittades`, 'composer-plugin-loading': `Läser in plugins…`, 'composer-plugin-search-placeholder': `Sök efter plugins`, 'composer-plugin-tools-label': `Verktyg`, 'composer-send-aria-label': `Skicka meddelande`, 'connection-overlay-description': `Vi försöker återansluta. Vänta ett ögonblick.`, 'connection-overlay-title': `Tjänsten är tillfälligt otillgänglig`, 'consent-dialog-consent-text': `Genom att klicka \"Ja\" samtycker jag till att Visma Software AS kan granska denna konversation för att förbättra tjänsten. Jag kan återkalla mitt samtycke när som helst. Läs mer om lagringstider och dina rättigheter i vår`, 'consent-dialog-description': `Hjälp oss att bli bättre! För att bättre förstå din feedback vill vi gärna granska konversationen mellan dig och GAiA.`, 'consent-dialog-no': `Nej`, 'consent-dialog-privacy-link': `integritetspolicy`, 'consent-dialog-title': `Dela samtalshistoriken?`, 'consent-dialog-yes': `Ja`, 'conversation-aria-label': `Konversationsmeddelanden`, 'data-settings-revoke-all': `Återkalla samtycke för tidigare konversationer`, 'data-settings-revoke-error': `Kunde inte återkalla samtycket. Försök igen.`, 'data-settings-revoke-note': `Detta påverkar inte reglaget ovan. Stäng av reglaget för att sluta dela framtida konversationer.`, 'data-settings-revoke-success': `Samtycke återkallat för alla tidigare konversationer`, 'data-settings-sharing-label': `Dela konversationer för att förbättra tjänsten`, 'disclaimer-link': `användarvillkor`, 'disclaimer-text': `Svar genereras av AI och kan innehålla fel, läs mer`, 'error-boundary-fallback': `Något gick fel.`, 'error-forbidden': `Du har inte behörighet till denna åtgärd.`, 'error-network-error': `Nätverksfel. Kontrollera din anslutning.`, 'error-not-found': `Hittades inte.`, 'error-offline': `Du är offline. Kontrollera din anslutning.`, 'error-profile-not-found': `Kunde inte ladda den aktuella profilen. Använder du rätt profil?`, 'error-rate-limit': `För många förfrågningar. Vänligen sakta ner.`, 'error-request-canceled': `Förfrågan avbröts.`, 'error-response-token-limit': `Assistentens svar kan vara ofullständigt eftersom det nådde den maximala gränsen för utdatatoken. Försök igen med en mer specifik fråga eller be assistenten att fortsätta.`, 'error-server-error': `Servern hade ett problem. Vänligen försök igen.`, 'error-session-expired': `Din session har löpt ut. Vänligen logga in igen.`, 'error-something-went-wrong': `Något gick fel.`, 'error-sse-error': `Live-svarströmmen avbröts. Försök igen.`, 'error-unexpected-error': `Oväntat fel. Vänligen försök igen.`, 'error-ws-error': `Fel vid livechattanslutning. Att återansluta kan hjälpa.`, 'feedback-close-aria-label': `Stäng feedbackformulär`, 'feedback-confirmation-message': `Tack för din feedback!`, 'feedback-form-comment-placeholder': `Skriv din kommentar här`, 'feedback-form-comments-title': `Några ytterligare kommentarer?`, 'feedback-form-description': `Dela gärna dina tankar och förslag för att hjälpa oss att bli bättre.`, 'feedback-form-rating-hint-high': `Mycket nöjd`, 'feedback-form-rating-hint-low': `Mycket missnöjd`, 'feedback-form-satisfaction-title--assistant': `Hur nöjd är du med GAiA assistenten?`, 'feedback-form-satisfaction-title--support': `Hur nöjd är du med hjälpen du fick?`, 'feedback-form-submit': `Skicka`, 'feedback-form-title': `Feedback`, 'feedback-privacy-id-copied': `Kopierat`, 'feedback-privacy-id-copy': `Kopiera integritets-ID`, 'feedback-privacy-id-hint': `Vänligen spara detta ID; du behöver det om du vill begära radering av data.`, 'feedback-privacy-id-label': str`Ditt unika integritets-ID är`, 'header-toolbar-label': `Chattåtgärder`, 'history-back-aria': `Tillbaka till chatten`, 'message-aria-label-assistant': `Assistentmeddelande`, 'message-aria-label-operator': `Operatörsmeddelande`, 'message-aria-label-system': `Systemmeddelande`, 'message-aria-label-user': `Ditt meddelande`, 'message-copy-done': `Kopierat`, 'message-copy-label': `Kopiera meddelande`, 'message-feedback-down-label': `Dåligt svar`, 'message-feedback-up-label': `Bra svar`, 'modal-close-label': `Stäng`, 'notification-close-aria-label': `Stäng avisering`, 'opens-in-new-tab': `öppnas i ny flik`, 'session-ended-feedback-prompt': `Hur var din upplevelse med supportoperatören?`, 'session-ended-give-feedback': `Betygsätt din upplevelse`, 'session-ended-new-conversation': `Starta ny konversation`, 'session-ended-title': `Supportsessionen har avslutats`, 'settings-back-aria': `Tillbaka till chatten`, 'settings-back-to-menu-aria': `Tillbaka till inställningarna`, 'settings-plugins-title': `Plugins och verktyg`, 'settings-region-label': `Inställningar`, 'settings-select-tool-aria': str`Välj verktyget ${0}`, 'settings-title': `Inställningar`, 'source-label-fallback': `Källa`, 'spinner-aria-label': `Laddar`, 'suggested-questions-aria-label': `Föreslagna uppföljningsfrågor`, 'tag-dismiss-label': `Ta bort`, 'thinking-indicator-sr-text': `Assistenten tänker`, 'thinking-indicator-text': `Tänker...`, 'tool-approval-approve-aria-label': `Godkänn åtgärd`, 'tool-approval-approved-status': `Verktyg godkänt`, 'tool-approval-aria-label': `Åtgärd kräver godkännande`, 'tool-approval-decline-aria-label': `Avslå åtgärd`, 'tool-approval-declined-status': `Verktyg avvisat`, 'tool-approval-privacy-id-message': str`Ditt unika integritets-ID är ${0}. Vänligen spara detta ID; du kommer att behöva det om du vill begära radering av data.`, 'tool-approval-privacy-link': `integritetspolicy`, 'tool-approval-share-conversation-consent': `Jag samtycker till att dela denna konversation med supportagenten`, 'tool-approval-share-conversation-description': `För att hjälpa supportagenten att bättre förstå ditt ärende kan du välja att dela din konversation med GAiA. Läs mer om lagringstider och dina rättigheter i vår`, 'tool-status-no-results': `Inga resultat hittades`, 'tool-status-show-less': `Visa mindre`, 'tool-status-show-more': `Visa mer`, 'tool-status-unable-display-response': `[Kan inte visa svaret]`, 'tooltip-close-chat': `Stäng chatt`, 'tooltip-data-settings': `Datainställningar`, 'tooltip-new-chat': `Ny chatt`, 'tooltip-open-feedback': `Öppna feedback`, 'tooltip-settings': `Inställningar`, 'typing-indicator-aria-label': `Operatör skriver`, 'context-changed-section-added': `Tillagt`, 'context-changed-section-changed': `Ändrat`, 'context-changed-section-removed': `Borttaget`, 'context-changed-divider': `Kontexten har ändrats`, 'message-attachment-image-alt': `Bifogad bild`, 'message-attachment-pdf-label': `PDF-dokument`, 'message-attachment-remove': `Ta bort bilaga`, 'composer-attachment-error-reset': `Rensa bilagefel`, 'composer-attachment-input-label': `Bifoga en fil`, 'composer-attachment-uploading-label': `Laddar upp bilaga`, 'composer-attachment-button-label': `Bifoga en fil`, 'composer-attachment-uploading-icon-label': `Laddar upp bilaga`, 'composer-attachment-icon-label': `Bifoga en fil`, 'composer-dictation-aria-label': `Slå på/av röstdiktering`, 'composer-stop-aria-label': `Stoppa svaret`, 'reasoning-thinking-indicator': `Tänker…`, 'reasoning-thinking-complete': `Tänker`, 'sharing-prompt-dialog-title': `Hjälp till att förbättra GAiA`, 'sharing-prompt-inline-consent-text': `Genom att klicka på \"Ja\" samtycker jag till att Visma Software AS granskar den här konversationen för att förbättra tjänsten. Jag kan återkalla mitt samtycke när som helst. Läs mer i vår`, 'sharing-prompt-dialog-privacy-link': `integritetspolicy`, 'sharing-prompt-dialog-yes': `Ja`, 'sharing-prompt-dialog-no': `Nej`, 'history-item-untitled': `Namnlös`, 'history-item-edit-label': `Konversationens titel`, 'history-item-save': `Spara`, 'history-item-cancel': `Avbryt`, 'history-item-rename-aria': `Byt namn på konversation`, 'history-item-delete-aria': `Ta bort konversation`, 'history-region-label': `Konversationshistorik`, 'history-title': `Historik`, 'history-loading': `Läser in konversationer…`, 'history-error': `Kunde inte läsa in konversationer.`, 'history-retry': `Försök igen`, 'history-empty': `Inga tidigare konversationer.`, 'history-paging': `Läser in fler…`, 'tooltip-history': `Konversationshistorik`, }"}],"exports":[{"kind":"js","name":"templates","declaration":{"name":"templates","module":"generated/locales/sv.js"}}]},{"kind":"javascript-module","path":"globals.d.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"index.js","declarations":[],"exports":[{"kind":"js","name":"AuthFailedEvent","declaration":{"name":"AuthFailedEvent","package":"@/types"}},{"kind":"js","name":"CanvasLayoutChangedEvent","declaration":{"name":"CanvasLayoutChangedEvent","package":"@/types"}},{"kind":"js","name":"ConversationRestoredEvent","declaration":{"name":"ConversationRestoredEvent","package":"@/types"}},{"kind":"js","name":"InlineQuestionClickEvent","declaration":{"name":"InlineQuestionClickEvent","package":"@/types"}},{"kind":"js","name":"ToolCallEvent","declaration":{"name":"ToolCallEvent","package":"@/types"}},{"kind":"js","name":"validateFrontendTools","declaration":{"name":"validateFrontendTools","package":"@/types"}},{"kind":"js","name":"AuthFailedEventDetail","declaration":{"name":"AuthFailedEventDetail","package":"@/types"}},{"kind":"js","name":"AuthFailedReason","declaration":{"name":"AuthFailedReason","package":"@/types"}},{"kind":"js","name":"ConversationRestoredEventDetail","declaration":{"name":"ConversationRestoredEventDetail","package":"@/types"}},{"kind":"js","name":"ConversationSummary","declaration":{"name":"ConversationSummary","package":"@/types"}},{"kind":"js","name":"FrontendTool","declaration":{"name":"FrontendTool","package":"@/types"}},{"kind":"js","name":"HostContext","declaration":{"name":"HostContext","package":"@/types"}},{"kind":"js","name":"HostContextProvider","declaration":{"name":"HostContextProvider","package":"@/types"}},{"kind":"js","name":"HostContextSnapshot","declaration":{"name":"HostContextSnapshot","package":"@/types"}},{"kind":"js","name":"registerIcons","declaration":{"name":"registerIcons","package":"@/components/primitives/icon/icon-registry"}},{"kind":"js","name":"IconName","declaration":{"name":"IconName","package":"@/components/primitives/icon/icon-registry"}},{"kind":"js","name":"ChatApp","declaration":{"name":"ChatApp","module":"index.js"}}]},{"kind":"javascript-module","path":"services/agent-service.test.js","declarations":[{"kind":"variable","name":"messages"}],"exports":[]},{"kind":"javascript-module","path":"services/agent-service.js","declarations":[{"kind":"function","name":"convertThreadMessages","return":{"type":{"text":"AgUiMessage[]"}},"parameters":[{"name":"messages","type":{"text":"unknown[]"}}],"description":"Convert backend thread messages to AG-UI Message format.\n\nHandles operator messages which come in two formats:\n1. Legacy: `{ role: 'operator', name, avatarUrl, content }`\n2. Current: `{ role: 'assistant', operator: { id, name, email, pictureUrl }, content }`"},{"kind":"class","description":"Service for managing the AG-UI HttpAgent and agent-related API calls.\nAlso serves as the single source of truth for messages via subscription.\n\nAgent lifecycle:\n- `getOrCreateAgent()` creates or reuses an agent for a profile/thread\n- `runAgent()` creates a new agent with fresh headers, runs it, then\n promotes it to `this.agent` only after the run completes. This prevents\n overlapping runs from corrupting the active agent reference.","name":"AgentService","members":[{"kind":"field","name":"agent","type":{"text":"HttpAgent | null"},"privacy":"private","default":"null"},{"kind":"field","name":"activeRunAgent","type":{"text":"HttpAgent | null"},"privacy":"private","default":"null"},{"kind":"field","name":"currentRunAbortController","type":{"text":"AbortController | null"},"privacy":"private","default":"null"},{"kind":"field","name":"currentProfileId","type":{"text":"string | null"},"privacy":"private","default":"null"},{"kind":"field","name":"messageSubscribers","privacy":"private","default":"new Set<MessagesChangedCallback>()"},{"kind":"field","name":"notifyThrottleId","type":{"text":"ReturnType<typeof setTimeout> | null"},"privacy":"private","default":"null"},{"kind":"field","name":"pendingNotify","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"field","name":"converter","privacy":"private","readonly":true,"default":"new MessageConverter()"},{"kind":"method","name":"getCurrentAgent","return":{"type":{"text":"HttpAgent | null"}},"description":"Get the current HttpAgent instance, if one exists.\nDuring an active run, returns the run's agent so messages are read\nfrom the agent that is actively receiving events."},{"kind":"method","name":"getOrCreateAgent","return":{"type":{"text":"HttpAgent"}},"parameters":[{"name":"profileId","type":{"text":"string"}},{"name":"threadId","optional":true,"type":{"text":"string"}}],"description":"Get or create an HttpAgent for the given profile and thread."},{"kind":"method","name":"runAgent","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"agent","type":{"text":"HttpAgent"}},{"name":"parameters","type":{"text":"RunAgentParameters"}},{"name":"subscriber","type":{"text":"AgentSubscriber"}}],"description":"Run the agent with the given parameters.\n\nCreates a new HttpAgent with fresh auth headers for each run.\nThe new agent is set as `activeRunAgent` during execution so that\n`getCurrentAgent()` and `getMessages()` read from the running agent.\nAfter the run completes (success or failure), the agent reference\nis promoted to `this.agent`."},{"kind":"method","name":"abortCurrentRun","return":{"type":{"text":"void"}},"description":"Abort the current agent run if one is in progress."},{"kind":"method","name":"getThreadState","return":{"type":{"text":"Promise<AgUiThreadState>"}},"parameters":[{"name":"threadId","type":{"text":"string"}},{"name":"profileId","optional":true,"type":{"text":"string"}}],"description":"Get thread state from the agent endpoint for rehydration."},{"kind":"method","name":"restoreSession","return":{"type":{"text":""}},"parameters":[{"name":"profileId","type":{"text":"string"},"description":"The profile ID for agent creation"},{"name":"threadId","type":{"text":"string | null"},"description":"The thread ID to restore (null if no stored session)"}],"description":"Restore a session from a stored thread ID.\nFetches thread state and converts messages to AG-UI format."},{"kind":"method","name":"addMessage","return":{"type":{"text":"void"}},"parameters":[{"name":"message","type":{"text":"AgUiMessage"}}],"description":"Add a message to the current agent (AG-UI format).\nNotifies subscribers of the change."},{"kind":"method","name":"setMessages","return":{"type":{"text":"void"}},"parameters":[{"name":"messages","type":{"text":"AgUiMessage[]"}}],"description":"Set messages on the current agent (AG-UI format).\nNotifies subscribers of the change."},{"kind":"method","name":"addInternalMessage","return":{"type":{"text":"void"}},"parameters":[{"name":"message","type":{"text":"InternalMessage"}}],"description":"Add a message using internal types. Converts to AG-UI format internally."},{"kind":"method","name":"setInternalMessages","return":{"type":{"text":"void"}},"parameters":[{"name":"messages","type":{"text":"InternalMessage[]"}}],"description":"Replace all messages using internal types."},{"kind":"method","name":"getInternalMessages","return":{"type":{"text":"InternalMessage[]"}},"description":"Get current messages as InternalMessage[]."},{"kind":"method","name":"getMessages","return":{"type":{"text":"AgUiMessage[]"}},"description":"Get the current agent's messages (AG-UI format)."},{"kind":"method","name":"getState","return":{"type":{"text":"unknown"}},"description":"Get the current agent's state."},{"kind":"method","name":"clear","return":{"type":{"text":"void"}},"description":"Clear the current agent.\nNotifies subscribers of the change."},{"kind":"method","name":"subscribeToMessages","return":{"type":{"text":"() => void"}},"parameters":[{"name":"callback","type":{"text":"MessagesChangedCallback"}}],"description":"Subscribe to message changes.\nReturns an unsubscribe function.\nCallback receives InternalMessage[] (converted from AG-UI)."},{"kind":"method","name":"notifyMessageSubscribers","privacy":"private","return":{"type":{"text":"void"}},"description":"Notify all subscribers of message changes.\nThrottled to ~30fps (33ms) during active streaming to reduce\nredundant mapper calls and re-renders. Fires immediately on the\nfirst call, then defers subsequent calls until the throttle window expires."},{"kind":"method","name":"flushPendingNotify","privacy":"private","return":{"type":{"text":"void"}},"description":"Flush any pending throttled notification."},{"kind":"method","name":"doNotify","privacy":"private","return":{"type":{"text":"void"}},"description":"Deliver messages to all subscribers immediately.\nConverts AG-UI messages to InternalMessage[] before emitting."},{"kind":"method","name":"getAuthHeaders","privacy":"private","return":{"type":{"text":"Promise<Record<string, string>>"}},"description":"Get authentication headers for API requests."}]}],"exports":[{"kind":"js","name":"convertThreadMessages","declaration":{"name":"convertThreadMessages","module":"services/agent-service.js"}},{"kind":"js","name":"AgentService","declaration":{"name":"AgentService","module":"services/agent-service.js"}}]},{"kind":"javascript-module","path":"services/api-client.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"services/api-client.js","declarations":[{"kind":"class","description":"","name":"ApiError","members":[{"kind":"field","name":"isUnauthorized","readonly":true},{"kind":"field","name":"isForbidden","readonly":true},{"kind":"field","name":"isNotFound","readonly":true},{"kind":"field","name":"isServerError","readonly":true},{"kind":"field","name":"isNetworkError","readonly":true},{"kind":"field","name":"name","type":{"text":"string"},"default":"'ApiError'"}],"superclass":{"name":"Error","module":"src/services/api-client.ts"}},{"kind":"function","name":"buildApiError","parameters":[{"name":"res","type":{"text":"Response"}}]},{"kind":"function","name":"ensureOk","parameters":[{"name":"res","type":{"text":"Response"}}]},{"kind":"function","name":"ensureBody","parameters":[{"name":"res","type":{"text":"Response"}}]},{"kind":"function","name":"ensureBodyJson","return":{"type":{"text":"Promise<T>"}},"parameters":[{"name":"res","type":{"text":"Response"}}]},{"kind":"class","description":"","name":"ApiClient","members":[{"kind":"field","name":"version","privacy":"private","readonly":true},{"kind":"field","name":"_baseUrl","type":{"text":"string"},"privacy":"private","default":"baseUrl"},{"kind":"field","name":"authService","type":{"text":"AuthService | null"},"privacy":"private","default":"null"},{"kind":"field","name":"retryConfig","type":{"text":"RetryConfig"},"privacy":"private","default":"{ ...DEFAULT_RETRY_CONFIG, ...retryConfig }"},{"kind":"field","name":"onAuthFailed","type":{"text":"AuthFailedCallback | null"},"privacy":"private","default":"null"},{"kind":"method","name":"setOnAuthFailed","return":{"type":{"text":"void"}},"parameters":[{"name":"callback","type":{"text":"AuthFailedCallback | null"}}]},{"kind":"method","name":"notifyAuthFailed","return":{"type":{"text":"void"}},"parameters":[{"name":"phase","type":{"text":"'acquire' | 'request'"}},{"name":"reason","default":"'unauthorized'","type":{"text":"AuthFailedReason"}}],"description":"Notify the host that auth acquisition failed.\nUsed by AgentService when AG-UI runs fail to acquire auth headers."},{"kind":"field","name":"baseUrl","type":{"text":"string"}},{"kind":"method","name":"setAuthService","return":{"type":{"text":"void"}},"parameters":[{"name":"authService","type":{"text":"AuthService | null"}}],"description":"Set the auth service."},{"kind":"method","name":"getAuthService","return":{"type":{"text":"AuthService | null"}},"description":"Get the current auth service."},{"kind":"method","name":"getAuthHeader","return":{"type":{"text":"Promise<{ name: string; value: string } | null>"}},"description":"Get the current authentication header for external use (e.g., HttpAgent).\nReturns the header name and value based on the current auth service."},{"kind":"method","name":"request","parameters":[{"name":"input","type":{"text":"RequestInfo | URL"}},{"name":"init","default":"{}","type":{"text":"RequestInit"}}]},{"kind":"method","name":"getProfilePluginSelections","return":{"type":{"text":"Promise<ReadonlyArray<AgentPluginSelection>>"}},"parameters":[{"name":"profileId","type":{"text":"string"}}]},{"kind":"method","name":"updateProfilePluginSelections","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"profileId","type":{"text":"string"}},{"name":"activePluginIds","type":{"text":"ReadonlyArray<string>"}}]},{"kind":"method","name":"getProfileToolSelections","return":{"type":{"text":"Promise<ReadonlyArray<AgentToolSelection>>"}},"parameters":[{"name":"profileId","type":{"text":"string"}}]},{"kind":"method","name":"updateProfileToolSelections","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"profileId","type":{"text":"string"}},{"name":"activeTools","type":{"text":"ReadonlyArray<ScopedToolSelection>"}}]},{"kind":"method","name":"updateProfileSelections","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"profileId","type":{"text":"string"}},{"name":"activePluginIds","type":{"text":"ReadonlyArray<string>"}},{"name":"activeTools","type":{"text":"ReadonlyArray<ScopedToolSelection>"}}]},{"kind":"method","name":"retryWithBackoff","privacy":"private","return":{"type":{"text":"Promise<Response>"}},"parameters":[{"name":"sendRequest","type":{"text":"() => Promise<Response>"}},{"name":"lastResponse","type":{"text":"Response"}}]},{"kind":"method","name":"handleAuthRetry","privacy":"private","parameters":[{"name":"sendRequest","type":{"text":"() => Promise<Response>"}}]},{"kind":"method","name":"sendRequestOnce","privacy":"private","parameters":[{"name":"input","type":{"text":"RequestInfo | URL"}},{"name":"init","default":"{}","type":{"text":"RequestInit"}}]},{"kind":"method","name":"composeHeaders","privacy":"private","parameters":[{"name":"initial","type":{"text":"HeadersInit | undefined"}}]},{"kind":"method","name":"formatUrl","privacy":"private","parameters":[{"name":"input","type":{"text":"RequestInfo | URL"}}]}]}],"exports":[{"kind":"js","name":"ApiError","declaration":{"name":"ApiError","module":"services/api-client.js"}},{"kind":"js","name":"buildApiError","declaration":{"name":"buildApiError","module":"services/api-client.js"}},{"kind":"js","name":"ensureOk","declaration":{"name":"ensureOk","module":"services/api-client.js"}},{"kind":"js","name":"ensureBody","declaration":{"name":"ensureBody","module":"services/api-client.js"}},{"kind":"js","name":"ensureBodyJson","declaration":{"name":"ensureBodyJson","module":"services/api-client.js"}},{"kind":"js","name":"ApiClient","declaration":{"name":"ApiClient","module":"services/api-client.js"}}]},{"kind":"javascript-module","path":"services/api-schemas.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"services/api-schemas.js","declarations":[{"kind":"variable","name":"bootstrapConfigSchema"},{"kind":"variable","name":"threadStateSchema"},{"kind":"variable","name":"agentPluginSelectionListSchema"},{"kind":"variable","name":"updateAgentPluginSelectionRequestSchema"},{"kind":"variable","name":"agentToolSelectionListSchema"},{"kind":"variable","name":"updateAgentToolSelectionRequestSchema"},{"kind":"variable","name":"updateAgentSelectionRequestSchema"},{"kind":"variable","name":"conversationSummarySchema"},{"kind":"variable","name":"conversationSummariesSchema"},{"kind":"function","name":"parseBootstrapConfig","parameters":[{"name":"data","type":{"text":"unknown"}}],"description":"Parse and validate a bootstrap config response.\nThrows ZodError on validation failure."},{"kind":"function","name":"parseThreadState","parameters":[{"name":"data","type":{"text":"unknown"}}],"description":"Parse and validate a thread state response.\nThrows ZodError on validation failure."},{"kind":"function","name":"parseAgentPluginSelections","parameters":[{"name":"data","type":{"text":"unknown"}}],"description":"Parse and validate /agent/{profileId}/plugins response.\nThrows ZodError on validation failure."},{"kind":"function","name":"parseUpdateAgentPluginSelectionRequest","parameters":[{"name":"data","type":{"text":"unknown"}}],"description":"Parse and validate /agent/{profileId}/plugins/selection request payload.\nThrows ZodError on validation failure."},{"kind":"function","name":"parseAgentToolSelections","parameters":[{"name":"data","type":{"text":"unknown"}}],"description":"Parse and validate /agent/{profileId}/tools response.\nThrows ZodError on validation failure."},{"kind":"function","name":"parseUpdateAgentToolSelectionRequest","parameters":[{"name":"data","type":{"text":"unknown"}}],"description":"Parse and validate /agent/{profileId}/tools/selection request payload.\nThrows ZodError on validation failure."},{"kind":"function","name":"parseUpdateAgentSelectionRequest","parameters":[{"name":"data","type":{"text":"unknown"}}],"description":"Parse and validate /agent/{profileId}/selection request payload.\nThrows ZodError on validation failure."},{"kind":"function","name":"parseConversationSummaries","parameters":[{"name":"data","type":{"text":"unknown"}}],"description":"Parse and validate the list of conversation summaries returned by\nGET /api/v1/conversations."}],"exports":[{"kind":"js","name":"bootstrapConfigSchema","declaration":{"name":"bootstrapConfigSchema","module":"services/api-schemas.js"}},{"kind":"js","name":"threadStateSchema","declaration":{"name":"threadStateSchema","module":"services/api-schemas.js"}},{"kind":"js","name":"agentPluginSelectionListSchema","declaration":{"name":"agentPluginSelectionListSchema","module":"services/api-schemas.js"}},{"kind":"js","name":"updateAgentPluginSelectionRequestSchema","declaration":{"name":"updateAgentPluginSelectionRequestSchema","module":"services/api-schemas.js"}},{"kind":"js","name":"agentToolSelectionListSchema","declaration":{"name":"agentToolSelectionListSchema","module":"services/api-schemas.js"}},{"kind":"js","name":"updateAgentToolSelectionRequestSchema","declaration":{"name":"updateAgentToolSelectionRequestSchema","module":"services/api-schemas.js"}},{"kind":"js","name":"updateAgentSelectionRequestSchema","declaration":{"name":"updateAgentSelectionRequestSchema","module":"services/api-schemas.js"}},{"kind":"js","name":"conversationSummarySchema","declaration":{"name":"conversationSummarySchema","module":"services/api-schemas.js"}},{"kind":"js","name":"conversationSummariesSchema","declaration":{"name":"conversationSummariesSchema","module":"services/api-schemas.js"}},{"kind":"js","name":"parseBootstrapConfig","declaration":{"name":"parseBootstrapConfig","module":"services/api-schemas.js"}},{"kind":"js","name":"parseThreadState","declaration":{"name":"parseThreadState","module":"services/api-schemas.js"}},{"kind":"js","name":"parseAgentPluginSelections","declaration":{"name":"parseAgentPluginSelections","module":"services/api-schemas.js"}},{"kind":"js","name":"parseUpdateAgentPluginSelectionRequest","declaration":{"name":"parseUpdateAgentPluginSelectionRequest","module":"services/api-schemas.js"}},{"kind":"js","name":"parseAgentToolSelections","declaration":{"name":"parseAgentToolSelections","module":"services/api-schemas.js"}},{"kind":"js","name":"parseUpdateAgentToolSelectionRequest","declaration":{"name":"parseUpdateAgentToolSelectionRequest","module":"services/api-schemas.js"}},{"kind":"js","name":"parseUpdateAgentSelectionRequest","declaration":{"name":"parseUpdateAgentSelectionRequest","module":"services/api-schemas.js"}},{"kind":"js","name":"parseConversationSummaries","declaration":{"name":"parseConversationSummaries","module":"services/api-schemas.js"}}]},{"kind":"javascript-module","path":"services/auth-service.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"services/auth-service.js","declarations":[{"kind":"class","description":"Structured error thrown by AuthService to convey specific failure reasons.","name":"AuthError","members":[{"kind":"field","name":"name","type":{"text":"string"},"default":"'AuthError'"}],"superclass":{"name":"Error","module":"src/services/auth-service.ts"}},{"kind":"class","description":"","name":"AuthService","members":[{"kind":"field","name":"token","type":{"text":"TokenInfo | null"},"privacy":"private","default":"null","description":"Cached token (visitor only — visma never caches)."},{"kind":"field","name":"refreshPromise","type":{"text":"Promise<string | null> | null"},"privacy":"private","default":"null","description":"Deduplication promise for concurrent getToken() calls."},{"kind":"field","name":"lastIdentifier","type":{"text":"string | null"},"privacy":"private","default":"null","description":"Identity tracking — stored separately because visma doesn't cache tokens."},{"kind":"field","name":"generation","type":{"text":"number"},"privacy":"private","default":"0","description":"Monotonically increasing counter to ignore stale/timed-out tokenProvider resolutions."},{"kind":"field","name":"config","type":{"text":"AuthConfig"},"privacy":"private","default":"config"},{"kind":"field","name":"STORAGE_KEY","type":{"text":"string"},"privacy":"private","readonly":true,"default":"'gaia-chat:visitor-token'"},{"kind":"method","name":"updateConfig","return":{"type":{"text":"void"}},"parameters":[{"name":"config","type":{"text":"AuthConfig"}}],"description":"Update the auth configuration.\nCall this when the strategy or token provider changes."},{"kind":"method","name":"getToken","return":{"type":{"text":"Promise<string | null>"}},"description":"Get the current access token, refreshing if necessary.\nThrows AuthError on structural failures. Returns null only on unrecoverable failure."},{"kind":"method","name":"getHeaderName","return":{"type":{"text":"string"}},"description":"Get the HTTP header name for this auth strategy."},{"kind":"method","name":"formatHeader","return":{"type":{"text":"string"}},"parameters":[{"name":"token","type":{"text":"string"}}],"description":"Format the token value for the HTTP header."},{"kind":"method","name":"getIdentifier","return":{"type":{"text":"string | null"}},"description":"Get the user/visitor identifier from the last successful auth."},{"kind":"method","name":"invalidate","return":{"type":{"text":"void"}},"description":"Invalidate the current token and clear storage."},{"kind":"method","name":"getStrategy","return":{"type":{"text":"AuthStrategy"}},"description":"Get the current strategy name."},{"kind":"method","name":"forceRefresh","return":{"type":{"text":"Promise<string | null>"}},"description":"Force a token refresh."},{"kind":"method","name":"getVismaToken","privacy":"private","return":{"type":{"text":"Promise<string | null>"}},"description":"Get a visma token. Never cached — always calls tokenProvider.\nConcurrent calls are deduplicated via refreshPromise."},{"kind":"method","name":"fetchVismaToken","privacy":"private","return":{"type":{"text":"Promise<string | null>"}}},{"kind":"method","name":"refreshVisitor","privacy":"private","return":{"type":{"text":"Promise<string | null>"}}},{"kind":"method","name":"fetchVisitorToken","privacy":"private","return":{"type":{"text":"Promise<string>"}}},{"kind":"method","name":"parseAndValidateToken","privacy":"private","return":{"type":{"text":"TokenInfo"}},"parameters":[{"name":"raw","type":{"text":"string"}}],"description":"Parse and validate a JWT token. Throws AuthError on failure.\n\nSecurity note: We intentionally use decode() without signature verification.\nThis is a frontend client where tokens originate from trusted sources (our\nbackend API or the host app's OAuth provider). The actual signature\nverification happens server-side on every API request. Client-side\nverification would require exposing signing keys, which is a security\nanti-pattern. We only extract exp/sub for caching and display purposes."},{"kind":"method","name":"isExpired","privacy":"private","return":{"type":{"text":"boolean"}},"parameters":[{"name":"token","type":{"text":"TokenInfo"}}]},{"kind":"method","name":"loadFromStorage","privacy":"private","return":{"type":{"text":"void"}}}]}],"exports":[{"kind":"js","name":"AuthError","declaration":{"name":"AuthError","module":"services/auth-service.js"}},{"kind":"js","name":"AuthService","declaration":{"name":"AuthService","module":"services/auth-service.js"}}]},{"kind":"javascript-module","path":"services/conversations-client.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"services/conversations-client.js","declarations":[{"kind":"class","description":"","name":"ConversationsClient","members":[{"kind":"method","name":"list","return":{"type":{"text":"Promise<ConversationSummary[]>"}},"parameters":[{"name":"profileId","type":{"text":"string"}},{"name":"options","default":"{}","type":{"text":"ListConversationsOptions"}}],"description":"List conversations for the given profile, newest first. Pagination uses the\n`offset` query param on the backend; pair it with `limit` to page through\nresults. The call returns fewer than `limit` rows when the end of the list\nis reached — callers use that as the \"hasMore = false\" signal."},{"kind":"method","name":"rename","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"id","type":{"text":"string"}},{"name":"title","type":{"text":"string"}}],"description":"Rename a conversation. The backend rejects empty titles."},{"kind":"method","name":"remove","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"id","type":{"text":"string"}}],"description":"Soft-delete a conversation. Reversible via restore."},{"kind":"method","name":"restore","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"id","type":{"text":"string"}}],"description":"Undo a soft-delete."}]}],"exports":[{"kind":"js","name":"ConversationsClient","declaration":{"name":"ConversationsClient","module":"services/conversations-client.js"}}]},{"kind":"javascript-module","path":"services/index.js","declarations":[],"exports":[{"kind":"js","name":"AgentService","declaration":{"name":"AgentService","module":"./agent-service"}},{"kind":"js","name":"convertThreadMessages","declaration":{"name":"convertThreadMessages","module":"./agent-service"}},{"kind":"js","name":"MessagesChangedCallback","declaration":{"name":"MessagesChangedCallback","module":"./agent-service"}},{"kind":"js","name":"SessionRestoreResult","declaration":{"name":"SessionRestoreResult","module":"./agent-service"}},{"kind":"js","name":"ApiClient","declaration":{"name":"ApiClient","module":"./api-client"}},{"kind":"js","name":"ApiError","declaration":{"name":"ApiError","module":"./api-client"}},{"kind":"js","name":"buildApiError","declaration":{"name":"buildApiError","module":"./api-client"}},{"kind":"js","name":"ensureOk","declaration":{"name":"ensureOk","module":"./api-client"}},{"kind":"js","name":"ensureBody","declaration":{"name":"ensureBody","module":"./api-client"}},{"kind":"js","name":"ensureBodyJson","declaration":{"name":"ensureBodyJson","module":"./api-client"}},{"kind":"js","name":"ApiProblemDetail","declaration":{"name":"ApiProblemDetail","module":"./api-client"}},{"kind":"js","name":"RetryConfig","declaration":{"name":"RetryConfig","module":"./api-client"}},{"kind":"js","name":"parseAgentPluginSelections","declaration":{"name":"parseAgentPluginSelections","module":"./api-schemas"}},{"kind":"js","name":"parseAgentToolSelections","declaration":{"name":"parseAgentToolSelections","module":"./api-schemas"}},{"kind":"js","name":"parseBootstrapConfig","declaration":{"name":"parseBootstrapConfig","module":"./api-schemas"}},{"kind":"js","name":"parseUpdateAgentSelectionRequest","declaration":{"name":"parseUpdateAgentSelectionRequest","module":"./api-schemas"}},{"kind":"js","name":"parseUpdateAgentPluginSelectionRequest","declaration":{"name":"parseUpdateAgentPluginSelectionRequest","module":"./api-schemas"}},{"kind":"js","name":"parseUpdateAgentToolSelectionRequest","declaration":{"name":"parseUpdateAgentToolSelectionRequest","module":"./api-schemas"}},{"kind":"js","name":"parseThreadState","declaration":{"name":"parseThreadState","module":"./api-schemas"}},{"kind":"js","name":"agentPluginSelectionListSchema","declaration":{"name":"agentPluginSelectionListSchema","module":"./api-schemas"}},{"kind":"js","name":"agentToolSelectionListSchema","declaration":{"name":"agentToolSelectionListSchema","module":"./api-schemas"}},{"kind":"js","name":"bootstrapConfigSchema","declaration":{"name":"bootstrapConfigSchema","module":"./api-schemas"}},{"kind":"js","name":"threadStateSchema","declaration":{"name":"threadStateSchema","module":"./api-schemas"}},{"kind":"js","name":"updateAgentSelectionRequestSchema","declaration":{"name":"updateAgentSelectionRequestSchema","module":"./api-schemas"}},{"kind":"js","name":"updateAgentPluginSelectionRequestSchema","declaration":{"name":"updateAgentPluginSelectionRequestSchema","module":"./api-schemas"}},{"kind":"js","name":"updateAgentToolSelectionRequestSchema","declaration":{"name":"updateAgentToolSelectionRequestSchema","module":"./api-schemas"}},{"kind":"js","name":"AuthService","declaration":{"name":"AuthService","module":"./auth-service"}},{"kind":"js","name":"AuthError","declaration":{"name":"AuthError","module":"./auth-service"}},{"kind":"js","name":"AuthConfig","declaration":{"name":"AuthConfig","module":"./auth-service"}},{"kind":"js","name":"AuthStrategy","declaration":{"name":"AuthStrategy","module":"./auth-service"}},{"kind":"js","name":"TokenFetcher","declaration":{"name":"TokenFetcher","module":"./auth-service"}},{"kind":"js","name":"MessageConverter","declaration":{"name":"MessageConverter","module":"./message-converter"}},{"kind":"js","name":"StorageService","declaration":{"name":"StorageService","module":"./storage-service"}},{"kind":"js","name":"LocalStorageService","declaration":{"name":"LocalStorageService","module":"./storage-service"}},{"kind":"js","name":"MapStorageService","declaration":{"name":"MapStorageService","module":"./storage-service"}},{"kind":"js","name":"defaultStorageService","declaration":{"name":"defaultStorageService","module":"./storage-service"}},{"kind":"js","name":"SupportService","declaration":{"name":"SupportService","module":"./support-service"}},{"kind":"js","name":"SupportEventEmitter","declaration":{"name":"SupportEventEmitter","module":"./support-service"}},{"kind":"js","name":"SupportEventMap","declaration":{"name":"SupportEventMap","module":"./support-service"}}]},{"kind":"javascript-module","path":"services/message-converter.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"services/message-converter.js","declarations":[{"kind":"class","description":"","name":"MessageConverter","members":[{"kind":"field","name":"conversionCache","privacy":"private","default":"new WeakMap<AgUiMessage, InternalMessage>()","description":"Cache: AG-UI message → InternalMessage, preserving referential equality for the memoized mapper."},{"kind":"method","name":"toInternal","return":{"type":{"text":"InternalMessage[]"}},"parameters":[{"name":"messages","type":{"text":"AgUiMessage[]"}}],"description":"Convert AG-UI Message[] to InternalMessage[].\n\nPrefix messages (all but the last) are cached so the memoized mapper's\n`isPrefixMatch()` sees stable references and can take the fast path.\nThe last message is always freshly converted because AG-UI may still be\nmutating it (streaming content)."},{"kind":"method","name":"toAgUi","return":{"type":{"text":"AgUiMessage"}},"parameters":[{"name":"msg","type":{"text":"InternalMessage"}}],"description":"Convert InternalMessage back to AG-UI Message for HttpAgent."},{"kind":"method","name":"toAgUiBatch","return":{"type":{"text":"AgUiMessage[]"}},"parameters":[{"name":"messages","type":{"text":"InternalMessage[]"}}],"description":"Convert a batch of InternalMessages to AG-UI format."},{"kind":"method","name":"buildInternalMessage","privacy":"private","return":{"type":{"text":"InternalMessage | null"}},"parameters":[{"name":"msg","type":{"text":"AgUiMessage"}}]},{"kind":"method","name":"extractContentBlocks","privacy":"private","return":{"type":{"text":"InternalContentBlock[]"}},"parameters":[{"name":"msg","type":{"text":"AgUiMessage"}}]},{"kind":"method","name":"extractContent","privacy":"private","return":{"type":{"text":"string"}},"parameters":[{"name":"msg","type":{"text":"AgUiMessage"}}]},{"kind":"method","name":"createUserAgUiMessage","privacy":"private","return":{"type":{"text":"AgUiMessage"}},"parameters":[{"name":"msg","type":{"text":"Extract<InternalMessage, { role: 'user' }>"}}]},{"kind":"method","name":"extractAttachmentsFromContent","privacy":"private","return":{"type":{"text":"{ attachments?: MessageAttachment[] }"}},"parameters":[{"name":"msg","type":{"text":"AgUiMessage"}}]},{"kind":"method","name":"deriveAttachmentName","privacy":"private","return":{"type":{"text":"{ name?: string }"}},"parameters":[{"name":"url","type":{"text":"string"}},{"name":"metadata","optional":true,"type":{"text":"unknown"}}]},{"kind":"method","name":"tryGetAttachmentNameFromMetadata","privacy":"private","return":{"type":{"text":"string | undefined"}},"parameters":[{"name":"metadata","type":{"text":"unknown"}}]}]}],"exports":[{"kind":"js","name":"MessageConverter","declaration":{"name":"MessageConverter","module":"services/message-converter.js"}}]},{"kind":"javascript-module","path":"services/storage-service.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"services/storage-service.js","declarations":[{"kind":"class","description":"","name":"LocalStorageService","members":[{"kind":"method","name":"get","return":{"type":{"text":"T | null"}},"parameters":[{"name":"key","type":{"text":"string"}}]},{"kind":"method","name":"set","return":{"type":{"text":"void"}},"parameters":[{"name":"key","type":{"text":"string"}},{"name":"value","type":{"text":"T"}}]},{"kind":"method","name":"remove","return":{"type":{"text":"void"}},"parameters":[{"name":"key","type":{"text":"string"}}]},{"kind":"method","name":"has","return":{"type":{"text":"boolean"}},"parameters":[{"name":"key","type":{"text":"string"}}]}]},{"kind":"class","description":"","name":"MapStorageService","members":[{"kind":"field","name":"store","privacy":"private","default":"new Map<string, string>()"},{"kind":"method","name":"get","return":{"type":{"text":"T | null"}},"parameters":[{"name":"key","type":{"text":"string"}}]},{"kind":"method","name":"set","return":{"type":{"text":"void"}},"parameters":[{"name":"key","type":{"text":"string"}},{"name":"value","type":{"text":"T"}}]},{"kind":"method","name":"remove","return":{"type":{"text":"void"}},"parameters":[{"name":"key","type":{"text":"string"}}]},{"kind":"method","name":"has","return":{"type":{"text":"boolean"}},"parameters":[{"name":"key","type":{"text":"string"}}]}]},{"kind":"variable","name":"defaultStorageService","type":{"text":"StorageService"},"default":"new LocalStorageService()"}],"exports":[{"kind":"js","name":"LocalStorageService","declaration":{"name":"LocalStorageService","module":"services/storage-service.js"}},{"kind":"js","name":"MapStorageService","declaration":{"name":"MapStorageService","module":"services/storage-service.js"}},{"kind":"js","name":"defaultStorageService","declaration":{"name":"defaultStorageService","module":"services/storage-service.js"}}]},{"kind":"javascript-module","path":"services/support-service.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"services/support-service.js","declarations":[{"kind":"class","description":"","name":"SupportEventEmitter","members":[{"kind":"field","name":"listeners","privacy":"private","default":"new Map<keyof SupportEventMap, Set<Listener<never[]>>>()"},{"kind":"method","name":"on","return":{"type":{"text":"void"}},"parameters":[{"name":"event","type":{"text":"K"}},{"name":"listener","type":{"text":"Listener<SupportEventMap[K]>"}}]},{"kind":"method","name":"off","return":{"type":{"text":"void"}},"parameters":[{"name":"event","type":{"text":"K"}},{"name":"listener","type":{"text":"Listener<SupportEventMap[K]>"}}]},{"kind":"method","name":"emit","return":{"type":{"text":"void"}},"parameters":[{"name":"event","type":{"text":"K"}},{"name":"args","type":{"text":"SupportEventMap[K]"}}]},{"kind":"method","name":"removeAllListeners","return":{"type":{"text":"void"}}}]},{"kind":"class","description":"SupportService handles SignalR connection management and REST API calls for support.\n\nThis service manages:\n- SignalR hub connection for real-time support messaging\n- Operator typing indicators and message tracking\n- REST API calls for sending messages and typing indicators\n\nEvents are emitted via the typed `events` emitter instead of mutable callbacks.","name":"SupportService","members":[{"kind":"field","name":"connection","type":{"text":"HubConnection | undefined"},"privacy":"private"},{"kind":"field","name":"conversationId","type":{"text":"string | undefined"},"privacy":"private"},{"kind":"field","name":"baseUrl","type":{"text":"string | undefined"},"privacy":"private"},{"kind":"field","name":"typingTimeoutMs","type":{"text":"number"},"privacy":"private","readonly":true,"default":"10_000"},{"kind":"field","name":"operatorMsgIdByOp","privacy":"private","readonly":true,"default":"new Map<string, string>()"},{"kind":"field","name":"typingTimeoutByOp","privacy":"private","readonly":true,"default":"new Map<string, number>()"},{"kind":"field","name":"events","readonly":true,"default":"new SupportEventEmitter()","description":"Typed event emitter for support events."},{"kind":"field","name":"tokenFactory","type":{"text":"() => Promise<string>"},"privacy":"private","description":"Get a token factory function for SignalR authentication.","readonly":true},{"kind":"method","name":"isConnected","return":{"type":{"text":"boolean"}},"description":"Check if SignalR connection is active."},{"kind":"method","name":"getConversationId","return":{"type":{"text":"string | undefined"}},"description":"Get the current conversation ID."},{"kind":"method","name":"hasOperatorMessage","return":{"type":{"text":"boolean"}},"parameters":[{"name":"operatorId","type":{"text":"string"}}],"description":"Check if an operator has an active typing/message."},{"kind":"method","name":"getOperatorMessageId","return":{"type":{"text":"string | undefined"}},"parameters":[{"name":"operatorId","type":{"text":"string"}}],"description":"Get the message ID for an operator's current typing/message."},{"kind":"method","name":"setOperatorMessageId","return":{"type":{"text":"void"}},"parameters":[{"name":"operatorId","type":{"text":"string"}},{"name":"messageId","type":{"text":"string"}}],"description":"Track an operator's message ID."},{"kind":"method","name":"removeOperatorMessageId","return":{"type":{"text":"void"}},"parameters":[{"name":"operatorId","type":{"text":"string"}}],"description":"Remove tracking for an operator's message."},{"kind":"method","name":"connect","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"baseUrl","type":{"text":"string"}},{"name":"conversationId","type":{"text":"string"}}],"description":"Connect to the support SignalR hub."},{"kind":"method","name":"disconnect","return":{"type":{"text":"Promise<void>"}},"description":"Disconnect from the support SignalR hub.\nDoes not emit 'session-ended' — callers should handle cleanup themselves."},{"kind":"method","name":"sendMessage","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"conversationId","type":{"text":"string"}},{"name":"content","type":{"text":"string"}}],"description":"Send a message via REST API."},{"kind":"method","name":"sendTyping","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"conversationId","type":{"text":"string"}}],"description":"Send typing indicator via REST API."},{"kind":"method","name":"resolveUrl","privacy":"private","return":{"type":{"text":"string | undefined"}},"parameters":[{"name":"url","type":{"text":"string | undefined"}}],"description":"Resolve a relative URL against the base URL."},{"kind":"method","name":"clearTyping","privacy":"private","return":{"type":{"text":"void"}},"parameters":[{"name":"operatorId","type":{"text":"string"}}],"description":"Clear typing timeout for an operator."},{"kind":"method","name":"scheduleTypingRemoval","privacy":"private","return":{"type":{"text":"void"}},"parameters":[{"name":"operatorId","type":{"text":"string"}}],"description":"Schedule removal of typing indicator after timeout."},{"kind":"method","name":"handleTyping","privacy":"private","return":{"type":{"text":"void"}},"parameters":[{"name":"data","type":{"text":"TypingMessageDto"}}],"description":"Handle incoming typing event from SignalR."},{"kind":"method","name":"handleText","privacy":"private","return":{"type":{"text":"void"}},"parameters":[{"name":"data","type":{"text":"TextMessageDto"}}],"description":"Handle incoming text message from SignalR."},{"kind":"method","name":"handleClose","privacy":"private","return":{"type":{"text":"void"}},"parameters":[{"name":"_data","type":{"text":"CloseMessageDto"}}],"description":"Handle close event from SignalR."}]}],"exports":[{"kind":"js","name":"SupportEventEmitter","declaration":{"name":"SupportEventEmitter","module":"services/support-service.js"}},{"kind":"js","name":"SupportService","declaration":{"name":"SupportService","module":"services/support-service.js"}}]},{"kind":"javascript-module","path":"test/canvas-store.helper.js","declarations":[{"kind":"function","name":"createMockCanvasStore","parameters":[{"name":"overrides","optional":true,"type":{"text":"Partial<CanvasState>"}}]}],"exports":[{"kind":"js","name":"createMockCanvasStore","declaration":{"name":"createMockCanvasStore","module":"test/canvas-store.helper.js"}}]},{"kind":"javascript-module","path":"test/message.builder.js","declarations":[{"kind":"class","description":"USER","name":"UserMessageBuilder","members":[{"kind":"method","name":"withContent","parameters":[{"name":"content","type":{"text":"string"}}]},{"kind":"field","name":"msg","type":{"text":"TMessage"},"privacy":"protected","default":"{ id: newId(), ...seed, }","inheritedFrom":{"name":"BaseMessageBuilder","module":"test/message.builder.js"}},{"kind":"method","name":"withId","parameters":[{"name":"id","type":{"text":"string"}}],"inheritedFrom":{"name":"BaseMessageBuilder","module":"test/message.builder.js"}},{"kind":"method","name":"mutate","parameters":[{"name":"fn","type":{"text":"(msg: TMessage) => void"}}],"inheritedFrom":{"name":"BaseMessageBuilder","module":"test/message.builder.js"}},{"kind":"method","name":"build","return":{"type":{"text":"TMessage"}},"inheritedFrom":{"name":"BaseMessageBuilder","module":"test/message.builder.js"}}],"superclass":{"name":"BaseMessageBuilder","module":"src/test/message.builder.ts"}},{"kind":"class","description":"ASSISTANT","name":"AssistantMessageBuilder","members":[{"kind":"method","name":"withContent","parameters":[{"name":"content","type":{"text":"string"}}]},{"kind":"method","name":"withToolCalls","parameters":[{"name":"calls","type":{"text":"ToolCall[]"}}]},{"kind":"method","name":"addToolCall","parameters":[{"name":"call","type":{"text":"ToolCall"}}]},{"kind":"field","name":"msg","type":{"text":"TMessage"},"privacy":"protected","default":"{ id: newId(), ...seed, }","inheritedFrom":{"name":"BaseMessageBuilder","module":"test/message.builder.js"}},{"kind":"method","name":"withId","parameters":[{"name":"id","type":{"text":"string"}}],"inheritedFrom":{"name":"BaseMessageBuilder","module":"test/message.builder.js"}},{"kind":"method","name":"mutate","parameters":[{"name":"fn","type":{"text":"(msg: TMessage) => void"}}],"inheritedFrom":{"name":"BaseMessageBuilder","module":"test/message.builder.js"}},{"kind":"method","name":"build","return":{"type":{"text":"TMessage"}},"inheritedFrom":{"name":"BaseMessageBuilder","module":"test/message.builder.js"}}],"superclass":{"name":"BaseMessageBuilder","module":"src/test/message.builder.ts"}},{"kind":"class","description":"OPERATOR","name":"OperatorMessageBuilder","members":[{"kind":"method","name":"withOperatorInfo","parameters":[{"name":"info","type":{"text":"Operator"}}]},{"kind":"method","name":"withContent","parameters":[{"name":"content","type":{"text":"string"}}]},{"kind":"method","name":"typing","parameters":[{"name":"isTyping","default":"true"}]},{"kind":"field","name":"msg","type":{"text":"TMessage"},"privacy":"protected","default":"{ id: newId(), ...seed, }","inheritedFrom":{"name":"BaseMessageBuilder","module":"test/message.builder.js"}},{"kind":"method","name":"withId","parameters":[{"name":"id","type":{"text":"string"}}],"inheritedFrom":{"name":"BaseMessageBuilder","module":"test/message.builder.js"}},{"kind":"method","name":"mutate","parameters":[{"name":"fn","type":{"text":"(msg: TMessage) => void"}}],"inheritedFrom":{"name":"BaseMessageBuilder","module":"test/message.builder.js"}},{"kind":"method","name":"build","return":{"type":{"text":"TMessage"}},"inheritedFrom":{"name":"BaseMessageBuilder","module":"test/message.builder.js"}}],"superclass":{"name":"BaseMessageBuilder","module":"src/test/message.builder.ts"}},{"kind":"variable","name":"MessageBuilder","type":{"text":"object"},"default":"{ user: () => new UserMessageBuilder(), assistant: () => new AssistantMessageBuilder(), operator: () => new OperatorMessageBuilder(), }","description":"Convenience factory"}],"exports":[{"kind":"js","name":"UserMessageBuilder","declaration":{"name":"UserMessageBuilder","module":"test/message.builder.js"}},{"kind":"js","name":"AssistantMessageBuilder","declaration":{"name":"AssistantMessageBuilder","module":"test/message.builder.js"}},{"kind":"js","name":"OperatorMessageBuilder","declaration":{"name":"OperatorMessageBuilder","module":"test/message.builder.js"}},{"kind":"js","name":"MessageBuilder","declaration":{"name":"MessageBuilder","module":"test/message.builder.js"}}]},{"kind":"javascript-module","path":"test/store.helper.js","declarations":[{"kind":"function","name":"createMockChatStore","parameters":[{"name":"overrides","optional":true,"type":{"text":"Partial<ChatStoreState>"}}]}],"exports":[{"kind":"js","name":"createMockChatStore","declaration":{"name":"createMockChatStore","module":"test/store.helper.js"}}]},{"kind":"javascript-module","path":"test/vitest.setup.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"types/events.js","declarations":[{"kind":"class","description":"","name":"PublicEvent","superclass":{"name":"CustomEvent","module":"src/types/events.ts"}},{"kind":"class","description":"","name":"AuthFailedEvent","superclass":{"name":"PublicEvent","module":"src/types/events.ts"}},{"kind":"class","description":"","name":"ConversationClearedEvent","superclass":{"name":"PublicEvent","module":"src/types/events.ts"}},{"kind":"class","description":"","name":"MessageSentEvent","superclass":{"name":"PublicEvent","module":"src/types/events.ts"}},{"kind":"class","description":"","name":"ToolCallApprovedEvent","superclass":{"name":"PublicEvent","module":"src/types/events.ts"}},{"kind":"class","description":"","name":"ToolCallDeclinedEvent","superclass":{"name":"PublicEvent","module":"src/types/events.ts"}},{"kind":"class","description":"","name":"FeedbackSubmittedEvent","superclass":{"name":"PublicEvent","module":"src/types/events.ts"}},{"kind":"class","description":"","name":"CloseRequestedEvent","superclass":{"name":"PublicEvent","module":"src/types/events.ts"}},{"kind":"class","description":"","name":"InlineQuestionClickEvent","superclass":{"name":"PublicEvent","module":"src/types/events.ts"}},{"kind":"class","description":"","name":"ToolCallEvent","superclass":{"name":"PublicEvent","module":"src/types/events.ts"}},{"kind":"class","description":"","name":"CanvasLayoutChangedEvent","superclass":{"name":"PublicEvent","module":"src/types/events.ts"}},{"kind":"class","description":"","name":"FeedbackClosedEvent","superclass":{"name":"PublicEvent","module":"src/types/events.ts"}},{"kind":"class","description":"","name":"ConversationRestoredEvent","superclass":{"name":"PublicEvent","module":"src/types/events.ts"}}],"exports":[{"kind":"js","name":"PublicEvent","declaration":{"name":"PublicEvent","module":"types/events.js"}},{"kind":"js","name":"AuthFailedEvent","declaration":{"name":"AuthFailedEvent","module":"types/events.js"}},{"kind":"js","name":"ConversationClearedEvent","declaration":{"name":"ConversationClearedEvent","module":"types/events.js"}},{"kind":"js","name":"MessageSentEvent","declaration":{"name":"MessageSentEvent","module":"types/events.js"}},{"kind":"js","name":"ToolCallApprovedEvent","declaration":{"name":"ToolCallApprovedEvent","module":"types/events.js"}},{"kind":"js","name":"ToolCallDeclinedEvent","declaration":{"name":"ToolCallDeclinedEvent","module":"types/events.js"}},{"kind":"js","name":"FeedbackSubmittedEvent","declaration":{"name":"FeedbackSubmittedEvent","module":"types/events.js"}},{"kind":"js","name":"CloseRequestedEvent","declaration":{"name":"CloseRequestedEvent","module":"types/events.js"}},{"kind":"js","name":"InlineQuestionClickEvent","declaration":{"name":"InlineQuestionClickEvent","module":"types/events.js"}},{"kind":"js","name":"ToolCallEvent","declaration":{"name":"ToolCallEvent","module":"types/events.js"}},{"kind":"js","name":"CanvasLayoutChangedEvent","declaration":{"name":"CanvasLayoutChangedEvent","module":"types/events.js"}},{"kind":"js","name":"FeedbackClosedEvent","declaration":{"name":"FeedbackClosedEvent","module":"types/events.js"}},{"kind":"js","name":"ConversationRestoredEvent","declaration":{"name":"ConversationRestoredEvent","module":"types/events.js"}}]},{"kind":"javascript-module","path":"types/frontend-tool.js","declarations":[{"kind":"function","name":"validateFrontendTools","return":{"type":{"text":"FrontendTool[]"}},"parameters":[{"name":"tools","type":{"text":"FrontendTool[]"}}],"description":"Validates an array of FrontendTools, logging warnings for any issues.\nInvalid tools are filtered out and only valid tools are returned."}],"exports":[{"kind":"js","name":"validateFrontendTools","declaration":{"name":"validateFrontendTools","module":"types/frontend-tool.js"}}]},{"kind":"javascript-module","path":"types/host-context.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"types/index.js","declarations":[],"exports":[{"kind":"js","name":"AuthFailedEvent","declaration":{"name":"AuthFailedEvent","module":"./events"}},{"kind":"js","name":"CanvasLayoutChangedEvent","declaration":{"name":"CanvasLayoutChangedEvent","module":"./events"}},{"kind":"js","name":"CloseRequestedEvent","declaration":{"name":"CloseRequestedEvent","module":"./events"}},{"kind":"js","name":"ConversationClearedEvent","declaration":{"name":"ConversationClearedEvent","module":"./events"}},{"kind":"js","name":"ConversationRestoredEvent","declaration":{"name":"ConversationRestoredEvent","module":"./events"}},{"kind":"js","name":"FeedbackSubmittedEvent","declaration":{"name":"FeedbackSubmittedEvent","module":"./events"}},{"kind":"js","name":"InlineQuestionClickEvent","declaration":{"name":"InlineQuestionClickEvent","module":"./events"}},{"kind":"js","name":"MessageSentEvent","declaration":{"name":"MessageSentEvent","module":"./events"}},{"kind":"js","name":"PublicEvent","declaration":{"name":"PublicEvent","module":"./events"}},{"kind":"js","name":"ToolCallApprovedEvent","declaration":{"name":"ToolCallApprovedEvent","module":"./events"}},{"kind":"js","name":"ToolCallDeclinedEvent","declaration":{"name":"ToolCallDeclinedEvent","module":"./events"}},{"kind":"js","name":"ToolCallEvent","declaration":{"name":"ToolCallEvent","module":"./events"}},{"kind":"js","name":"AuthFailedEventDetail","declaration":{"name":"AuthFailedEventDetail","module":"./events"}},{"kind":"js","name":"AuthFailedReason","declaration":{"name":"AuthFailedReason","module":"./events"}},{"kind":"js","name":"ConversationRestoredEventDetail","declaration":{"name":"ConversationRestoredEventDetail","module":"./events"}},{"kind":"js","name":"FrontendTool","declaration":{"name":"FrontendTool","module":"./frontend-tool"}},{"kind":"js","name":"validateFrontendTools","declaration":{"name":"validateFrontendTools","module":"./frontend-tool"}},{"kind":"js","name":"AgUiContextEntry","declaration":{"name":"AgUiContextEntry","module":"./host-context"}},{"kind":"js","name":"HostContext","declaration":{"name":"HostContext","module":"./host-context"}},{"kind":"js","name":"HostContextProvider","declaration":{"name":"HostContextProvider","module":"./host-context"}},{"kind":"js","name":"ConversationSummary","declaration":{"name":"ConversationSummary","package":"@/core/types"}},{"kind":"js","name":"HostContextSnapshot","declaration":{"name":"HostContextSnapshot","package":"@/core/types"}},{"kind":"js","name":"MessageAttachment","declaration":{"name":"MessageAttachment","module":"./message-attachment"}}]},{"kind":"javascript-module","path":"types/message-attachment.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"utils/polling-task.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"utils/polling-task.js","declarations":[{"kind":"class","description":"","name":"PollingTask","members":[{"kind":"field","name":"timer","type":{"text":"ReturnType<typeof setInterval> | undefined"},"privacy":"private"},{"kind":"field","name":"executing","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"method","name":"execute","privacy":"private","return":{"type":{"text":"void"}}},{"kind":"method","name":"start","return":{"type":{"text":"void"}}},{"kind":"method","name":"stop","return":{"type":{"text":"void"}}},{"kind":"field","name":"running","type":{"text":"boolean"},"readonly":true}]}],"exports":[{"kind":"js","name":"PollingTask","declaration":{"name":"PollingTask","module":"utils/polling-task.js"}}]},{"kind":"javascript-module","path":"utils/suggested-question-tags.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"utils/suggested-question-tags.js","declarations":[{"kind":"function","name":"extractSuggestedQuestions","return":{"type":{"text":"{\n cleanContent: string;\n questions: string[];\n}"}},"parameters":[{"name":"content","type":{"text":"string"}}]}],"exports":[{"kind":"js","name":"extractSuggestedQuestions","declaration":{"name":"extractSuggestedQuestions","module":"utils/suggested-question-tags.js"}}]}],"package":{"name":"@visma-swno/gaia-chat-ui","description":"Web component library for the Gaia Assistant Chat UI","version":"5.1.0","author":"Visma Software Nordic","license":"UNLICENSED"}}
|
|
1
|
+
{"schemaVersion":"1.0.0","readme":"","modules":[{"kind":"javascript-module","path":"app/app.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"app/app.styles.js"}}]},{"kind":"javascript-module","path":"app/app.js","declarations":[{"kind":"class","description":"Root chat widget component.\n\nBootstraps services, manages authentication, and renders the chat UI.\nEmbed in any page to add AI-powered chat with support handoff.","name":"ChatApp","members":[{"kind":"field","name":"baseUrl","type":{"text":"string"},"default":"'https://api.assistant.stag.vsn.dev'","description":"Backend API base URL.","attribute":"base-url"},{"kind":"field","name":"profileId","type":{"text":"string"},"default":"'default'","description":"Assistant profile identifier.","attribute":"profile-id"},{"kind":"field","name":"tokenProvider","type":{"text":"TokenFetcher | undefined"},"privacy":"public","description":"Function (sync or async) that returns an OAuth access token for Visma Connect auth."},{"kind":"field","name":"hostContextProvider","type":{"text":"HostContextProvider | undefined"},"privacy":"public","description":"Async function that returns application context sent with each message."},{"kind":"field","name":"authStrategy","type":{"text":"StrategyType"},"default":"'visitor'","description":"Authentication strategy: \"visitor\" (anonymous) or \"visma\" (Visma Connect).","attribute":"auth-strategy"},{"kind":"field","name":"closeable","type":{"text":"boolean"},"default":"true","description":"Whether to show a close button in the header.","attribute":"closeable","reflects":true},{"kind":"field","name":"enableHistory","type":{"text":"boolean"},"default":"true","description":"Whether to show the conversation history button in the header.","attribute":"enable-history","reflects":true},{"kind":"field","name":"conversationId","type":{"text":"string"},"default":"''","description":"Host-provided conversation id (#2644). When set, this conversation is\nrestored instead of the one persisted in localStorage. The localStorage\nvalue is **not** overwritten — clearing the attribute returns the widget\nto that previous conversation. Empty string is treated as unset.","attribute":"conversation-id"},{"kind":"field","name":"tools","type":{"text":"FrontendTool[]"},"privacy":"public","default":"[]","description":"Frontend tool definitions sent to the agent."},{"kind":"field","name":"readonlyMode","type":{"text":"boolean"},"default":"false","description":"Readonly mode: hides the composer, header actions, and connection overlay.\nUse `setReadonlyMessages()` to inject messages for display.","attribute":"readonly","reflects":true},{"kind":"field","name":"activeLang","type":{"text":"string"},"privacy":"private","readonly":true},{"kind":"field","name":"langObserver","type":{"text":"MutationObserver | undefined"},"privacy":"private"},{"kind":"field","name":"store","type":{"text":"ChatStore"},"privacy":"private"},{"kind":"field","name":"canvasStore","type":{"text":"CanvasStore"},"privacy":"private"},{"kind":"field","name":"canvasEnabled","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"field","name":"canvasActive","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"field","name":"canvasExpanded","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"field","name":"supportSessionEnded","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"field","name":"historyOpen","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"field","name":"settingsOpen","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"field","name":"attachmentsEnabled","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"field","name":"supportConnected","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"field","name":"isDraggingOver","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"field","name":"dragDepth","type":{"text":"number"},"privacy":"private","default":"0"},{"kind":"field","name":"disposables","privacy":"private","default":"new DisposableController(this)"},{"kind":"field","name":"ctx","type":{"text":"ChatContext"},"privacy":"private"},{"kind":"field","name":"handleInlineQuestionClick","privacy":"private","default":"(async (e: CustomEvent<{ question: string }>) => { const question = e.detail.question; const hostContext = this.hostContextProvider ? await this.hostContextProvider() : null; this.store.sendMessage(question, this.profileId, hostContext, { source: 'suggested_question' }); this.dispatchEvent(new MessageSentEvent(question, 'assistant')); })"},{"kind":"method","name":"handleAuthChanged","privacy":"private","parameters":[{"name":"conversationIdOverride","optional":true,"type":{"text":"string | null"}}]},{"kind":"method","name":"applyConversationIdOverride","privacy":"private","description":"Reconcile the chat surface with the current `conversation-id` attribute\nwhen no auth-related prop changed alongside it. Non-empty value → scoped\nrestore (no localStorage write). Empty/absent → fall back to the\nlocalStorage-backed conversation via `loadHistory`."},{"kind":"method","name":"toggleHostAttribute","privacy":"private","parameters":[{"name":"name","type":{"text":"string"}},{"name":"force","type":{"text":"boolean"}}]},{"kind":"field","name":"handleKeyDown","privacy":"private"},{"kind":"method","name":"patchCurrentMessageHostContext","privacy":"public","return":{"type":{"text":"void"}},"parameters":[{"name":"props","type":{"text":"Record<string, unknown>"}}],"description":"Retroactively update the host-context snapshot for the most recent user\nmessage. Call this after a mid-run context confirmation (e.g. a frontend\ntool) so the \"Context changed\" divider renders immediately."},{"kind":"method","name":"getActiveHostContext","privacy":"public","return":{"type":{"text":"HostContext | null"}},"description":"Returns the host-context snapshot persisted for the active conversation,\nshaped as a HostContext, or `null` when none is available.\n\nThe localStorage-backed restore path (`loadHistory`) hydrates this snapshot\nbut does not emit ConversationRestoredEvent, so a host app that\nsupplies context via `hostContextProvider` can read it here to keep\nfollow-up messages scoped to the restored tenant/company after a refresh."},{"kind":"field","name":"canAcceptDrop","type":{"text":"boolean"},"privacy":"private","description":"Whether a file dragged over the widget can currently be attached.","readonly":true},{"kind":"field","name":"composer","type":{"text":"GaiaMessageComposer | null"},"privacy":"private","readonly":true},{"kind":"method","name":"dragContainsFiles","privacy":"private","return":{"type":{"text":"boolean"}},"parameters":[{"name":"event","type":{"text":"DragEvent"}}]},{"kind":"method","name":"handleDragEnter","privacy":"private","parameters":[{"name":"event","type":{"text":"DragEvent"}}]},{"kind":"method","name":"handleDragOver","privacy":"private","parameters":[{"name":"event","type":{"text":"DragEvent"}}]},{"kind":"method","name":"handleDragLeave","privacy":"private","parameters":[{"name":"event","type":{"text":"DragEvent"}}]},{"kind":"method","name":"handleDrop","privacy":"private","parameters":[{"name":"event","type":{"text":"DragEvent"}}]},{"kind":"method","name":"clearConversation","privacy":"public","return":{"type":{"text":"void"}},"description":"Clears the current conversation and resets the chat."},{"kind":"method","name":"stopSupport","privacy":"public","return":{"type":{"text":"void"}},"description":"Stops any active support session."},{"kind":"method","name":"sendMessage","privacy":"public","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"message","type":{"text":"string"}}],"description":"Sends a message programmatically after the chat has initialized."},{"kind":"method","name":"setReadonlyMessages","privacy":"public","return":{"type":{"text":"void"}},"parameters":[{"name":"messages","type":{"text":"ReadonlyArray<Record<string, unknown>>"},"description":"AG-UI format message objects from the backend."},{"name":"thumbs","optional":true,"type":{"text":"Readonly<Record<string, string>>"},"description":"Optional map of messageId → \"up\" | \"down\" for feedback indicators."}],"description":"Inject messages for readonly display. Accepts AG-UI format messages\n(as returned by the inspect API) and runs them through the full message\npipeline so tool calls, search results, reasoning, and citations all\nrender correctly."},{"kind":"method","name":"waitForInitialization","privacy":"private","return":{"type":{"text":"Promise<void>"}}},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"events":[{"name":"shouldExpand","type":{"text":"CanvasLayoutChangedEvent"}},{"name":"trimmedMessage","type":{"text":"MessageSentEvent"}},{"type":{"text":"ConversationClearedEvent"},"description":"When the user clears the conversation","name":"conversation-cleared"},{"type":{"text":"ConversationRestoredEvent"},"description":"When a conversation is restored from history, carrying the persisted host-context snapshot so the host app can re-orient to the tenant / customer / company it was about.","name":"conversation-restored"},{"type":{"text":"MessageSentEvent"},"description":"When the user sends a message","name":"message-sent"},{"type":{"text":"ToolCallApprovedEvent"},"description":"When the user approves a tool call","name":"tool-call-approved"},{"type":{"text":"ToolCallDeclinedEvent"},"description":"When the user declines a tool call","name":"tool-call-declined"},{"type":{"text":"FeedbackSubmittedEvent"},"description":"When the user submits feedback","name":"feedback-submitted"},{"type":{"text":"CloseRequestedEvent"},"description":"When the user clicks the close button","name":"close-requested"},{"type":{"text":"ToolCallEvent"},"description":"When a frontend tool call is executed","name":"tool-call"}],"attributes":[{"name":"base-url","type":{"text":"string"},"default":"'https://api.assistant.stag.vsn.dev'","description":"Backend API base URL.","fieldName":"baseUrl"},{"name":"profile-id","type":{"text":"string"},"default":"'default'","description":"Assistant profile identifier.","fieldName":"profileId"},{"name":"auth-strategy","type":{"text":"StrategyType"},"default":"'visitor'","description":"Authentication strategy: \"visitor\" (anonymous) or \"visma\" (Visma Connect).","fieldName":"authStrategy"},{"name":"closeable","type":{"text":"boolean"},"default":"true","description":"Whether to show a close button in the header.","fieldName":"closeable"},{"name":"enable-history","type":{"text":"boolean"},"default":"true","description":"Whether to show the conversation history button in the header.","fieldName":"enableHistory"},{"name":"conversation-id","type":{"text":"string"},"default":"''","description":"Host-provided conversation id (#2644). When set, this conversation is\nrestored instead of the one persisted in localStorage. The localStorage\nvalue is **not** overwritten — clearing the attribute returns the widget\nto that previous conversation. Empty string is treated as unset.","fieldName":"conversationId"},{"name":"readonly","type":{"text":"boolean"},"default":"false","description":"Readonly mode: hides the composer, header actions, and connection overlay.\nUse `setReadonlyMessages()` to inject messages for display.","fieldName":"readonlyMode"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-chat","customElement":true}],"exports":[{"kind":"js","name":"ChatApp","declaration":{"name":"ChatApp","module":"app/app.js"}},{"kind":"custom-element-definition","name":"gaia-chat","declaration":{"name":"ChatApp","module":"app/app.js"}}]},{"kind":"javascript-module","path":"app/chat-context.js","declarations":[{"kind":"function","name":"createChatContext","return":{"type":{"text":"ChatContext"}},"parameters":[{"name":"host","type":{"text":"ReactiveControllerHost & HTMLElement"}},{"name":"baseUrl","type":{"text":"string"}}],"description":"Create the full chat context: API client, services, stores, and canvas wiring."},{"kind":"function","name":"subscribeAutoSupport","return":{"type":{"text":"() => void"}},"parameters":[{"name":"store","type":{"text":"ChatStore"}},{"name":"getBaseUrl","type":{"text":"() => string"}}],"description":"Subscribe to store state and auto-start support when channel switches.\r\nReturns an unsubscribe function.\r\n\r\nTracks previous channel in a dedicated variable to avoid dependency\r\non subscription ordering with other store subscribers."}],"exports":[{"kind":"js","name":"createChatContext","declaration":{"name":"createChatContext","module":"app/chat-context.js"}},{"kind":"js","name":"subscribeAutoSupport","declaration":{"name":"subscribeAutoSupport","module":"app/chat-context.js"}}]},{"kind":"javascript-module","path":"app/localization.js","declarations":[{"kind":"variable","name":"{ getLocale, setLocale }"},{"kind":"function","name":"parseLocaleCode","parameters":[{"name":"locale","type":{"text":"string"}}]}],"exports":[{"kind":"js","name":"{ getLocale, setLocale }","declaration":{"name":"{ getLocale, setLocale }","module":"app/localization.js"}},{"kind":"js","name":"parseLocaleCode","declaration":{"name":"parseLocaleCode","module":"app/localization.js"}}]},{"kind":"javascript-module","path":"components/canvas/canvas-code-view/canvas-code-view.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"components/canvas/canvas-code-view/canvas-code-view.js","declarations":[{"kind":"class","description":"Code viewer for canvas content.\n\nRenders code in a plain `<pre><code>` block.","name":"CanvasCodeView","members":[{"kind":"field","name":"content","type":{"text":"string"},"default":"''","attribute":"content"},{"kind":"field","name":"language","type":{"text":"string"},"default":"'tsx'","attribute":"language"},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"attributes":[{"name":"content","type":{"text":"string"},"default":"''","fieldName":"content"},{"name":"language","type":{"text":"string"},"default":"'tsx'","fieldName":"language"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-canvas-code-view","customElement":true}],"exports":[{"kind":"js","name":"CanvasCodeView","declaration":{"name":"CanvasCodeView","module":"components/canvas/canvas-code-view/canvas-code-view.js"}},{"kind":"custom-element-definition","name":"gaia-canvas-code-view","declaration":{"name":"CanvasCodeView","module":"components/canvas/canvas-code-view/canvas-code-view.js"}}]},{"kind":"javascript-module","path":"components/canvas/canvas-revision-selector/canvas-revision-selector.test.js","declarations":[{"kind":"class","description":"","name":"TestWrapper","members":[{"kind":"field","name":"store","default":"sharedStore","type":{"text":"MockCanvasStore"}}],"superclass":{"name":"LitElement","package":"lit"},"tagName":"test-wrapper-canvas-revision-selector","customElement":true}],"exports":[{"kind":"custom-element-definition","name":"test-wrapper-canvas-revision-selector","declaration":{"name":"TestWrapper","module":"components/canvas/canvas-revision-selector/canvas-revision-selector.test.js"}}]},{"kind":"javascript-module","path":"components/canvas/canvas-revision-selector/canvas-revision-selector.js","declarations":[{"kind":"class","description":"Dropdown selector for switching between canvas revisions.\n\nWhen multiple revisions exist, renders a `<select>` with version\nlabels. Otherwise shows a static version number.","name":"CanvasRevisionSelector","members":[{"kind":"field","name":"ctrl","privacy":"private","default":"new CanvasStoreController(this, (s) => ({ revisions: s.revisions, activeRevisionIndex: s.activeRevisionIndex, revision: s.revision, }))"},{"kind":"method","name":"handleChange","privacy":"private","parameters":[{"name":"e","type":{"text":"CustomEvent<{ value: string }>"}}]},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-canvas-revision-selector","customElement":true}],"exports":[{"kind":"js","name":"CanvasRevisionSelector","declaration":{"name":"CanvasRevisionSelector","module":"components/canvas/canvas-revision-selector/canvas-revision-selector.js"}},{"kind":"custom-element-definition","name":"gaia-canvas-revision-selector","declaration":{"name":"CanvasRevisionSelector","module":"components/canvas/canvas-revision-selector/canvas-revision-selector.js"}}]},{"kind":"javascript-module","path":"components/canvas/canvas-toolbar/canvas-toolbar.stories.js","declarations":[{"kind":"class","description":"","name":"StoryCanvasToolbarWrapper","members":[{"kind":"field","name":"store","default":"createCanvasStore() as unknown"}],"superclass":{"name":"LitElement","package":"lit"},"tagName":"story-canvas-toolbar-wrapper","customElement":true},{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Canvas/Toolbar', component: 'gaia-canvas-toolbar', }"},{"kind":"variable","name":"Default","type":{"text":"Story"},"default":"{ render: () => withCanvasStore( { title: 'My Canvas', activeTab: 'code', status: 'ready', kind: 'react-app', }, html`<gaia-canvas-toolbar></gaia-canvas-toolbar>` ), }"},{"kind":"variable","name":"PreviewTabActive","type":{"text":"Story"},"default":"{ render: () => withCanvasStore( { title: 'My Canvas', activeTab: 'preview', status: 'ready', kind: 'react-app', }, html`<gaia-canvas-toolbar></gaia-canvas-toolbar>` ), }"},{"kind":"variable","name":"WithDownloadButton","type":{"text":"Story"},"default":"{ render: () => withCanvasStore( { title: 'Quarterly Report', activeTab: 'preview', status: 'ready', kind: 'report-source-html', exports: [readyExport], }, html`<gaia-canvas-toolbar></gaia-canvas-toolbar>` ), }"},{"kind":"variable","name":"LongTitle","type":{"text":"Story"},"default":"{ render: () => withCanvasStore( { title: 'This is a very long canvas title that should be truncated with ellipsis when it overflows the available space', activeTab: 'code', status: 'ready', kind: 'react-app', }, html`<div style=\"max-width: 400px;\"> <gaia-canvas-toolbar></gaia-canvas-toolbar> </div>` ), }"}],"exports":[{"kind":"custom-element-definition","name":"story-canvas-toolbar-wrapper","declaration":{"name":"StoryCanvasToolbarWrapper","module":"components/canvas/canvas-toolbar/canvas-toolbar.stories.js"}},{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/canvas/canvas-toolbar/canvas-toolbar.stories.js"}},{"kind":"js","name":"Default","declaration":{"name":"Default","module":"components/canvas/canvas-toolbar/canvas-toolbar.stories.js"}},{"kind":"js","name":"PreviewTabActive","declaration":{"name":"PreviewTabActive","module":"components/canvas/canvas-toolbar/canvas-toolbar.stories.js"}},{"kind":"js","name":"WithDownloadButton","declaration":{"name":"WithDownloadButton","module":"components/canvas/canvas-toolbar/canvas-toolbar.stories.js"}},{"kind":"js","name":"LongTitle","declaration":{"name":"LongTitle","module":"components/canvas/canvas-toolbar/canvas-toolbar.stories.js"}}]},{"kind":"javascript-module","path":"components/canvas/canvas-toolbar/canvas-toolbar.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/canvas/canvas-toolbar/canvas-toolbar.styles.js"}}]},{"kind":"javascript-module","path":"components/canvas/canvas-toolbar/canvas-toolbar.test.js","declarations":[{"kind":"class","description":"","name":"TestWrapper","members":[{"kind":"field","name":"store","default":"sharedStore","type":{"text":"MockCanvasStore"}}],"superclass":{"name":"LitElement","package":"lit"},"tagName":"test-wrapper-canvas-revision-selector","customElement":true}],"exports":[{"kind":"custom-element-definition","name":"test-wrapper-canvas-toolbar","declaration":{"name":"TestWrapper","module":"components/canvas/canvas-toolbar/canvas-toolbar.test.js"}}]},{"kind":"javascript-module","path":"components/canvas/canvas-toolbar/canvas-toolbar.js","declarations":[{"kind":"class","description":"Toolbar for the canvas workspace with tab switching, download, and close actions.\n\nDisplays the canvas title, Code/Preview tab buttons, an optional\nPDF download button (for report-source canvases with ready exports),\nand a close button.","name":"CanvasToolbar","members":[{"kind":"field","name":"ctrl","privacy":"private","default":"new CanvasStoreController(this, (s) => ({ title: s.title, activeTab: s.activeTab, revision: s.revision, revisions: s.revisions, kind: s.kind, exports: s.exports, }))"},{"kind":"method","name":"handleTabClick","privacy":"private","parameters":[{"name":"tab","type":{"text":"'code' | 'preview'"}}]},{"kind":"method","name":"handleClose","privacy":"private"},{"kind":"method","name":"handleDownload","privacy":"private"},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-canvas-toolbar","customElement":true}],"exports":[{"kind":"js","name":"CanvasToolbar","declaration":{"name":"CanvasToolbar","module":"components/canvas/canvas-toolbar/canvas-toolbar.js"}},{"kind":"custom-element-definition","name":"gaia-canvas-toolbar","declaration":{"name":"CanvasToolbar","module":"components/canvas/canvas-toolbar/canvas-toolbar.js"}}]},{"kind":"javascript-module","path":"components/canvas/canvas-workspace/canvas-workspace.stories.js","declarations":[{"kind":"class","description":"","name":"StoryCanvasWorkspaceWrapper","members":[{"kind":"field","name":"store","default":"createCanvasStore() as unknown"}],"superclass":{"name":"LitElement","package":"lit"},"tagName":"story-canvas-workspace-wrapper","customElement":true},{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Canvas/Workspace', component: 'gaia-canvas-workspace', }"},{"kind":"variable","name":"CodeTab","type":{"text":"Story"},"default":"{ render: () => withCanvasStore( { title: 'My Canvas', activeTab: 'code', status: 'ready', content: sampleCode, language: 'tsx', kind: 'react-app', }, html`<gaia-canvas-workspace></gaia-canvas-workspace>` ), }"},{"kind":"variable","name":"Creating","type":{"text":"Story"},"default":"{ render: () => withCanvasStore( { title: 'My Canvas', activeTab: 'code', status: 'creating', content: '', language: 'tsx', kind: 'react-app', }, html`<gaia-canvas-workspace></gaia-canvas-workspace>` ), }"},{"kind":"variable","name":"Updating","type":{"text":"Story"},"default":"{ render: () => withCanvasStore( { title: 'My Canvas', activeTab: 'code', status: 'updating', content: sampleCode, language: 'tsx', kind: 'react-app', }, html`<gaia-canvas-workspace></gaia-canvas-workspace>` ), }"}],"exports":[{"kind":"custom-element-definition","name":"story-canvas-workspace-wrapper","declaration":{"name":"StoryCanvasWorkspaceWrapper","module":"components/canvas/canvas-workspace/canvas-workspace.stories.js"}},{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/canvas/canvas-workspace/canvas-workspace.stories.js"}},{"kind":"js","name":"CodeTab","declaration":{"name":"CodeTab","module":"components/canvas/canvas-workspace/canvas-workspace.stories.js"}},{"kind":"js","name":"Creating","declaration":{"name":"Creating","module":"components/canvas/canvas-workspace/canvas-workspace.stories.js"}},{"kind":"js","name":"Updating","declaration":{"name":"Updating","module":"components/canvas/canvas-workspace/canvas-workspace.stories.js"}}]},{"kind":"javascript-module","path":"components/canvas/canvas-workspace/canvas-workspace.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/canvas/canvas-workspace/canvas-workspace.styles.js"}}]},{"kind":"javascript-module","path":"components/canvas/canvas-workspace/canvas-workspace.test.js","declarations":[{"kind":"class","description":"","name":"TestWrapper","members":[{"kind":"field","name":"store","default":"sharedStore","type":{"text":"MockCanvasStore"}}],"superclass":{"name":"LitElement","package":"lit"},"tagName":"test-wrapper-canvas-revision-selector","customElement":true}],"exports":[{"kind":"custom-element-definition","name":"test-wrapper-canvas-workspace","declaration":{"name":"TestWrapper","module":"components/canvas/canvas-workspace/canvas-workspace.test.js"}}]},{"kind":"javascript-module","path":"components/canvas/canvas-workspace/canvas-workspace.js","declarations":[{"kind":"class","description":"Side panel workspace for viewing and editing canvas content.\n\nRenders a toolbar and either a code view or a live preview (HTML or\nreport) depending on the active tab. Shows a progress shimmer while\nthe canvas is being created or updated.","name":"CanvasWorkspace","members":[{"kind":"field","name":"ctrl","privacy":"private","default":"new CanvasStoreController(this, (s) => ({ active: s.active, activeTab: s.activeTab, status: s.status, title: s.title, content: s.content, language: s.language, kind: s.kind, }))"},{"kind":"method","name":"renderPreview","privacy":"private"},{"kind":"field","name":"handleRenderResult","privacy":"private"},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-canvas-workspace","customElement":true}],"exports":[{"kind":"js","name":"CanvasWorkspace","declaration":{"name":"CanvasWorkspace","module":"components/canvas/canvas-workspace/canvas-workspace.js"}},{"kind":"custom-element-definition","name":"gaia-canvas-workspace","declaration":{"name":"CanvasWorkspace","module":"components/canvas/canvas-workspace/canvas-workspace.js"}}]},{"kind":"javascript-module","path":"components/canvas/iframe-preview/iframe-preview.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"components/canvas/iframe-preview/iframe-preview.js","declarations":[{"kind":"class","description":"Unified iframe preview component supporting two rendering modes:\n\n- **transpile**: Transpiles TSX/JSX source with Sucrase (lazy-loaded),\n then posts the compiled code to a renderer iframe served from the API.\n- **html**: Renders report-source-html content directly as complete HTML\n with DOMPurify sanitization and optional ECharts bundle injection.","name":"IframePreview","members":[{"kind":"field","name":"content","type":{"text":"string"},"default":"''","attribute":"content"},{"kind":"field","name":"title","type":{"text":"string"},"default":"''","attribute":"title"},{"kind":"field","name":"mode","type":{"text":"IframePreviewMode"},"default":"'transpile'","description":"Rendering mode: 'transpile' for TSX/JSX, 'html' for report HTML.","attribute":"mode"},{"kind":"field","name":"rendererUrl","type":{"text":"string"},"default":"''","description":"URL of the canvas renderer app (transpile mode only).","attribute":"renderer-url"},{"kind":"field","name":"chartsScriptUrl","type":{"text":"string"},"default":"''","description":"URL of the ECharts bundle script (html mode only).","attribute":"charts-script-url"},{"kind":"field","name":"iframeRef","privacy":"private"},{"kind":"field","name":"pendingCode","type":{"text":"string | null"},"privacy":"private","default":"null"},{"kind":"field","name":"preview","type":{"text":"IframePreviewController"},"privacy":"private"},{"kind":"field","name":"htmlRenderGeneration","type":{"text":"number"},"privacy":"private","default":"0"},{"kind":"method","name":"getRendererOrigin","privacy":"private","return":{"type":{"text":"string"}},"description":"Target origin for postMessage to the sandboxed iframe.\nWithout `allow-same-origin`, the iframe gets an opaque origin,\nso we must use '*'. The iframe sandbox (allow-scripts only) prevents\nsame-origin access, cookie/storage reads, navigation, and popups.\nOnly transpiled source code is transmitted — no auth tokens or secrets."},{"kind":"field","name":"handleRendererReady","privacy":"private"},{"kind":"method","name":"transpileAndSend","privacy":"private","return":{"type":{"text":"Promise<void>"}}},{"kind":"method","name":"updateIframeHtml","privacy":"private","return":{"type":{"text":"Promise<void>"}}},{"kind":"method","name":"sanitizeContent","privacy":"private","return":{"type":{"text":"{ sanitized: string; isFullDocument: boolean }"}},"description":"Single source of truth for report sanitization. Branches on whether the\nLLM produced a full document or a fragment, runs DOMPurify with the\nmatching options, then runs the defense-in-depth post-pass. Both the\nchart-bundle precheck in `updateIframeHtml` and the final `buildHtml`\ncall site consume the same output, so detection and rendering can never\ndisagree about what survives sanitisation."},{"kind":"method","name":"loadChartsScript","privacy":"private","return":{"type":{"text":"Promise<string | null>"}}},{"kind":"method","name":"errorHarness","privacy":"private","static":true,"return":{"type":{"text":"string"}},"parameters":[{"name":"nonce","type":{"text":"string"}}],"description":"Returns the error harness script tag with a per-render CSP nonce.\nThe nonce matches the one embedded in the Content-Security-Policy meta\ntag, so `script-src 'unsafe-inline'` is not required."},{"kind":"method","name":"buildCspMeta","privacy":"private","static":true,"return":{"type":{"text":"string"}},"parameters":[{"name":"nonce","type":{"text":"string"}}],"description":"Returns the CSP meta tag for the report iframe, scoped to a per-render\nnonce.\n\nUsing a nonce eliminates the need for `script-src 'unsafe-inline'`:\nonly `<script nonce=\"…\">` elements whose nonce matches the policy are\nexecuted, so a DOMPurify zero-day that lets an inline `<script>` survive\nsanitization cannot execute — it would have no nonce.\n\nThe iframe is loaded via `srcdoc`, which does not receive the server's\nHTTP-header CSP applied to /canvas/*. The policy therefore lives inside\nthe document itself and mirrors the transpile-renderer policy\n(assistant/src/Api/Program.cs). `connect-src 'none'` is the critical\ndirective — it blocks fetch/XHR/beacon so surviving scripts cannot\nexfiltrate report contents to an external host."},{"kind":"field","name":"REPORT_FORBID_TAGS","type":{"text":"array"},"privacy":"private","static":true,"readonly":true,"default":"[ 'script', 'iframe', 'embed', 'object', 'link', 'meta', 'base', 'form', 'math', 'audio', 'video', 'picture', 'source', 'track', ]","description":"Tags stripped from LLM-authored report HTML. Script/handler removal is\nalready covered by DOMPurify defaults; these add belt-and-braces against\ntags that can navigate, load external resources, or submit data.\n\nNotably *not* forbidden — these are intended report features:\n - `<svg>`: pdf-report skill instructs the LLM to inline SVG icons\n and diagrams (see `assistant/src/Plugins/PdfReport/skills/.../SKILL.md`).\n The script-execution risk from SVG-mediated DOMPurify mXSS is\n neutralised by the per-render CSP nonce — a surviving inline `<script>`\n would have no nonce and the browser would refuse to run it.\n - `<img>`: pdf-report supports PNG data URIs (`src=\"data:image/png;…\"`),\n and the iframe CSP already restricts `img-src` to `data: blob:`.\n - `<style>`: pdf-report embeds all CSS in `<style>` blocks. The element\n itself is safe; CSS-injection-via-attribute is blocked by\n `REPORT_FORBID_ATTRS` below."},{"kind":"field","name":"REPORT_FORBID_ATTRS","type":{"text":"array"},"privacy":"private","static":true,"readonly":true,"default":"['style']","description":"Attributes stripped from LLM-authored report HTML. The inline `style`\nattribute is the main UI-spoofing vector left after `<script>`/handler\nremoval — e.g. `<div style=\"position:fixed;inset:0;background:#fff;\nz-index:9999\">…fake content…</div>` could mask the rest of the report\ninside the iframe. The pdf-report skill never instructs the LLM to use\ninline `style` attributes (it embeds all CSS in a `<style>` block), so\nforbidding the attribute does not regress intended functionality."},{"kind":"method","name":"buildHtml","privacy":"private","return":{"type":{"text":"string"}},"parameters":[{"name":"sanitized","type":{"text":"string"}},{"name":"isFullDocument","type":{"text":"boolean"}},{"name":"chartsScript","type":{"text":"string"}},{"name":"nonce","type":{"text":"string"}}]},{"kind":"method","name":"escapeHtml","privacy":"private","return":{"type":{"text":"string"}},"parameters":[{"name":"text","type":{"text":"string"}}]},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"events":[{"description":"Bubbles render success or error details","name":"canvas-render-result"}],"attributes":[{"name":"content","type":{"text":"string"},"default":"''","fieldName":"content"},{"name":"title","type":{"text":"string"},"default":"''","fieldName":"title"},{"name":"mode","type":{"text":"IframePreviewMode"},"default":"'transpile'","description":"Rendering mode: 'transpile' for TSX/JSX, 'html' for report HTML.","fieldName":"mode"},{"name":"renderer-url","type":{"text":"string"},"default":"''","description":"URL of the canvas renderer app (transpile mode only).","fieldName":"rendererUrl"},{"name":"charts-script-url","type":{"text":"string"},"default":"''","description":"URL of the ECharts bundle script (html mode only).","fieldName":"chartsScriptUrl"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-iframe-preview","customElement":true}],"exports":[{"kind":"js","name":"IframePreview","declaration":{"name":"IframePreview","module":"components/canvas/iframe-preview/iframe-preview.js"}},{"kind":"custom-element-definition","name":"gaia-iframe-preview","declaration":{"name":"IframePreview","module":"components/canvas/iframe-preview/iframe-preview.js"}}]},{"kind":"javascript-module","path":"components/composer/disclaimer/disclaimer.stories.js","declarations":[{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Components/Disclaimer', component: 'gaia-disclaimer', }"},{"kind":"variable","name":"Default","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"max-width: 400px;\"> <gaia-disclaimer></gaia-disclaimer> </div>`, }"}],"exports":[{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/composer/disclaimer/disclaimer.stories.js"}},{"kind":"js","name":"Default","declaration":{"name":"Default","module":"components/composer/disclaimer/disclaimer.stories.js"}}]},{"kind":"javascript-module","path":"components/composer/disclaimer/disclaimer.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"components/composer/disclaimer/disclaimer.js","declarations":[{"kind":"class","description":"AI disclaimer notice displayed below the message composer.\n\nShows a static message informing users that answers are AI-generated\nand may contain errors, with a link to the terms of use.","name":"GaiaDisclaimer","members":[{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-disclaimer","customElement":true}],"exports":[{"kind":"js","name":"GaiaDisclaimer","declaration":{"name":"GaiaDisclaimer","module":"components/composer/disclaimer/disclaimer.js"}},{"kind":"custom-element-definition","name":"gaia-disclaimer","declaration":{"name":"GaiaDisclaimer","module":"components/composer/disclaimer/disclaimer.js"}}]},{"kind":"javascript-module","path":"components/composer/message-composer.stories.js","declarations":[{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Components/Message Composer', component: 'gaia-message-composer', }"},{"kind":"variable","name":"Default","type":{"text":"Story"},"default":"{ render: () => html`<gaia-message-composer></gaia-message-composer>`, }"}],"exports":[{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/composer/message-composer.stories.js"}},{"kind":"js","name":"Default","declaration":{"name":"Default","module":"components/composer/message-composer.stories.js"}}]},{"kind":"javascript-module","path":"components/composer/message-composer.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/composer/message-composer.styles.js"}}]},{"kind":"javascript-module","path":"components/composer/message-composer.test.js","declarations":[{"kind":"class","description":"","name":"TestWrapper","members":[{"kind":"field","name":"store","type":{"text":"MockChatStore & ChatStore"},"default":"createMockChatStore()"}],"superclass":{"name":"LitElement","package":"lit"},"tagName":"test-wrapper-canvas-revision-selector","customElement":true}],"exports":[{"kind":"custom-element-definition","name":"test-wrapper-composer","declaration":{"name":"TestWrapper","module":"components/composer/message-composer.test.js"}}]},{"kind":"javascript-module","path":"components/composer/message-composer.js","declarations":[{"kind":"class","description":"Text input area for composing and sending messages.\n\nProvides an auto-resizing textarea, character count validation,\nsuggested question pills (when the conversation is empty), a send\nbutton, and the AI disclaimer. Routes messages to either the AI\nagent or the support operator depending on the active channel.","name":"GaiaMessageComposer","members":[{"kind":"field","name":"debounceTimer","type":{"text":"number | undefined"},"privacy":"private"},{"kind":"field","name":"resizeController","privacy":"private","default":"new ResizeController(this)"},{"kind":"field","name":"ctrl","privacy":"private","default":"new StoreController(this, selectComposerState)"},{"kind":"field","name":"textareaWrap","type":{"text":"HTMLDivElement"}},{"kind":"field","name":"textarea","type":{"text":"HTMLTextAreaElement"}},{"kind":"field","name":"autosize","type":{"text":"HTMLDivElement"}},{"kind":"field","name":"attachmentInput","type":{"text":"HTMLInputElement | undefined"}},{"kind":"field","name":"value","type":{"text":"string"},"privacy":"private","default":"''"},{"kind":"field","name":"invalid","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"field","name":"pendingAttachments","type":{"text":"PendingAttachment[]"},"privacy":"private","default":"[]"},{"kind":"field","name":"attachmentError","type":{"text":"string | null"},"privacy":"private","default":"null"},{"kind":"field","name":"uploadingCount","type":{"text":"number"},"privacy":"private","default":"0"},{"kind":"field","name":"isRecording","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"field","name":"speechSupported","type":{"text":"boolean"},"privacy":"private","default":"!!SpeechRecognitionAPI"},{"kind":"field","name":"recognition","type":{"text":"SpeechRecognitionLike | null"},"privacy":"private","default":"null"},{"kind":"field","name":"profileId","type":{"text":"string"},"default":"'default'","attribute":"profile-id"},{"kind":"field","name":"hostContextProvider","type":{"text":"HostContextProvider | undefined"}},{"kind":"field","name":"rows","type":{"text":"number"},"default":"1","attribute":"rows"},{"kind":"field","name":"maxRows","type":{"text":"number"},"default":"5","attribute":"max-rows"},{"kind":"field","name":"uploadingAttachment","type":{"text":"boolean"},"privacy":"private","description":"Whether an attachment upload is currently in flight.","readonly":true},{"kind":"field","name":"notAllowedToSendMessage","privacy":"private","readonly":true},{"kind":"field","name":"canUseVoiceDictation","privacy":"private","readonly":true},{"kind":"method","name":"isMessageNotAllowed","privacy":"private","return":{"type":{"text":"boolean"}},"parameters":[{"name":"message","type":{"text":"string"}}]},{"kind":"method","name":"validateInput","privacy":"private"},{"kind":"method","name":"initSpeechRecognition","privacy":"private"},{"kind":"method","name":"toggleRecording","privacy":"private"},{"kind":"method","name":"handleChange","privacy":"private"},{"kind":"method","name":"handleInput","privacy":"private"},{"kind":"field","name":"handleFeedbackClosed","privacy":"private"},{"kind":"method","name":"closeFeedbackIfOpen","privacy":"private"},{"kind":"method","name":"handleSendMessage","privacy":"private","parameters":[{"name":"messageOverride","optional":true,"type":{"text":"string"}},{"name":"source","default":"'typed'","type":{"text":"'typed' | 'suggested_question'"}}]},{"kind":"method","name":"handleStopMessage","privacy":"private"},{"kind":"method","name":"resolveHostContext","privacy":"private","return":{"type":{"text":"Promise<HostContext | null>"}}},{"kind":"method","name":"dispatchToSupport","privacy":"private","return":{"type":{"text":"void"}},"parameters":[{"name":"message","type":{"text":"string"}}]},{"kind":"method","name":"dispatchToAssistant","privacy":"private","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"message","type":{"text":"string"}},{"name":"source","type":{"text":"'typed' | 'suggested_question'"}}]},{"kind":"method","name":"handleAttachmentButtonClick","privacy":"private"},{"kind":"method","name":"clearPendingAttachments","privacy":"private","parameters":[{"name":"errorMessage","default":"null","type":{"text":"string | null"}}]},{"kind":"method","name":"dismissAttachmentError","privacy":"private","description":"Dismisses the attachment error banner without discarding staged attachments."},{"kind":"method","name":"removePendingAttachment","privacy":"private","parameters":[{"name":"target","type":{"text":"MessageAttachment"}}]},{"kind":"method","name":"handleAttachmentSelected","privacy":"private","parameters":[{"name":"event","type":{"text":"Event"}}]},{"kind":"method","name":"processAttachmentFiles","privacy":"private","parameters":[{"name":"files","type":{"text":"File[]"}}]},{"kind":"method","name":"uploadAttachmentFile","privacy":"private","return":{"type":{"text":"Promise<PendingAttachment | null>"}},"parameters":[{"name":"file","type":{"text":"File"}}]},{"kind":"field","name":"canAcceptAttachment","type":{"text":"boolean"},"privacy":"public","description":"Whether a file can currently be accepted as a pending attachment.\n\nFalse when attachments are disabled for the profile, the support channel\nis active, or the composer is disabled/loading. Callers should check this\nbefore suppressing native browser behaviour (e.g. paste) so they don't\nswallow the event without effect. Multiple attachments may be queued, so\nan in-flight upload does not block accepting further files.","readonly":true},{"kind":"method","name":"acceptDroppedFiles","privacy":"public","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"files","type":{"text":"File[]"}}],"description":"Uploads files dropped anywhere on the chat surface as pending attachments.\n\nCalled by the root chat component, which owns the drag-and-drop overlay so\nfiles can be dropped over the entire widget rather than only the composer.\nGuards against uploads while attachments are unavailable for the active\nchannel/profile."},{"kind":"method","name":"acceptDroppedFile","privacy":"public","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"file","type":{"text":"File"}}],"description":"Uploads a single dropped file as a pending attachment.\n\nThin wrapper around acceptDroppedFiles retained for callers that\nonly have a single file to hand."},{"kind":"method","name":"handleSuggestedQuestionClick","privacy":"private","parameters":[{"name":"question","type":{"text":"string"}}]},{"kind":"method","name":"handleKeyDown","privacy":"private","parameters":[{"name":"e","type":{"text":"KeyboardEvent"}}]},{"kind":"method","name":"handlePaste","privacy":"private","parameters":[{"name":"event","type":{"text":"ClipboardEvent"}}]},{"kind":"method","name":"maybeEmitTyping","privacy":"private"},{"kind":"method","name":"createPreviewUrl","privacy":"private","return":{"type":{"text":"string | null"}},"parameters":[{"name":"file","type":{"text":"File"}}]},{"kind":"method","name":"revokeAllPreviewUrls","privacy":"private"},{"kind":"method","name":"focus","parameters":[{"name":"options","optional":true,"type":{"text":"FocusOptions"}}],"description":"Sets focus on the textarea."},{"kind":"method","name":"blur","description":"Removes focus from the textarea."},{"kind":"method","name":"select","description":"Selects all the text in the textarea."},{"kind":"method","name":"getPendingAttachmentPreviews","privacy":"private","return":{"type":{"text":"MessageAttachment[]"}}},{"kind":"method","name":"renderPendingAttachmentPreviews","privacy":"private"},{"kind":"method","name":"renderAttachmentError","privacy":"private"},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"events":[{"name":"message","type":{"text":"MessageSentEvent"}},{"type":{"text":"MessageSentEvent"},"description":"When the user sends a message","name":"message-sent"}],"attributes":[{"name":"profile-id","type":{"text":"string"},"default":"'default'","fieldName":"profileId"},{"name":"rows","type":{"text":"number"},"default":"1","fieldName":"rows"},{"name":"max-rows","type":{"text":"number"},"default":"5","fieldName":"maxRows"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-message-composer","customElement":true}],"exports":[{"kind":"js","name":"GaiaMessageComposer","declaration":{"name":"GaiaMessageComposer","module":"components/composer/message-composer.js"}},{"kind":"custom-element-definition","name":"gaia-message-composer","declaration":{"name":"GaiaMessageComposer","module":"components/composer/message-composer.js"}}]},{"kind":"javascript-module","path":"components/conversation/activity-indicator/activity-indicator.stories.js","declarations":[{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Components/Activity Indicator', component: 'gaia-activity-indicator', argTypes: { activityType: { control: 'select', options: ['SUPPORT_SESSION_BEGIN', 'SUPPORT_SESSION_END'], }, }, }"},{"kind":"variable","name":"SupportBegin","type":{"text":"Story"},"default":"{ args: { activityType: 'SUPPORT_SESSION_BEGIN' }, render: ({ activityType }) => html`<div style=\"max-width: 400px;\"> <gaia-activity-indicator activity-type=${activityType}></gaia-activity-indicator> </div>`, }"},{"kind":"variable","name":"SupportEnd","type":{"text":"Story"},"default":"{ args: { activityType: 'SUPPORT_SESSION_END' }, render: ({ activityType }) => html`<div style=\"max-width: 400px;\"> <gaia-activity-indicator activity-type=${activityType}></gaia-activity-indicator> </div>`, }"}],"exports":[{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/conversation/activity-indicator/activity-indicator.stories.js"}},{"kind":"js","name":"SupportBegin","declaration":{"name":"SupportBegin","module":"components/conversation/activity-indicator/activity-indicator.stories.js"}},{"kind":"js","name":"SupportEnd","declaration":{"name":"SupportEnd","module":"components/conversation/activity-indicator/activity-indicator.stories.js"}}]},{"kind":"javascript-module","path":"components/conversation/activity-indicator/activity-indicator.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"components/conversation/activity-indicator/activity-indicator.js","declarations":[{"kind":"class","description":"Inline divider that marks support session transitions in the conversation.\n\nRenders a horizontal rule with an icon and label indicating a support\nsession has started or ended (e.g. \"You have been connected to support\").","name":"GaiaActivityIndicator","members":[{"kind":"field","name":"activityType","type":{"text":"SupportSessionActivityType | undefined"},"description":"The activity type to display.","attribute":"activity-type"},{"kind":"method","name":"getActivityContent","privacy":"private","return":{"type":{"text":"{ icon: IconName; text: string } | null"}}},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"attributes":[{"name":"activity-type","type":{"text":"SupportSessionActivityType | undefined"},"description":"The activity type to display.","fieldName":"activityType"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-activity-indicator","customElement":true}],"exports":[{"kind":"js","name":"GaiaActivityIndicator","declaration":{"name":"GaiaActivityIndicator","module":"components/conversation/activity-indicator/activity-indicator.js"}},{"kind":"custom-element-definition","name":"gaia-activity-indicator","declaration":{"name":"GaiaActivityIndicator","module":"components/conversation/activity-indicator/activity-indicator.js"}}]},{"kind":"javascript-module","path":"components/conversation/context-changed-divider/context-changed-divider.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"components/conversation/context-changed-divider/context-changed-divider.js","declarations":[{"kind":"class","description":"Visual divider rendered between two adjacent user messages whose host-supplied\ncontext differs (e.g. the host app pivoted from one customer to another mid-chat).\n\nRenders a centered \"Context changed\" disclosure button between two horizontal\nrules. Clicking the button toggles a panel below that lists the per-key diff —\nadded / changed / removed entries — so the user can compare what shifted.","name":"GaiaContextChangedDivider","members":[{"kind":"field","name":"diff","type":{"text":"HostContextDiff | undefined"},"description":"Per-key diff of host context. Drives the expanded comparison view."},{"kind":"field","name":"expanded","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"field","name":"toggle","privacy":"private"},{"kind":"method","name":"renderEntries","privacy":"private","parameters":[{"name":"entries","type":{"text":"Array<readonly [string, unknown]>"}},{"name":"formatValue","type":{"text":"(v: unknown) => unknown"}}]},{"kind":"method","name":"renderDetails","privacy":"private"},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-context-changed-divider","customElement":true}],"exports":[{"kind":"js","name":"GaiaContextChangedDivider","declaration":{"name":"GaiaContextChangedDivider","module":"components/conversation/context-changed-divider/context-changed-divider.js"}},{"kind":"custom-element-definition","name":"gaia-context-changed-divider","declaration":{"name":"GaiaContextChangedDivider","module":"components/conversation/context-changed-divider/context-changed-divider.js"}}]},{"kind":"javascript-module","path":"components/conversation/context-divider.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"components/conversation/context-divider.js","declarations":[{"kind":"function","name":"shouldFireContextChangedDivider","return":{"type":{"text":"boolean"}},"parameters":[{"name":"previous","type":{"text":"HostContextSnapshot | undefined"}},{"name":"current","type":{"text":"HostContextSnapshot | undefined"}}],"description":"Decide whether a \"Context changed\" divider should fire between two adjacent user\nmessages' host-context snapshots. Fires whenever the two snapshots differ, treating\n`undefined`/`null` as a first-class \"no host context\" state — so a transition from\n`{ companyId: 123 }` to `undefined` (e.g. user switched profile and the host stopped\nforwarding companyId) draws a line, just like any other change. The first user\nmessage in a conversation never fires; that gating happens in\n`computeContextChangedMessageIds`, not here.\n\nBoth ends of the pipeline serialize via JSON-shaped objects, so a key-sorted\nrecursive deep-equal is sufficient — we don't need to handle Maps, Dates, or other\nnon-JSON types."},{"kind":"function","name":"describeHostContextDiff","return":{"type":{"text":"HostContextDiff"}},"parameters":[{"name":"previous","type":{"text":"HostContextSnapshot | undefined"}},{"name":"current","type":{"text":"HostContextSnapshot | undefined"}}],"description":"Classify the differences between two host-context snapshots into added / removed /\nchanged keys. The result is passed straight into `<gaia-context-changed-divider>`,\nwhich renders it as the expandable comparison view shown when the user opens the\ndivider."},{"kind":"function","name":"computeContextChangedMessageIds","return":{"type":{"text":"Map<string, HostContextDiff>"}},"parameters":[{"name":"messages","type":{"text":"UiMessage[]"}},{"name":"contexts","type":{"text":"Record<string, HostContextSnapshot>"}}],"description":"Identify user messages that need a \"Context changed\" divider rendered above them,\npaired with the summary the divider should display. A user message qualifies when\nits recorded host-context differs from the previous user message's — including\ntransitions to/from \"no recorded context\". The very first user message never\nqualifies because there's no prior turn to compare to.\n\nWorks identically for live sends (snapshot written by the run-coordinator) and\nrehydrated chats (snapshot loaded from `conversation_v2_messages` via the restore\npath) — both populate the same `messageHostContexts` map.\n\nReturns a Map of message id → diff describing the per-key change. The divider\nuses the diff to render its expanded comparison view on demand. O(1) lookup per\ngroup."},{"kind":"function","name":"deepEqual","return":{"type":{"text":"boolean"}},"parameters":[{"name":"a","type":{"text":"unknown"}},{"name":"b","type":{"text":"unknown"}}],"description":"Internal JSON-shape deep-equal. Exported solely for unit tests that lock in the\nkey-order-independence and array-vs-object behavior the divider gating depends on.\nNot part of the module's public API — callers should use `shouldFireContextChangedDivider`\nor `describeHostContextDiff` instead of comparing snapshots directly."}],"exports":[{"kind":"js","name":"shouldFireContextChangedDivider","declaration":{"name":"shouldFireContextChangedDivider","module":"components/conversation/context-divider.js"}},{"kind":"js","name":"describeHostContextDiff","declaration":{"name":"describeHostContextDiff","module":"components/conversation/context-divider.js"}},{"kind":"js","name":"computeContextChangedMessageIds","declaration":{"name":"computeContextChangedMessageIds","module":"components/conversation/context-divider.js"}},{"kind":"js","name":"deepEqual","declaration":{"name":"deepEqual","module":"components/conversation/context-divider.js"}}]},{"kind":"javascript-module","path":"components/conversation/conversation.stories.js","declarations":[{"kind":"class","description":"","name":"StoryConversationWrapper","members":[{"kind":"field","name":"store"}],"superclass":{"name":"LitElement","package":"lit"},"tagName":"story-conversation-wrapper","customElement":true},{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Components/Conversation', component: 'gaia-conversation', }"},{"kind":"variable","name":"Default","type":{"text":"Story"},"default":"{ render: () => { const store = createStoryStore({ messages: allMessages }); return html` <story-conversation-wrapper .store=${store}> <gaia-conversation></gaia-conversation> </story-conversation-wrapper> `; }, }"},{"kind":"variable","name":"Empty","type":{"text":"Story"},"default":"{ render: () => { const store = createStoryStore({ welcomeMessages: { en: { title: 'Welcome to Gaia!', body: 'How can I help you today?', blocks: [], callToAction: 'Ask me anything', }, }, }); return html` <story-conversation-wrapper .store=${store}> <gaia-conversation></gaia-conversation> </story-conversation-wrapper> `; }, }"},{"kind":"variable","name":"Thinking","type":{"text":"Story"},"default":"{ render: () => { const store = createStoryStore({ messages: [userMessage], runState: 'thinking', }); return html` <story-conversation-wrapper .store=${store}> <gaia-conversation></gaia-conversation> </story-conversation-wrapper> `; }, }"},{"kind":"variable","name":"ToolCallFlow","type":{"text":"Story"},"default":"{ render: () => { const store = createStoryStore({ messages: toolFlowMessages, toolCallSummaries: { 'tc-fail-1': 'Searching documents…', 'tc-ok-1': 'Searched documents', }, }); return html` <story-conversation-wrapper .store=${store}> <gaia-conversation></gaia-conversation> </story-conversation-wrapper> `; }, }"},{"kind":"variable","name":"MultiMessageRunGroup","type":{"text":"Story"},"default":"{ render: () => { const store = createStoryStore({ messages: multiMessageRunMessages, messageRunIds: { 'mr-asst-1': 'run-multi', 'mr-op-1': 'run-multi', 'mr-asst-2': 'run-multi', }, }); return html` <story-conversation-wrapper .store=${store}> <gaia-conversation></gaia-conversation> </story-conversation-wrapper> `; }, }"},{"kind":"variable","name":"SupportFlow","type":{"text":"Story"},"default":"{ render: () => { const store = createStoryStore({ messages: supportFlowMessages, channel: 'support', features: { conversationSharing: true }, }); return html` <story-conversation-wrapper .store=${store}> <gaia-conversation></gaia-conversation> </story-conversation-wrapper> `; }, }"}],"exports":[{"kind":"custom-element-definition","name":"story-conversation-wrapper","declaration":{"name":"StoryConversationWrapper","module":"components/conversation/conversation.stories.js"}},{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/conversation/conversation.stories.js"}},{"kind":"js","name":"Default","declaration":{"name":"Default","module":"components/conversation/conversation.stories.js"}},{"kind":"js","name":"Empty","declaration":{"name":"Empty","module":"components/conversation/conversation.stories.js"}},{"kind":"js","name":"Thinking","declaration":{"name":"Thinking","module":"components/conversation/conversation.stories.js"}},{"kind":"js","name":"ToolCallFlow","declaration":{"name":"ToolCallFlow","module":"components/conversation/conversation.stories.js"}},{"kind":"js","name":"MultiMessageRunGroup","declaration":{"name":"MultiMessageRunGroup","module":"components/conversation/conversation.stories.js"}},{"kind":"js","name":"SupportFlow","declaration":{"name":"SupportFlow","module":"components/conversation/conversation.stories.js"}}]},{"kind":"javascript-module","path":"components/conversation/conversation.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/conversation/conversation.styles.js"}}]},{"kind":"javascript-module","path":"components/conversation/conversation.js","declarations":[{"kind":"class","description":"Scrollable message list that renders the full conversation.\r\n\r\nDisplays welcome content when the conversation is empty, then switches\r\nto a block-based message list as messages arrive. Handles auto-scrolling,\r\nthinking indicators, inline error notifications, the feedback form, and\r\nfeedback confirmation.","name":"GaiaConversation","members":[{"kind":"field","name":"containerRef","privacy":"private"},{"kind":"field","name":"scrollViewRef","privacy":"private"},{"kind":"field","name":"lastMessageRef","privacy":"private"},{"kind":"field","name":"selectConversationState","privacy":"private"},{"kind":"field","name":"ctrl","privacy":"private","default":"new StoreController(this, (s) => this.selectConversationState(s, getLocale()))"},{"kind":"field","name":"sharingCtrl","privacy":"private","default":"new StoreController(this, selectSharingPromptState)"},{"kind":"field","name":"sharingPromptTriggered","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"field","name":"handleThumb","privacy":"private"},{"kind":"field","name":"scrollCtrl","privacy":"private","default":"new ConversationScrollController( this, this.containerRef, this.scrollViewRef, () => this.ctrl.value, () => this.lastMessageRef.value as HTMLElement | undefined )"},{"kind":"method","name":"handleSharingPromptResponse","privacy":"private","return":{"type":{"text":"void"}},"parameters":[{"name":"e","type":{"text":"CustomEvent<{ accepted: boolean }>"}}]},{"kind":"method","name":"shouldShowThinking","privacy":"private","return":{"type":{"text":"boolean"}},"parameters":[{"name":"renderableMessages","type":{"text":"UiMessage[]"}}],"description":"Whether the thinking indicator should be visible.\r\nHidden when the last message is a pending tool call with a visible\r\nsummary — its status block shows its own shimmer animation."},{"kind":"method","name":"isMessageInActiveRun","privacy":"private","return":{"type":{"text":"boolean"}},"parameters":[{"name":"messageId","type":{"text":"string"}}],"description":"Check if a message belongs to the currently active (non-idle) run."},{"kind":"method","name":"renderRunGroup","privacy":"private","parameters":[{"name":"group","type":{"text":"RunGroup"}},{"name":"isLastGroup","type":{"text":"boolean"}},{"name":"contextChangedDiffs","type":{"text":"ReadonlyMap<string, HostContextDiff>"}}]},{"kind":"method","name":"renderRunGroupBody","privacy":"private","parameters":[{"name":"group","type":{"text":"RunGroup"}},{"name":"isLastGroup","type":{"text":"boolean"}}]},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-conversation","customElement":true}],"exports":[{"kind":"js","name":"GaiaConversation","declaration":{"name":"GaiaConversation","module":"components/conversation/conversation.js"}},{"kind":"custom-element-definition","name":"gaia-conversation","declaration":{"name":"GaiaConversation","module":"components/conversation/conversation.js"}}]},{"kind":"javascript-module","path":"components/conversation/markdown-content/citation-injector.js","declarations":[{"kind":"function","name":"injectCitationLinks","return":{"type":{"text":"void"}},"parameters":[{"name":"container","type":{"text":"HTMLElement"}},{"name":"citationMap","type":{"text":"Map<string, SearchCitation>"}}],"description":"Walk text nodes in the container and replace citation markers with\n<gaia-citation-link> elements."}],"exports":[{"kind":"js","name":"injectCitationLinks","declaration":{"name":"injectCitationLinks","module":"components/conversation/markdown-content/citation-injector.js"}}]},{"kind":"javascript-module","path":"components/conversation/markdown-content/markdown-content.stories.js","declarations":[{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Components/Markdown Content', component: 'gaia-markdown-content', argTypes: { value: { control: 'text' }, streaming: { control: 'boolean' }, }, }"},{"kind":"variable","name":"Default","type":{"text":"Story"},"default":"{ args: { value: 'Hello, this is a **bold** and *italic* message with a [link](https://example.com).', streaming: false, }, render: ({ value, streaming }) => html`<div style=\"max-width: 500px;\"> <gaia-markdown-content .value=${value} ?streaming=${streaming}></gaia-markdown-content> </div>`, }"},{"kind":"variable","name":"RichContent","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"max-width: 500px;\"> <gaia-markdown-content .value=${`# Heading 1 ## Heading 2 Here is a paragraph with **bold**, *italic*, and \\`inline code\\`. - Item one - Item two - Item three \\`\\`\\`javascript function hello() { console.log(\"Hello, world!\"); } \\`\\`\\` > This is a blockquote | Column A | Column B | |----------|----------| | Cell 1 | Cell 2 | | Cell 3 | Cell 4 |`} ></gaia-markdown-content> </div>`, }"},{"kind":"variable","name":"Streaming","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"max-width: 500px;\"> <gaia-markdown-content .value=${'This message is currently being **streamed** from the AI agent...'} streaming ></gaia-markdown-content> </div>`, }"}],"exports":[{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/conversation/markdown-content/markdown-content.stories.js"}},{"kind":"js","name":"Default","declaration":{"name":"Default","module":"components/conversation/markdown-content/markdown-content.stories.js"}},{"kind":"js","name":"RichContent","declaration":{"name":"RichContent","module":"components/conversation/markdown-content/markdown-content.stories.js"}},{"kind":"js","name":"Streaming","declaration":{"name":"Streaming","module":"components/conversation/markdown-content/markdown-content.stories.js"}}]},{"kind":"javascript-module","path":"components/conversation/markdown-content/markdown-content.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/conversation/markdown-content/markdown-content.styles.js"}}]},{"kind":"javascript-module","path":"components/conversation/markdown-content/markdown-content.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"components/conversation/markdown-content/markdown-content.js","declarations":[{"kind":"class","description":"Renders a Markdown string as sanitized HTML with optional citation links.\r\n\r\nUses `marked` for parsing and `DOMPurify` for XSS protection. After the\r\ninitial render, footnote-style reference markers in the HTML are replaced\r\nwith interactive `<gaia-citation-link>` elements when citations are present.","name":"GaiaMarkdownContent","members":[{"kind":"field","name":"value","type":{"text":"string"},"default":"''"},{"kind":"field","name":"citations","type":{"text":"SearchCitation[]"},"default":"[]"},{"kind":"field","name":"streaming","type":{"text":"boolean"},"default":"false","attribute":"streaming"},{"kind":"field","name":"boundaryElement","type":{"text":"HTMLElement | null"},"default":"null","description":"Positioning boundary element passed through to citation links."},{"kind":"field","name":"markdownEl","type":{"text":"HTMLDivElement"},"privacy":"private"},{"kind":"field","name":"citationMap","privacy":"private","default":"new Map<string, SearchCitation>()","description":"Index of citations by referenceId for quick lookup."},{"kind":"method","name":"updateCitationLinks","privacy":"private","return":{"type":{"text":"void"}},"description":"Propagate boundaryElement and disabled state to all injected citation links."},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"attributes":[{"name":"streaming","type":{"text":"boolean"},"default":"false","fieldName":"streaming"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-markdown-content","customElement":true}],"exports":[{"kind":"js","name":"GaiaMarkdownContent","declaration":{"name":"GaiaMarkdownContent","module":"components/conversation/markdown-content/markdown-content.js"}},{"kind":"custom-element-definition","name":"gaia-markdown-content","declaration":{"name":"GaiaMarkdownContent","module":"components/conversation/markdown-content/markdown-content.js"}}]},{"kind":"javascript-module","path":"components/conversation/markdown-content/markdown-kitchen-sink.stories.js","declarations":[{"kind":"class","description":"","name":"KitchenSinkWrapper","members":[{"kind":"field","name":"store"}],"superclass":{"name":"LitElement","package":"lit"},"tagName":"kitchen-sink-wrapper","customElement":true},{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Components/Markdown Content/Kitchen Sink', component: 'gaia-message', }"},{"kind":"variable","name":"AllVariants","type":{"text":"Story"},"default":"{ render: () => { const store = createStoryStore(); return html` <kitchen-sink-wrapper .store=${store}> <gaia-message .message=${markdownMessage}></gaia-message> </kitchen-sink-wrapper> `; }, }"},{"kind":"variable","name":"Streaming","type":{"text":"Story"},"default":"{ render: () => { const store = createStoryStore({ runState: 'streaming' }); const streamingMessage: UiAssistantMessage = { ...markdownMessage, id: 'msg-markdown-streaming', isStreaming: true, }; return html` <kitchen-sink-wrapper .store=${store}> <gaia-message .message=${streamingMessage}></gaia-message> </kitchen-sink-wrapper> `; }, }"}],"exports":[{"kind":"custom-element-definition","name":"kitchen-sink-wrapper","declaration":{"name":"KitchenSinkWrapper","module":"components/conversation/markdown-content/markdown-kitchen-sink.stories.js"}},{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/conversation/markdown-content/markdown-kitchen-sink.stories.js"}},{"kind":"js","name":"AllVariants","declaration":{"name":"AllVariants","module":"components/conversation/markdown-content/markdown-kitchen-sink.stories.js"}},{"kind":"js","name":"Streaming","declaration":{"name":"Streaming","module":"components/conversation/markdown-content/markdown-kitchen-sink.stories.js"}}]},{"kind":"javascript-module","path":"components/conversation/markdown-content/markdown-renderer.js","declarations":[{"kind":"function","name":"renderMarkdown","return":{"type":{"text":"string"}},"parameters":[{"name":"value","type":{"text":"string"}}],"description":"Parse markdown to sanitized HTML string.\nUses module-level marked + DOMPurify configuration."}],"exports":[{"kind":"js","name":"renderMarkdown","declaration":{"name":"renderMarkdown","module":"components/conversation/markdown-content/markdown-renderer.js"}}]},{"kind":"javascript-module","path":"components/conversation/welcome-message/welcome-message.stories.js","declarations":[{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Components/Welcome Message', component: 'gaia-welcome-message', }"},{"kind":"variable","name":"Default","type":{"text":"Story"},"default":"{ render: () => { return html`<div style=\"width: 400px;\"> <gaia-welcome-message .welcomeMessage=${data}></gaia-welcome-message> </div>`; }, }"},{"kind":"variable","name":"HiddenSections","type":{"text":"Story"},"default":"{ render: () => { return html`<div style=\"width: 400px;\"> <gaia-welcome-message .welcomeMessage=${dataWithHiddenSections}></gaia-welcome-message> </div>`; }, }","description":"A profile can hide individual sections (here the title and call-to-action) by sending\nempty/null values for them. Only the remaining sections render, with no empty spacing."}],"exports":[{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/conversation/welcome-message/welcome-message.stories.js"}},{"kind":"js","name":"Default","declaration":{"name":"Default","module":"components/conversation/welcome-message/welcome-message.stories.js"}},{"kind":"js","name":"HiddenSections","declaration":{"name":"HiddenSections","module":"components/conversation/welcome-message/welcome-message.stories.js"}}]},{"kind":"javascript-module","path":"components/conversation/welcome-message/welcome-message.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/conversation/welcome-message/welcome-message.styles.js"}}]},{"kind":"javascript-module","path":"components/conversation/welcome-message/welcome-message.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"components/conversation/welcome-message/welcome-message.js","declarations":[{"kind":"class","description":"Welcome screen shown when the conversation is empty.\n\nRenders a greeting title, optional body text, a call-to-action prompt,\noptional informational cards, and an optional inline consent prompt.","name":"GaiaWelcomeMessage","members":[{"kind":"field","name":"welcomeMessage","type":{"text":"WelcomeMessage | undefined"}},{"kind":"field","name":"showSharingPrompt","type":{"text":"boolean"},"default":"false","description":"Whether to show the inline sharing consent prompt below block cards."},{"kind":"method","name":"handleYes","privacy":"private"},{"kind":"method","name":"handleNo","privacy":"private"},{"kind":"method","name":"renderSharingPrompt","privacy":"private"},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"events":[{"name":"sharing-prompt-response","type":{"text":"CustomEvent"}}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-welcome-message","customElement":true}],"exports":[{"kind":"js","name":"GaiaWelcomeMessage","declaration":{"name":"GaiaWelcomeMessage","module":"components/conversation/welcome-message/welcome-message.js"}},{"kind":"custom-element-definition","name":"gaia-welcome-message","declaration":{"name":"GaiaWelcomeMessage","module":"components/conversation/welcome-message/welcome-message.js"}}]},{"kind":"javascript-module","path":"components/feedback/consent-dialog.stories.js","declarations":[{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Components/Consent Dialog', component: 'gaia-consent-dialog', }"},{"kind":"variable","name":"Default","type":{"text":"Story"},"default":"{ render: () => html`<div> <gaia-button @click=${(e: Event) => { const dialog = (e.target as HTMLElement) .closest('div')! .querySelector<GaiaConsentDialog>('gaia-consent-dialog'); dialog?.show(); }} >Open Consent Dialog</gaia-button > <gaia-consent-dialog></gaia-consent-dialog> </div>`, }"}],"exports":[{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/feedback/consent-dialog.stories.js"}},{"kind":"js","name":"Default","declaration":{"name":"Default","module":"components/feedback/consent-dialog.stories.js"}}]},{"kind":"javascript-module","path":"components/feedback/consent-dialog.js","declarations":[{"kind":"class","description":"Consent dialog asking whether to share the conversation for feedback review.\n\nOpened by the feedback form when conversation sharing is enabled.\nRenders a modal with Yes/No buttons and a privacy statement link.","name":"GaiaConsentDialog","members":[{"kind":"field","name":"isOpen","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"method","name":"show","privacy":"public","return":{"type":{"text":"Promise<void>"}},"description":"Shows the consent dialog and moves focus into it."},{"kind":"method","name":"close","privacy":"public","return":{"type":{"text":"void"}},"description":"Closes the consent dialog and restores focus."},{"kind":"method","name":"handleConsentConfirmed","privacy":"private","return":{"type":{"text":"void"}},"parameters":[{"name":"consent","type":{"text":"boolean"}}]},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"events":[{"name":"consent-confirmed","type":{"text":"CustomEvent"},"description":"When the user confirms or declines consent. `event.detail` contains `{ consent: boolean }`."}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-consent-dialog","customElement":true}],"exports":[{"kind":"js","name":"GaiaConsentDialog","declaration":{"name":"GaiaConsentDialog","module":"components/feedback/consent-dialog.js"}},{"kind":"custom-element-definition","name":"gaia-consent-dialog","declaration":{"name":"GaiaConsentDialog","module":"components/feedback/consent-dialog.js"}}]},{"kind":"javascript-module","path":"components/feedback/feedback-confirmation.test.js","declarations":[{"kind":"class","description":"","name":"TestWrapper","members":[{"kind":"field","name":"store","type":{"text":"MockChatStore"}}],"superclass":{"name":"LitElement","package":"lit"},"tagName":"test-wrapper-canvas-revision-selector","customElement":true}],"exports":[{"kind":"custom-element-definition","name":"test-wrapper-feedback-confirmation","declaration":{"name":"TestWrapper","module":"components/feedback/feedback-confirmation.test.js"}}]},{"kind":"javascript-module","path":"components/feedback/feedback-confirmation.js","declarations":[{"kind":"class","description":"Success notification shown after feedback is submitted.\n\nDisplays a \"Thank you\" message as a success notification. When the\nuser consented to share their conversation, also shows a Privacy ID\nwith a copy button so they can save it for data-deletion requests.","name":"GaiaFeedbackConfirmation","members":[{"kind":"field","name":"ctrl","privacy":"private","default":"new StoreController(this, selectFeedbackConfirmationState)"},{"kind":"field","name":"copyTimeoutId","type":{"text":"ReturnType<typeof setTimeout> | null"},"privacy":"private","default":"null"},{"kind":"field","name":"copied","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"field","name":"visitorUserId","type":{"text":"string | null"},"privacy":"private","readonly":true},{"kind":"field","name":"shouldShowPrivacyId","type":{"text":"boolean"},"privacy":"private","readonly":true},{"kind":"method","name":"handleClose","privacy":"private"},{"kind":"method","name":"clearCopyTimeout","privacy":"private"},{"kind":"method","name":"handleCopyPrivacyId","privacy":"private"},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-feedback-confirmation","customElement":true}],"exports":[{"kind":"js","name":"GaiaFeedbackConfirmation","declaration":{"name":"GaiaFeedbackConfirmation","module":"components/feedback/feedback-confirmation.js"}},{"kind":"custom-element-definition","name":"gaia-feedback-confirmation","declaration":{"name":"GaiaFeedbackConfirmation","module":"components/feedback/feedback-confirmation.js"}}]},{"kind":"javascript-module","path":"components/feedback/feedback.stories.js","declarations":[{"kind":"class","description":"","name":"StoryFeedbackWrapper","members":[{"kind":"field","name":"store"}],"superclass":{"name":"LitElement","package":"lit"},"tagName":"story-feedback-wrapper","customElement":true},{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Components/Feedback', component: 'gaia-feedback', }"},{"kind":"variable","name":"Default","type":{"text":"Story"},"default":"{ render: () => html` <story-feedback-wrapper> <gaia-feedback></gaia-feedback> </story-feedback-wrapper> `, }"},{"kind":"variable","name":"SupportTarget","type":{"text":"Story"},"default":"{ render: () => html` <story-feedback-wrapper .store=${createStoryStore({ feedbackFormTarget: 'support' })}> <gaia-feedback></gaia-feedback> </story-feedback-wrapper> `, }"},{"kind":"variable","name":"WithConversationSharing","type":{"text":"Story"},"default":"{ render: () => html` <story-feedback-wrapper .store=${createStoryStore({ features: { conversationSharing: true } })}> <gaia-feedback></gaia-feedback> </story-feedback-wrapper> `, }"},{"kind":"variable","name":"Confirmation","type":{"text":"Story"},"default":"{ render: () => html` <story-feedback-wrapper .store=${createStoryStore({ feedbackConfirmationVisible: true })}> <gaia-feedback-confirmation></gaia-feedback-confirmation> </story-feedback-wrapper> `, }"},{"kind":"variable","name":"ConfirmationWithPrivacyId","type":{"text":"Story"},"default":"{ render: () => html` <story-feedback-wrapper .store=${createStoryStore({ feedbackConfirmationVisible: true, features: { conversationSharing: true }, feedbackConsentGiven: true, })} > <gaia-feedback-confirmation></gaia-feedback-confirmation> </story-feedback-wrapper> `, }"}],"exports":[{"kind":"custom-element-definition","name":"story-feedback-wrapper","declaration":{"name":"StoryFeedbackWrapper","module":"components/feedback/feedback.stories.js"}},{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/feedback/feedback.stories.js"}},{"kind":"js","name":"Default","declaration":{"name":"Default","module":"components/feedback/feedback.stories.js"}},{"kind":"js","name":"SupportTarget","declaration":{"name":"SupportTarget","module":"components/feedback/feedback.stories.js"}},{"kind":"js","name":"WithConversationSharing","declaration":{"name":"WithConversationSharing","module":"components/feedback/feedback.stories.js"}},{"kind":"js","name":"Confirmation","declaration":{"name":"Confirmation","module":"components/feedback/feedback.stories.js"}},{"kind":"js","name":"ConfirmationWithPrivacyId","declaration":{"name":"ConfirmationWithPrivacyId","module":"components/feedback/feedback.stories.js"}}]},{"kind":"javascript-module","path":"components/feedback/feedback.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/feedback/feedback.styles.js"}}]},{"kind":"javascript-module","path":"components/feedback/feedback.test.js","declarations":[{"kind":"class","description":"","name":"TestWrapper","members":[{"kind":"field","name":"mockStore","type":{"text":"MockChatStore"},"readonly":true},{"kind":"field","name":"store","type":{"text":"ChatStore"},"default":"this.mockStore as unknown"}],"superclass":{"name":"LitElement","package":"lit"},"tagName":"test-wrapper-canvas-revision-selector","customElement":true}],"exports":[{"kind":"custom-element-definition","name":"test-wrapper-feedback","declaration":{"name":"TestWrapper","module":"components/feedback/feedback.test.js"}}]},{"kind":"javascript-module","path":"components/feedback/feedback.js","declarations":[{"kind":"class","description":"Feedback form for rating and commenting on the chat experience.\r\n\r\nRenders a 1–5 emoji rating scale and an optional comment textarea\r\ninside a focus-trapped dialog surface. When conversation sharing\r\nis enabled, submitting opens a consent dialog before finalizing.","name":"GaiaFeedback","members":[{"kind":"field","name":"ctrl","privacy":"private","default":"new StoreController(this, selectFeedbackState)"},{"kind":"field","name":"focusTrap","privacy":"private","default":"new FocusTrapController(this, 'gaia-surface', () => this.handleClose())"},{"kind":"field","name":"ratingInput","type":{"text":"HTMLFieldSetElement"},"privacy":"private"},{"kind":"field","name":"consentDialog","type":{"text":"HTMLElement & {\r\n show: () => void;\r\n }"},"privacy":"private"},{"kind":"field","name":"closeButton","type":{"text":"HTMLButtonElement"},"privacy":"private"},{"kind":"field","name":"selectedRating","type":{"text":"number"},"privacy":"private","default":"0"},{"kind":"field","name":"comment","type":{"text":"string"},"privacy":"private","default":"''"},{"kind":"method","name":"canSubmit","privacy":"private"},{"kind":"field","name":"ratingIcons","type":{"text":"array"},"privacy":"private","default":"[ { name: 'angry', value: 1, label: 'Very dissatisfied' }, { name: 'frown', value: 2, label: 'Dissatisfied' }, { name: 'meh', value: 3, label: 'Neutral' }, { name: 'smile', value: 4, label: 'Satisfied' }, { name: 'laugh', value: 5, label: 'Very satisfied' }, ]"},{"kind":"method","name":"handleRatingChange","privacy":"private","parameters":[{"name":"event","type":{"text":"Event"}}]},{"kind":"method","name":"handleCommentChange","privacy":"private","parameters":[{"name":"event","type":{"text":"Event"}}]},{"kind":"method","name":"handleSubmit","privacy":"private"},{"kind":"method","name":"handleConsentConfirmed","privacy":"private","parameters":[{"name":"event","type":{"text":"CustomEvent<ConsentConfirmedEvent>"}}]},{"kind":"method","name":"submitAndClose","privacy":"private","parameters":[{"name":"consent","type":{"text":"boolean"}}]},{"kind":"method","name":"handleKeyDown","privacy":"private","parameters":[{"name":"e","type":{"text":"KeyboardEvent"}}]},{"kind":"method","name":"handleClose","privacy":"private"},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"events":[{"type":{"text":"FeedbackSubmittedEvent"}},{"type":{"text":"FeedbackSubmittedEvent"},"description":"When feedback is successfully submitted","name":"feedback-submitted"},{"type":{"text":"FeedbackClosedEvent"},"description":"When the form is closed (via submit or dismiss)","name":"feedback-closed"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-feedback","customElement":true}],"exports":[{"kind":"js","name":"GaiaFeedback","declaration":{"name":"GaiaFeedback","module":"components/feedback/feedback.js"}},{"kind":"custom-element-definition","name":"gaia-feedback","declaration":{"name":"GaiaFeedback","module":"components/feedback/feedback.js"}}]},{"kind":"javascript-module","path":"components/history/history-item.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"components/history/history-item.js","declarations":[{"kind":"class","description":"A single row in GaiaHistoryView. Shows the title, a context label\nwhen available (customer / company / partner), a relative timestamp, and\nrow-level rename / delete actions.\n\nStays stateless w.r.t. the store — actions bubble up as CustomEvents and\nare handled by the parent `<gaia-history-view>` which forwards them to\n`HistoryCoordinator`. Rename uses a minimal inline edit mode to keep the\nMVP scope small (no modal component dependency).","name":"GaiaHistoryItem","members":[{"kind":"field","name":"summary","type":{"text":"ConversationSummary"}},{"kind":"field","name":"active","type":{"text":"boolean"},"default":"false","attribute":"active","reflects":true},{"kind":"field","name":"editing","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"field","name":"draftTitle","type":{"text":"string"},"privacy":"private","default":"''"},{"kind":"field","name":"handleSelect","privacy":"private"},{"kind":"field","name":"handleKeyDown","privacy":"private"},{"kind":"field","name":"startRename","privacy":"private"},{"kind":"field","name":"cancelRename","privacy":"private"},{"kind":"field","name":"confirmRename","privacy":"private"},{"kind":"field","name":"handleEditKey","privacy":"private"},{"kind":"field","name":"handleInput","privacy":"private"},{"kind":"field","name":"handleDelete","privacy":"private"},{"kind":"method","name":"getContextLabel","privacy":"private","return":{"type":{"text":"string | null"}}},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"events":[{"description":"When the row is activated. Detail: `{ summary }`.","name":"history-item-select"},{"description":"After the user confirms a new title. Detail: `{ id, title }`.","name":"history-item-rename"},{"description":"After the user confirms deletion. Detail: `{ id }`.","name":"history-item-delete"}],"attributes":[{"name":"active","type":{"text":"boolean"},"default":"false","fieldName":"active"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-history-item","customElement":true}],"exports":[{"kind":"js","name":"GaiaHistoryItem","declaration":{"name":"GaiaHistoryItem","module":"components/history/history-item.js"}},{"kind":"custom-element-definition","name":"gaia-history-item","declaration":{"name":"GaiaHistoryItem","module":"components/history/history-item.js"}}]},{"kind":"javascript-module","path":"components/history/history-view.test.js","declarations":[{"kind":"class","description":"","name":"TestWrapper","members":[{"kind":"field","name":"store","type":{"text":"MockChatStore"}}],"superclass":{"name":"LitElement","package":"lit"},"tagName":"test-wrapper-canvas-revision-selector","customElement":true}],"exports":[{"kind":"custom-element-definition","name":"test-wrapper-history-view","declaration":{"name":"TestWrapper","module":"components/history/history-view.test.js"}}]},{"kind":"javascript-module","path":"components/history/history-view.js","declarations":[{"kind":"class","description":"Full-area conversation history panel. Replaces the chat area inside\n`<gaia-chat>` when `historyOpen` is true.\n\nRenders a profile-scoped list of previous conversations. Row actions (rename,\ndelete) are delegated to `<gaia-history-item>`. Clicking a row restores the\nconversation into the active chat and fires a `conversation-restored` event\nvia ChatStore.restoreConversationById.","name":"GaiaHistoryView","members":[{"kind":"field","name":"ctrl","privacy":"private","default":"new StoreController(this, selectHistoryViewState)"},{"kind":"field","name":"sentinelObserver","type":{"text":"IntersectionObserver | undefined"},"privacy":"private"},{"kind":"field","name":"observedSentinel","type":{"text":"Element | undefined"},"privacy":"private"},{"kind":"field","name":"handleClose","privacy":"private"},{"kind":"field","name":"handleRetry","privacy":"private"},{"kind":"field","name":"handleSelect","privacy":"private"},{"kind":"field","name":"handleRename","privacy":"private"},{"kind":"field","name":"handleDelete","privacy":"private"},{"kind":"method","name":"syncSentinelObserver","privacy":"private","return":{"type":{"text":"void"}},"description":"Attach or tear down the IntersectionObserver that watches the bottom-of-list\nsentinel. The sentinel is only rendered while more pages are available, so\nthis runs on every update and follows the DOM: observe when the sentinel is\npresent, detach when it isn't. The observer's root is the scrollable list\ncontainer, not the viewport, so nested scroll regions (embedded widget) fire\ncorrectly."},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-history-view","customElement":true}],"exports":[{"kind":"js","name":"GaiaHistoryView","declaration":{"name":"GaiaHistoryView","module":"components/history/history-view.js"}},{"kind":"custom-element-definition","name":"gaia-history-view","declaration":{"name":"GaiaHistoryView","module":"components/history/history-view.js"}}]},{"kind":"javascript-module","path":"components/layout/app-header/app-header.stories.js","declarations":[{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Components/App Header', component: 'gaia-app-header', }"},{"kind":"variable","name":"Default","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"width: 400px;\"> <gaia-app-header></gaia-app-header> </div>`, }"}],"exports":[{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/layout/app-header/app-header.stories.js"}},{"kind":"js","name":"Default","declaration":{"name":"Default","module":"components/layout/app-header/app-header.stories.js"}}]},{"kind":"javascript-module","path":"components/layout/app-header/app-header.test.js","declarations":[{"kind":"class","description":"","name":"TestWrapper","members":[{"kind":"field","name":"store","type":{"text":"MockChatStore"}}],"superclass":{"name":"LitElement","package":"lit"},"tagName":"test-wrapper-canvas-revision-selector","customElement":true}],"exports":[{"kind":"custom-element-definition","name":"test-wrapper-app-header","declaration":{"name":"TestWrapper","module":"components/layout/app-header/app-header.test.js"}}]},{"kind":"javascript-module","path":"components/layout/app-header/app-header.js","declarations":[{"kind":"class","description":"Application header bar with data settings, feedback, new-chat, and close actions.","name":"GaiaAppHeader","members":[{"kind":"field","name":"ctrl","privacy":"private","default":"new StoreController(this, selectAppHeaderState)"},{"kind":"field","name":"toolbar","privacy":"private","default":"new ToolbarController(this, () => this.getToolbarButtons())"},{"kind":"field","name":"closeable","type":{"text":"boolean"},"default":"true"},{"kind":"field","name":"enableHistory","type":{"text":"boolean"},"default":"true"},{"kind":"method","name":"getToolbarButtons","privacy":"private","return":{"type":{"text":"HTMLButtonElement[]"}}},{"kind":"field","name":"handleFeedbackClosed","privacy":"private"},{"kind":"method","name":"handleClearConversation","privacy":"private"},{"kind":"method","name":"handleToggleHistory","privacy":"private"},{"kind":"method","name":"handleToggleFeedback","privacy":"private"},{"kind":"method","name":"handleCloseChat","privacy":"private"},{"kind":"method","name":"toggleDataSettings","privacy":"private"},{"kind":"method","name":"renderDataSettingsButton","privacy":"private"},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"events":[{"type":{"text":"ConversationClearedEvent"}},{"type":{"text":"ConversationClearedEvent"},"description":"When the user starts a new chat","name":"conversation-cleared"},{"type":{"text":"CloseRequestedEvent"},"description":"When the user clicks the close button","name":"close-requested"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-app-header","customElement":true}],"exports":[{"kind":"js","name":"GaiaAppHeader","declaration":{"name":"GaiaAppHeader","module":"components/layout/app-header/app-header.js"}},{"kind":"custom-element-definition","name":"gaia-app-header","declaration":{"name":"GaiaAppHeader","module":"components/layout/app-header/app-header.js"}}]},{"kind":"javascript-module","path":"components/layout/connection-status-overlay/connection-status-overlay.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/layout/connection-status-overlay/connection-status-overlay.styles.js"}}]},{"kind":"javascript-module","path":"components/layout/connection-status-overlay/connection-status-overlay.test.js","declarations":[{"kind":"class","description":"","name":"TestWrapper","members":[{"kind":"field","name":"store","type":{"text":"MockChatStore"}}],"superclass":{"name":"LitElement","package":"lit"},"tagName":"test-wrapper-canvas-revision-selector","customElement":true}],"exports":[{"kind":"custom-element-definition","name":"test-wrapper-connection-status-overlay","declaration":{"name":"TestWrapper","module":"components/layout/connection-status-overlay/connection-status-overlay.test.js"}}]},{"kind":"javascript-module","path":"components/layout/connection-status-overlay/connection-status-overlay.js","declarations":[{"kind":"class","description":"Overlay displayed when the backend is unreachable.\r\n\r\nShows a warning icon, a \"Service temporarily unavailable\" message,\r\nand a reconnecting dot animation. Automatically hides when the\r\nconnection is restored.","name":"GaiaConnectionStatusOverlay","members":[{"kind":"field","name":"ctrl","privacy":"private","default":"new StoreController(this, selectConnectionStatus)"},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-connection-status-overlay","customElement":true}],"exports":[{"kind":"js","name":"GaiaConnectionStatusOverlay","declaration":{"name":"GaiaConnectionStatusOverlay","module":"components/layout/connection-status-overlay/connection-status-overlay.js"}},{"kind":"custom-element-definition","name":"gaia-connection-status-overlay","declaration":{"name":"GaiaConnectionStatusOverlay","module":"components/layout/connection-status-overlay/connection-status-overlay.js"}}]},{"kind":"javascript-module","path":"components/message/animated-reply.stories.js","declarations":[{"kind":"class","description":"","name":"AnimatedReplyWrapper","members":[{"kind":"field","name":"store"},{"kind":"field","name":"message","type":{"text":"UiAssistantMessage"},"privacy":"private","default":"{ type: 'assistant', id: 'msg-animated-1', parts: [{ kind: 'reasoning', id: 'reasoning-msg-animated-1', content: '', isStreaming: true }], isStreaming: true, }"},{"kind":"field","name":"phase","type":{"text":"'idle' | 'reasoning' | 'tool-call' | 'answering' | 'done'"},"privacy":"private","default":"'idle'"},{"kind":"field","name":"running","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"field","name":"timers","type":{"text":"ReturnType<typeof setTimeout>[]"},"privacy":"private","default":"[]"},{"kind":"method","name":"cleanup","privacy":"private"},{"kind":"method","name":"schedule","privacy":"private","parameters":[{"name":"fn","type":{"text":"() => void"}},{"name":"delay","type":{"text":"number"}}]},{"kind":"method","name":"reset","privacy":"private"},{"kind":"method","name":"start","privacy":"private"}],"superclass":{"name":"LitElement","package":"lit"},"tagName":"animated-reply-wrapper","customElement":true},{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Demos/Animated Assistant Reply', component: 'animated-reply-wrapper', parameters: { layout: 'padded', }, }"},{"kind":"variable","name":"Default","type":{"text":"Story"},"default":"{ name: 'Full Reply Lifecycle', render: () => html`<animated-reply-wrapper></animated-reply-wrapper>`, }"}],"exports":[{"kind":"custom-element-definition","name":"animated-reply-wrapper","declaration":{"name":"AnimatedReplyWrapper","module":"components/message/animated-reply.stories.js"}},{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/message/animated-reply.stories.js"}},{"kind":"js","name":"Default","declaration":{"name":"Default","module":"components/message/animated-reply.stories.js"}}]},{"kind":"javascript-module","path":"components/message/assistant-message.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/message/assistant-message.styles.js"}}]},{"kind":"javascript-module","path":"components/message/assistant-message.js","declarations":[{"kind":"class","description":"","name":"GaiaAssistantMessage","members":[{"kind":"field","name":"message","type":{"text":"UiAssistantMessage"}},{"kind":"field","name":"isStreaming","type":{"text":"boolean"},"default":"false","attribute":"is-streaming"},{"kind":"field","name":"bodyEl","type":{"text":"HTMLElement"},"privacy":"private"},{"kind":"field","name":"expandedToolCallIds","privacy":"private","default":"new Set<string>()"},{"kind":"method","name":"renderPart","privacy":"private","parameters":[{"name":"part","type":{"text":"UiAssistantPart"}}]},{"kind":"method","name":"renderToolCall","privacy":"private","parameters":[{"name":"toolCall","type":{"text":"UiToolCall"}}]},{"kind":"method","name":"toggleToolCall","privacy":"private","parameters":[{"name":"toolCallId","type":{"text":"string"}}]},{"kind":"method","name":"handleInlineQuestionClick","privacy":"private","parameters":[{"name":"question","type":{"text":"string"}}]},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"events":[{"name":"question","type":{"text":"InlineQuestionClickEvent"}}],"attributes":[{"name":"is-streaming","type":{"text":"boolean"},"default":"false","fieldName":"isStreaming"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-assistant-message","customElement":true}],"exports":[{"kind":"js","name":"GaiaAssistantMessage","declaration":{"name":"GaiaAssistantMessage","module":"components/message/assistant-message.js"}},{"kind":"custom-element-definition","name":"gaia-assistant-message","declaration":{"name":"GaiaAssistantMessage","module":"components/message/assistant-message.js"}}]},{"kind":"javascript-module","path":"components/message/message-actions.stories.js","declarations":[{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Components/Message Actions', component: 'gaia-message-actions', argTypes: { messageType: { control: 'select', options: ['user', 'assistant', 'operator'], }, inActiveRun: { control: 'boolean' }, }, }"},{"kind":"variable","name":"AssistantActions","type":{"text":"Story"},"default":"{ args: { messageType: 'assistant', inActiveRun: false, }, render: ({ messageType, inActiveRun }) => html`<div style=\"display: flex; gap: 4px;\"> <gaia-message-actions .messageId=${'msg-1'} .messageType=${messageType} .copyContent=${'This is a message to copy'} ?in-active-run=${inActiveRun} .onThumb=${mockThumb} ></gaia-message-actions> </div>`, }"},{"kind":"variable","name":"UserActions","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"display: flex; gap: 4px;\"> <gaia-message-actions .messageId=${'msg-2'} .messageType=${'user'} .copyContent=${'User message content'} ></gaia-message-actions> </div>`, }"},{"kind":"variable","name":"DuringActiveRun","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"display: flex; gap: 4px;\"> <gaia-message-actions .messageId=${'msg-3'} .messageType=${'assistant'} .copyContent=${'Streaming content...'} in-active-run ></gaia-message-actions> </div>`, }"}],"exports":[{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/message/message-actions.stories.js"}},{"kind":"js","name":"AssistantActions","declaration":{"name":"AssistantActions","module":"components/message/message-actions.stories.js"}},{"kind":"js","name":"UserActions","declaration":{"name":"UserActions","module":"components/message/message-actions.stories.js"}},{"kind":"js","name":"DuringActiveRun","declaration":{"name":"DuringActiveRun","module":"components/message/message-actions.stories.js"}}]},{"kind":"javascript-module","path":"components/message/message-actions.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/message/message-actions.styles.js"}}]},{"kind":"javascript-module","path":"components/message/message-actions.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"components/message/message-actions.js","declarations":[{"kind":"class","description":"Copy and thumbs-up/down feedback buttons for a message.\n\nRenders a copy-to-clipboard button and, for assistant messages, thumbs\nup/down feedback toggle buttons. Actions are hidden while the message\nbelongs to an active run. Rendered once per run group by the conversation\ncomponent (not per message).\n\nThe component self-manages its visibility: when no buttons would be\nrendered it sets `display: none` via the `has-actions` host attribute,\nso no spacing is reserved in the layout.\n\nReceives callbacks as props instead of using `StoreController` so\nthe component stays independently testable without a store context.","name":"GaiaMessageActions","members":[{"kind":"field","name":"messageId","type":{"text":"string"},"default":"''","description":"The message ID for feedback submission."},{"kind":"field","name":"messageType","type":{"text":"| 'user'\n | 'assistant'\n | 'operator'"},"default":"'user'","description":"The message type (only assistant messages show feedback buttons).","attribute":"message-type","reflects":true},{"kind":"field","name":"copyContent","type":{"text":"string"},"default":"''","description":"The content to copy. Empty string hides the copy button."},{"kind":"field","name":"inActiveRun","type":{"text":"boolean"},"default":"false","description":"Whether this message belongs to the currently active run. Hides actions while active.","attribute":"in-active-run"},{"kind":"field","name":"readonly","type":{"text":"boolean"},"default":"false","description":"Readonly mode: shows static feedback indicator instead of interactive buttons."},{"kind":"field","name":"thumb","type":{"text":"'up' | 'down' | null"},"default":"null","description":"Persisted feedback state from API. Used in readonly mode to display the thumb icon."},{"kind":"field","name":"onThumb","type":{"text":"(\n messageId: string,\n isPositive: boolean | null\n ) => Promise<boolean> | undefined"},"description":"Callback for submitting message thumbs. Set by parent message component."},{"kind":"field","name":"isCopied","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"field","name":"feedbackState","type":{"text":"'none' | 'up' | 'down'"},"privacy":"private","default":"'none'"},{"kind":"field","name":"copyTimeoutId","type":{"text":"ReturnType<typeof setTimeout> | undefined"},"privacy":"private"},{"kind":"field","name":"hasVisibleActions","type":{"text":"boolean"},"privacy":"private","readonly":true},{"kind":"method","name":"renderCopyButton","privacy":"private"},{"kind":"method","name":"renderFeedbackButtons","privacy":"private"},{"kind":"method","name":"renderFeedbackIndicator","privacy":"private"},{"kind":"method","name":"handleCopyClick","privacy":"private"},{"kind":"method","name":"handleFeedbackClick","privacy":"private","parameters":[{"name":"direction","type":{"text":"'up' | 'down'"}}]},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"attributes":[{"name":"message-type","type":{"text":"| 'user'\n | 'assistant'\n | 'operator'"},"default":"'user'","description":"The message type (only assistant messages show feedback buttons).","fieldName":"messageType"},{"name":"in-active-run","type":{"text":"boolean"},"default":"false","description":"Whether this message belongs to the currently active run. Hides actions while active.","fieldName":"inActiveRun"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-message-actions","customElement":true}],"exports":[{"kind":"js","name":"GaiaMessageActions","declaration":{"name":"GaiaMessageActions","module":"components/message/message-actions.js"}},{"kind":"custom-element-definition","name":"gaia-message-actions","declaration":{"name":"GaiaMessageActions","module":"components/message/message-actions.js"}}]},{"kind":"javascript-module","path":"components/message/message-attachments.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/message/message-attachments.styles.js"}}]},{"kind":"javascript-module","path":"components/message/message-attachments.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"components/message/message-attachments.js","declarations":[{"kind":"class","description":"","name":"GaiaMessageAttachments","members":[{"kind":"field","name":"attachments","type":{"text":"MessageAttachment[]"},"default":"[]"},{"kind":"field","name":"onRemoveAttachment","type":{"text":"(attachment: MessageAttachment) => void | undefined"}},{"kind":"field","name":"fullWidth","type":{"text":"boolean"},"default":"false","attribute":"full-width"},{"kind":"field","name":"compact","type":{"text":"boolean"},"default":"false","attribute":"compact"},{"kind":"method","name":"renderCompactAttachment","privacy":"private","parameters":[{"name":"attachment","type":{"text":"MessageAttachment"}}]},{"kind":"method","name":"renderAttachment","privacy":"private","parameters":[{"name":"attachment","type":{"text":"MessageAttachment"}}]},{"kind":"method","name":"renderRemoveButton","privacy":"private","parameters":[{"name":"attachment","type":{"text":"MessageAttachment"}}]},{"kind":"method","name":"handleRemoveClick","privacy":"private","parameters":[{"name":"event","type":{"text":"Event"}},{"name":"attachment","type":{"text":"MessageAttachment"}}]},{"kind":"method","name":"isImageAttachment","privacy":"private","return":{"type":{"text":"boolean"}},"parameters":[{"name":"attachment","type":{"text":"MessageAttachment"}}]},{"kind":"method","name":"isPdfAttachment","privacy":"private","return":{"type":{"text":"boolean"}},"parameters":[{"name":"attachment","type":{"text":"MessageAttachment"}}]},{"kind":"method","name":"splitFileName","privacy":"private","return":{"type":{"text":"{ start: string; end: string }"}},"parameters":[{"name":"name","type":{"text":"string"}}],"description":"Splits a file name so the tail (extension and a few trailing characters)\nstays pinned while the start truncates with an ellipsis, yielding a\nmiddle-truncated name such as `Screens…nal.pdf`."},{"kind":"method","name":"formatFileSize","privacy":"private","return":{"type":{"text":"string | null"}},"parameters":[{"name":"bytes","type":{"text":"number | undefined"}}],"description":"Formats a byte count into a compact, locale-aware size (e.g. `1.2 MB`)."},{"kind":"method","name":"formatSizeNumber","privacy":"private","return":{"type":{"text":"string"}},"parameters":[{"name":"value","type":{"text":"number"}},{"name":"maximumFractionDigits","type":{"text":"number"}},{"name":"unit","type":{"text":"'byte' | 'kilobyte' | 'megabyte' | 'gigabyte' | 'terabyte'"}}],"description":"Formats a magnitude and byte unit using the active locale, falling back to\na plain `value unit` string if the runtime lacks `Intl.NumberFormat` unit\nsupport."},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"attributes":[{"name":"full-width","type":{"text":"boolean"},"default":"false","fieldName":"fullWidth"},{"name":"compact","type":{"text":"boolean"},"default":"false","fieldName":"compact"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-message-attachments","customElement":true}],"exports":[{"kind":"js","name":"GaiaMessageAttachments","declaration":{"name":"GaiaMessageAttachments","module":"components/message/message-attachments.js"}},{"kind":"custom-element-definition","name":"gaia-message-attachments","declaration":{"name":"GaiaMessageAttachments","module":"components/message/message-attachments.js"}}]},{"kind":"javascript-module","path":"components/message/message.stories.js","declarations":[{"kind":"class","description":"","name":"StoryMessageWrapper","members":[{"kind":"field","name":"store"}],"superclass":{"name":"LitElement","package":"lit"},"tagName":"story-message-wrapper","customElement":true},{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Components/Message', component: 'gaia-message', }"},{"kind":"variable","name":"UserMessage","type":{"text":"Story"},"default":"{ render: () => { const store = createStoryStore(); return html` <story-message-wrapper .store=${store}> <gaia-message .message=${userMessage}></gaia-message> </story-message-wrapper> `; }, }"},{"kind":"variable","name":"AssistantMessage","type":{"text":"Story"},"default":"{ render: () => { const store = createStoryStore(); return html` <story-message-wrapper .store=${store}> <gaia-message .message=${assistantMessage}></gaia-message> </story-message-wrapper> `; }, }"},{"kind":"variable","name":"AssistantMessageWithCitations","type":{"text":"Story"},"default":"{ render: () => { const store = createStoryStore(); return html` <story-message-wrapper .store=${store}> <gaia-message .message=${assistantMessageWithCitations}></gaia-message> </story-message-wrapper> `; }, }"},{"kind":"variable","name":"OperatorMessage","type":{"text":"Story"},"default":"{ render: () => { const store = createStoryStore(); return html` <story-message-wrapper .store=${store}> <gaia-message .message=${operatorMessage}></gaia-message> </story-message-wrapper> `; }, }"},{"kind":"variable","name":"OperatorTyping","type":{"text":"Story"},"default":"{ render: () => { const store = createStoryStore(); return html` <story-message-wrapper .store=${store}> <gaia-message .message=${operatorMessageTyping}></gaia-message> </story-message-wrapper> `; }, }"},{"kind":"variable","name":"ToolCallSuccess","type":{"text":"Story"},"default":"{ render: () => { const store = createStoryStore({ toolCallSummaries: { 'tc-1': 'Searched documents' }, }); return html` <story-message-wrapper .store=${store}> <gaia-message .message=${toolCallSuccess}></gaia-message> </story-message-wrapper> `; }, }"},{"kind":"variable","name":"ToolCallPendingApproval","type":{"text":"Story"},"default":"{ render: () => { const store = createStoryStore(); return html` <story-message-wrapper .store=${store}> <gaia-message .message=${toolCallPendingApproval}></gaia-message> </story-message-wrapper> `; }, }"},{"kind":"variable","name":"ThinkingIndicator","type":{"text":"Story"},"default":"{ render: () => { const store = createStoryStore({ runState: 'thinking' }); return html` <story-message-wrapper .store=${store}> <gaia-message from=\"assistant\"> <gaia-avatar size=\"small\" icon=\"sparkles\" slot=\"avatar\"></gaia-avatar> <gaia-typing-indicator></gaia-typing-indicator> </gaia-message> </story-message-wrapper> `; }, }"}],"exports":[{"kind":"custom-element-definition","name":"story-message-wrapper","declaration":{"name":"StoryMessageWrapper","module":"components/message/message.stories.js"}},{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/message/message.stories.js"}},{"kind":"js","name":"UserMessage","declaration":{"name":"UserMessage","module":"components/message/message.stories.js"}},{"kind":"js","name":"AssistantMessage","declaration":{"name":"AssistantMessage","module":"components/message/message.stories.js"}},{"kind":"js","name":"AssistantMessageWithCitations","declaration":{"name":"AssistantMessageWithCitations","module":"components/message/message.stories.js"}},{"kind":"js","name":"OperatorMessage","declaration":{"name":"OperatorMessage","module":"components/message/message.stories.js"}},{"kind":"js","name":"OperatorTyping","declaration":{"name":"OperatorTyping","module":"components/message/message.stories.js"}},{"kind":"js","name":"ToolCallSuccess","declaration":{"name":"ToolCallSuccess","module":"components/message/message.stories.js"}},{"kind":"js","name":"ToolCallPendingApproval","declaration":{"name":"ToolCallPendingApproval","module":"components/message/message.stories.js"}},{"kind":"js","name":"ThinkingIndicator","declaration":{"name":"ThinkingIndicator","module":"components/message/message.stories.js"}}]},{"kind":"javascript-module","path":"components/message/message.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/message/message.styles.js"}}]},{"kind":"javascript-module","path":"components/message/message.test.js","declarations":[{"kind":"class","description":"","name":"TestWrapper","members":[{"kind":"field","name":"store","type":{"text":"MockChatStore"}}],"superclass":{"name":"LitElement","package":"lit"},"tagName":"test-wrapper-canvas-revision-selector","customElement":true}],"exports":[{"kind":"custom-element-definition","name":"test-wrapper-message","declaration":{"name":"TestWrapper","module":"components/message/message.test.js"}}]},{"kind":"javascript-module","path":"components/message/message.js","declarations":[{"kind":"class","description":"Unified message container for user, assistant, and operator messages.\n\nDispatches to `<gaia-assistant-message>` for assistant messages, and\nrenders user/operator messages inline. Actions (copy, feedback) are\nrendered at the conversation level, not by this component.","name":"GaiaMessage","members":[{"kind":"field","name":"from","type":{"text":"FromRole"},"default":"'user'","attribute":"from","reflects":true},{"kind":"field","name":"message","type":{"text":"RenderableMessage | undefined"}},{"kind":"field","name":"showAvatar","type":{"text":"boolean"},"default":"true","attribute":"show-avatar"},{"kind":"field","name":"isStreaming","type":{"text":"boolean"},"default":"false","attribute":"is-streaming"},{"kind":"field","name":"messageAriaLabel","type":{"text":"string"},"privacy":"private","readonly":true},{"kind":"method","name":"renderAvatar","privacy":"private"},{"kind":"method","name":"renderContent","privacy":"private"},{"kind":"method","name":"renderUserContent","privacy":"private","parameters":[{"name":"message","type":{"text":"UiUserMessage"}}]},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"attributes":[{"name":"from","type":{"text":"FromRole"},"default":"'user'","fieldName":"from"},{"name":"show-avatar","type":{"text":"boolean"},"default":"true","fieldName":"showAvatar"},{"name":"is-streaming","type":{"text":"boolean"},"default":"false","fieldName":"isStreaming"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-message","customElement":true}],"exports":[{"kind":"js","name":"GaiaMessage","declaration":{"name":"GaiaMessage","module":"components/message/message.js"}},{"kind":"custom-element-definition","name":"gaia-message","declaration":{"name":"GaiaMessage","module":"components/message/message.js"}}]},{"kind":"javascript-module","path":"components/message/renderers/canvas-tool-card.stories.js","declarations":[{"kind":"class","description":"","name":"StoryCanvasToolCardWrapper","members":[{"kind":"field","name":"store","default":"createCanvasStore() as unknown"}],"superclass":{"name":"LitElement","package":"lit"},"tagName":"story-canvas-tool-card-wrapper","customElement":true},{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Canvas/ToolCard', component: 'gaia-canvas-tool-card', }"},{"kind":"variable","name":"Pending","type":{"text":"Story"},"default":"{ render: () => withCanvasStore( { status: 'creating', title: 'My Canvas' }, html`<gaia-canvas-tool-card .message=${baseToolCall} .status=${'pending'} ></gaia-canvas-tool-card>` ), }"},{"kind":"variable","name":"Ready","type":{"text":"Story"},"default":"{ render: () => withCanvasStore( { canvasId: 'c-1', status: 'ready', title: 'My Canvas' }, html`<gaia-canvas-tool-card .message=${{ ...baseToolCall, response: { status: 'ready', title: 'My Canvas' } }} .status=${'done'} ></gaia-canvas-tool-card>` ), }"},{"kind":"variable","name":"Active","type":{"text":"Story"},"default":"{ render: () => withCanvasStore( { canvasId: 'c-1', status: 'ready', title: 'My Canvas', active: true }, html`<gaia-canvas-tool-card .message=${{ ...baseToolCall, response: { status: 'ready', title: 'My Canvas' } }} .status=${'done'} ></gaia-canvas-tool-card>` ), }"},{"kind":"variable","name":"LongTitle","type":{"text":"Story"},"default":"{ render: () => withCanvasStore( { canvasId: 'c-1', status: 'ready', title: 'This is a very long canvas title that should be truncated with an ellipsis', }, html`<gaia-canvas-tool-card .message=${{ ...baseToolCall, response: { status: 'ready', title: 'This is a very long canvas title that should be truncated with an ellipsis', }, }} .status=${'done'} ></gaia-canvas-tool-card>` ), }"}],"exports":[{"kind":"custom-element-definition","name":"story-canvas-tool-card-wrapper","declaration":{"name":"StoryCanvasToolCardWrapper","module":"components/message/renderers/canvas-tool-card.stories.js"}},{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/message/renderers/canvas-tool-card.stories.js"}},{"kind":"js","name":"Pending","declaration":{"name":"Pending","module":"components/message/renderers/canvas-tool-card.stories.js"}},{"kind":"js","name":"Ready","declaration":{"name":"Ready","module":"components/message/renderers/canvas-tool-card.stories.js"}},{"kind":"js","name":"Active","declaration":{"name":"Active","module":"components/message/renderers/canvas-tool-card.stories.js"}},{"kind":"js","name":"LongTitle","declaration":{"name":"LongTitle","module":"components/message/renderers/canvas-tool-card.stories.js"}}]},{"kind":"javascript-module","path":"components/message/renderers/canvas-tool-card.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/message/renderers/canvas-tool-card.styles.js"}}]},{"kind":"javascript-module","path":"components/message/renderers/canvas-tool-card.js","declarations":[{"kind":"class","description":"Card representing a canvas tool call in the message list.\n\nShows a shimmer animation while the canvas is being created or updated,\nand a clickable card to reopen the canvas workspace once ready.","name":"GaiaCanvasToolCard","members":[{"kind":"field","name":"message","type":{"text":"UiToolCall"}},{"kind":"field","name":"status","type":{"text":"ToolStatus"},"default":"'pending'"},{"kind":"field","name":"canvasCtrl","privacy":"private","default":"new CanvasStoreController(this, (s) => ({ canvasId: s.canvasId, title: s.title, active: s.active, canvasStatus: s.status, }))"},{"kind":"method","name":"handleCanvasClick","privacy":"private"},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-canvas-tool-card","customElement":true}],"exports":[{"kind":"js","name":"GaiaCanvasToolCard","declaration":{"name":"GaiaCanvasToolCard","module":"components/message/renderers/canvas-tool-card.js"}},{"kind":"custom-element-definition","name":"gaia-canvas-tool-card","declaration":{"name":"GaiaCanvasToolCard","module":"components/message/renderers/canvas-tool-card.js"}}]},{"kind":"javascript-module","path":"components/message/renderers/citation-link/citation-link.stories.js","declarations":[{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Components/Citation Link', component: 'gaia-citation-link', }"},{"kind":"variable","name":"Single","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"padding: 100px;\"> <p> Here is some text with a citation <gaia-citation-link .citations=${singleCitation}></gaia-citation-link> at the end. </p> </div>`, }"},{"kind":"variable","name":"Multiple","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"padding: 100px;\"> <p> This text has multiple sources <gaia-citation-link .citations=${multipleCitations}></gaia-citation-link> referenced together. </p> </div>`, }"}],"exports":[{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/message/renderers/citation-link/citation-link.stories.js"}},{"kind":"js","name":"Single","declaration":{"name":"Single","module":"components/message/renderers/citation-link/citation-link.stories.js"}},{"kind":"js","name":"Multiple","declaration":{"name":"Multiple","module":"components/message/renderers/citation-link/citation-link.stories.js"}}]},{"kind":"javascript-module","path":"components/message/renderers/citation-link/citation-link.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/message/renderers/citation-link/citation-link.styles.js"}}]},{"kind":"javascript-module","path":"components/message/renderers/citation-link/citation-link.js","declarations":[{"kind":"class","description":"Inline citation pill with a hover/focus popover showing source details.\n\nRendered inside markdown content to replace footnote-style reference\nmarkers. Displays a small pill linking to the first citation source.\nOn hover or focus, a floating popover shows the source title, snippet,\nand icon. Multiple citations are paginated within the popover.\n\nUses the Popover API (popover=\"manual\") to render in the top layer,\nescaping overflow clipping from ancestor scroll containers.","name":"GaiaCitationLink","members":[{"kind":"field","name":"citations","type":{"text":"SearchCitation[]"},"default":"[]"},{"kind":"field","name":"disabled","type":{"text":"boolean"},"default":"false","description":"When true, the pill is greyed out and the popover is suppressed.","attribute":"disabled","reflects":true},{"kind":"field","name":"boundaryElement","type":{"text":"HTMLElement | null"},"default":"null","description":"Positioning boundary element for the popover.\nWhen set, the popover is centered within this element instead of walking the shadow DOM."},{"kind":"field","name":"anchorEl","type":{"text":"HTMLAnchorElement"},"privacy":"private"},{"kind":"field","name":"popoverEl","type":{"text":"HTMLElement"},"privacy":"private"},{"kind":"field","name":"arrowEl","type":{"text":"HTMLElement"},"privacy":"private"},{"kind":"field","name":"popoverVisible","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"field","name":"currentPage","type":{"text":"number"},"privacy":"private","default":"0"},{"kind":"field","name":"floating","privacy":"private","default":"new FloatingController(this, { placement: 'top', strategy: 'fixed', showDelay: 300, hideDelay: 200, })"},{"kind":"field","name":"activeCitation","type":{"text":"SearchCitation"},"privacy":"private","readonly":true},{"kind":"field","name":"isMulti","type":{"text":"boolean"},"privacy":"private","readonly":true},{"kind":"field","name":"handleMouseEnter","privacy":"private"},{"kind":"field","name":"handleMouseLeave","privacy":"private"},{"kind":"field","name":"handleFocus","privacy":"private"},{"kind":"field","name":"handleBlur","privacy":"private"},{"kind":"field","name":"handleKeyDown","privacy":"private"},{"kind":"method","name":"show","privacy":"private"},{"kind":"method","name":"hide","privacy":"private"},{"kind":"method","name":"prevPage","privacy":"private"},{"kind":"method","name":"nextPage","privacy":"private"},{"kind":"method","name":"startPositionUpdates","privacy":"private"},{"kind":"method","name":"getPositioningBoundary","privacy":"private","return":{"type":{"text":"HTMLElement | null"}},"description":"Get the positioning boundary for the popover.\nUses the explicitly passed boundaryElement, falling back to offsetParent."},{"kind":"method","name":"renderPopover","privacy":"private"},{"kind":"method","name":"renderPopoverNav","privacy":"private"},{"kind":"method","name":"renderMarkdownSnippet","privacy":"private","parameters":[{"name":"text","type":{"text":"string"}}]},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"attributes":[{"name":"disabled","type":{"text":"boolean"},"default":"false","description":"When true, the pill is greyed out and the popover is suppressed.","fieldName":"disabled"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-citation-link","customElement":true}],"exports":[{"kind":"js","name":"GaiaCitationLink","declaration":{"name":"GaiaCitationLink","module":"components/message/renderers/citation-link/citation-link.js"}},{"kind":"custom-element-definition","name":"gaia-citation-link","declaration":{"name":"GaiaCitationLink","module":"components/message/renderers/citation-link/citation-link.js"}}]},{"kind":"javascript-module","path":"components/message/renderers/reasoning-block.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/message/renderers/reasoning-block.styles.js"}}]},{"kind":"javascript-module","path":"components/message/renderers/reasoning-block.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"components/message/renderers/reasoning-block.js","declarations":[{"kind":"class","description":"","name":"GaiaReasoningBlock","members":[{"kind":"field","name":"content","type":{"text":"string"},"default":"''"},{"kind":"field","name":"isStreaming","type":{"text":"boolean"},"default":"false","attribute":"is-streaming"},{"kind":"field","name":"expanded","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"field","name":"elapsedMs","type":{"text":"number"},"privacy":"private","default":"0"},{"kind":"field","name":"streamStartTime","type":{"text":"number | null"},"privacy":"private","default":"null"},{"kind":"field","name":"durationInterval","type":{"text":"ReturnType<typeof setInterval> | null"},"privacy":"private","default":"null"},{"kind":"field","name":"hasValidSections","type":{"text":"boolean"},"privacy":"private","description":"Whether the content has at least one valid `**Title**` section.","readonly":true},{"kind":"field","name":"label","type":{"text":"string"},"privacy":"private","description":"Block title text.\n- Streaming: latest section title, or \"Thinking\\u2026\" fallback\n- Complete: latest section title, or \"Thinking\" fallback","readonly":true},{"kind":"field","name":"displayDuration","type":{"text":"number | null"},"privacy":"private","description":"Total thinking duration in seconds, or null if below display threshold","readonly":true},{"kind":"field","name":"steps","type":{"text":"ReasoningStep[]"},"privacy":"private","readonly":true},{"kind":"method","name":"startDurationTimer","privacy":"private"},{"kind":"method","name":"stopDurationTimer","privacy":"private"},{"kind":"method","name":"toggle","privacy":"private"},{"kind":"method","name":"renderDuration","privacy":"private"},{"kind":"method","name":"renderStep","privacy":"private","return":{"type":{"text":"TemplateResult"}},"parameters":[{"name":"step","type":{"text":"ReasoningStep"}},{"name":"index","type":{"text":"number"}},{"name":"total","type":{"text":"number"}}]},{"kind":"method","name":"renderTimeline","privacy":"private","return":{"type":{"text":"TemplateResult"}}},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"attributes":[{"name":"is-streaming","type":{"text":"boolean"},"default":"false","fieldName":"isStreaming"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-reasoning-block","customElement":true}],"exports":[{"kind":"js","name":"GaiaReasoningBlock","declaration":{"name":"GaiaReasoningBlock","module":"components/message/renderers/reasoning-block.js"}},{"kind":"custom-element-definition","name":"gaia-reasoning-block","declaration":{"name":"GaiaReasoningBlock","module":"components/message/renderers/reasoning-block.js"}}]},{"kind":"javascript-module","path":"components/message/renderers/tool-approval-block.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/message/renderers/tool-approval-block.styles.js"}}]},{"kind":"javascript-module","path":"components/message/renderers/tool-approval-block.test.js","declarations":[{"kind":"class","description":"","name":"TestWrapper","members":[{"kind":"field","name":"mockStore","type":{"text":"MockChatStore"},"readonly":true},{"kind":"field","name":"store","type":{"text":"ChatStore"},"default":"this.mockStore as unknown"}],"superclass":{"name":"LitElement","package":"lit"},"tagName":"test-wrapper-canvas-revision-selector","customElement":true}],"exports":[{"kind":"custom-element-definition","name":"test-wrapper-tool-approval","declaration":{"name":"TestWrapper","module":"components/message/renderers/tool-approval-block.test.js"}}]},{"kind":"javascript-module","path":"components/message/renderers/tool-approval-block.js","declarations":[{"kind":"class","description":"Approve/decline prompt for a tool call that requires user consent.\r\n\r\nShows the approval message from the agent and Yes/No buttons.\r\nFor support-handoff tool calls, also renders a consent checkbox\r\nand privacy ID. Disappears once the user approves or declines.","name":"GaiaToolApprovalBlock","members":[{"kind":"field","name":"message","type":{"text":"UiToolCall"}},{"kind":"field","name":"ctrl","privacy":"private","default":"new StoreController(this, selectToolApprovalState)"},{"kind":"field","name":"resolved","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"field","name":"resolvedAction","type":{"text":"'approved' | 'declined' | null"},"privacy":"private","default":"null"},{"kind":"field","name":"consentChecked","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"field","name":"isSupportHandoff","type":{"text":"boolean"},"privacy":"private","readonly":true},{"kind":"field","name":"visitorUserId","type":{"text":"string | null"},"privacy":"private","readonly":true},{"kind":"method","name":"handleConsentChange","privacy":"private","parameters":[{"name":"e","type":{"text":"Event"}}]},{"kind":"method","name":"handleApprove","privacy":"private"},{"kind":"method","name":"handleReject","privacy":"private"},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"events":[{"name":"approvalId","type":{"text":"ToolCallApprovedEvent"}},{"type":{"text":"ToolCallApprovedEvent"},"description":"When the user approves the tool call","name":"tool-call-approved"},{"type":{"text":"ToolCallDeclinedEvent"},"description":"When the user declines the tool call","name":"tool-call-declined"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-tool-approval-block","customElement":true}],"exports":[{"kind":"js","name":"GaiaToolApprovalBlock","declaration":{"name":"GaiaToolApprovalBlock","module":"components/message/renderers/tool-approval-block.js"}},{"kind":"custom-element-definition","name":"gaia-tool-approval-block","declaration":{"name":"GaiaToolApprovalBlock","module":"components/message/renderers/tool-approval-block.js"}}]},{"kind":"javascript-module","path":"components/message/renderers/tool-status-block.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/message/renderers/tool-status-block.styles.js"}}]},{"kind":"javascript-module","path":"components/message/renderers/tool-status-block.test.js","declarations":[{"kind":"class","description":"","name":"TestWrapper","members":[{"kind":"field","name":"store","type":{"text":"MockChatStore"}}],"superclass":{"name":"LitElement","package":"lit"},"tagName":"test-wrapper-canvas-revision-selector","customElement":true}],"exports":[{"kind":"custom-element-definition","name":"test-wrapper-tool-status","declaration":{"name":"TestWrapper","module":"components/message/renderers/tool-status-block.test.js"}}]},{"kind":"javascript-module","path":"components/message/renderers/tool-status-block.js","declarations":[{"kind":"function","name":"isCanvasToolCall","return":{"type":{"text":"boolean"}},"parameters":[{"name":"toolCall","type":{"text":"UiToolCall"}}],"description":"Whether the given tool call should be treated as a canvas tool. Exported so\nother components (notably `<gaia-assistant-message>`) can decide to render\nthe canvas visualization inline rather than collapsing it behind a toggle."},{"kind":"class","description":"Status indicator for a tool call, showing summary text with a colored dot.\n\nDisplays a blinking dot and shimmer text while the tool is pending,\na solid green dot on success, or a solid red dot on rejection.\nCompleted tool calls with a response are expandable — clicking the\nstatus line reveals a dropdown with citation links (for search tools)\nor a structured key-value view of the raw response.\n\nFor canvas tool calls, delegates rendering to `<gaia-canvas-tool-card>`.","name":"GaiaToolStatusBlock","members":[{"kind":"field","name":"message","type":{"text":"UiToolCall"}},{"kind":"field","name":"ctrl","privacy":"private","default":"new StoreController(this, selectToolStatusState)"},{"kind":"field","name":"expanded","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"field","name":"resultExpanded","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"field","name":"isCanvasTool","type":{"text":"boolean"},"privacy":"private","readonly":true},{"kind":"field","name":"expandable","type":{"text":"boolean"},"privacy":"private","description":"Whether the status line is expandable.","readonly":true},{"kind":"field","name":"statusLabel","type":{"text":"string"},"privacy":"private","readonly":true},{"kind":"field","name":"status","type":{"text":"ToolStatus"},"privacy":"private","readonly":true},{"kind":"method","name":"toggleExpand","privacy":"private"},{"kind":"method","name":"renderCanvasStatus","privacy":"private"},{"kind":"method","name":"renderExpandedContent","privacy":"private"},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-tool-status-block","customElement":true}],"exports":[{"kind":"js","name":"isCanvasToolCall","declaration":{"name":"isCanvasToolCall","module":"components/message/renderers/tool-status-block.js"}},{"kind":"js","name":"GaiaToolStatusBlock","declaration":{"name":"GaiaToolStatusBlock","module":"components/message/renderers/tool-status-block.js"}},{"kind":"custom-element-definition","name":"gaia-tool-status-block","declaration":{"name":"GaiaToolStatusBlock","module":"components/message/renderers/tool-status-block.js"}}]},{"kind":"javascript-module","path":"components/message/renderers/typing-indicator/typing-indicator.stories.js","declarations":[{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Components/Typing Indicator', component: 'gaia-typing-indicator', }"},{"kind":"variable","name":"Default","type":{"text":"Story"},"default":"{ render: () => html`<gaia-typing-indicator></gaia-typing-indicator>`, }"},{"kind":"variable","name":"InMessageContext","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"background: var(--gaia-color-surface, #f5f5f5); padding: 12px; border-radius: 8px; display: inline-block;\" > <gaia-typing-indicator></gaia-typing-indicator> </div>`, }"}],"exports":[{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/message/renderers/typing-indicator/typing-indicator.stories.js"}},{"kind":"js","name":"Default","declaration":{"name":"Default","module":"components/message/renderers/typing-indicator/typing-indicator.stories.js"}},{"kind":"js","name":"InMessageContext","declaration":{"name":"InMessageContext","module":"components/message/renderers/typing-indicator/typing-indicator.stories.js"}}]},{"kind":"javascript-module","path":"components/message/renderers/typing-indicator/typing-indicator.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/message/renderers/typing-indicator/typing-indicator.styles.js"}}]},{"kind":"javascript-module","path":"components/message/renderers/typing-indicator/typing-indicator.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"components/message/renderers/typing-indicator/typing-indicator.js","declarations":[{"kind":"class","description":"Three-dot animation indicating a support operator is typing.\n\nRendered inside an operator message when the operator is actively\ncomposing a reply via the SignalR support channel.","name":"GaiaTypingIndicator","members":[{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-typing-indicator","customElement":true}],"exports":[{"kind":"js","name":"GaiaTypingIndicator","declaration":{"name":"GaiaTypingIndicator","module":"components/message/renderers/typing-indicator/typing-indicator.js"}},{"kind":"custom-element-definition","name":"gaia-typing-indicator","declaration":{"name":"GaiaTypingIndicator","module":"components/message/renderers/typing-indicator/typing-indicator.js"}}]},{"kind":"javascript-module","path":"components/primitives/avatar/avatar.stories.js","declarations":[{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Primitives/Avatar', component: 'gaia-avatar', argTypes: { size: { control: 'select', options: [...sizes], }, name: { control: 'text' }, image: { control: 'text' }, }, }"},{"kind":"variable","name":"Default","type":{"text":"Story"},"default":"{ args: { size: 'medium', name: 'Robin Banks', image: '', }, render: ({ size, name, image }) => html`<gaia-avatar size=${size} name=${name} .image=${image || undefined}></gaia-avatar>`, }"},{"kind":"variable","name":"Text","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"display: flex; gap: 8px; align-items: center;\"> ${sizes.map((s) => html`<gaia-avatar size=${s} name=\"Robin Banks\"></gaia-avatar>`)} </div>`, }"},{"kind":"variable","name":"Icon","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"display: flex; gap: 8px; align-items: center;\"> ${sizes.map((s) => html`<gaia-avatar size=${s}></gaia-avatar>`)} </div>`, }"},{"kind":"variable","name":"Image","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"display: flex; gap: 8px; align-items: center;\"> ${sizes.map( (s) => html`<gaia-avatar size=${s} name=\"Robin Banks\" image=\"https://i.pravatar.cc/64?img=70\" ></gaia-avatar>` )} </div>`, }"}],"exports":[{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/primitives/avatar/avatar.stories.js"}},{"kind":"js","name":"Default","declaration":{"name":"Default","module":"components/primitives/avatar/avatar.stories.js"}},{"kind":"js","name":"Text","declaration":{"name":"Text","module":"components/primitives/avatar/avatar.stories.js"}},{"kind":"js","name":"Icon","declaration":{"name":"Icon","module":"components/primitives/avatar/avatar.stories.js"}},{"kind":"js","name":"Image","declaration":{"name":"Image","module":"components/primitives/avatar/avatar.stories.js"}}]},{"kind":"javascript-module","path":"components/primitives/avatar/avatar.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/primitives/avatar/avatar.styles.js"}}]},{"kind":"javascript-module","path":"components/primitives/avatar/avatar.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"components/primitives/avatar/avatar.js","declarations":[{"kind":"function","name":"computeInitials","return":{"type":{"text":"string"}},"parameters":[{"name":"name","type":{"text":"string"}}],"description":"Computes display initials from a name string.\n\n- Two-word names: first letter of each word (e.g. \"Jane Doe\" → \"JD\")\n- Single-word names: first two letters, first upper + second lower (e.g. \"Acme\" → \"Ac\")\n- Max 2 characters"},{"kind":"class","description":"Displays an image, initials, or icon to represent a user or entity.\n\nContent is resolved in priority order: **image → initials → icon**.\nWhen an `image` URL is provided it is rendered as a circular photo;\nif the image fails to load, the component falls back to initials\nderived from `name`, and finally to a generic user icon.","name":"GaiaAvatar","cssProperties":[{"description":"Border and text colour (inherited via `currentcolor`).","name":"--ga-color-text-headings"}],"cssParts":[{"description":"Shadow parts are not exposed; style via the host element.","name":"(none)"}],"members":[{"kind":"field","name":"size","type":{"text":"AvatarSize"},"default":"'medium'","description":"Diameter variant of the avatar circle. Reflected as a host attribute for CSS styling.","attribute":"size","reflects":true},{"kind":"field","name":"name","type":{"text":"string"},"default":"''","description":"Full name of the person or entity.\n\nUsed to compute up to two display initials (e.g. \"Jane Doe\" → \"JD\")\nand as the `aria-label` for screen readers. When empty, the component\nrenders a generic icon and marks itself `aria-hidden`.","attribute":"name"},{"kind":"field","name":"image","type":{"text":"string | undefined"},"default":"undefined","description":"URL of a profile image.\n\nWhen set, the image is rendered as a circular photo that fills the\navatar. If the image fails to load the component automatically falls\nback to initials (when `name` is provided) or to the default icon.","attribute":"image"},{"kind":"field","name":"icon","type":{"text":"string | undefined"},"default":"undefined","description":"Custom icon name for the fallback icon.\n\nWhen set, this icon is used instead of the default `user-round` icon.\nThe icon is only visible when neither `image` nor `name` resolves content\n(or at `extra-small` size where only icons are shown).","attribute":"icon"},{"kind":"method","name":"handleImageError","privacy":"private"},{"kind":"field","name":"contentType","type":{"text":"'image' | 'initials' | 'icon'"},"privacy":"private","readonly":true},{"kind":"field","name":"iconSize","type":{"text":"'sm' | 'md' | 'xl' | '2xl'"},"privacy":"private","readonly":true},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"events":[{"description":"This component does not dispatch custom events.","name":"(none)"}],"attributes":[{"type":{"text":"AvatarSize"},"description":"Diameter variant of the avatar circle. Reflected as a host attribute for CSS styling.","name":"size","default":"'medium'","fieldName":"size"},{"type":{"text":"string"},"description":"Full name of the person or entity.\n\nUsed to compute up to two display initials (e.g. \"Jane Doe\" → \"JD\")\nand as the `aria-label` for screen readers. When empty, the component\nrenders a generic icon and marks itself `aria-hidden`.","name":"name","default":"''","fieldName":"name"},{"type":{"text":"string | undefined"},"description":"URL of a profile image.\n\nWhen set, the image is rendered as a circular photo that fills the\navatar. If the image fails to load the component automatically falls\nback to initials (when `name` is provided) or to the default icon.","name":"image","default":"undefined","fieldName":"image"},{"type":{"text":"string | undefined"},"description":"Custom icon name for the fallback icon.\n\nWhen set, this icon is used instead of the default `user-round` icon.\nThe icon is only visible when neither `image` nor `name` resolves content\n(or at `extra-small` size where only icons are shown).","name":"icon","default":"undefined","fieldName":"icon"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-avatar","customElement":true}],"exports":[{"kind":"js","name":"computeInitials","declaration":{"name":"computeInitials","module":"components/primitives/avatar/avatar.js"}},{"kind":"js","name":"GaiaAvatar","declaration":{"name":"GaiaAvatar","module":"components/primitives/avatar/avatar.js"}},{"kind":"custom-element-definition","name":"gaia-avatar","declaration":{"name":"GaiaAvatar","module":"components/primitives/avatar/avatar.js"}}]},{"kind":"javascript-module","path":"components/primitives/badge/badge.stories.js","declarations":[{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Primitives/Badge', component: 'gaia-badge', argTypes: { type: { control: 'select', options: ['text', 'dot'], }, label: { control: 'text', if: { arg: 'type', neq: 'dot' }, }, status: { control: 'select', options: [...statuses], }, }, }"},{"kind":"variable","name":"Default","type":{"text":"Story"},"default":"{ args: { type: 'text', label: '99', status: 'default', }, render: ({ type, label, status }) => html`<gaia-badge type=${type} label=${label} status=${status}></gaia-badge>`, }"},{"kind":"variable","name":"Text","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"display: flex; gap: 8px; align-items: center;\"> <gaia-badge type=\"text\" label=\"25\" status=\"default\"></gaia-badge> <gaia-badge type=\"text\" label=\"99\" status=\"default-inverted\"></gaia-badge> <gaia-badge type=\"text\" label=\"9\" status=\"muted\"></gaia-badge> <gaia-badge type=\"text\" label=\"7\" status=\"information\"></gaia-badge> <gaia-badge type=\"text\" label=\"-237%\" status=\"error\"></gaia-badge> <gaia-badge type=\"text\" label=\"9\" status=\"warning\"></gaia-badge> <gaia-badge type=\"text\" label=\"+25K\" status=\"success\"></gaia-badge> <gaia-badge type=\"text\" label=\"0\" status=\"disabled\"></gaia-badge> <gaia-badge type=\"text\" label=\"0\" status=\"disabled-inverted\"></gaia-badge> </div>`, }"},{"kind":"variable","name":"Dot","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"display: flex; gap: 8px; align-items: center;\"> ${statuses.map((s) => html`<gaia-badge type=\"dot\" status=${s}></gaia-badge>`)} </div>`, }"}],"exports":[{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/primitives/badge/badge.stories.js"}},{"kind":"js","name":"Default","declaration":{"name":"Default","module":"components/primitives/badge/badge.stories.js"}},{"kind":"js","name":"Text","declaration":{"name":"Text","module":"components/primitives/badge/badge.stories.js"}},{"kind":"js","name":"Dot","declaration":{"name":"Dot","module":"components/primitives/badge/badge.stories.js"}}]},{"kind":"javascript-module","path":"components/primitives/badge/badge.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/primitives/badge/badge.styles.js"}}]},{"kind":"javascript-module","path":"components/primitives/badge/badge.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"components/primitives/badge/badge.js","declarations":[{"kind":"class","description":"Small status indicator badge in text or dot form.\n\nThe `text` variant displays a numeric or short label; the `dot`\nvariant renders a small colored circle. Marked `aria-hidden` by\ndefault since badges are decorative.","name":"GaiaBadge","members":[{"kind":"field","name":"type","type":{"text":"BadgeType"},"default":"'text'","description":"Badge display type: 'text' shows a label, 'dot' shows a small circle.","attribute":"type","reflects":true},{"kind":"field","name":"label","type":{"text":"string"},"default":"'99'","description":"Label text displayed in the text variant. Ignored for dot.","attribute":"label","reflects":true},{"kind":"field","name":"status","type":{"text":"BadgeStatus"},"default":"'default'","description":"Semantic status controlling the badge color.","attribute":"status","reflects":true},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"attributes":[{"name":"type","type":{"text":"BadgeType"},"default":"'text'","description":"Badge display type: 'text' shows a label, 'dot' shows a small circle.","fieldName":"type"},{"name":"label","type":{"text":"string"},"default":"'99'","description":"Label text displayed in the text variant. Ignored for dot.","fieldName":"label"},{"name":"status","type":{"text":"BadgeStatus"},"default":"'default'","description":"Semantic status controlling the badge color.","fieldName":"status"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-badge","customElement":true}],"exports":[{"kind":"js","name":"GaiaBadge","declaration":{"name":"GaiaBadge","module":"components/primitives/badge/badge.js"}},{"kind":"custom-element-definition","name":"gaia-badge","declaration":{"name":"GaiaBadge","module":"components/primitives/badge/badge.js"}}]},{"kind":"javascript-module","path":"components/primitives/button/button.stories.js","declarations":[{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Primitives/Button', component: 'gaia-button', argTypes: { variant: { control: 'select', options: ['primary', 'secondary', 'ghost', 'transparent', 'danger'], }, size: { control: 'select', options: ['sm', 'md'], }, disabled: { control: 'boolean', }, }, }"},{"kind":"variable","name":"Default","type":{"text":"Story"},"default":"{ args: { variant: 'primary', size: 'md', disabled: false, }, render: ({ variant, size, disabled }) => html`<div style=\"display: flex; gap: 8px; align-items: center;\"> <gaia-button variant=${variant} size=${size} ?disabled=${disabled} ><gaia-icon name=\"sparkles\"></gaia-icon ></gaia-button> <gaia-button variant=${variant} size=${size} ?disabled=${disabled} ><gaia-icon slot=\"prefix\" name=\"sparkles\"></gaia-icon>With Prefix</gaia-button > <gaia-button variant=${variant} size=${size} ?disabled=${disabled}>Only Label</gaia-button> </div>`, }"},{"kind":"variable","name":"Variants","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"display: flex; gap: 8px; align-items: center;\"> <gaia-button variant=\"primary\">Primary</gaia-button> <gaia-button variant=\"secondary\">Secondary</gaia-button> <gaia-button variant=\"ghost\">Ghost</gaia-button> <gaia-button variant=\"transparent\">Transparent</gaia-button> </div>`, }"},{"kind":"variable","name":"Disabled","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"display: flex; gap: 8px; align-items: center;\"> <gaia-button disabled>Disabled</gaia-button> <gaia-button variant=\"secondary\" disabled>Disabled</gaia-button> <gaia-button variant=\"ghost\" disabled>Disabled</gaia-button> </div>`, }"},{"kind":"variable","name":"Sizes","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"display: flex; gap: 16px; align-items: center;\"> <div style=\"display: flex; gap: 8px; align-items: center;\"> <gaia-button size=\"sm\">Small</gaia-button> <gaia-button size=\"sm\" variant=\"secondary\">Small</gaia-button> <gaia-button size=\"sm\" variant=\"ghost\"><gaia-icon name=\"x\"></gaia-icon></gaia-button> </div> <div style=\"display: flex; gap: 8px; align-items: center;\"> <gaia-button size=\"md\">Medium</gaia-button> <gaia-button size=\"md\" variant=\"secondary\">Medium</gaia-button> <gaia-button size=\"md\" variant=\"ghost\"><gaia-icon name=\"x\"></gaia-icon></gaia-button> </div> </div>`, }"},{"kind":"variable","name":"IconButtons","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"display: flex; gap: 8px; align-items: center;\"> <gaia-button variant=\"ghost\"><gaia-icon name=\"x\"></gaia-icon></gaia-button> <gaia-button variant=\"ghost\"><gaia-icon name=\"copy\"></gaia-icon></gaia-button> <gaia-button variant=\"ghost\"><gaia-icon name=\"thumbs-up\"></gaia-icon></gaia-button> <gaia-button variant=\"ghost\"><gaia-icon name=\"megaphone\"></gaia-icon></gaia-button> </div>`, }"},{"kind":"variable","name":"Loading","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"display: flex; gap: 8px; align-items: center;\"> <gaia-button disabled><gaia-spinner></gaia-spinner></gaia-button> <gaia-button variant=\"secondary\" disabled><gaia-spinner></gaia-spinner></gaia-button> <gaia-button variant=\"ghost\" disabled><gaia-spinner></gaia-spinner></gaia-button> </div>`, }"}],"exports":[{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/primitives/button/button.stories.js"}},{"kind":"js","name":"Default","declaration":{"name":"Default","module":"components/primitives/button/button.stories.js"}},{"kind":"js","name":"Variants","declaration":{"name":"Variants","module":"components/primitives/button/button.stories.js"}},{"kind":"js","name":"Disabled","declaration":{"name":"Disabled","module":"components/primitives/button/button.stories.js"}},{"kind":"js","name":"Sizes","declaration":{"name":"Sizes","module":"components/primitives/button/button.stories.js"}},{"kind":"js","name":"IconButtons","declaration":{"name":"IconButtons","module":"components/primitives/button/button.stories.js"}},{"kind":"js","name":"Loading","declaration":{"name":"Loading","module":"components/primitives/button/button.stories.js"}}]},{"kind":"javascript-module","path":"components/primitives/button/button.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/primitives/button/button.styles.js"}}]},{"kind":"javascript-module","path":"components/primitives/button/button.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"components/primitives/button/button.js","declarations":[{"kind":"class","description":"General-purpose button with multiple style variants.\n\nAutomatically detects whether the default slot contains only an icon\n(and no text) and applies compact icon-button styling accordingly.","name":"GaiaButton","slots":[{"description":"Leading icon or element before the label","name":"prefix"},{"description":"Default slot for the button label text or icon","name":""}],"members":[{"kind":"field","name":"labelSlot","type":{"text":"HTMLSlotElement"}},{"kind":"field","name":"isIconButton","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"field","name":"variant","type":{"text":"| 'primary'\n | 'secondary'\n | 'ghost'\n | 'transparent'\n | 'danger'"},"default":"'primary'","attribute":"variant","reflects":true},{"kind":"field","name":"size","type":{"text":"'sm' | 'md'"},"default":"'md'","attribute":"size","reflects":true},{"kind":"field","name":"disabled","type":{"text":"boolean"},"default":"false","attribute":"disabled","reflects":true},{"kind":"method","name":"handleLabelSlotChange","privacy":"private"},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"attributes":[{"name":"variant","type":{"text":"| 'primary'\n | 'secondary'\n | 'ghost'\n | 'transparent'\n | 'danger'"},"default":"'primary'","fieldName":"variant"},{"name":"size","type":{"text":"'sm' | 'md'"},"default":"'md'","fieldName":"size"},{"name":"disabled","type":{"text":"boolean"},"default":"false","fieldName":"disabled"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-button","customElement":true}],"exports":[{"kind":"js","name":"GaiaButton","declaration":{"name":"GaiaButton","module":"components/primitives/button/button.js"}},{"kind":"custom-element-definition","name":"gaia-button","declaration":{"name":"GaiaButton","module":"components/primitives/button/button.js"}}]},{"kind":"javascript-module","path":"components/primitives/checkbox/checkbox.stories.js","declarations":[{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Primitives/Checkbox', component: 'gaia-checkbox', argTypes: { checked: { control: 'boolean' }, indeterminate: { control: 'boolean' }, disabled: { control: 'boolean' }, invalid: { control: 'boolean' }, required: { control: 'boolean' }, label: { control: 'text' }, value: { control: 'text' }, name: { control: 'text' }, }, }"},{"kind":"variable","name":"Default","type":{"text":"Story"},"default":"{ args: { label: 'Checkbox label', checked: false, indeterminate: false, disabled: false, invalid: false, required: false, value: 'on', }, render: ({ label, checked, indeterminate, disabled, invalid, required, value }) => html`<gaia-checkbox label=${label} ?checked=${checked} ?indeterminate=${indeterminate} ?disabled=${disabled} ?invalid=${invalid} ?required=${required} value=${value} ></gaia-checkbox>`, }"},{"kind":"variable","name":"Checked","type":{"text":"Story"},"default":"{ render: () => html`<gaia-checkbox label=\"Checked checkbox\" checked></gaia-checkbox>`, }"},{"kind":"variable","name":"Indeterminate","type":{"text":"Story"},"default":"{ render: () => html`<gaia-checkbox label=\"Indeterminate checkbox\" indeterminate></gaia-checkbox>`, }"},{"kind":"variable","name":"Disabled","type":{"text":"Story"},"default":"{ render: () => html` <div style=\"display: flex; flex-direction: column; gap: 8px;\"> <gaia-checkbox label=\"Disabled unchecked\" disabled></gaia-checkbox> <gaia-checkbox label=\"Disabled checked\" disabled checked></gaia-checkbox> <gaia-checkbox label=\"Disabled indeterminate\" disabled indeterminate></gaia-checkbox> </div> `, }"},{"kind":"variable","name":"Invalid","type":{"text":"Story"},"default":"{ render: () => html` <div style=\"display: flex; flex-direction: column; gap: 8px;\"> <gaia-checkbox label=\"Invalid unchecked\" invalid></gaia-checkbox> <gaia-checkbox label=\"Invalid checked\" invalid checked></gaia-checkbox> </div> `, }"},{"kind":"variable","name":"Nolabel","type":{"text":"Story"},"default":"{ render: () => html`<gaia-checkbox aria-label=\"Checkbox without visible label\"></gaia-checkbox>`, }"},{"kind":"variable","name":"WithFormField","type":{"text":"Story"},"default":"{ render: () => html` <gaia-form-field label=\"Agreement\"> <gaia-checkbox label=\"I agree to the terms and conditions\"></gaia-checkbox> </gaia-form-field> `, }"},{"kind":"variable","name":"WithFormFieldError","type":{"text":"Story"},"default":"{ render: () => html` <gaia-form-field label=\"Agreement\" error=\"You must agree to continue\" invalid> <gaia-checkbox label=\"I agree to the terms and conditions\" invalid></gaia-checkbox> </gaia-form-field> `, }"},{"kind":"variable","name":"Group","type":{"text":"Story"},"default":"{ render: () => html` <fieldset style=\"border: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 8px;\" > <legend style=\"font-weight: 600; margin-bottom: 4px;\">Select your interests</legend> <gaia-checkbox label=\"Design\" name=\"interests\" value=\"design\"></gaia-checkbox> <gaia-checkbox label=\"Development\" name=\"interests\" value=\"development\" checked ></gaia-checkbox> <gaia-checkbox label=\"Marketing\" name=\"interests\" value=\"marketing\"></gaia-checkbox> <gaia-checkbox label=\"Research\" name=\"interests\" value=\"research\"></gaia-checkbox> </fieldset> `, }"}],"exports":[{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/primitives/checkbox/checkbox.stories.js"}},{"kind":"js","name":"Default","declaration":{"name":"Default","module":"components/primitives/checkbox/checkbox.stories.js"}},{"kind":"js","name":"Checked","declaration":{"name":"Checked","module":"components/primitives/checkbox/checkbox.stories.js"}},{"kind":"js","name":"Indeterminate","declaration":{"name":"Indeterminate","module":"components/primitives/checkbox/checkbox.stories.js"}},{"kind":"js","name":"Disabled","declaration":{"name":"Disabled","module":"components/primitives/checkbox/checkbox.stories.js"}},{"kind":"js","name":"Invalid","declaration":{"name":"Invalid","module":"components/primitives/checkbox/checkbox.stories.js"}},{"kind":"js","name":"Nolabel","declaration":{"name":"Nolabel","module":"components/primitives/checkbox/checkbox.stories.js"}},{"kind":"js","name":"WithFormField","declaration":{"name":"WithFormField","module":"components/primitives/checkbox/checkbox.stories.js"}},{"kind":"js","name":"WithFormFieldError","declaration":{"name":"WithFormFieldError","module":"components/primitives/checkbox/checkbox.stories.js"}},{"kind":"js","name":"Group","declaration":{"name":"Group","module":"components/primitives/checkbox/checkbox.stories.js"}}]},{"kind":"javascript-module","path":"components/primitives/checkbox/checkbox.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/primitives/checkbox/checkbox.styles.js"}}]},{"kind":"javascript-module","path":"components/primitives/checkbox/checkbox.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"components/primitives/checkbox/checkbox.js","declarations":[{"kind":"class","description":"A checkbox component aligned with the GAIA design system.\n\nRenders a native `<input type=\"checkbox\">` visually hidden behind a custom\nmarker, with optional label text. Supports checked, indeterminate, disabled,\ninvalid, and required states. Form-associated for native form submission.","name":"GaiaCheckbox","cssParts":[{"description":"The outer container element.","name":"checkbox"},{"description":"The native checkbox input element.","name":"native"},{"description":"The visual marker element.","name":"marker"},{"description":"The label text element.","name":"label"}],"members":[{"kind":"field","name":"formAssociated","type":{"text":"boolean"},"static":true,"default":"true"},{"kind":"field","name":"checked","type":{"text":"boolean"},"default":"false","description":"Whether the checkbox is checked","attribute":"checked","reflects":true},{"kind":"field","name":"indeterminate","type":{"text":"boolean"},"default":"false","description":"Whether the checkbox is in an indeterminate state","attribute":"indeterminate","reflects":true},{"kind":"field","name":"disabled","type":{"text":"boolean"},"default":"false","description":"Whether the checkbox is disabled","attribute":"disabled","reflects":true},{"kind":"field","name":"invalid","type":{"text":"boolean"},"default":"false","description":"Whether the checkbox is in an invalid/error state","attribute":"invalid","reflects":true},{"kind":"field","name":"required","type":{"text":"boolean"},"default":"false","description":"Whether the checkbox is required","attribute":"required","reflects":true},{"kind":"field","name":"value","type":{"text":"string"},"default":"'on'","description":"The value of the checkbox for form submission","attribute":"value"},{"kind":"field","name":"name","type":{"text":"string"},"default":"''","description":"Name for form submission","attribute":"name"},{"kind":"field","name":"label","type":{"text":"string"},"default":"''","description":"Visible label text for the checkbox","attribute":"label"},{"kind":"field","name":"ariaLabel","type":{"text":"string | null"},"default":"null","description":"Accessible label for the checkbox (use when no visible label is present)","attribute":"aria-label"},{"kind":"field","name":"ariaLabelledBy","type":{"text":"string | null"},"default":"null","description":"ID of the element that labels this checkbox","attribute":"aria-labelledby"},{"kind":"field","name":"ariaDescribedBy","type":{"text":"string | null"},"default":"null","description":"ID(s) of elements that describe this checkbox","attribute":"aria-describedby"},{"kind":"field","name":"inputEl","type":{"text":"HTMLInputElement"},"privacy":"private"},{"kind":"method","name":"focus","parameters":[{"name":"options","optional":true,"type":{"text":"FocusOptions"}}],"description":"Focus the checkbox"},{"kind":"method","name":"blur","description":"Blur the checkbox"},{"kind":"method","name":"toggle","description":"Toggle the checked state programmatically"},{"kind":"method","name":"handleChange","privacy":"private"},{"kind":"method","name":"renderCheckIcon","privacy":"private"},{"kind":"method","name":"renderMinusIcon","privacy":"private"},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"events":[{"name":"change","type":{"text":"Event"},"description":"Fires when the checked state changes via user interaction."},{"name":"input","type":{"text":"Event"},"description":"Fires when the checked state changes via user interaction."}],"attributes":[{"name":"checked","type":{"text":"boolean"},"default":"false","description":"Whether the checkbox is checked","fieldName":"checked"},{"name":"indeterminate","type":{"text":"boolean"},"default":"false","description":"Whether the checkbox is in an indeterminate state","fieldName":"indeterminate"},{"name":"disabled","type":{"text":"boolean"},"default":"false","description":"Whether the checkbox is disabled","fieldName":"disabled"},{"name":"invalid","type":{"text":"boolean"},"default":"false","description":"Whether the checkbox is in an invalid/error state","fieldName":"invalid"},{"name":"required","type":{"text":"boolean"},"default":"false","description":"Whether the checkbox is required","fieldName":"required"},{"name":"value","type":{"text":"string"},"default":"'on'","description":"The value of the checkbox for form submission","fieldName":"value"},{"name":"name","type":{"text":"string"},"default":"''","description":"Name for form submission","fieldName":"name"},{"name":"label","type":{"text":"string"},"default":"''","description":"Visible label text for the checkbox","fieldName":"label"},{"name":"aria-label","type":{"text":"string | null"},"default":"null","description":"Accessible label for the checkbox (use when no visible label is present)","fieldName":"ariaLabel"},{"name":"aria-labelledby","type":{"text":"string | null"},"default":"null","description":"ID of the element that labels this checkbox","fieldName":"ariaLabelledBy"},{"name":"aria-describedby","type":{"text":"string | null"},"default":"null","description":"ID(s) of elements that describe this checkbox","fieldName":"ariaDescribedBy"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-checkbox","customElement":true}],"exports":[{"kind":"js","name":"GaiaCheckbox","declaration":{"name":"GaiaCheckbox","module":"components/primitives/checkbox/checkbox.js"}},{"kind":"custom-element-definition","name":"gaia-checkbox","declaration":{"name":"GaiaCheckbox","module":"components/primitives/checkbox/checkbox.js"}}]},{"kind":"javascript-module","path":"components/primitives/dropdown/dropdown-item.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/primitives/dropdown/dropdown-item.styles.js"}}]},{"kind":"javascript-module","path":"components/primitives/dropdown/dropdown-item.js","declarations":[{"kind":"class","description":"A single option item within a `<gaia-dropdown>` list.\n\nAligns with the GAIA design system `ga-dropdown__item` element.\nManages its own `role=\"option\"`, `aria-selected`, and `aria-disabled`\nattributes.","name":"GaiaDropdownItem","slots":[{"description":"Default slot for the item label text","name":""}],"members":[{"kind":"field","name":"selected","type":{"text":"boolean"},"default":"false","description":"Whether this item is currently selected","attribute":"selected","reflects":true},{"kind":"field","name":"disabled","type":{"text":"boolean"},"default":"false","description":"Whether this item is disabled and non-interactive","attribute":"disabled","reflects":true},{"kind":"field","name":"active","type":{"text":"boolean"},"default":"false","description":"Whether this item has active (visual focus) state","attribute":"active","reflects":true},{"kind":"field","name":"value","type":{"text":"string"},"default":"''","description":"The value associated with this item","attribute":"value"},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"attributes":[{"name":"selected","type":{"text":"boolean"},"default":"false","description":"Whether this item is currently selected","fieldName":"selected"},{"name":"disabled","type":{"text":"boolean"},"default":"false","description":"Whether this item is disabled and non-interactive","fieldName":"disabled"},{"name":"active","type":{"text":"boolean"},"default":"false","description":"Whether this item has active (visual focus) state","fieldName":"active"},{"name":"value","type":{"text":"string"},"default":"''","description":"The value associated with this item","fieldName":"value"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-dropdown-item","customElement":true}],"exports":[{"kind":"js","name":"GaiaDropdownItem","declaration":{"name":"GaiaDropdownItem","module":"components/primitives/dropdown/dropdown-item.js"}},{"kind":"custom-element-definition","name":"gaia-dropdown-item","declaration":{"name":"GaiaDropdownItem","module":"components/primitives/dropdown/dropdown-item.js"}}]},{"kind":"javascript-module","path":"components/primitives/dropdown/dropdown.stories.js","declarations":[{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Primitives/Dropdown', component: 'gaia-dropdown', argTypes: { placeholder: { control: 'text' }, value: { control: 'text' }, caption: { control: 'text' }, emptyText: { control: 'text' }, loading: { control: 'boolean' }, disabled: { control: 'boolean' }, invalid: { control: 'boolean' }, success: { control: 'boolean' }, }, }"},{"kind":"variable","name":"Default","type":{"text":"Story"},"default":"{ args: { placeholder: 'Placeholder', value: '', caption: '', emptyText: '', loading: false, disabled: false, invalid: false, success: false, }, render: ({ placeholder, value, caption, emptyText, loading, disabled, invalid, success }) => html`<gaia-dropdown placeholder=${placeholder || nothing} value=${value || nothing} caption=${caption || nothing} empty-text=${emptyText || nothing} ?loading=${loading} ?disabled=${disabled} ?invalid=${invalid} ?success=${success} aria-label=\"Example dropdown\" > <gaia-dropdown-item value=\"apple\">Apple</gaia-dropdown-item> <gaia-dropdown-item value=\"banana\">Banana</gaia-dropdown-item> <gaia-dropdown-item value=\"cherry\">Cherry</gaia-dropdown-item> <gaia-dropdown-item value=\"date\">Date</gaia-dropdown-item> <gaia-dropdown-item value=\"elderberry\">Elderberry</gaia-dropdown-item> </gaia-dropdown>`, }"},{"kind":"variable","name":"WithValue","type":{"text":"Story"},"default":"{ render: () => html`<gaia-dropdown placeholder=\"Choose a fruit\" value=\"banana\" aria-label=\"Fruit\"> <gaia-dropdown-item value=\"apple\">Apple</gaia-dropdown-item> <gaia-dropdown-item value=\"banana\">Banana</gaia-dropdown-item> <gaia-dropdown-item value=\"cherry\">Cherry</gaia-dropdown-item> </gaia-dropdown>`, }"},{"kind":"variable","name":"WithCaption","type":{"text":"Story"},"default":"{ render: () => html`<gaia-dropdown placeholder=\"Choose an item\" caption=\"Group A\" aria-label=\"Grouped\"> <gaia-dropdown-item value=\"a1\">Alpha</gaia-dropdown-item> <gaia-dropdown-item value=\"a2\">Beta</gaia-dropdown-item> <gaia-dropdown-item value=\"a3\">Charlie</gaia-dropdown-item> </gaia-dropdown>`, }"},{"kind":"variable","name":"Disabled","type":{"text":"Story"},"default":"{ render: () => html` <div style=\"display: flex; flex-direction: column; gap: 8px; max-width: 300px;\"> <gaia-dropdown placeholder=\"Placeholder\" disabled aria-label=\"Disabled empty\"> <gaia-dropdown-item value=\"1\">Item 1</gaia-dropdown-item> </gaia-dropdown> <gaia-dropdown placeholder=\"Placeholder\" value=\"1\" disabled aria-label=\"Disabled filled\"> <gaia-dropdown-item value=\"1\">Item 1</gaia-dropdown-item> </gaia-dropdown> </div> `, }"},{"kind":"variable","name":"Invalid","type":{"text":"Story"},"default":"{ render: () => html`<gaia-dropdown placeholder=\"Placeholder\" invalid aria-label=\"Invalid\"> <gaia-dropdown-item value=\"1\">Item 1</gaia-dropdown-item> <gaia-dropdown-item value=\"2\">Item 2</gaia-dropdown-item> </gaia-dropdown>`, }"},{"kind":"variable","name":"Success","type":{"text":"Story"},"default":"{ render: () => html`<gaia-dropdown placeholder=\"Placeholder\" value=\"1\" success aria-label=\"Success\"> <gaia-dropdown-item value=\"1\">Item 1</gaia-dropdown-item> <gaia-dropdown-item value=\"2\">Item 2</gaia-dropdown-item> </gaia-dropdown>`, }"},{"kind":"variable","name":"WithDisabledItems","type":{"text":"Story"},"default":"{ render: () => html`<gaia-dropdown placeholder=\"Choose an option\" aria-label=\"Mixed\"> <gaia-dropdown-item value=\"1\">Available</gaia-dropdown-item> <gaia-dropdown-item value=\"2\" disabled>Unavailable</gaia-dropdown-item> <gaia-dropdown-item value=\"3\">Available</gaia-dropdown-item> </gaia-dropdown>`, }"},{"kind":"variable","name":"Empty","type":{"text":"Story"},"default":"{ render: () => html`<gaia-dropdown placeholder=\"Search...\" empty-text=\"No items found\" aria-label=\"Empty\" ></gaia-dropdown>`, }"},{"kind":"variable","name":"Loading","type":{"text":"Story"},"default":"{ render: () => html`<gaia-dropdown placeholder=\"Loading...\" loading aria-label=\"Loading\"></gaia-dropdown>`, }"},{"kind":"variable","name":"Overflow","type":{"text":"Story"},"default":"{ render: () => html`<gaia-dropdown placeholder=\"Choose a country\" caption=\"Nordic\" aria-label=\"Countries\"> <gaia-dropdown-item value=\"no\">Norway</gaia-dropdown-item> <gaia-dropdown-item value=\"se\">Sweden</gaia-dropdown-item> <gaia-dropdown-item value=\"dk\">Denmark</gaia-dropdown-item> <gaia-dropdown-item value=\"fi\">Finland</gaia-dropdown-item> <gaia-dropdown-item value=\"is\">Iceland</gaia-dropdown-item> <gaia-dropdown-item value=\"fo\">Faroe Islands</gaia-dropdown-item> <gaia-dropdown-item value=\"gl\">Greenland</gaia-dropdown-item> <gaia-dropdown-item value=\"ax\">Åland Islands</gaia-dropdown-item> <gaia-dropdown-item value=\"sj\">Svalbard</gaia-dropdown-item> <gaia-dropdown-item value=\"bv\">Bouvet Island</gaia-dropdown-item> </gaia-dropdown>`, }"},{"kind":"variable","name":"WithFormField","type":{"text":"Story"},"default":"{ render: () => html`<gaia-form-field label=\"Country\" info=\"Select your country of residence\"> <gaia-dropdown placeholder=\"Select a country\" aria-label=\"Country\"> <gaia-dropdown-item value=\"no\">Norway</gaia-dropdown-item> <gaia-dropdown-item value=\"se\">Sweden</gaia-dropdown-item> <gaia-dropdown-item value=\"dk\">Denmark</gaia-dropdown-item> <gaia-dropdown-item value=\"fi\">Finland</gaia-dropdown-item> </gaia-dropdown> </gaia-form-field>`, }"},{"kind":"variable","name":"ItemStatuses","type":{"text":"Story"},"default":"{ name: 'Item Statuses (Panel)', render: () => html`<gaia-dropdown placeholder=\"Statuses demo\" aria-label=\"Statuses\"> <gaia-dropdown-item value=\"1\" selected>Selected</gaia-dropdown-item> <gaia-dropdown-item value=\"2\" active>Active (non focused)</gaia-dropdown-item> <gaia-dropdown-item value=\"3\">Default</gaia-dropdown-item> <gaia-dropdown-item value=\"4\" disabled>Disabled</gaia-dropdown-item> <gaia-dropdown-item value=\"5\" disabled selected>Disabled Selected</gaia-dropdown-item> </gaia-dropdown>`, }"}],"exports":[{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/primitives/dropdown/dropdown.stories.js"}},{"kind":"js","name":"Default","declaration":{"name":"Default","module":"components/primitives/dropdown/dropdown.stories.js"}},{"kind":"js","name":"WithValue","declaration":{"name":"WithValue","module":"components/primitives/dropdown/dropdown.stories.js"}},{"kind":"js","name":"WithCaption","declaration":{"name":"WithCaption","module":"components/primitives/dropdown/dropdown.stories.js"}},{"kind":"js","name":"Disabled","declaration":{"name":"Disabled","module":"components/primitives/dropdown/dropdown.stories.js"}},{"kind":"js","name":"Invalid","declaration":{"name":"Invalid","module":"components/primitives/dropdown/dropdown.stories.js"}},{"kind":"js","name":"Success","declaration":{"name":"Success","module":"components/primitives/dropdown/dropdown.stories.js"}},{"kind":"js","name":"WithDisabledItems","declaration":{"name":"WithDisabledItems","module":"components/primitives/dropdown/dropdown.stories.js"}},{"kind":"js","name":"Empty","declaration":{"name":"Empty","module":"components/primitives/dropdown/dropdown.stories.js"}},{"kind":"js","name":"Loading","declaration":{"name":"Loading","module":"components/primitives/dropdown/dropdown.stories.js"}},{"kind":"js","name":"Overflow","declaration":{"name":"Overflow","module":"components/primitives/dropdown/dropdown.stories.js"}},{"kind":"js","name":"WithFormField","declaration":{"name":"WithFormField","module":"components/primitives/dropdown/dropdown.stories.js"}},{"kind":"js","name":"ItemStatuses","declaration":{"name":"ItemStatuses","module":"components/primitives/dropdown/dropdown.stories.js"}}]},{"kind":"javascript-module","path":"components/primitives/dropdown/dropdown.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/primitives/dropdown/dropdown.styles.js"}}]},{"kind":"javascript-module","path":"components/primitives/dropdown/dropdown.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"components/primitives/dropdown/dropdown.js","declarations":[{"kind":"class","description":"A dropdown select component with a trigger button and a positioned listbox panel.\n\nAligns with the GAIA design system dropdown molecule. Displays a trigger\nwith placeholder or selected value text and a chevron icon. Opens a\npositioned dropdown panel with selectable items on click or keyboard.\n\nSupports keyboard navigation (arrow keys, Home, End, Enter, Space, Escape,\ntype-ahead), single selection, caption groups, empty state, and loading state.","name":"GaiaDropdown","cssParts":[{"description":"The trigger button element","name":"trigger"},{"description":"The dropdown panel container","name":"panel"},{"description":"The listbox element inside the panel","name":"listbox"},{"description":"The optional caption element","name":"caption"},{"description":"The empty state container","name":"empty"},{"description":"The loading spinner container","name":"spinner"}],"slots":[{"description":"Default slot for `<gaia-dropdown-item>` elements","name":""}],"members":[{"kind":"field","name":"placeholder","type":{"text":"string"},"default":"''","description":"Placeholder text displayed when no item is selected","attribute":"placeholder"},{"kind":"field","name":"value","type":{"text":"string"},"default":"''","description":"The currently selected value","attribute":"value"},{"kind":"field","name":"caption","type":{"text":"string"},"default":"''","description":"Optional caption text displayed above the items","attribute":"caption"},{"kind":"field","name":"emptyText","type":{"text":"string"},"default":"''","description":"Text shown when the dropdown has no items","attribute":"empty-text"},{"kind":"field","name":"loading","type":{"text":"boolean"},"default":"false","description":"Whether the dropdown is in a loading state","attribute":"loading","reflects":true},{"kind":"field","name":"disabled","type":{"text":"boolean"},"default":"false","description":"Whether the dropdown is disabled","attribute":"disabled","reflects":true},{"kind":"field","name":"invalid","type":{"text":"boolean"},"default":"false","description":"Whether the dropdown is in an invalid state","attribute":"invalid","reflects":true},{"kind":"field","name":"success","type":{"text":"boolean"},"default":"false","description":"Whether the dropdown is in a success state","attribute":"success","reflects":true},{"kind":"field","name":"ariaLabel","type":{"text":"string | null"},"default":"null","description":"Accessible label for the dropdown","attribute":"aria-label"},{"kind":"field","name":"_isOpen","type":{"text":"boolean"},"privacy":"private","default":"false","description":"Whether the dropdown panel is currently open"},{"kind":"field","name":"_focused","type":{"text":"boolean"},"privacy":"private","default":"false","description":"Whether the trigger is focused"},{"kind":"field","name":"_displayText","type":{"text":"string"},"privacy":"private","default":"''","description":"Display text for the selected item"},{"kind":"field","name":"_activeIndex","type":{"text":"number"},"privacy":"private","default":"-1","description":"Index of the currently active (keyboard-focused) item, -1 if none"},{"kind":"field","name":"_triggerEl","type":{"text":"HTMLElement"},"privacy":"private"},{"kind":"field","name":"_panelEl","type":{"text":"HTMLElement"},"privacy":"private"},{"kind":"field","name":"_floating","privacy":"private","default":"new FloatingController(this, { placement: 'bottom-start', offsetPx: 4, shiftPadding: 8, showDelay: 0, hideDelay: 0, })"},{"kind":"field","name":"_items","type":{"text":"GaiaDropdownItem[]"},"privacy":"private","default":"[]","description":"Cached list of item elements"},{"kind":"field","name":"_typeAheadTimeout","type":{"text":"ReturnType<typeof setTimeout> | null"},"privacy":"private","default":"null","description":"Type-ahead state"},{"kind":"field","name":"_typeAheadBuffer","type":{"text":"string"},"privacy":"private","default":"''"},{"kind":"method","name":"_onSlotChange","privacy":"private"},{"kind":"method","name":"_refreshItems","privacy":"private"},{"kind":"method","name":"_syncDisplayText","privacy":"private"},{"kind":"method","name":"_updateActiveDescendant","privacy":"private"},{"kind":"method","name":"_selectItem","privacy":"private","parameters":[{"name":"item","type":{"text":"GaiaDropdownItem"}}]},{"kind":"field","name":"_handleTriggerClick","privacy":"private"},{"kind":"field","name":"_handleOutsideClick","privacy":"private"},{"kind":"field","name":"_handleKeydown","privacy":"private"},{"kind":"method","name":"_findNextNavigable","privacy":"private","return":{"type":{"text":"number"}},"parameters":[{"name":"currentIndex","type":{"text":"number"}},{"name":"direction","type":{"text":"1 | -1"}}]},{"kind":"method","name":"_findLastNavigable","privacy":"private","return":{"type":{"text":"number"}}},{"kind":"method","name":"_typeAhead","privacy":"private","parameters":[{"name":"char","type":{"text":"string"}}]},{"kind":"method","name":"_close","privacy":"private"},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"events":[{"name":"change","type":{"text":"CustomEvent"},"description":"Fired when the selected value changes. `event.detail` contains `{ value: string, item: GaiaDropdownItem }`."}],"attributes":[{"name":"placeholder","type":{"text":"string"},"default":"''","description":"Placeholder text displayed when no item is selected","fieldName":"placeholder"},{"name":"value","type":{"text":"string"},"default":"''","description":"The currently selected value","fieldName":"value"},{"name":"caption","type":{"text":"string"},"default":"''","description":"Optional caption text displayed above the items","fieldName":"caption"},{"name":"empty-text","type":{"text":"string"},"default":"''","description":"Text shown when the dropdown has no items","fieldName":"emptyText"},{"name":"loading","type":{"text":"boolean"},"default":"false","description":"Whether the dropdown is in a loading state","fieldName":"loading"},{"name":"disabled","type":{"text":"boolean"},"default":"false","description":"Whether the dropdown is disabled","fieldName":"disabled"},{"name":"invalid","type":{"text":"boolean"},"default":"false","description":"Whether the dropdown is in an invalid state","fieldName":"invalid"},{"name":"success","type":{"text":"boolean"},"default":"false","description":"Whether the dropdown is in a success state","fieldName":"success"},{"name":"aria-label","type":{"text":"string | null"},"default":"null","description":"Accessible label for the dropdown","fieldName":"ariaLabel"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-dropdown","customElement":true}],"exports":[{"kind":"js","name":"GaiaDropdown","declaration":{"name":"GaiaDropdown","module":"components/primitives/dropdown/dropdown.js"}},{"kind":"custom-element-definition","name":"gaia-dropdown","declaration":{"name":"GaiaDropdown","module":"components/primitives/dropdown/dropdown.js"}}]},{"kind":"javascript-module","path":"components/primitives/empty-state/empty-state.stories.js","declarations":[{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Primitives/Empty State', component: 'gaia-empty-state', argTypes: { title: { control: 'text' }, }, }"},{"kind":"variable","name":"Default","type":{"text":"Story"},"default":"{ args: { title: 'No conversations yet' }, render: ({ title }) => html`<gaia-empty-state title=${title}> <span>Start a new conversation to get help from GAiA.</span> </gaia-empty-state>`, }"},{"kind":"variable","name":"WithIllustrationAndAction","type":{"text":"Story"},"default":"{ render: () => html`<gaia-empty-state title=\"No results found\"> <gaia-icon slot=\"illustration\" name=\"search\" size=\"2xl\"></gaia-icon> <span>Try adjusting your search terms or filters.</span> <gaia-button slot=\"action\" variant=\"secondary\">Clear filters</gaia-button> </gaia-empty-state>`, }"},{"kind":"variable","name":"MinimalNoTitle","type":{"text":"Story"},"default":"{ render: () => html`<gaia-empty-state> <span>Nothing to show here.</span> </gaia-empty-state>`, }"}],"exports":[{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/primitives/empty-state/empty-state.stories.js"}},{"kind":"js","name":"Default","declaration":{"name":"Default","module":"components/primitives/empty-state/empty-state.stories.js"}},{"kind":"js","name":"WithIllustrationAndAction","declaration":{"name":"WithIllustrationAndAction","module":"components/primitives/empty-state/empty-state.stories.js"}},{"kind":"js","name":"MinimalNoTitle","declaration":{"name":"MinimalNoTitle","module":"components/primitives/empty-state/empty-state.stories.js"}}]},{"kind":"javascript-module","path":"components/primitives/empty-state/empty-state.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/primitives/empty-state/empty-state.styles.js"}}]},{"kind":"javascript-module","path":"components/primitives/empty-state/empty-state.js","declarations":[{"kind":"class","description":"Centered empty-state primitive for displaying placeholder content\nwhen there is no data to show.","name":"GaiaEmptyState","cssParts":[{"description":"The outer container element","name":"container"}],"slots":[{"description":"Slot for an icon or image above the title","name":"illustration"},{"description":"Default slot for description text","name":""},{"description":"Slot for a call-to-action button","name":"action"}],"members":[{"kind":"field","name":"title","type":{"text":"string"},"default":"''","description":"Heading text displayed in the empty state","attribute":"title"},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"attributes":[{"name":"title","type":{"text":"string"},"default":"''","description":"Heading text displayed in the empty state","fieldName":"title"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-empty-state","customElement":true}],"exports":[{"kind":"js","name":"GaiaEmptyState","declaration":{"name":"GaiaEmptyState","module":"components/primitives/empty-state/empty-state.js"}},{"kind":"custom-element-definition","name":"gaia-empty-state","declaration":{"name":"GaiaEmptyState","module":"components/primitives/empty-state/empty-state.js"}}]},{"kind":"javascript-module","path":"components/primitives/form-field/form-field.stories.js","declarations":[{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Primitives/Form Field', component: 'gaia-form-field', argTypes: { label: { control: 'text' }, labelState: { control: 'text' }, info: { control: 'text' }, defined: { control: 'boolean' }, disabled: { control: 'boolean' }, }, }"},{"kind":"variable","name":"Regular","type":{"text":"Story"},"default":"{ args: { label: 'Label', labelState: '', info: '', defined: false, disabled: false, }, render: ({ label, labelState, info, defined, disabled }) => html`<gaia-form-field label=${label} label-state=${labelState} info=${info} ?defined=${defined} ?disabled=${disabled} > <input type=\"text\" placeholder=\"Text\" ?disabled=${disabled} /> </gaia-form-field>`, }"},{"kind":"variable","name":"WithInfo","type":{"text":"Story"},"default":"{ render: () => html`<gaia-form-field label=\"Label\" info=\"Use special characters if available.\"> <input type=\"text\" placeholder=\"Text\" /> </gaia-form-field>`, }"},{"kind":"variable","name":"LabelWithDefinition","type":{"text":"Story"},"default":"{ render: () => html`<gaia-form-field label=\"Label\" label-state=\"(optional)\" defined> <input type=\"text\" placeholder=\"Text\" /> </gaia-form-field>`, }"},{"kind":"variable","name":"Disabled","type":{"text":"Story"},"default":"{ render: () => html`<gaia-form-field label=\"Label\" label-state=\"(optional)\" defined disabled> <input type=\"text\" placeholder=\"Text\" disabled /> </gaia-form-field>`, }"}],"exports":[{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/primitives/form-field/form-field.stories.js"}},{"kind":"js","name":"Regular","declaration":{"name":"Regular","module":"components/primitives/form-field/form-field.stories.js"}},{"kind":"js","name":"WithInfo","declaration":{"name":"WithInfo","module":"components/primitives/form-field/form-field.stories.js"}},{"kind":"js","name":"LabelWithDefinition","declaration":{"name":"LabelWithDefinition","module":"components/primitives/form-field/form-field.stories.js"}},{"kind":"js","name":"Disabled","declaration":{"name":"Disabled","module":"components/primitives/form-field/form-field.stories.js"}}]},{"kind":"javascript-module","path":"components/primitives/form-field/form-field.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/primitives/form-field/form-field.styles.js"}}]},{"kind":"javascript-module","path":"components/primitives/form-field/form-field.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"components/primitives/form-field/form-field.js","declarations":[{"kind":"class","description":"Form field component that wraps an input element with a label,\noptional state text, and optional info message.\n\nAligns with the GAIA design system `ga-form-field` molecule.","name":"GaiaFormField","cssParts":[{"description":"The label element","name":"label"},{"description":"The info container","name":"info"}],"slots":[{"description":"Default slot for the form control (e.g. input, select, textarea)","name":""},{"description":"Slot for additional information or validation messages below the input","name":"info"}],"members":[{"kind":"field","name":"label","type":{"text":"string"},"default":"''","description":"Label text displayed above the input","attribute":"label"},{"kind":"field","name":"labelState","type":{"text":"string"},"default":"''","description":"Optional state text shown next to the label (e.g. \"optional\", \"required\")","attribute":"label-state"},{"kind":"field","name":"info","type":{"text":"string"},"default":"''","description":"Info text displayed below the input","attribute":"info"},{"kind":"field","name":"defined","type":{"text":"boolean"},"default":"false","description":"Whether the label has a definition style (dotted underline, interactive color)","attribute":"defined","reflects":true},{"kind":"field","name":"disabled","type":{"text":"boolean"},"default":"false","description":"Whether the field is in a disabled state","attribute":"disabled","reflects":true},{"kind":"field","name":"error","type":{"text":"string"},"default":"''","description":"Error message displayed below the input","attribute":"error"},{"kind":"field","name":"invalid","type":{"text":"boolean"},"default":"false","description":"Whether the field is in an invalid visual state","attribute":"invalid","reflects":true},{"kind":"field","name":"hint","type":{"text":"string"},"default":"''","description":"Hint text displayed below the input","attribute":"hint"},{"kind":"field","name":"count","type":{"text":"string"},"default":"''","description":"Character count text (e.g. \"0/500\")","attribute":"count"},{"kind":"field","name":"_hasInfoSlotContent","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"method","name":"_onInfoSlotChange","privacy":"private","parameters":[{"name":"e","type":{"text":"Event"}}]},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"attributes":[{"name":"label","type":{"text":"string"},"default":"''","description":"Label text displayed above the input","fieldName":"label"},{"name":"label-state","type":{"text":"string"},"default":"''","description":"Optional state text shown next to the label (e.g. \"optional\", \"required\")","fieldName":"labelState"},{"name":"info","type":{"text":"string"},"default":"''","description":"Info text displayed below the input","fieldName":"info"},{"name":"defined","type":{"text":"boolean"},"default":"false","description":"Whether the label has a definition style (dotted underline, interactive color)","fieldName":"defined"},{"name":"disabled","type":{"text":"boolean"},"default":"false","description":"Whether the field is in a disabled state","fieldName":"disabled"},{"name":"error","type":{"text":"string"},"default":"''","description":"Error message displayed below the input","fieldName":"error"},{"name":"invalid","type":{"text":"boolean"},"default":"false","description":"Whether the field is in an invalid visual state","fieldName":"invalid"},{"name":"hint","type":{"text":"string"},"default":"''","description":"Hint text displayed below the input","fieldName":"hint"},{"name":"count","type":{"text":"string"},"default":"''","description":"Character count text (e.g. \"0/500\")","fieldName":"count"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-form-field","customElement":true}],"exports":[{"kind":"js","name":"GaiaFormField","declaration":{"name":"GaiaFormField","module":"components/primitives/form-field/form-field.js"}},{"kind":"custom-element-definition","name":"gaia-form-field","declaration":{"name":"GaiaFormField","module":"components/primitives/form-field/form-field.js"}}]},{"kind":"javascript-module","path":"components/primitives/icon/icon-library.generated.js","declarations":[{"kind":"variable","name":"icons","type":{"text":"Record<string, SVGTemplateResult>"},"default":"{ angry: svg`<svg xmlns=\"http://www.w3.org/2000/svg\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.75\" viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"M16 16s-1.5-2-4-2-4 2-4 2\"/><path d=\"M7.5 8 10 9\"/><path d=\"m14 9 2.5-1\"/><path d=\"M9 10h.01\"/><path d=\"M15 10h.01\"/></svg>`, 'arrow-up': svg`<svg xmlns=\"http://www.w3.org/2000/svg\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><path d=\"m5 12 7-7 7 7\"/><path d=\"M12 19V5\"/></svg>`, 'bell-ring': svg`<svg xmlns=\"http://www.w3.org/2000/svg\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><path d=\"M10.268 21a2 2 0 0 0 3.464 0\"/><path d=\"M22 8c0-2.3-.8-4.3-2-6\"/><path d=\"M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326\"/><path d=\"M4 2C2.8 3.7 2 5.7 2 8\"/></svg>`, check: svg`<svg xmlns=\"http://www.w3.org/2000/svg\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><path d=\"M20 6 9 17l-5-5\"/></svg>`, 'chevron-down': svg`<svg xmlns=\"http://www.w3.org/2000/svg\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><path d=\"m6 9 6 6 6-6\"/></svg>`, 'chevron-left': svg`<svg xmlns=\"http://www.w3.org/2000/svg\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><path d=\"m15 18-6-6 6-6\"/></svg>`, 'chevron-right': svg`<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><path d=\"m9 18 6-6-6-6\"/></svg>`, 'circle-alert': svg`<svg xmlns=\"http://www.w3.org/2000/svg\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"10\"/><line x1=\"12\" x2=\"12\" y1=\"8\" y2=\"12\"/><line x1=\"12\" x2=\"12.01\" y1=\"16\" y2=\"16\"/></svg>`, 'circle-check': svg`<svg xmlns=\"http://www.w3.org/2000/svg\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"m9 12 2 2 4-4\"/></svg>`, 'circle-x': svg`<svg xmlns=\"http://www.w3.org/2000/svg\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"m15 9-6 6\"/><path d=\"m9 9 6 6\"/></svg>`, copy: svg`<svg xmlns=\"http://www.w3.org/2000/svg\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\"/><path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"/></svg>`, download: svg`<svg xmlns=\"http://www.w3.org/2000/svg\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><path d=\"M12 15V3\"/><path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"/><path d=\"m7 10 5 5 5-5\"/></svg>`, file: svg`<svg xmlns=\"http://www.w3.org/2000/svg\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><path d=\"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z\"/><path d=\"M14 2v4a2 2 0 0 0 2 2h4\"/></svg>`, frown: svg`<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.75\" viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"M16 16s-1.5-2-4-2-4 2-4 2\"/><line x1=\"9\" x2=\"9.01\" y1=\"9\" y2=\"9\"/><line x1=\"15\" x2=\"15.01\" y1=\"9\" y2=\"9\"/></svg>`, globe: svg`<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20\"/><path d=\"M2 12h20\"/></svg>`, headset: svg`<svg xmlns=\"http://www.w3.org/2000/svg\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><path d=\"M3 11h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2zm0 0a9 9 0 1 1 18 0m0 0v5a2 2 0 0 1-2 2h-1a2 2 0 0 1-2-2v-3a2 2 0 0 1 2-2z\"/><path d=\"M21 16v2a4 4 0 0 1-4 4h-5\"/></svg>`, history: svg`<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-history-icon lucide-history\" viewBox=\"0 0 24 24\"><path d=\"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\"/><path d=\"M3 3v5h5\"/><path d=\"M12 7v5l4 2\"/></svg>`, info: svg`<svg xmlns=\"http://www.w3.org/2000/svg\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"M12 16v-4\"/><path d=\"M12 8h.01\"/></svg>`, laugh: svg`<svg xmlns=\"http://www.w3.org/2000/svg\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.75\" viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"M18 13a6 6 0 0 1-6 5 6 6 0 0 1-6-5z\"/><line x1=\"9\" x2=\"9.01\" y1=\"9\" y2=\"9\"/><line x1=\"15\" x2=\"15.01\" y1=\"9\" y2=\"9\"/></svg>`, 'learning-universe': svg`<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xml:space=\"preserve\" id=\"LOGO\" x=\"0\" y=\"0\" version=\"1.1\" viewBox=\"0 0 96 96\"><style>.st0{fill:url(#SVGID_1_)}</style><linearGradient id=\"SVGID_1_\" x1=\"1.547\" x2=\"95.006\" y1=\"23.618\" y2=\"65.189\" gradientTransform=\"matrix(1 0 0 -1 0 98)\" gradientUnits=\"userSpaceOnUse\"><stop offset=\".14\" style=\"stop-color:#003356\"/><stop offset=\".26\" style=\"stop-color:#092d54\"/><stop offset=\".47\" style=\"stop-color:#241e4f\"/><stop offset=\".74\" style=\"stop-color:#4e0648\"/><stop offset=\".8\" style=\"stop-color:#5a0047\"/><stop offset=\".87\" style=\"stop-color:#5c0148\"/><stop offset=\".9\" style=\"stop-color:#64044d\"/><stop offset=\".93\" style=\"stop-color:#720a56\"/><stop offset=\".96\" style=\"stop-color:#861362\"/><stop offset=\".98\" style=\"stop-color:#a01e71\"/><stop offset=\"1\" style=\"stop-color:#b6287f\"/></linearGradient><path d=\"M80.1 39.2c-.7-11.3-10.9-16.4-19.8-15.8-13.2.9-23.2 7.6-29.1 16.2-10 16.7 7 13.3 5 6.4-.7-2.6-.4-4.3 1.3-6.8 3.4-4.1 7.1-6.8 12.8-9.1 7.4-2.6 14.5-1.9 19.5 3.6 5.8 7 2.9 21.1-9.3 33.4-10.8 10.7-24.8 16-35.9 16-5.1 0-11.8-.6-16.8-5.5-7.9-7.9-5.2-18.7-5-20.1.3-1-1.3-1.6-1.7.1C-5 83 17.3 87.6 20.3 88.2c2.9.3 27.1 3.4 49.2-21.6 9.3-11.2 11-20.6 10.6-27.4M44 72.5c11.4-4.6 18.7-12 22.8-20.3 3.6-7.6 2-14.7-1.4-18-5.1-5.1-14.4-2.9-16.9-.4s-1.1 5.3 2 4.6c9-1.9 10.6 3 10.5 5.6-.3 7.1-6.8 14.8-13.2 18.9C37.4 69.4 27 70 20.6 65.8c-6.7-4.5-7.4-13.5-2.9-22.6 3.7-7.6 12.5-18 25.4-25.3 8.8-5 15.9-7.6 25.4-8.9 1.3-.4 1-1.6-.3-1.4-10 1.6-18 4.4-25.4 8.5-9.7 5.3-24.5 16.7-30.3 31-3.2 8.1-2.9 15.1.3 20.2 5.4 8.8 20.2 9.5 31 5.1zm47-47.3c-4.5-5.8-11.1-8.7-18.3-9.4-8.1-.8-16.9 1-24.5 4.2-25.4 11-28.1 29.3-28.1 29.3-.9 3.8-2.2 15.8 13.1 15.1 7.8-.3 15.5-4.5 20.3-11.3 2.3-4.2-2.6-6.8-6.8-2.3-2.3 2.5-6.5 7-13.3 6.8-9.5-.2-11.2-10.3-1.9-21.6 0 0 11.4-14.5 31-16.7C74.8 18 85.4 23.5 89 33.2c2.5 6.7 2.2 15-2.5 26.1-3.3 8-8.3 14.8-15.6 21.3-2 1.9 0 3.7 2 2C86.8 71.5 96 54.8 96 40.8c0-4.2-.9-9.8-5-15.6\" class=\"st0\"/></svg>`, lightbulb: svg`<svg xmlns=\"http://www.w3.org/2000/svg\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><path d=\"M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5\"/><path d=\"M9 18h6\"/><path d=\"M10 22h4\"/></svg>`, 'maximize-2': svg`<svg xmlns=\"http://www.w3.org/2000/svg\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><path d=\"M15 3h6v6\"/><path d=\"m21 3-7 7\"/><path d=\"m3 21 7-7\"/><path d=\"M9 21H3v-6\"/></svg>`, megaphone: svg`<svg xmlns=\"http://www.w3.org/2000/svg\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><path d=\"M11 6a13 13 0 0 0 8.4-2.8A1 1 0 0 1 21 4v12a1 1 0 0 1-1.6.8A13 13 0 0 0 11 14H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2z\"/><path d=\"M6 14a12 12 0 0 0 2.4 7.2 2 2 0 0 0 3.2-2.4A8 8 0 0 1 10 14\"/><path d=\"M8 6v8\"/></svg>`, meh: svg`<svg xmlns=\"http://www.w3.org/2000/svg\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.75\" viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"10\"/><line x1=\"8\" x2=\"16\" y1=\"15\" y2=\"15\"/><line x1=\"9\" x2=\"9.01\" y1=\"9\" y2=\"9\"/><line x1=\"15\" x2=\"15.01\" y1=\"9\" y2=\"9\"/></svg>`, 'message-circle': svg`<svg xmlns=\"http://www.w3.org/2000/svg\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><path d=\"M2.992 16.342a2 2 0 0 1 .094 1.167l-1.065 3.29a1 1 0 0 0 1.236 1.168l3.413-.998a2 2 0 0 1 1.099.092 10 10 0 1 0-4.777-4.719\"/></svg>`, mic: svg`<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-mic-icon lucide-mic\" viewBox=\"0 0 24 24\"><path d=\"M12 19v3\"/><path d=\"M19 10v2a7 7 0 0 1-14 0v-2\"/><rect width=\"6\" height=\"13\" x=\"9\" y=\"2\" rx=\"3\"/></svg>`, 'minimize-2': svg`<svg xmlns=\"http://www.w3.org/2000/svg\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><path d=\"m14 10 7-7\"/><path d=\"M20 10h-6V4\"/><path d=\"m3 21 7-7\"/><path d=\"M4 14h6v6\"/></svg>`, 'octagon-alert': svg`<svg xmlns=\"http://www.w3.org/2000/svg\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><path d=\"M12 16h.01\"/><path d=\"M12 8v4\"/><path d=\"M15.312 2a2 2 0 0 1 1.414.586l4.688 4.688A2 2 0 0 1 22 8.688v6.624a2 2 0 0 1-.586 1.414l-4.688 4.688a2 2 0 0 1-1.414.586H8.688a2 2 0 0 1-1.414-.586l-4.688-4.688A2 2 0 0 1 2 15.312V8.688a2 2 0 0 1 .586-1.414l4.688-4.688A2 2 0 0 1 8.688 2z\"/></svg>`, paperclip: svg`<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-paperclip-icon lucide-paperclip\" viewBox=\"0 0 24 24\"><path d=\"m16 6-8.414 8.586a2 2 0 0 0 2.829 2.829l8.414-8.586a4 4 0 1 0-5.657-5.657l-8.379 8.551a6 6 0 1 0 8.485 8.485l8.379-8.551\"/></svg>`, 'pen-line': svg`<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-pen-line-icon lucide-pen-line\" viewBox=\"0 0 24 24\"><path d=\"M13 21h8\"/><path d=\"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z\"/></svg>`, plus: svg`<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><path d=\"M5 12h14\"/><path d=\"M12 5v14\"/></svg>`, send: svg`<svg xmlns=\"http://www.w3.org/2000/svg\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><path d=\"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z\"/><path d=\"m21.854 2.147-10.94 10.939\"/></svg>`, smile: svg`<svg xmlns=\"http://www.w3.org/2000/svg\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.75\" viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"M8 14s1.5 2 4 2 4-2 4-2\"/><line x1=\"9\" x2=\"9.01\" y1=\"9\" y2=\"9\"/><line x1=\"15\" x2=\"15.01\" y1=\"9\" y2=\"9\"/></svg>`, sparkles: svg`<svg xmlns=\"http://www.w3.org/2000/svg\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><path d=\"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z\"/><path d=\"M20 2v4\"/><path d=\"M22 4h-4\"/><circle cx=\"4\" cy=\"20\" r=\"2\"/></svg>`, 'square-pen': svg`<svg xmlns=\"http://www.w3.org/2000/svg\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><path d=\"M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"/><path d=\"M18.375 2.625a1 1 0 0 1 3 3l-9.013 9.014a2 2 0 0 1-.853.505l-2.873.84a.5.5 0 0 1-.62-.62l.84-2.873a2 2 0 0 1 .506-.852z\"/></svg>`, 'thumbs-down': svg`<svg xmlns=\"http://www.w3.org/2000/svg\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><path d=\"M17 14V2\"/><path d=\"M9 18.12 10 14H4.17a2 2 0 0 1-1.92-2.56l2.33-8A2 2 0 0 1 6.5 2H20a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-2.76a2 2 0 0 0-1.79 1.11L12 22a3.13 3.13 0 0 1-3-3.88\"/></svg>`, 'thumbs-up': svg`<svg xmlns=\"http://www.w3.org/2000/svg\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><path d=\"M7 10v12\"/><path d=\"M15 5.88 14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2a3.13 3.13 0 0 1 3 3.88\"/></svg>`, 'trash-2': svg`<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-trash2-icon lucide-trash-2\" viewBox=\"0 0 24 24\"><path d=\"M10 11v6\"/><path d=\"M14 11v6\"/><path d=\"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6\"/><path d=\"M3 6h18\"/><path d=\"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\"/></svg>`, 'triangle-alert': svg`<svg xmlns=\"http://www.w3.org/2000/svg\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3\"/><path d=\"M12 9v4\"/><path d=\"M12 17h.01\"/></svg>`, 'user-cog': svg`<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-user-cog-icon lucide-user-cog\" viewBox=\"0 0 24 24\"><path d=\"M10 15H6a4 4 0 0 0-4 4v2\"/><path d=\"m14.305 16.53.923-.382\"/><path d=\"m15.228 13.852-.923-.383\"/><path d=\"m16.852 12.228-.383-.923\"/><path d=\"m16.852 17.772-.383.924\"/><path d=\"m19.148 12.228.383-.923\"/><path d=\"m19.53 18.696-.382-.924\"/><path d=\"m20.772 13.852.924-.383\"/><path d=\"m20.772 16.148.924.383\"/><circle cx=\"18\" cy=\"15\" r=\"3\"/><circle cx=\"9\" cy=\"7\" r=\"4\"/></svg>`, 'user-round': svg`<svg xmlns=\"http://www.w3.org/2000/svg\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"8\" r=\"5\"/><path d=\"M20 21a8 8 0 0 0-16 0\"/></svg>`, vsn: svg`<svg xmlns=\"http://www.w3.org/2000/svg\" id=\"LOGO\" style=\"background-color:#133445;border-radius:4px;padding:1px\" viewBox=\"0 0 605 220\"><defs><style>.cls-1{fill:#0080a4}.cls-2{fill:#fff}</style></defs><path d=\"M189.5 3.41c-1.34-1.23-2.83-1.85-4.47-1.85h-27.12c-2.88 0-5.08.77-6.63 2.31q-2.31 2.31-3.24 4.47L96.25 167.03l-.05-.15-13.7 41.54c-1.44 4.36 1.81 8.84 6.39 8.84h24.3c3.28 0 5.85-.81 7.7-2.46 1.85-1.64 3.18-3.7 4.01-6.16l65.99-197.83c.41-1.03.62-1.95.62-2.77 0-1.85-.67-3.39-2-4.62ZM45.16 11.42c-.41-2.66-1.39-4.98-2.93-6.93s-3.85-2.93-6.93-2.93H6.95c-1.64 0-2.98.57-4.01 1.7S1.4 5.78 1.4 7.42c0 1.44.31 2.77.92 4.01l19.73 51.15c.82 2.05 1.96 3.85 3.39 5.39q2.16 2.31 6.78 2.31h15.72c1.85 0 3.24-.62 4.16-1.86q1.38-1.845 1.08-4.62l-8.02-52.39Z\" class=\"cls-2\"/><path d=\"M547.39 215.55c-1.34 1.23-2.83 1.85-4.47 1.85H515.8c-2.88 0-5.08-.76-6.63-2.3q-2.31-2.31-3.24-4.47L454.12 51.96l-.05.15-13.71-41.53c-1.44-4.36 1.81-8.84 6.39-8.85h24.3c3.28 0 5.85.81 7.7 2.46 1.85 1.64 3.18 3.7 4.01 6.16l66 197.8c.41 1.03.62 1.95.62 2.77 0 1.85-.67 3.39-2 4.62Z\" class=\"cls-2\"/><path d=\"M572.54 70.43q4.62 0 6.78-2.31c1.43-1.54 2.57-3.34 3.39-5.39l19.72-51.15c.62-1.23.92-2.57.92-4.01 0-1.64-.51-3.03-1.54-4.16s-2.36-1.7-4.01-1.7h-28.35c-3.08 0-5.39.98-6.93 2.93-1.54 1.96-2.52 4.27-2.93 6.93l-8.01 52.38q-.315 2.775 1.08 4.62c.92 1.23 2.31 1.85 4.16 1.85h15.71Z\" class=\"cls-1\"/><path d=\"M437.52 210.12c0 2.23-.66 4-1.98 5.32-1.31 1.32-3.09 1.97-5.32 1.97h-21.87c-2.02 0-3.75-.65-5.16-1.97-1.42-1.31-2.13-3.09-2.13-5.32v-27.65c0-2.23.71-4.05 2.13-5.47q2.13-2.13 5.16-2.13h21.87c2.23 0 4 .71 5.32 2.13s1.98 3.24 1.98 5.47z\" class=\"cls-2\"/><path d=\"M294.4 1.62c-7.18 1.33-13.8 3.31-19.81 5.99-12.01 5.34-21.24 12.62-27.71 21.85s-9.7 19.81-9.7 31.7c0 12.31 2.61 22.47 7.84 30.48 5.23 8 13.03 14.62 23.39 19.86 7.29 3.68 15.86 6.98 25.65 9.9 2.17.65 4.36-.95 4.36-3.22V85.24c0-1.31-.77-2.48-1.95-3.05-4.72-2.29-8.33-4.83-10.82-7.63-3.39-3.8-5.08-8.57-5.08-14.32 0-8.62 3.39-14.98 10.16-19.08 1.73-1.05 3.6-1.95 5.61-2.72 1.27-.49 2.08-1.75 2.08-3.11V4.93c0-2.12-1.94-3.69-4.03-3.31Zm-31.65 154.69c-.82-2.05-1.95-3.85-3.39-5.39s-3.69-2.31-6.77-2.31h-15.7c-1.85 0-3.23.62-4.16 1.85-.92 1.23-1.28 2.77-1.08 4.61l8.01 52.33c.41 2.66 1.38 4.97 2.93 6.92 1.54 1.95 3.85 2.92 6.93 2.92h28.32c1.64 0 2.97-.57 4-1.7s1.54-2.51 1.54-4.15c0-1.44-.31-2.77-.92-4l-19.71-51.09Z\" class=\"cls-2\"/><path d=\"M371.13 1.56c2.23 0 4 .66 5.32 1.98 1.32 1.31 1.97 3.09 1.97 5.32v21.87c0 2.02-.65 3.75-1.97 5.16-1.31 1.42-3.09 2.13-5.32 2.13h-27.65c-2.23 0-4.05-.71-5.47-2.13q-2.13-2.13-2.13-5.16V8.85c0-2.23.71-4 2.13-5.32s3.24-1.98 5.47-1.98h27.65Z\" class=\"cls-2\"/></svg>`, wrench: svg`<svg xmlns=\"http://www.w3.org/2000/svg\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><path d=\"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z\"/></svg>`, x: svg`<svg xmlns=\"http://www.w3.org/2000/svg\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><path d=\"M18 6 6 18\"/><path d=\"m6 6 12 12\"/></svg>`, }"}],"exports":[{"kind":"js","name":"icons","declaration":{"name":"icons","module":"components/primitives/icon/icon-library.generated.js"}}]},{"kind":"javascript-module","path":"components/primitives/icon/icon-registry.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"components/primitives/icon/icon-registry.js","declarations":[{"kind":"function","name":"getIcon","return":{"type":{"text":"SVGTemplateResult | null"}},"parameters":[{"name":"name","type":{"text":"string"}}],"description":"Synchronous lookup. Returns a core or previously-registered icon."},{"kind":"function","name":"registerIcons","return":{"type":{"text":"void"}},"parameters":[{"name":"newIcons","type":{"text":"Record<string, SVGTemplateResult>"}}],"description":"Register additional icons at runtime.\nAccepts Lit svg template results."},{"kind":"function","name":"loadIcon","return":{"type":{"text":"Promise<SVGTemplateResult | null>"}},"parameters":[{"name":"name","type":{"text":"string"}}],"description":"Lazy-load an icon from the extended set.\nReturns null if the icon doesn't exist.\nOnce loaded, the icon is cached in the custom registry."},{"kind":"function","name":"hasIcon","return":{"type":{"text":"boolean"}},"parameters":[{"name":"name","type":{"text":"string"}}],"description":"Check if an icon is available synchronously (core or registered)."},{"kind":"function","name":"getIconNames","return":{"type":{"text":"string[]"}},"description":"List all available icon names (core + registered)."}],"exports":[{"kind":"js","name":"CoreIconName","declaration":{"name":"CoreIconName","module":"components/primitives/icon/icon-registry.js"}},{"kind":"js","name":"getIcon","declaration":{"name":"getIcon","module":"components/primitives/icon/icon-registry.js"}},{"kind":"js","name":"registerIcons","declaration":{"name":"registerIcons","module":"components/primitives/icon/icon-registry.js"}},{"kind":"js","name":"loadIcon","declaration":{"name":"loadIcon","module":"components/primitives/icon/icon-registry.js"}},{"kind":"js","name":"hasIcon","declaration":{"name":"hasIcon","module":"components/primitives/icon/icon-registry.js"}},{"kind":"js","name":"getIconNames","declaration":{"name":"getIconNames","module":"components/primitives/icon/icon-registry.js"}}]},{"kind":"javascript-module","path":"components/primitives/icon/icon.stories.js","declarations":[{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Primitives/Icon', component: 'gaia-icon', argTypes: { name: { control: 'select', options: Object.keys(icons) }, size: { control: 'select', options: ['sm', 'md', 'lg', 'xl', '2xl'] }, }, }"},{"kind":"variable","name":"Default","type":{"text":"Story"},"default":"{ args: { name: 'sparkles', size: 'sm', }, render: (args) => html`<gaia-icon .name=${args.name} .size=${args.size}></gaia-icon>`, }"},{"kind":"variable","name":"AllSizes","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"display: flex; gap: 16px; align-items: center;\"> <gaia-icon name=\"sparkles\" size=\"sm\"></gaia-icon> <gaia-icon name=\"sparkles\" size=\"md\"></gaia-icon> <gaia-icon name=\"sparkles\" size=\"lg\"></gaia-icon> <gaia-icon name=\"sparkles\" size=\"xl\"></gaia-icon> <gaia-icon name=\"sparkles\" size=\"2xl\"></gaia-icon> </div>`, }"},{"kind":"variable","name":"Gallery","type":{"text":"Story"},"default":"{ render: () => { const names = Object.keys(icons).slice(0, 30); return html`<div style=\"display: flex; flex-wrap: wrap; gap: 16px;\"> ${names.map( (name) => html` <div style=\"display: flex; flex-direction: column; align-items: center; gap: 4px; width: 64px;\" > <gaia-icon .name=${name} size=\"md\"></gaia-icon> <span style=\"font-size: 10px; text-align: center; word-break: break-all;\">${name}</span> </div> ` )} </div>`; }, }"}],"exports":[{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/primitives/icon/icon.stories.js"}},{"kind":"js","name":"Default","declaration":{"name":"Default","module":"components/primitives/icon/icon.stories.js"}},{"kind":"js","name":"AllSizes","declaration":{"name":"AllSizes","module":"components/primitives/icon/icon.stories.js"}},{"kind":"js","name":"Gallery","declaration":{"name":"Gallery","module":"components/primitives/icon/icon.stories.js"}}]},{"kind":"javascript-module","path":"components/primitives/icon/icon.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"components/primitives/icon/icon.js","declarations":[{"kind":"class","description":"SVG icon from the GAIA icon registry.\n\nRenders an inline SVG for the given icon `name`. Icons not present in\nthe synchronous registry are lazy-loaded on demand. When a `label` is\nset, the host receives `role=\"img\"` and `aria-label`; otherwise it is\nmarked `aria-hidden=\"true\"`.","name":"GaiaIcon","members":[{"kind":"field","name":"name","type":{"text":"IconName | null"},"default":"null","attribute":"name","reflects":true},{"kind":"field","name":"label","type":{"text":"string"},"default":"''","attribute":"label"},{"kind":"field","name":"size","type":{"text":"'sm' | 'md' | 'lg' | 'xl' | '2xl'"},"default":"'sm'","attribute":"size","reflects":true},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"attributes":[{"name":"name","type":{"text":"IconName | null"},"default":"null","fieldName":"name"},{"name":"label","type":{"text":"string"},"default":"''","fieldName":"label"},{"name":"size","type":{"text":"'sm' | 'md' | 'lg' | 'xl' | '2xl'"},"default":"'sm'","fieldName":"size"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-icon","customElement":true}],"exports":[{"kind":"js","name":"GaiaIcon","declaration":{"name":"GaiaIcon","module":"components/primitives/icon/icon.js"}},{"kind":"custom-element-definition","name":"gaia-icon","declaration":{"name":"GaiaIcon","module":"components/primitives/icon/icon.js"}}]},{"kind":"javascript-module","path":"components/primitives/modal/modal.stories.js","declarations":[{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Primitives/Modal', component: 'gaia-modal', argTypes: { size: { control: 'select', options: ['small', 'medium', 'large'] }, type: { control: 'select', options: ['default', 'danger', 'warning', 'success', 'information'], }, label: { control: 'text' }, title: { control: 'text' }, description: { control: 'text' }, open: { control: 'boolean' }, }, }"},{"kind":"variable","name":"Default","type":{"text":"Story"},"default":"{ args: { open: true, size: 'small', type: 'default', label: 'Modal Label', title: 'Modal Title', description: 'Modal Description', }, render: ({ open, size, type, label, title, description }) => html`<gaia-modal .open=${open} .size=${size} .type=${type} .label=${label} .title=${title} .description=${description} @close=${closeModal} > <gaia-button slot=\"actions\" variant=\"secondary\">Cancel</gaia-button> <gaia-button slot=\"actions\">Confirm</gaia-button> </gaia-modal>`, }"},{"kind":"variable","name":"WithForm","type":{"text":"Story"},"default":"{ args: { open: true }, render: ({ open }) => html`<gaia-modal .open=${open}> <gaia-button slot=\"actions\" variant=\"secondary\">Cancel</gaia-button> <gaia-button slot=\"actions\">Confirm</gaia-button> </gaia-modal>`, }"}],"exports":[{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/primitives/modal/modal.stories.js"}},{"kind":"js","name":"Default","declaration":{"name":"Default","module":"components/primitives/modal/modal.stories.js"}},{"kind":"js","name":"WithForm","declaration":{"name":"WithForm","module":"components/primitives/modal/modal.stories.js"}}]},{"kind":"javascript-module","path":"components/primitives/modal/modal.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/primitives/modal/modal.styles.js"}}]},{"kind":"javascript-module","path":"components/primitives/modal/modal.test.js","declarations":[{"kind":"class","description":"","name":"TestModalHost","members":[{"kind":"field","name":"opener","type":{"text":"HTMLButtonElement"}},{"kind":"field","name":"modal","type":{"text":"GaiaModal"}}],"superclass":{"name":"LitElement","package":"lit"},"tagName":"test-modal-host","customElement":true}],"exports":[{"kind":"custom-element-definition","name":"test-modal-host","declaration":{"name":"TestModalHost","module":"components/primitives/modal/modal.test.js"}}]},{"kind":"javascript-module","path":"components/primitives/modal/modal.js","declarations":[{"kind":"class","description":"Modal overlay primitive following GAIA overlay elevation spec.\n\nUses GAIA z-index tokens (scrim z:400, overlay z:500), brand-tinted\nbackdrop, focus trapping, and Escape key dismissal.","name":"GaiaModal","slots":[{"description":"Default slot for modal body content","name":""},{"description":"Slot for footer action buttons","name":"actions"}],"members":[{"kind":"field","name":"open","type":{"text":"boolean"},"default":"false","description":"Whether the modal is visible","attribute":"open","reflects":true},{"kind":"field","name":"title","type":{"text":"string"},"default":"''","attribute":"title"},{"kind":"field","name":"description","type":{"text":"string"},"default":"''","attribute":"description"},{"kind":"field","name":"label","type":{"text":"string | undefined"},"default":"undefined","attribute":"label"},{"kind":"field","name":"icon","type":{"text":"IconName | undefined"},"default":"undefined","attribute":"icon"},{"kind":"field","name":"size","type":{"text":"'small' | 'medium' | 'large'"},"default":"'small'","attribute":"size","reflects":true},{"kind":"field","name":"type","type":{"text":"'default' | 'danger' | 'warning' | 'success' | 'information'"},"default":"'default'","attribute":"type","reflects":true},{"kind":"field","name":"previouslyFocused","type":{"text":"HTMLElement | null"},"privacy":"private","default":"null"},{"kind":"field","name":"focusTrap","privacy":"private","default":"new FocusTrapController(this, '.modal', () => this.handleClose())"},{"kind":"field","name":"hasLabel","privacy":"private","readonly":true},{"kind":"field","name":"hasDescription","privacy":"private","readonly":true},{"kind":"field","name":"dialogRole","type":{"text":"'dialog' | 'alertdialog'"},"privacy":"private","readonly":true},{"kind":"method","name":"resolveIcon","privacy":"private","return":{"type":{"text":"IconName | undefined"}}},{"kind":"method","name":"captureActiveElement","privacy":"private","return":{"type":{"text":"HTMLElement | null"}},"description":"Walk up through shadow root hosts to find the deepest focused element.\nThis is needed because the opener may live in a parent shadow root\n(e.g. the submit button in gaia-feedback when opened via gaia-consent-dialog)."},{"kind":"method","name":"handleClose","privacy":"private"},{"kind":"method","name":"handleBackdropClick","privacy":"private","parameters":[{"name":"e","type":{"text":"MouseEvent"}}]},{"kind":"method","name":"handleKeyDown","privacy":"private","parameters":[{"name":"e","type":{"text":"KeyboardEvent"}}]},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"events":[{"name":"close","type":{"text":"Event"},"description":"Dispatched when modal is dismissed via Escape, backdrop click, or close button"}],"attributes":[{"name":"open","type":{"text":"boolean"},"default":"false","description":"Whether the modal is visible","fieldName":"open"},{"name":"title","type":{"text":"string"},"default":"''","fieldName":"title"},{"name":"description","type":{"text":"string"},"default":"''","fieldName":"description"},{"name":"label","type":{"text":"string | undefined"},"default":"undefined","fieldName":"label"},{"name":"icon","type":{"text":"IconName | undefined"},"default":"undefined","fieldName":"icon"},{"name":"size","type":{"text":"'small' | 'medium' | 'large'"},"default":"'small'","fieldName":"size"},{"name":"type","type":{"text":"'default' | 'danger' | 'warning' | 'success' | 'information'"},"default":"'default'","fieldName":"type"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-modal","customElement":true}],"exports":[{"kind":"js","name":"GaiaModal","declaration":{"name":"GaiaModal","module":"components/primitives/modal/modal.js"}},{"kind":"custom-element-definition","name":"gaia-modal","declaration":{"name":"GaiaModal","module":"components/primitives/modal/modal.js"}}]},{"kind":"javascript-module","path":"components/primitives/notification/notification.stories.js","declarations":[{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Primitives/Notification', component: 'gaia-notification', argTypes: { open: { control: 'boolean' }, type: { control: 'select', options: ['brand', 'information', 'success', 'warning', 'error', 'transparent'], }, dismissible: { control: 'boolean' }, titleMessage: { control: 'text' }, message: { control: 'text' }, showProgress: { control: 'boolean' }, showNotificationIcon: { control: 'boolean' }, autoDismiss: { control: 'number' }, }, }"},{"kind":"variable","name":"Default","type":{"text":"Story"},"default":"{ args: { open: true, type: 'brand', dismissible: true, titleMessage: 'Title', message: 'This is an information notification message.', showProgress: false, showNotificationIcon: true, autoDismiss: 6000, }, render: ({ open, type, dismissible, titleMessage, message, showProgress, showNotificationIcon, autoDismiss, }) => html`<gaia-notification .open=${open} .type=${type} .dismissible=${dismissible} .titleMessage=${titleMessage} .message=${message} .showProgress=${showProgress} .showNotificationIcon=${showNotificationIcon} .autoDismiss=${autoDismiss} > </gaia-notification>`, }"},{"kind":"variable","name":"AllVariants","type":{"text":"Story"},"default":"{ render: () => html` <div style=\"display: flex; flex-direction: column; gap: 12px; max-width: 480px;\"> <gaia-notification type=\"brand\" title-message=\"Brand\" message=\"This is a brand notification.\" ></gaia-notification> <gaia-notification type=\"information\" title-message=\"Information\" message=\"This is an informational notification.\" .autoDismiss=${0} ></gaia-notification> <gaia-notification type=\"success\" title-message=\"Success\" message=\"Operation completed successfully.\" .autoDismiss=${0} ></gaia-notification> <gaia-notification type=\"warning\" title-message=\"Warning\" message=\"Please review before continuing.\" ></gaia-notification> <gaia-notification type=\"error\" title-message=\"Error\" message=\"Something went wrong. Please try again.\" ></gaia-notification> <gaia-notification type=\"transparent\" title-message=\"Transparent\" message=\"This is a transparent notification.\" ></gaia-notification> </div> `, }"},{"kind":"variable","name":"WithAction","type":{"text":"Story"},"default":"{ render: () => html` <gaia-notification type=\"success\" title-message=\"Item deleted\" message=\"The item has been removed.\" .autoDismiss=${0} > <gaia-button slot=\"action\" variant=\"ghost\">Undo</gaia-button> </gaia-notification> `, }"},{"kind":"variable","name":"WithProgress","type":{"text":"Story"},"default":"{ render: () => html` <gaia-notification type=\"information\" title-message=\"Uploading...\" message=\"Your file is being uploaded.\" show-progress .autoDismiss=${0} ></gaia-notification> `, }"},{"kind":"variable","name":"MessageOnly","type":{"text":"Story"},"default":"{ render: () => html` <gaia-notification type=\"information\" message=\"A simple notification without a title.\" .autoDismiss=${0} ></gaia-notification> `, }"}],"exports":[{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/primitives/notification/notification.stories.js"}},{"kind":"js","name":"Default","declaration":{"name":"Default","module":"components/primitives/notification/notification.stories.js"}},{"kind":"js","name":"AllVariants","declaration":{"name":"AllVariants","module":"components/primitives/notification/notification.stories.js"}},{"kind":"js","name":"WithAction","declaration":{"name":"WithAction","module":"components/primitives/notification/notification.stories.js"}},{"kind":"js","name":"WithProgress","declaration":{"name":"WithProgress","module":"components/primitives/notification/notification.stories.js"}},{"kind":"js","name":"MessageOnly","declaration":{"name":"MessageOnly","module":"components/primitives/notification/notification.stories.js"}}]},{"kind":"javascript-module","path":"components/primitives/notification/notification.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/primitives/notification/notification.styles.js"}}]},{"kind":"javascript-module","path":"components/primitives/notification/notification.js","declarations":[{"kind":"class","description":"Inline notification banner for success, error, warning, and informational messages.\n\nSupports auto-dismiss with a countdown progress bar (for success and\ninformation types), pause-on-hover, an optional title, a dismiss button,\nand custom action/title-action slots. The timer pauses on hover/focus\nand resumes on leave/blur.","name":"GaiaNotification","cssParts":[{"description":"The outer notification container","name":"container"}],"slots":[{"description":"Custom description content (overrides the `message` prop)","name":"description"},{"description":"Actions displayed next to the title","name":"title-actions"},{"description":"Call-to-action buttons below the description","name":"action"}],"members":[{"kind":"field","name":"type","type":{"text":"NotificationType"},"default":"'brand'","attribute":"type","reflects":true},{"kind":"field","name":"open","type":{"text":"boolean"},"default":"true","attribute":"open","reflects":true},{"kind":"field","name":"dismissible","type":{"text":"boolean"},"default":"true","attribute":"dismissible","reflects":true},{"kind":"field","name":"titleMessage","type":{"text":"string | undefined"},"default":"undefined","attribute":"title-message"},{"kind":"field","name":"message","type":{"text":"string"},"default":"''","attribute":"message"},{"kind":"field","name":"notificationIcon","type":{"text":"IconName | undefined | undefined"},"default":"undefined","attribute":"notification-icon"},{"kind":"field","name":"dismissibleIcon","type":{"text":"IconName"},"default":"'x'","attribute":"dismissible-icon"},{"kind":"field","name":"showProgress","type":{"text":"boolean"},"default":"false","attribute":"show-progress"},{"kind":"field","name":"showNotificationIcon","type":{"text":"boolean"},"default":"true","attribute":"show-notification-icon"},{"kind":"field","name":"autoDismiss","default":"6000","description":"Auto-dismiss duration in ms. Set to 0 to disable.","attribute":"auto-dismiss","type":{"text":"number"}},{"kind":"field","name":"_timerPaused","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"field","name":"_timerActive","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"field","name":"_dismissTimer","type":{"text":"ReturnType<typeof setTimeout> | null"},"privacy":"private","default":"null"},{"kind":"field","name":"_dismissRemaining","type":{"text":"number"},"privacy":"private","default":"0"},{"kind":"field","name":"_dismissStartedAt","type":{"text":"number"},"privacy":"private","default":"0"},{"kind":"field","name":"_hasActions","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"method","name":"resolveIcon","privacy":"private","return":{"type":{"text":"IconName | undefined"}}},{"kind":"field","name":"_showHeader","type":{"text":"boolean"},"privacy":"private","readonly":true},{"kind":"field","name":"_shouldAutoDismiss","type":{"text":"boolean"},"privacy":"private","readonly":true},{"kind":"field","name":"_ariaRole","type":{"text":"'alert' | 'status'"},"privacy":"private","readonly":true},{"kind":"field","name":"_ariaLive","type":{"text":"'assertive' | 'polite'"},"privacy":"private","readonly":true},{"kind":"method","name":"_startDismissTimer","privacy":"private","return":{"type":{"text":"void"}},"parameters":[{"name":"duration","type":{"text":"number"}}]},{"kind":"method","name":"_clearDismissTimer","privacy":"private","return":{"type":{"text":"void"}}},{"kind":"field","name":"_pauseDismissTimer","privacy":"private"},{"kind":"field","name":"_resumeDismissTimer","privacy":"private"},{"kind":"method","name":"dismiss","return":{"type":{"text":"void"}}},{"kind":"method","name":"_handleKeyDown","privacy":"private","return":{"type":{"text":"void"}},"parameters":[{"name":"e","type":{"text":"KeyboardEvent"}}]},{"kind":"method","name":"_handleActionsSlotChange","privacy":"private","return":{"type":{"text":"void"}},"parameters":[{"name":"e","type":{"text":"Event"}}]},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"events":[{"name":"close","type":{"text":"Event"},"description":"When the notification is dismissed (via button, auto-dismiss, or Escape)"}],"attributes":[{"name":"type","type":{"text":"NotificationType"},"default":"'brand'","fieldName":"type"},{"name":"open","type":{"text":"boolean"},"default":"true","fieldName":"open"},{"name":"dismissible","type":{"text":"boolean"},"default":"true","fieldName":"dismissible"},{"name":"title-message","type":{"text":"string | undefined"},"default":"undefined","fieldName":"titleMessage"},{"name":"message","type":{"text":"string"},"default":"''","fieldName":"message"},{"name":"notification-icon","type":{"text":"IconName | undefined | undefined"},"default":"undefined","fieldName":"notificationIcon"},{"name":"dismissible-icon","type":{"text":"IconName"},"default":"'x'","fieldName":"dismissibleIcon"},{"name":"show-progress","type":{"text":"boolean"},"default":"false","fieldName":"showProgress"},{"name":"show-notification-icon","type":{"text":"boolean"},"default":"true","fieldName":"showNotificationIcon"},{"name":"auto-dismiss","default":"DEFAULT_AUTO_DISMISS_MS","description":"Auto-dismiss duration in ms. Set to 0 to disable.","fieldName":"autoDismiss"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-notification","customElement":true}],"exports":[{"kind":"js","name":"GaiaNotification","declaration":{"name":"GaiaNotification","module":"components/primitives/notification/notification.js"}},{"kind":"custom-element-definition","name":"gaia-notification","declaration":{"name":"GaiaNotification","module":"components/primitives/notification/notification.js"}}]},{"kind":"javascript-module","path":"components/primitives/radio-button/radio-button.stories.js","declarations":[{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Primitives/Radio Button', component: 'gaia-radio-button', argTypes: { checked: { control: 'boolean' }, disabled: { control: 'boolean' }, invalid: { control: 'boolean' }, required: { control: 'boolean' }, label: { control: 'text' }, value: { control: 'text' }, name: { control: 'text' }, }, }"},{"kind":"variable","name":"Default","type":{"text":"Story"},"default":"{ args: { label: 'Option A', checked: false, disabled: false, invalid: false, required: false, value: 'a', name: 'option', }, render: ({ label, checked, disabled, invalid, required, value, name }) => html`<gaia-radio-button label=${label} ?checked=${checked} ?disabled=${disabled} ?invalid=${invalid} ?required=${required} value=${value} name=${name} ></gaia-radio-button>`, }"},{"kind":"variable","name":"Disabled","type":{"text":"Story"},"default":"{ render: () => html` <div style=\"display: flex; flex-direction: column; gap: 8px;\"> <gaia-radio-button label=\"Disabled unchecked\" disabled name=\"disabled-demo\" ></gaia-radio-button> <gaia-radio-button label=\"Disabled checked\" disabled checked name=\"disabled-checked-demo\" ></gaia-radio-button> </div> `, }"},{"kind":"variable","name":"Invalid","type":{"text":"Story"},"default":"{ render: () => html` <div style=\"display: flex; flex-direction: column; gap: 8px;\"> <gaia-radio-button label=\"Invalid unchecked\" invalid name=\"invalid-demo\"></gaia-radio-button> <gaia-radio-button label=\"Invalid checked\" invalid checked name=\"invalid-checked-demo\" ></gaia-radio-button> </div> `, }"},{"kind":"variable","name":"NoLabel","type":{"text":"Story"},"default":"{ render: () => html`<gaia-radio-button aria-label=\"Radio button without visible label\" name=\"no-label-demo\" ></gaia-radio-button>`, }"},{"kind":"variable","name":"Group","type":{"text":"Story"},"default":"{ render: () => html` <fieldset style=\"border: none; padding: 0; margin: 0; display: inline-flex; flex-direction: column; gap: 8px;\" > <legend style=\"font-weight: 600; margin-bottom: 4px;\">Select an option</legend> <gaia-radio-button label=\"Option A\" name=\"group\" value=\"a\" checked></gaia-radio-button> <gaia-radio-button label=\"Option B\" name=\"group\" value=\"b\"></gaia-radio-button> <gaia-radio-button label=\"Option C\" name=\"group\" value=\"c\"></gaia-radio-button> </fieldset> `, }"},{"kind":"variable","name":"WithFormField","type":{"text":"Story"},"default":"{ render: () => html` <gaia-form-field label=\"Preferred contact method\"> <div style=\"display: flex; flex-direction: column; gap: 8px;\"> <gaia-radio-button label=\"Email\" name=\"contact\" value=\"email\" checked></gaia-radio-button> <gaia-radio-button label=\"Phone\" name=\"contact\" value=\"phone\"></gaia-radio-button> <gaia-radio-button label=\"Mail\" name=\"contact\" value=\"mail\"></gaia-radio-button> </div> </gaia-form-field> `, }"},{"kind":"variable","name":"WithFormFieldError","type":{"text":"Story"},"default":"{ render: () => html` <gaia-form-field label=\"Preferred contact method\" error=\"Please select an option\" invalid> <div style=\"display: flex; flex-direction: column; gap: 8px;\"> <gaia-radio-button label=\"Email\" name=\"contact-error\" value=\"email\" invalid ></gaia-radio-button> <gaia-radio-button label=\"Phone\" name=\"contact-error\" value=\"phone\" invalid ></gaia-radio-button> <gaia-radio-button label=\"Mail\" name=\"contact-error\" value=\"mail\" invalid ></gaia-radio-button> </div> </gaia-form-field> `, }"}],"exports":[{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/primitives/radio-button/radio-button.stories.js"}},{"kind":"js","name":"Default","declaration":{"name":"Default","module":"components/primitives/radio-button/radio-button.stories.js"}},{"kind":"js","name":"Disabled","declaration":{"name":"Disabled","module":"components/primitives/radio-button/radio-button.stories.js"}},{"kind":"js","name":"Invalid","declaration":{"name":"Invalid","module":"components/primitives/radio-button/radio-button.stories.js"}},{"kind":"js","name":"NoLabel","declaration":{"name":"NoLabel","module":"components/primitives/radio-button/radio-button.stories.js"}},{"kind":"js","name":"Group","declaration":{"name":"Group","module":"components/primitives/radio-button/radio-button.stories.js"}},{"kind":"js","name":"WithFormField","declaration":{"name":"WithFormField","module":"components/primitives/radio-button/radio-button.stories.js"}},{"kind":"js","name":"WithFormFieldError","declaration":{"name":"WithFormFieldError","module":"components/primitives/radio-button/radio-button.stories.js"}}]},{"kind":"javascript-module","path":"components/primitives/radio-button/radio-button.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/primitives/radio-button/radio-button.styles.js"}}]},{"kind":"javascript-module","path":"components/primitives/radio-button/radio-button.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"components/primitives/radio-button/radio-button.js","declarations":[{"kind":"class","description":"A radio button component aligned with the GAIA design system.\n\nRenders a native `<input type=\"radio\">` visually hidden behind a custom\ncircular marker, with optional label text. Supports checked, disabled,\ninvalid, and required states. Form-associated for native form submission.\n\nRadio buttons should be used in groups where only one option can be selected\nat a time. All radio buttons in a group must share the same `name` attribute.","name":"GaiaRadioButton","cssParts":[{"description":"The outer container element.","name":"radio"},{"description":"The native radio input element.","name":"native"},{"description":"The visual circular marker element.","name":"marker"},{"description":"The label text element.","name":"label"}],"members":[{"kind":"field","name":"formAssociated","type":{"text":"boolean"},"static":true,"default":"true"},{"kind":"field","name":"checked","type":{"text":"boolean"},"default":"false","description":"Whether the radio button is checked","attribute":"checked","reflects":true},{"kind":"field","name":"disabled","type":{"text":"boolean"},"default":"false","description":"Whether the radio button is disabled","attribute":"disabled","reflects":true},{"kind":"field","name":"invalid","type":{"text":"boolean"},"default":"false","description":"Whether the radio button is in an invalid/error state","attribute":"invalid","reflects":true},{"kind":"field","name":"required","type":{"text":"boolean"},"default":"false","description":"Whether the radio button is required","attribute":"required","reflects":true},{"kind":"field","name":"value","type":{"text":"string"},"default":"''","description":"The value of the radio button for form submission","attribute":"value"},{"kind":"field","name":"name","type":{"text":"string"},"default":"''","description":"Name for form submission (must match other radio buttons in the group)","attribute":"name"},{"kind":"field","name":"label","type":{"text":"string"},"default":"''","description":"Visible label text for the radio button","attribute":"label"},{"kind":"field","name":"ariaLabel","type":{"text":"string | null"},"default":"null","description":"Accessible label for the radio button (use when no visible label is present)","attribute":"aria-label"},{"kind":"field","name":"ariaLabelledBy","type":{"text":"string | null"},"default":"null","description":"ID of the element that labels this radio button","attribute":"aria-labelledby"},{"kind":"field","name":"ariaDescribedBy","type":{"text":"string | null"},"default":"null","description":"ID(s) of elements that describe this radio button","attribute":"aria-describedby"},{"kind":"field","name":"inputEl","type":{"text":"HTMLInputElement"},"privacy":"private"},{"kind":"method","name":"focus","parameters":[{"name":"options","optional":true,"type":{"text":"FocusOptions"}}],"description":"Focus the radio button"},{"kind":"method","name":"blur","description":"Blur the radio button"},{"kind":"method","name":"handleChange","privacy":"private"},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"events":[{"name":"change","type":{"text":"Event"},"description":"Fires when the checked state changes via user interaction."},{"name":"input","type":{"text":"Event"},"description":"Fires when the checked state changes via user interaction."}],"attributes":[{"name":"checked","type":{"text":"boolean"},"default":"false","description":"Whether the radio button is checked","fieldName":"checked"},{"name":"disabled","type":{"text":"boolean"},"default":"false","description":"Whether the radio button is disabled","fieldName":"disabled"},{"name":"invalid","type":{"text":"boolean"},"default":"false","description":"Whether the radio button is in an invalid/error state","fieldName":"invalid"},{"name":"required","type":{"text":"boolean"},"default":"false","description":"Whether the radio button is required","fieldName":"required"},{"name":"value","type":{"text":"string"},"default":"''","description":"The value of the radio button for form submission","fieldName":"value"},{"name":"name","type":{"text":"string"},"default":"''","description":"Name for form submission (must match other radio buttons in the group)","fieldName":"name"},{"name":"label","type":{"text":"string"},"default":"''","description":"Visible label text for the radio button","fieldName":"label"},{"name":"aria-label","type":{"text":"string | null"},"default":"null","description":"Accessible label for the radio button (use when no visible label is present)","fieldName":"ariaLabel"},{"name":"aria-labelledby","type":{"text":"string | null"},"default":"null","description":"ID of the element that labels this radio button","fieldName":"ariaLabelledBy"},{"name":"aria-describedby","type":{"text":"string | null"},"default":"null","description":"ID(s) of elements that describe this radio button","fieldName":"ariaDescribedBy"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-radio-button","customElement":true}],"exports":[{"kind":"js","name":"GaiaRadioButton","declaration":{"name":"GaiaRadioButton","module":"components/primitives/radio-button/radio-button.js"}},{"kind":"custom-element-definition","name":"gaia-radio-button","declaration":{"name":"GaiaRadioButton","module":"components/primitives/radio-button/radio-button.js"}}]},{"kind":"javascript-module","path":"components/primitives/skeleton/skeleton.stories.js","declarations":[{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Primitives/Skeleton', component: 'gaia-skeleton', argTypes: { variant: { control: 'select', options: ['text', 'circular', 'rectangular'], }, width: { control: 'text' }, height: { control: 'text' }, lines: { control: 'number' }, }, }"},{"kind":"variable","name":"Default","type":{"text":"Story"},"default":"{ args: { variant: 'text', width: '100%', lines: 1, }, render: ({ variant, width, height, lines }) => html`<div style=\"max-width: 400px;\"> <gaia-skeleton variant=${variant} width=${width} height=${height ?? ''} lines=${lines} ></gaia-skeleton> </div>`, }"},{"kind":"variable","name":"TextLines","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"max-width: 400px;\"> <gaia-skeleton variant=\"text\" lines=${3}></gaia-skeleton> </div>`, }"},{"kind":"variable","name":"Circular","type":{"text":"Story"},"default":"{ render: () => html`<gaia-skeleton variant=\"circular\" width=\"48px\" height=\"48px\"></gaia-skeleton>`, }"},{"kind":"variable","name":"Rectangular","type":{"text":"Story"},"default":"{ render: () => html`<gaia-skeleton variant=\"rectangular\" width=\"200px\" height=\"120px\"></gaia-skeleton>`, }"},{"kind":"variable","name":"CardPlaceholder","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"display: flex; gap: 12px; align-items: flex-start; max-width: 400px;\"> <gaia-skeleton variant=\"circular\" width=\"40px\" height=\"40px\"></gaia-skeleton> <div style=\"flex: 1;\"> <gaia-skeleton variant=\"text\" width=\"60%\"></gaia-skeleton> <div style=\"margin-top: 8px;\"> <gaia-skeleton variant=\"text\" lines=${2}></gaia-skeleton> </div> </div> </div>`, }"}],"exports":[{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/primitives/skeleton/skeleton.stories.js"}},{"kind":"js","name":"Default","declaration":{"name":"Default","module":"components/primitives/skeleton/skeleton.stories.js"}},{"kind":"js","name":"TextLines","declaration":{"name":"TextLines","module":"components/primitives/skeleton/skeleton.stories.js"}},{"kind":"js","name":"Circular","declaration":{"name":"Circular","module":"components/primitives/skeleton/skeleton.stories.js"}},{"kind":"js","name":"Rectangular","declaration":{"name":"Rectangular","module":"components/primitives/skeleton/skeleton.stories.js"}},{"kind":"js","name":"CardPlaceholder","declaration":{"name":"CardPlaceholder","module":"components/primitives/skeleton/skeleton.stories.js"}}]},{"kind":"javascript-module","path":"components/primitives/skeleton/skeleton.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/primitives/skeleton/skeleton.styles.js"}}]},{"kind":"javascript-module","path":"components/primitives/skeleton/skeleton.js","declarations":[{"kind":"class","description":"Loading placeholder primitive following GAIA design guidelines.\n\nRenders a shimmer animation to indicate content is loading.\nSupports text (single or multi-line), circular, and rectangular shapes.","name":"GaiaSkeleton","cssParts":[{"description":"The skeleton shape element","name":"bone"}],"members":[{"kind":"field","name":"variant","type":{"text":"'text' | 'circular' | 'rectangular'"},"default":"'text'","description":"Shape variant","attribute":"variant","reflects":true},{"kind":"field","name":"width","type":{"text":"string"},"default":"'100%'","description":"CSS width value","attribute":"width"},{"kind":"field","name":"height","type":{"text":"string | undefined"},"description":"CSS height value","attribute":"height"},{"kind":"field","name":"lines","type":{"text":"number"},"default":"1","description":"Number of lines to render (text variant only)","attribute":"lines"},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"attributes":[{"name":"variant","type":{"text":"'text' | 'circular' | 'rectangular'"},"default":"'text'","description":"Shape variant","fieldName":"variant"},{"name":"width","type":{"text":"string"},"default":"'100%'","description":"CSS width value","fieldName":"width"},{"name":"height","type":{"text":"string | undefined"},"description":"CSS height value","fieldName":"height"},{"name":"lines","type":{"text":"number"},"default":"1","description":"Number of lines to render (text variant only)","fieldName":"lines"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-skeleton","customElement":true}],"exports":[{"kind":"js","name":"GaiaSkeleton","declaration":{"name":"GaiaSkeleton","module":"components/primitives/skeleton/skeleton.js"}},{"kind":"custom-element-definition","name":"gaia-skeleton","declaration":{"name":"GaiaSkeleton","module":"components/primitives/skeleton/skeleton.js"}}]},{"kind":"javascript-module","path":"components/primitives/spinner/spinner.stories.js","declarations":[{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Primitives/Spinner', component: 'gaia-spinner', }"},{"kind":"variable","name":"Default","type":{"text":"Story"},"default":"{ render: () => html`<gaia-spinner></gaia-spinner>`, }"},{"kind":"variable","name":"Sizes","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"display: flex; gap: 24px; align-items: center;\"> <gaia-spinner style=\"width: 16px; height: 16px;\"></gaia-spinner> <gaia-spinner style=\"width: 24px; height: 24px;\"></gaia-spinner> <gaia-spinner style=\"width: 40px; height: 40px;\"></gaia-spinner> <gaia-spinner style=\"width: 64px; height: 64px;\"></gaia-spinner> </div>`, }"}],"exports":[{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/primitives/spinner/spinner.stories.js"}},{"kind":"js","name":"Default","declaration":{"name":"Default","module":"components/primitives/spinner/spinner.stories.js"}},{"kind":"js","name":"Sizes","declaration":{"name":"Sizes","module":"components/primitives/spinner/spinner.stories.js"}}]},{"kind":"javascript-module","path":"components/primitives/spinner/spinner.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/primitives/spinner/spinner.styles.js"}}]},{"kind":"javascript-module","path":"components/primitives/spinner/spinner.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"components/primitives/spinner/spinner.js","declarations":[{"kind":"class","description":"Indeterminate loading spinner rendered as an animated SVG circle.","name":"GaiaSpinner","cssParts":[{"description":"The SVG root element","name":"base"}],"members":[{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-spinner","customElement":true}],"exports":[{"kind":"js","name":"GaiaSpinner","declaration":{"name":"GaiaSpinner","module":"components/primitives/spinner/spinner.js"}},{"kind":"custom-element-definition","name":"gaia-spinner","declaration":{"name":"GaiaSpinner","module":"components/primitives/spinner/spinner.js"}}]},{"kind":"javascript-module","path":"components/primitives/status-dot/status-dot.stories.js","declarations":[{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Primitives/Status Dot', component: 'gaia-status-dot', argTypes: { status: { control: 'select', options: ['pending', 'success', 'error', 'warning'], }, }, }"},{"kind":"variable","name":"Default","type":{"text":"Story"},"default":"{ args: { status: 'success' }, render: ({ status }) => html`<gaia-status-dot status=${status}></gaia-status-dot>`, }"},{"kind":"variable","name":"AllStatuses","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"display: flex; gap: 16px; align-items: center;\"> <div style=\"display: flex; align-items: center; gap: 6px;\"> <gaia-status-dot status=\"pending\"></gaia-status-dot> <span>Pending</span> </div> <div style=\"display: flex; align-items: center; gap: 6px;\"> <gaia-status-dot status=\"success\"></gaia-status-dot> <span>Success</span> </div> <div style=\"display: flex; align-items: center; gap: 6px;\"> <gaia-status-dot status=\"error\"></gaia-status-dot> <span>Error</span> </div> <div style=\"display: flex; align-items: center; gap: 6px;\"> <gaia-status-dot status=\"warning\"></gaia-status-dot> <span>Warning</span> </div> </div>`, }"}],"exports":[{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/primitives/status-dot/status-dot.stories.js"}},{"kind":"js","name":"Default","declaration":{"name":"Default","module":"components/primitives/status-dot/status-dot.stories.js"}},{"kind":"js","name":"AllStatuses","declaration":{"name":"AllStatuses","module":"components/primitives/status-dot/status-dot.stories.js"}}]},{"kind":"javascript-module","path":"components/primitives/status-dot/status-dot.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/primitives/status-dot/status-dot.styles.js"}}]},{"kind":"javascript-module","path":"components/primitives/status-dot/status-dot.js","declarations":[{"kind":"class","description":"","name":"GaiaStatusDot","members":[{"kind":"field","name":"status","type":{"text":"StatusDotStatus"},"default":"'pending'","attribute":"status","reflects":true},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"attributes":[{"name":"status","type":{"text":"StatusDotStatus"},"default":"'pending'","fieldName":"status"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-status-dot","customElement":true}],"exports":[{"kind":"js","name":"GaiaStatusDot","declaration":{"name":"GaiaStatusDot","module":"components/primitives/status-dot/status-dot.js"}},{"kind":"custom-element-definition","name":"gaia-status-dot","declaration":{"name":"GaiaStatusDot","module":"components/primitives/status-dot/status-dot.js"}}]},{"kind":"javascript-module","path":"components/primitives/surface/surface.stories.js","declarations":[{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Primitives/Surface', component: 'gaia-surface', argTypes: { variant: { control: 'select', options: ['flat', 'outlined', 'elevated'], }, padding: { control: 'select', options: ['compact', 'default', 'spacious'], }, interactive: { control: 'boolean', }, }, }"},{"kind":"variable","name":"Default","type":{"text":"Story"},"default":"{ args: { variant: 'outlined', padding: 'default', interactive: false, }, render: ({ variant, padding, interactive }) => html`<gaia-surface variant=${variant} padding=${padding} ?interactive=${interactive}> <p style=\"margin: 0;\">Surface content goes here</p> </gaia-surface>`, }"},{"kind":"variable","name":"Variants","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"display: flex; flex-direction: column; gap: 16px; max-width: 400px;\"> <gaia-surface variant=\"flat\"> <p style=\"margin: 0;\"><strong>Flat</strong> — no border or shadow</p> </gaia-surface> <gaia-surface variant=\"outlined\"> <p style=\"margin: 0;\"><strong>Outlined</strong> — subtle border</p> </gaia-surface> <gaia-surface variant=\"elevated\"> <p style=\"margin: 0;\"><strong>Elevated</strong> — box shadow</p> </gaia-surface> </div>`, }"},{"kind":"variable","name":"Padding","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"display: flex; flex-direction: column; gap: 16px; max-width: 400px;\"> <gaia-surface padding=\"compact\"> <p style=\"margin: 0;\">Compact padding</p> </gaia-surface> <gaia-surface padding=\"default\"> <p style=\"margin: 0;\">Default padding</p> </gaia-surface> <gaia-surface padding=\"spacious\"> <p style=\"margin: 0;\">Spacious padding</p> </gaia-surface> </div>`, }"},{"kind":"variable","name":"Interactive","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"max-width: 400px;\"> <gaia-surface interactive> <p style=\"margin: 0;\">Hover or click me</p> </gaia-surface> </div>`, }"}],"exports":[{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/primitives/surface/surface.stories.js"}},{"kind":"js","name":"Default","declaration":{"name":"Default","module":"components/primitives/surface/surface.stories.js"}},{"kind":"js","name":"Variants","declaration":{"name":"Variants","module":"components/primitives/surface/surface.stories.js"}},{"kind":"js","name":"Padding","declaration":{"name":"Padding","module":"components/primitives/surface/surface.stories.js"}},{"kind":"js","name":"Interactive","declaration":{"name":"Interactive","module":"components/primitives/surface/surface.stories.js"}}]},{"kind":"javascript-module","path":"components/primitives/surface/surface.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/primitives/surface/surface.styles.js"}}]},{"kind":"javascript-module","path":"components/primitives/surface/surface.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"components/primitives/surface/surface.js","declarations":[{"kind":"class","description":"Surface container primitive following GAIA elevation guidelines.\n\nA foundational building block that provides background, border/shadow,\npadding, and optional interactivity. Higher-level composed components\n(cards, panels, dialogs) can be built on top of this.","name":"GaiaSurface","cssParts":[{"description":"The surface container element","name":"surface"}],"slots":[{"description":"Default slot for surface content","name":""}],"members":[{"kind":"field","name":"variant","type":{"text":"'flat' | 'outlined' | 'elevated'"},"default":"'outlined'","description":"Visual variant controlling border and shadow","attribute":"variant","reflects":true},{"kind":"field","name":"padding","type":{"text":"'compact' | 'default' | 'spacious'"},"default":"'default'","description":"Padding size","attribute":"padding","reflects":true},{"kind":"field","name":"interactive","type":{"text":"boolean"},"default":"false","description":"Whether the surface responds to hover/active interactions","attribute":"interactive","reflects":true},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"attributes":[{"name":"variant","type":{"text":"'flat' | 'outlined' | 'elevated'"},"default":"'outlined'","description":"Visual variant controlling border and shadow","fieldName":"variant"},{"name":"padding","type":{"text":"'compact' | 'default' | 'spacious'"},"default":"'default'","description":"Padding size","fieldName":"padding"},{"name":"interactive","type":{"text":"boolean"},"default":"false","description":"Whether the surface responds to hover/active interactions","fieldName":"interactive"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-surface","customElement":true}],"exports":[{"kind":"js","name":"GaiaSurface","declaration":{"name":"GaiaSurface","module":"components/primitives/surface/surface.js"}},{"kind":"custom-element-definition","name":"gaia-surface","declaration":{"name":"GaiaSurface","module":"components/primitives/surface/surface.js"}}]},{"kind":"javascript-module","path":"components/primitives/switch/switch.stories.js","declarations":[{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Primitives/Switch', component: 'gaia-switch', argTypes: { checked: { control: 'boolean' }, disabled: { control: 'boolean' }, invalid: { control: 'boolean' }, required: { control: 'boolean' }, label: { control: 'text' }, value: { control: 'text' }, name: { control: 'text' }, }, }"},{"kind":"variable","name":"Default","type":{"text":"Story"},"default":"{ args: { label: '', checked: false, disabled: false, invalid: false, required: false, value: 'on', }, render: ({ label, checked, disabled, invalid, required, value }) => html`<gaia-switch label=${label} ?checked=${checked} ?disabled=${disabled} ?invalid=${invalid} ?required=${required} value=${value} ></gaia-switch>`, }"},{"kind":"variable","name":"WithLabel","type":{"text":"Story"},"default":"{ render: () => html`<gaia-switch label=\"Label\"></gaia-switch>`, }"},{"kind":"variable","name":"DisabledOff","type":{"text":"Story"},"default":"{ render: () => html`<gaia-switch disabled></gaia-switch>`, }"},{"kind":"variable","name":"DisabledOn","type":{"text":"Story"},"default":"{ render: () => html`<gaia-switch disabled checked></gaia-switch>`, }"},{"kind":"variable","name":"Invalid","type":{"text":"Story"},"default":"{ render: () => html` <div style=\"display: flex; flex-direction: column; gap: 8px;\"> <gaia-switch label=\"Invalid unchecked\" invalid></gaia-switch> <gaia-switch label=\"Invalid checked\" invalid checked></gaia-switch> </div> `, }"},{"kind":"variable","name":"WithFormField","type":{"text":"Story"},"default":"{ render: () => html` <gaia-form-field label=\"Notifications\"> <gaia-switch label=\"Enable email notifications\"></gaia-switch> </gaia-form-field> `, }"},{"kind":"variable","name":"WithFormFieldError","type":{"text":"Story"},"default":"{ render: () => html` <gaia-form-field label=\"Agreement\" error=\"You must accept to continue\" invalid> <gaia-switch label=\"I accept the terms and conditions\" invalid></gaia-switch> </gaia-form-field> `, }"},{"kind":"variable","name":"Group","type":{"text":"Story"},"default":"{ render: () => html` <fieldset style=\"border: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 8px;\" > <legend style=\"font-weight: 600; margin-bottom: 4px;\">Notification preferences</legend> <gaia-switch label=\"Email notifications\" name=\"notifications\" value=\"email\"></gaia-switch> <gaia-switch label=\"Push notifications\" name=\"notifications\" value=\"push\" checked ></gaia-switch> <gaia-switch label=\"SMS notifications\" name=\"notifications\" value=\"sms\"></gaia-switch> <gaia-switch label=\"Desktop notifications\" name=\"notifications\" value=\"desktop\" disabled ></gaia-switch> </fieldset> `, }"}],"exports":[{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/primitives/switch/switch.stories.js"}},{"kind":"js","name":"Default","declaration":{"name":"Default","module":"components/primitives/switch/switch.stories.js"}},{"kind":"js","name":"WithLabel","declaration":{"name":"WithLabel","module":"components/primitives/switch/switch.stories.js"}},{"kind":"js","name":"DisabledOff","declaration":{"name":"DisabledOff","module":"components/primitives/switch/switch.stories.js"}},{"kind":"js","name":"DisabledOn","declaration":{"name":"DisabledOn","module":"components/primitives/switch/switch.stories.js"}},{"kind":"js","name":"Invalid","declaration":{"name":"Invalid","module":"components/primitives/switch/switch.stories.js"}},{"kind":"js","name":"WithFormField","declaration":{"name":"WithFormField","module":"components/primitives/switch/switch.stories.js"}},{"kind":"js","name":"WithFormFieldError","declaration":{"name":"WithFormFieldError","module":"components/primitives/switch/switch.stories.js"}},{"kind":"js","name":"Group","declaration":{"name":"Group","module":"components/primitives/switch/switch.stories.js"}}]},{"kind":"javascript-module","path":"components/primitives/switch/switch.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/primitives/switch/switch.styles.js"}}]},{"kind":"javascript-module","path":"components/primitives/switch/switch.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"components/primitives/switch/switch.js","declarations":[{"kind":"class","description":"A switch (toggle) component aligned with the GAIA design system.\n\nRenders a native `<input type=\"checkbox\">` with `role=\"switch\"` visually\nhidden behind a custom track and slider. Supports checked, disabled,\ninvalid, and required states with an optional label. Form-associated\nfor native form submission.","name":"GaiaSwitch","cssParts":[{"description":"The outer container element.","name":"switch"},{"description":"The native checkbox input element.","name":"native"},{"description":"The visual track element.","name":"marker"},{"description":"The sliding thumb element.","name":"slider"},{"description":"The label text element.","name":"label"}],"members":[{"kind":"field","name":"formAssociated","type":{"text":"boolean"},"static":true,"default":"true"},{"kind":"field","name":"checked","type":{"text":"boolean"},"default":"false","description":"Whether the switch is on","attribute":"checked","reflects":true},{"kind":"field","name":"disabled","type":{"text":"boolean"},"default":"false","description":"Whether the switch is disabled","attribute":"disabled","reflects":true},{"kind":"field","name":"invalid","type":{"text":"boolean"},"default":"false","description":"Whether the switch is in an invalid/error state","attribute":"invalid","reflects":true},{"kind":"field","name":"required","type":{"text":"boolean"},"default":"false","description":"Whether the switch is required","attribute":"required","reflects":true},{"kind":"field","name":"value","type":{"text":"string"},"default":"'on'","description":"The value of the switch for form submission","attribute":"value"},{"kind":"field","name":"name","type":{"text":"string"},"default":"''","description":"Name for form submission","attribute":"name"},{"kind":"field","name":"label","type":{"text":"string"},"default":"''","description":"Visible label text for the switch","attribute":"label"},{"kind":"field","name":"ariaLabel","type":{"text":"string | null"},"default":"null","description":"Accessible label for the switch (use when no visible label is present)","attribute":"aria-label"},{"kind":"field","name":"ariaLabelledBy","type":{"text":"string | null"},"default":"null","description":"ID of the element that labels this switch","attribute":"aria-labelledby"},{"kind":"field","name":"ariaDescribedBy","type":{"text":"string | null"},"default":"null","description":"ID(s) of elements that describe this switch","attribute":"aria-describedby"},{"kind":"field","name":"ariaControls","type":{"text":"string | null"},"default":"null","description":"ID of the element controlled by this switch","attribute":"aria-controls"},{"kind":"field","name":"inputEl","type":{"text":"HTMLInputElement"},"privacy":"private"},{"kind":"method","name":"focus","parameters":[{"name":"options","optional":true,"type":{"text":"FocusOptions"}}],"description":"Focus the switch"},{"kind":"method","name":"blur","description":"Blur the switch"},{"kind":"method","name":"toggle","description":"Toggle the checked state programmatically"},{"kind":"method","name":"handleChange","privacy":"private"},{"kind":"method","name":"renderCheckIcon","privacy":"private"},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"events":[{"name":"change","type":{"text":"Event"},"description":"Fires when the checked state changes via user interaction."},{"name":"input","type":{"text":"Event"},"description":"Fires when the checked state changes via user interaction."}],"attributes":[{"name":"checked","type":{"text":"boolean"},"default":"false","description":"Whether the switch is on","fieldName":"checked"},{"name":"disabled","type":{"text":"boolean"},"default":"false","description":"Whether the switch is disabled","fieldName":"disabled"},{"name":"invalid","type":{"text":"boolean"},"default":"false","description":"Whether the switch is in an invalid/error state","fieldName":"invalid"},{"name":"required","type":{"text":"boolean"},"default":"false","description":"Whether the switch is required","fieldName":"required"},{"name":"value","type":{"text":"string"},"default":"'on'","description":"The value of the switch for form submission","fieldName":"value"},{"name":"name","type":{"text":"string"},"default":"''","description":"Name for form submission","fieldName":"name"},{"name":"label","type":{"text":"string"},"default":"''","description":"Visible label text for the switch","fieldName":"label"},{"name":"aria-label","type":{"text":"string | null"},"default":"null","description":"Accessible label for the switch (use when no visible label is present)","fieldName":"ariaLabel"},{"name":"aria-labelledby","type":{"text":"string | null"},"default":"null","description":"ID of the element that labels this switch","fieldName":"ariaLabelledBy"},{"name":"aria-describedby","type":{"text":"string | null"},"default":"null","description":"ID(s) of elements that describe this switch","fieldName":"ariaDescribedBy"},{"name":"aria-controls","type":{"text":"string | null"},"default":"null","description":"ID of the element controlled by this switch","fieldName":"ariaControls"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-switch","customElement":true}],"exports":[{"kind":"js","name":"GaiaSwitch","declaration":{"name":"GaiaSwitch","module":"components/primitives/switch/switch.js"}},{"kind":"custom-element-definition","name":"gaia-switch","declaration":{"name":"GaiaSwitch","module":"components/primitives/switch/switch.js"}}]},{"kind":"javascript-module","path":"components/primitives/tag/tag.stories.js","declarations":[{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Primitives/Tag', component: 'gaia-tag', argTypes: { type: { control: 'select', options: [undefined, 'success', 'warning', 'information', 'error', 'disabled'], }, utilityColor: { control: 'select', options: [ undefined, 'grey', 'indigo', 'teal', 'lime', 'purple', 'pink', 'rose', 'yellow', 'blue', 'green', 'orange', ], }, icon: { control: 'text' }, interactive: { control: 'boolean' }, selected: { control: 'boolean' }, disabled: { control: 'boolean' }, dismissible: { control: 'boolean' }, separator: { control: 'boolean' }, }, }"},{"kind":"variable","name":"Default","type":{"text":"Story"},"default":"{ args: { type: undefined, utilityColor: undefined, icon: undefined, interactive: false, selected: false, disabled: false, dismissible: false, }, render: ({ type, utilityColor, icon, interactive, selected, disabled, dismissible, separator }) => html`<gaia-tag .type=${type} .utilityColor=${utilityColor} .icon=${icon} .interactive=${interactive} .selected=${selected} .disabled=${disabled} .dismissible=${dismissible} .separator=${separator} > Tag label </gaia-tag>`, }"},{"kind":"variable","name":"Regular","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"display: flex; gap: 8px; flex-wrap: wrap; align-items: center;\"> <gaia-tag type=\"success\" icon=\"circle-check\">Success</gaia-tag> <gaia-tag type=\"warning\" icon=\"triangle-alert\">Warning</gaia-tag> <gaia-tag type=\"information\" icon=\"info\">Information</gaia-tag> <gaia-tag type=\"error\" icon=\"octagon-alert\">Error</gaia-tag> <gaia-tag type=\"disabled\">Disabled</gaia-tag> </div>`, }"},{"kind":"variable","name":"Interactive","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"display: flex; gap: 8px; flex-wrap: wrap; align-items: center;\"> <gaia-tag interactive icon=\"plus\">Default</gaia-tag> <gaia-tag interactive dismissible separator icon=\"plus\">With separator</gaia-tag> <gaia-tag interactive disabled icon=\"plus\">Disabled</gaia-tag> <gaia-tag interactive selected icon=\"check\">Selected</gaia-tag> <gaia-tag interactive selected disabled icon=\"check\">Selected disabled</gaia-tag> </div>`, }"},{"kind":"variable","name":"Utility","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"display: flex; gap: 8px; flex-wrap: wrap; align-items: center;\"> <gaia-tag utility-color=\"grey\">Grey</gaia-tag> <gaia-tag utility-color=\"indigo\">Indigo</gaia-tag> <gaia-tag utility-color=\"teal\">Teal</gaia-tag> <gaia-tag utility-color=\"lime\">Lime</gaia-tag> <gaia-tag utility-color=\"purple\">Purple</gaia-tag> <gaia-tag utility-color=\"pink\">Pink</gaia-tag> <gaia-tag utility-color=\"rose\">Rose</gaia-tag> <gaia-tag utility-color=\"yellow\">Yellow</gaia-tag> <gaia-tag utility-color=\"blue\">Blue</gaia-tag> <gaia-tag utility-color=\"green\">Green</gaia-tag> <gaia-tag utility-color=\"orange\">Orange</gaia-tag> <gaia-tag utility-color=\"grey\" disabled>Disabled</gaia-tag> </div>`, }"},{"kind":"variable","name":"UtilityWithIcons","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"display: flex; gap: 8px; flex-wrap: wrap; align-items: center;\"> <gaia-tag utility-color=\"blue\" icon=\"tag\">Blue</gaia-tag> <gaia-tag utility-color=\"green\" icon=\"tag\">Green</gaia-tag> <gaia-tag utility-color=\"purple\" icon=\"tag\">Purple</gaia-tag> </div>`, }"},{"kind":"variable","name":"Dismissible","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"display: flex; gap: 8px; flex-wrap: wrap; align-items: center;\"> <gaia-tag dismissible>Removable</gaia-tag> <gaia-tag dismissible type=\"information\">Info</gaia-tag> <gaia-tag dismissible separator icon=\"tag\">With separator</gaia-tag> </div>`, }"}],"exports":[{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/primitives/tag/tag.stories.js"}},{"kind":"js","name":"Default","declaration":{"name":"Default","module":"components/primitives/tag/tag.stories.js"}},{"kind":"js","name":"Regular","declaration":{"name":"Regular","module":"components/primitives/tag/tag.stories.js"}},{"kind":"js","name":"Interactive","declaration":{"name":"Interactive","module":"components/primitives/tag/tag.stories.js"}},{"kind":"js","name":"Utility","declaration":{"name":"Utility","module":"components/primitives/tag/tag.stories.js"}},{"kind":"js","name":"UtilityWithIcons","declaration":{"name":"UtilityWithIcons","module":"components/primitives/tag/tag.stories.js"}},{"kind":"js","name":"Dismissible","declaration":{"name":"Dismissible","module":"components/primitives/tag/tag.stories.js"}}]},{"kind":"javascript-module","path":"components/primitives/tag/tag.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/primitives/tag/tag.styles.js"}}]},{"kind":"javascript-module","path":"components/primitives/tag/tag.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"components/primitives/tag/tag.js","declarations":[{"kind":"class","description":"Compact label for categorizing, filtering, or status indication.\n\nSupports semantic status types (success, warning, error, etc.) and\nutility colors for category labelling. Can be interactive (toggle on\nclick), dismissible (with a close button), and optionally shows a\nleading icon or separator.","name":"GaiaTag","slots":[{"description":"Default slot for the tag label text","name":""}],"members":[{"kind":"field","name":"type","type":{"text":"TagType | undefined"},"default":"undefined","description":"Semantic status type for regular tags.","attribute":"type","reflects":true},{"kind":"field","name":"utilityColor","type":{"text":"| TagUtilityColor\n | undefined"},"default":"undefined","description":"Utility color for category/label tags. Overrides `type`.","attribute":"utility-color","reflects":true},{"kind":"field","name":"interactive","type":{"text":"boolean"},"default":"false","description":"Makes the tag an interactive toggle (dashed border, clickable).","attribute":"interactive","reflects":true},{"kind":"field","name":"selected","type":{"text":"boolean"},"default":"false","description":"Whether an interactive tag is currently selected.","attribute":"selected","reflects":true},{"kind":"field","name":"disabled","type":{"text":"boolean"},"default":"false","description":"Disables the tag.","attribute":"disabled","reflects":true},{"kind":"field","name":"dismissible","type":{"text":"boolean"},"default":"false","description":"Shows a dismiss button.","attribute":"dismissible","reflects":true},{"kind":"field","name":"icon","type":{"text":"IconName | undefined"},"default":"undefined","description":"Optional leading icon name.","attribute":"icon"},{"kind":"field","name":"separator","type":{"text":"boolean"},"default":"false","description":"Whether to show a separator before the dismiss button.","attribute":"separator","reflects":true},{"kind":"method","name":"handleDismiss","privacy":"private","parameters":[{"name":"e","type":{"text":"Event"}}]},{"kind":"method","name":"handleClick","privacy":"private"},{"kind":"method","name":"handleKeyDown","privacy":"private","parameters":[{"name":"e","type":{"text":"KeyboardEvent"}}]},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"events":[{"name":"dismiss","type":{"text":"Event"},"description":"When the dismiss button is clicked"},{"name":"change","type":{"text":"Event"},"description":"When an interactive tag is toggled"}],"attributes":[{"name":"type","type":{"text":"TagType | undefined"},"default":"undefined","description":"Semantic status type for regular tags.","fieldName":"type"},{"name":"utility-color","type":{"text":"| TagUtilityColor\n | undefined"},"default":"undefined","description":"Utility color for category/label tags. Overrides `type`.","fieldName":"utilityColor"},{"name":"interactive","type":{"text":"boolean"},"default":"false","description":"Makes the tag an interactive toggle (dashed border, clickable).","fieldName":"interactive"},{"name":"selected","type":{"text":"boolean"},"default":"false","description":"Whether an interactive tag is currently selected.","fieldName":"selected"},{"name":"disabled","type":{"text":"boolean"},"default":"false","description":"Disables the tag.","fieldName":"disabled"},{"name":"dismissible","type":{"text":"boolean"},"default":"false","description":"Shows a dismiss button.","fieldName":"dismissible"},{"name":"icon","type":{"text":"IconName | undefined"},"default":"undefined","description":"Optional leading icon name.","fieldName":"icon"},{"name":"separator","type":{"text":"boolean"},"default":"false","description":"Whether to show a separator before the dismiss button.","fieldName":"separator"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-tag","customElement":true}],"exports":[{"kind":"js","name":"GaiaTag","declaration":{"name":"GaiaTag","module":"components/primitives/tag/tag.js"}},{"kind":"custom-element-definition","name":"gaia-tag","declaration":{"name":"GaiaTag","module":"components/primitives/tag/tag.js"}}]},{"kind":"javascript-module","path":"components/primitives/text-area/text-area.stories.js","declarations":[{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Primitives/Text Area', component: 'gaia-text-area', argTypes: { value: { control: 'text' }, placeholder: { control: 'text' }, disabled: { control: 'boolean' }, readonly: { control: 'boolean' }, invalid: { control: 'boolean' }, required: { control: 'boolean' }, rows: { control: 'number' }, cols: { control: 'number' }, maxlength: { control: 'number' }, minlength: { control: 'number' }, resize: { control: 'select', options: ['none', 'vertical', 'horizontal', 'both', 'auto'], }, }, }"},{"kind":"variable","name":"Regular","type":{"text":"Story"},"default":"{ args: { placeholder: 'Placeholder', disabled: false, invalid: false, readonly: false, required: false, rows: 4, resize: 'vertical', }, render: ({ placeholder, disabled, invalid, readonly, required, rows, resize }) => html`<gaia-text-area placeholder=${placeholder} ?disabled=${disabled} ?invalid=${invalid} ?readonly=${readonly} ?required=${required} rows=${rows} resize=${resize} ></gaia-text-area>`, }"},{"kind":"variable","name":"Disabled","type":{"text":"Story"},"default":"{ render: () => html`<gaia-text-area placeholder=\"Placeholder\" disabled></gaia-text-area>`, }"},{"kind":"variable","name":"Invalid","type":{"text":"Story"},"default":"{ render: () => html`<gaia-text-area placeholder=\"Placeholder\" invalid></gaia-text-area>`, }"},{"kind":"variable","name":"WithValue","type":{"text":"Story"},"default":"{ render: () => html`<gaia-text-area value=\"This is some pre-filled text content.\"></gaia-text-area>`, }"},{"kind":"variable","name":"AutoResize","type":{"text":"Story"},"default":"{ render: () => html`<gaia-text-area placeholder=\"Type here and the textarea will grow...\" resize=\"auto\" rows=\"2\" ></gaia-text-area>`, }"},{"kind":"variable","name":"WithFormField","type":{"text":"Story"},"default":"{ render: () => html` <gaia-form-field label=\"Description\" hint=\"Enter a detailed description\" count=\"0/500\"> <gaia-text-area placeholder=\"Enter description...\" rows=\"4\"></gaia-text-area> </gaia-form-field> `, }"},{"kind":"variable","name":"WithFormFieldError","type":{"text":"Story"},"default":"{ render: () => html` <gaia-form-field label=\"Comment\" error=\"This field is required\" invalid> <gaia-text-area placeholder=\"Enter comment...\" invalid></gaia-text-area> </gaia-form-field> `, }"}],"exports":[{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/primitives/text-area/text-area.stories.js"}},{"kind":"js","name":"Regular","declaration":{"name":"Regular","module":"components/primitives/text-area/text-area.stories.js"}},{"kind":"js","name":"Disabled","declaration":{"name":"Disabled","module":"components/primitives/text-area/text-area.stories.js"}},{"kind":"js","name":"Invalid","declaration":{"name":"Invalid","module":"components/primitives/text-area/text-area.stories.js"}},{"kind":"js","name":"WithValue","declaration":{"name":"WithValue","module":"components/primitives/text-area/text-area.stories.js"}},{"kind":"js","name":"AutoResize","declaration":{"name":"AutoResize","module":"components/primitives/text-area/text-area.stories.js"}},{"kind":"js","name":"WithFormField","declaration":{"name":"WithFormField","module":"components/primitives/text-area/text-area.stories.js"}},{"kind":"js","name":"WithFormFieldError","declaration":{"name":"WithFormFieldError","module":"components/primitives/text-area/text-area.stories.js"}}]},{"kind":"javascript-module","path":"components/primitives/text-area/text-area.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/primitives/text-area/text-area.styles.js"}}]},{"kind":"javascript-module","path":"components/primitives/text-area/text-area.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"components/primitives/text-area/text-area.js","declarations":[{"kind":"class","description":"A text area component for multi-line text input, aligned with the GAIA design system.\n\nForm-associated for native form submission.","name":"GaiaTextArea","cssParts":[{"description":"The native textarea element.","name":"textarea"}],"members":[{"kind":"field","name":"formAssociated","type":{"text":"boolean"},"static":true,"default":"true"},{"kind":"field","name":"value","type":{"text":"string"},"default":"''","description":"Current value of the textarea","attribute":"value"},{"kind":"field","name":"placeholder","type":{"text":"string"},"default":"''","description":"Placeholder text displayed when the textarea is empty","attribute":"placeholder"},{"kind":"field","name":"disabled","type":{"text":"boolean"},"default":"false","description":"Whether the textarea is disabled","attribute":"disabled","reflects":true},{"kind":"field","name":"readonly","type":{"text":"boolean"},"default":"false","description":"Whether the textarea is read-only","attribute":"readonly","reflects":true},{"kind":"field","name":"invalid","type":{"text":"boolean"},"default":"false","description":"Whether the textarea is in an invalid state","attribute":"invalid","reflects":true},{"kind":"field","name":"required","type":{"text":"boolean"},"default":"false","description":"Whether the textarea is required","attribute":"required","reflects":true},{"kind":"field","name":"rows","type":{"text":"number"},"default":"4","description":"Number of visible text rows","attribute":"rows"},{"kind":"field","name":"cols","type":{"text":"number | undefined"},"description":"Number of visible text columns","attribute":"cols"},{"kind":"field","name":"maxlength","type":{"text":"number | undefined"},"description":"Maximum number of characters allowed","attribute":"maxlength"},{"kind":"field","name":"minlength","type":{"text":"number | undefined"},"description":"Minimum number of characters required","attribute":"minlength"},{"kind":"field","name":"resize","type":{"text":"'none' | 'vertical' | 'horizontal' | 'both' | 'auto'"},"default":"'vertical'","description":"Resize behavior: 'none' | 'vertical' | 'horizontal' | 'both' | 'auto'","attribute":"resize","reflects":true},{"kind":"field","name":"ariaLabel","type":{"text":"string | null"},"default":"null","description":"Accessible label for the textarea (use when no visible label is present)","attribute":"aria-label"},{"kind":"field","name":"ariaLabelledBy","type":{"text":"string | null"},"default":"null","description":"ID of the element that labels this textarea","attribute":"aria-labelledby"},{"kind":"field","name":"ariaDescribedBy","type":{"text":"string | null"},"default":"null","description":"ID(s) of elements that describe this textarea","attribute":"aria-describedby"},{"kind":"field","name":"name","type":{"text":"string"},"default":"''","description":"Name for form submission","attribute":"name"},{"kind":"field","name":"autocomplete","type":{"text":"string"},"default":"''","description":"Autocomplete hint","attribute":"autocomplete"},{"kind":"field","name":"textareaEl","type":{"text":"HTMLTextAreaElement"},"privacy":"private"},{"kind":"method","name":"focus","parameters":[{"name":"options","optional":true,"type":{"text":"FocusOptions"}}],"description":"Focus the textarea"},{"kind":"method","name":"blur","description":"Blur the textarea"},{"kind":"method","name":"select","description":"Select all text in the textarea"},{"kind":"method","name":"handleInput","privacy":"private","parameters":[{"name":"e","type":{"text":"Event"}}]},{"kind":"method","name":"handleChange","privacy":"private"},{"kind":"method","name":"autoResize","privacy":"private"},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"events":[{"name":"input","type":{"text":"Event"},"description":"Fires when the user types in the textarea."},{"name":"change","type":{"text":"Event"},"description":"Fires when the value changes and the textarea loses focus."}],"attributes":[{"name":"value","type":{"text":"string"},"default":"''","description":"Current value of the textarea","fieldName":"value"},{"name":"placeholder","type":{"text":"string"},"default":"''","description":"Placeholder text displayed when the textarea is empty","fieldName":"placeholder"},{"name":"disabled","type":{"text":"boolean"},"default":"false","description":"Whether the textarea is disabled","fieldName":"disabled"},{"name":"readonly","type":{"text":"boolean"},"default":"false","description":"Whether the textarea is read-only","fieldName":"readonly"},{"name":"invalid","type":{"text":"boolean"},"default":"false","description":"Whether the textarea is in an invalid state","fieldName":"invalid"},{"name":"required","type":{"text":"boolean"},"default":"false","description":"Whether the textarea is required","fieldName":"required"},{"name":"rows","type":{"text":"number"},"default":"4","description":"Number of visible text rows","fieldName":"rows"},{"name":"cols","type":{"text":"number | undefined"},"description":"Number of visible text columns","fieldName":"cols"},{"name":"maxlength","type":{"text":"number | undefined"},"description":"Maximum number of characters allowed","fieldName":"maxlength"},{"name":"minlength","type":{"text":"number | undefined"},"description":"Minimum number of characters required","fieldName":"minlength"},{"name":"resize","type":{"text":"'none' | 'vertical' | 'horizontal' | 'both' | 'auto'"},"default":"'vertical'","description":"Resize behavior: 'none' | 'vertical' | 'horizontal' | 'both' | 'auto'","fieldName":"resize"},{"name":"aria-label","type":{"text":"string | null"},"default":"null","description":"Accessible label for the textarea (use when no visible label is present)","fieldName":"ariaLabel"},{"name":"aria-labelledby","type":{"text":"string | null"},"default":"null","description":"ID of the element that labels this textarea","fieldName":"ariaLabelledBy"},{"name":"aria-describedby","type":{"text":"string | null"},"default":"null","description":"ID(s) of elements that describe this textarea","fieldName":"ariaDescribedBy"},{"name":"name","type":{"text":"string"},"default":"''","description":"Name for form submission","fieldName":"name"},{"name":"autocomplete","type":{"text":"string"},"default":"''","description":"Autocomplete hint","fieldName":"autocomplete"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-text-area","customElement":true}],"exports":[{"kind":"js","name":"GaiaTextArea","declaration":{"name":"GaiaTextArea","module":"components/primitives/text-area/text-area.js"}},{"kind":"custom-element-definition","name":"gaia-text-area","declaration":{"name":"GaiaTextArea","module":"components/primitives/text-area/text-area.js"}}]},{"kind":"javascript-module","path":"components/primitives/text-input/text-input.stories.js","declarations":[{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Primitives/Text Input', component: 'gaia-text-input', argTypes: { value: { control: 'text' }, placeholder: { control: 'text' }, type: { control: 'select', options: ['text', 'email', 'password', 'search', 'tel', 'url', 'number'], }, disabled: { control: 'boolean' }, readonly: { control: 'boolean' }, invalid: { control: 'boolean' }, success: { control: 'boolean' }, required: { control: 'boolean' }, maxlength: { control: 'number' }, minlength: { control: 'number' }, }, }"},{"kind":"variable","name":"Regular","type":{"text":"Story"},"default":"{ args: { placeholder: 'Placeholder', type: 'text', disabled: false, invalid: false, success: false, readonly: false, required: false, }, render: ({ placeholder, type, disabled, invalid, success, readonly, required }) => html`<gaia-text-input placeholder=${placeholder} type=${type} ?disabled=${disabled} ?invalid=${invalid} ?success=${success} ?readonly=${readonly} ?required=${required} ></gaia-text-input>`, }"},{"kind":"variable","name":"Prefix","type":{"text":"Story"},"default":"{ render: () => html`<gaia-text-input placeholder=\"Placeholder\"> <gaia-icon slot=\"prefix\" name=\"globe\"></gaia-icon> </gaia-text-input>`, }"},{"kind":"variable","name":"Suffix","type":{"text":"Story"},"default":"{ render: () => html`<gaia-text-input placeholder=\"Placeholder\"> <gaia-icon slot=\"suffix\" name=\"circle-x\"></gaia-icon> </gaia-text-input>`, }"},{"kind":"variable","name":"Disabled","type":{"text":"Story"},"default":"{ render: () => html` <div style=\"display: flex; flex-direction: column; gap: 8px;\"> <gaia-text-input placeholder=\"Placeholder\" disabled></gaia-text-input> <gaia-text-input value=\"Filled\" disabled></gaia-text-input> </div> `, }"},{"kind":"variable","name":"Invalid","type":{"text":"Story"},"default":"{ render: () => html`<gaia-text-input placeholder=\"Placeholder\" invalid> <gaia-icon slot=\"suffix\" name=\"triangle-alert\"></gaia-icon> </gaia-text-input>`, }"},{"kind":"variable","name":"Success","type":{"text":"Story"},"default":"{ render: () => html`<gaia-text-input placeholder=\"Placeholder\" success></gaia-text-input>`, }"},{"kind":"variable","name":"WithFormField","type":{"text":"Story"},"default":"{ render: () => html` <gaia-form-field label=\"Email\" hint=\"Enter your email address\"> <gaia-text-input placeholder=\"email@example.com\" type=\"email\"> <gaia-icon slot=\"prefix\" name=\"send\"></gaia-icon> </gaia-text-input> </gaia-form-field> `, }"},{"kind":"variable","name":"WithFormFieldError","type":{"text":"Story"},"default":"{ render: () => html` <gaia-form-field label=\"Email\" error=\"Please enter a valid email\" invalid> <gaia-text-input placeholder=\"email@example.com\" type=\"email\" invalid> <gaia-icon slot=\"suffix\" name=\"triangle-alert\"></gaia-icon> </gaia-text-input> </gaia-form-field> `, }"}],"exports":[{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/primitives/text-input/text-input.stories.js"}},{"kind":"js","name":"Regular","declaration":{"name":"Regular","module":"components/primitives/text-input/text-input.stories.js"}},{"kind":"js","name":"Prefix","declaration":{"name":"Prefix","module":"components/primitives/text-input/text-input.stories.js"}},{"kind":"js","name":"Suffix","declaration":{"name":"Suffix","module":"components/primitives/text-input/text-input.stories.js"}},{"kind":"js","name":"Disabled","declaration":{"name":"Disabled","module":"components/primitives/text-input/text-input.stories.js"}},{"kind":"js","name":"Invalid","declaration":{"name":"Invalid","module":"components/primitives/text-input/text-input.stories.js"}},{"kind":"js","name":"Success","declaration":{"name":"Success","module":"components/primitives/text-input/text-input.stories.js"}},{"kind":"js","name":"WithFormField","declaration":{"name":"WithFormField","module":"components/primitives/text-input/text-input.stories.js"}},{"kind":"js","name":"WithFormFieldError","declaration":{"name":"WithFormFieldError","module":"components/primitives/text-input/text-input.stories.js"}}]},{"kind":"javascript-module","path":"components/primitives/text-input/text-input.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/primitives/text-input/text-input.styles.js"}}]},{"kind":"javascript-module","path":"components/primitives/text-input/text-input.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"components/primitives/text-input/text-input.js","declarations":[{"kind":"class","description":"A text input component for single-line text entry, aligned with the GAIA design system.\n\nForm-associated for native form submission.","name":"GaiaTextInput","cssParts":[{"description":"The native input element.","name":"input"},{"description":"The container wrapping the input and slots.","name":"container"}],"slots":[{"description":"An icon or element placed before the input text.","name":"prefix"},{"description":"An icon or element placed after the input text.","name":"suffix"}],"members":[{"kind":"field","name":"formAssociated","type":{"text":"boolean"},"static":true,"default":"true"},{"kind":"field","name":"value","type":{"text":"string"},"default":"''","description":"Current value of the input","attribute":"value"},{"kind":"field","name":"placeholder","type":{"text":"string"},"default":"''","description":"Placeholder text displayed when the input is empty","attribute":"placeholder"},{"kind":"field","name":"type","type":{"text":"TextInputType"},"default":"'text'","description":"Input type","attribute":"type","reflects":true},{"kind":"field","name":"disabled","type":{"text":"boolean"},"default":"false","description":"Whether the input is disabled","attribute":"disabled","reflects":true},{"kind":"field","name":"readonly","type":{"text":"boolean"},"default":"false","description":"Whether the input is read-only","attribute":"readonly","reflects":true},{"kind":"field","name":"invalid","type":{"text":"boolean"},"default":"false","description":"Whether the input is in an invalid state","attribute":"invalid","reflects":true},{"kind":"field","name":"success","type":{"text":"boolean"},"default":"false","description":"Whether the input is in a success state","attribute":"success","reflects":true},{"kind":"field","name":"required","type":{"text":"boolean"},"default":"false","description":"Whether the input is required","attribute":"required","reflects":true},{"kind":"field","name":"maxlength","type":{"text":"number | undefined"},"description":"Maximum number of characters allowed","attribute":"maxlength"},{"kind":"field","name":"minlength","type":{"text":"number | undefined"},"description":"Minimum number of characters required","attribute":"minlength"},{"kind":"field","name":"pattern","type":{"text":"string | undefined"},"description":"Pattern for input validation","attribute":"pattern"},{"kind":"field","name":"ariaLabel","type":{"text":"string | null"},"default":"null","description":"Accessible label for the input (use when no visible label is present)","attribute":"aria-label"},{"kind":"field","name":"ariaLabelledBy","type":{"text":"string | null"},"default":"null","description":"ID of the element that labels this input","attribute":"aria-labelledby"},{"kind":"field","name":"ariaDescribedBy","type":{"text":"string | null"},"default":"null","description":"ID(s) of elements that describe this input","attribute":"aria-describedby"},{"kind":"field","name":"name","type":{"text":"string"},"default":"''","description":"Name for form submission","attribute":"name"},{"kind":"field","name":"autocomplete","type":{"text":"string"},"default":"''","description":"Autocomplete hint","attribute":"autocomplete"},{"kind":"field","name":"inputmode","type":{"text":"| 'none'\n | 'text'\n | 'decimal'\n | 'numeric'\n | 'tel'\n | 'search'\n | 'email'\n | 'url' | undefined"},"description":"Hint for virtual keyboard on mobile","attribute":"inputmode"},{"kind":"field","name":"focused","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"field","name":"inputEl","type":{"text":"HTMLInputElement"},"privacy":"private"},{"kind":"method","name":"focus","parameters":[{"name":"options","optional":true,"type":{"text":"FocusOptions"}}],"description":"Focus the input"},{"kind":"method","name":"blur","description":"Blur the input"},{"kind":"method","name":"select","description":"Select all text in the input"},{"kind":"method","name":"setSelectionRange","parameters":[{"name":"start","type":{"text":"number"}},{"name":"end","type":{"text":"number"}},{"name":"direction","optional":true,"type":{"text":"'forward' | 'backward' | 'none'"}}],"description":"Set the selection range"},{"kind":"method","name":"handleInput","privacy":"private","parameters":[{"name":"e","type":{"text":"Event"}}]},{"kind":"method","name":"handleChange","privacy":"private"},{"kind":"method","name":"handleFocus","privacy":"private"},{"kind":"method","name":"handleBlur","privacy":"private"},{"kind":"method","name":"handlePrefixSlotChange","privacy":"private"},{"kind":"method","name":"handleSuffixSlotChange","privacy":"private"},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"events":[{"name":"input","type":{"text":"Event"},"description":"Fires when the user types in the input."},{"name":"change","type":{"text":"Event"},"description":"Fires when the value changes and the input loses focus."}],"attributes":[{"name":"value","type":{"text":"string"},"default":"''","description":"Current value of the input","fieldName":"value"},{"name":"placeholder","type":{"text":"string"},"default":"''","description":"Placeholder text displayed when the input is empty","fieldName":"placeholder"},{"name":"type","type":{"text":"TextInputType"},"default":"'text'","description":"Input type","fieldName":"type"},{"name":"disabled","type":{"text":"boolean"},"default":"false","description":"Whether the input is disabled","fieldName":"disabled"},{"name":"readonly","type":{"text":"boolean"},"default":"false","description":"Whether the input is read-only","fieldName":"readonly"},{"name":"invalid","type":{"text":"boolean"},"default":"false","description":"Whether the input is in an invalid state","fieldName":"invalid"},{"name":"success","type":{"text":"boolean"},"default":"false","description":"Whether the input is in a success state","fieldName":"success"},{"name":"required","type":{"text":"boolean"},"default":"false","description":"Whether the input is required","fieldName":"required"},{"name":"maxlength","type":{"text":"number | undefined"},"description":"Maximum number of characters allowed","fieldName":"maxlength"},{"name":"minlength","type":{"text":"number | undefined"},"description":"Minimum number of characters required","fieldName":"minlength"},{"name":"pattern","type":{"text":"string | undefined"},"description":"Pattern for input validation","fieldName":"pattern"},{"name":"aria-label","type":{"text":"string | null"},"default":"null","description":"Accessible label for the input (use when no visible label is present)","fieldName":"ariaLabel"},{"name":"aria-labelledby","type":{"text":"string | null"},"default":"null","description":"ID of the element that labels this input","fieldName":"ariaLabelledBy"},{"name":"aria-describedby","type":{"text":"string | null"},"default":"null","description":"ID(s) of elements that describe this input","fieldName":"ariaDescribedBy"},{"name":"name","type":{"text":"string"},"default":"''","description":"Name for form submission","fieldName":"name"},{"name":"autocomplete","type":{"text":"string"},"default":"''","description":"Autocomplete hint","fieldName":"autocomplete"},{"name":"inputmode","type":{"text":"| 'none'\n | 'text'\n | 'decimal'\n | 'numeric'\n | 'tel'\n | 'search'\n | 'email'\n | 'url' | undefined"},"description":"Hint for virtual keyboard on mobile","fieldName":"inputmode"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-text-input","customElement":true}],"exports":[{"kind":"js","name":"GaiaTextInput","declaration":{"name":"GaiaTextInput","module":"components/primitives/text-input/text-input.js"}},{"kind":"custom-element-definition","name":"gaia-text-input","declaration":{"name":"GaiaTextInput","module":"components/primitives/text-input/text-input.js"}}]},{"kind":"javascript-module","path":"components/primitives/tooltip/tooltip.stories.js","declarations":[{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Primitives/Tooltip', component: 'gaia-tooltip', argTypes: { content: { control: 'text', }, title: { control: 'text', }, placement: { control: 'select', options: [ 'top', 'top-start', 'top-end', 'bottom', 'bottom-start', 'bottom-end', 'left', 'left-start', 'left-end', 'right', 'right-start', 'right-end', ], }, delay: { control: 'number', }, }, }"},{"kind":"variable","name":"Default","type":{"text":"Story"},"default":"{ args: { content: 'Tooltip content', placement: 'top', delay: 500, }, render: ({ content, placement, delay }) => html`<div style=\"display: flex; justify-content: center; align-items: center; height: 200px;\"> <gaia-tooltip content=${content} placement=${placement} delay=${delay}> <gaia-button>Hover or focus me</gaia-button> </gaia-tooltip> </div>`, }"},{"kind":"variable","name":"WithTitle","type":{"text":"Story"},"default":"{ args: { title: 'Tooltip title', content: 'This tooltip has a bold title above the body text.', placement: 'top', delay: 500, }, render: ({ title, content, placement, delay }) => html`<div style=\"display: flex; justify-content: center; align-items: center; height: 200px;\"> <gaia-tooltip title=${title} content=${content} placement=${placement} delay=${delay}> <gaia-button>With title</gaia-button> </gaia-tooltip> </div>`, }"},{"kind":"variable","name":"TopPlacements","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"display: flex; gap: 32px; justify-content: center; align-items: center; height: 200px; padding-top: 80px;\" > <gaia-tooltip content=\"Top start\" placement=\"top-start\" delay=\"0\"> <gaia-button>Top Start</gaia-button> </gaia-tooltip> <gaia-tooltip content=\"Top center\" placement=\"top\" delay=\"0\"> <gaia-button>Top</gaia-button> </gaia-tooltip> <gaia-tooltip content=\"Top end\" placement=\"top-end\" delay=\"0\"> <gaia-button>Top End</gaia-button> </gaia-tooltip> </div>`, }"},{"kind":"variable","name":"BottomPlacements","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"display: flex; gap: 32px; justify-content: center; align-items: center; height: 200px;\" > <gaia-tooltip content=\"Bottom start\" placement=\"bottom-start\" delay=\"0\"> <gaia-button>Bottom Start</gaia-button> </gaia-tooltip> <gaia-tooltip content=\"Bottom center\" placement=\"bottom\" delay=\"0\"> <gaia-button>Bottom</gaia-button> </gaia-tooltip> <gaia-tooltip content=\"Bottom end\" placement=\"bottom-end\" delay=\"0\"> <gaia-button>Bottom End</gaia-button> </gaia-tooltip> </div>`, }"},{"kind":"variable","name":"LeftPlacements","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"display: flex; flex-direction: column; gap: 16px; align-items: center; height: 300px; justify-content: center; padding-left: 160px;\" > <gaia-tooltip content=\"Left start\" placement=\"left-start\" delay=\"0\"> <gaia-button>Left Start</gaia-button> </gaia-tooltip> <gaia-tooltip content=\"Left center\" placement=\"left\" delay=\"0\"> <gaia-button>Left</gaia-button> </gaia-tooltip> <gaia-tooltip content=\"Left end\" placement=\"left-end\" delay=\"0\"> <gaia-button>Left End</gaia-button> </gaia-tooltip> </div>`, }"},{"kind":"variable","name":"RightPlacements","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"display: flex; flex-direction: column; gap: 16px; align-items: center; height: 300px; justify-content: center; padding-right: 160px;\" > <gaia-tooltip content=\"Right start\" placement=\"right-start\" delay=\"0\"> <gaia-button>Right Start</gaia-button> </gaia-tooltip> <gaia-tooltip content=\"Right center\" placement=\"right\" delay=\"0\"> <gaia-button>Right</gaia-button> </gaia-tooltip> <gaia-tooltip content=\"Right end\" placement=\"right-end\" delay=\"0\"> <gaia-button>Right End</gaia-button> </gaia-tooltip> </div>`, }"},{"kind":"variable","name":"WithIconButton","type":{"text":"Story"},"default":"{ args: { content: 'Settings', placement: 'bottom', delay: 500, }, render: ({ content, placement, delay }) => html`<div style=\"display: flex; justify-content: center; align-items: center; height: 200px;\"> <gaia-tooltip content=${content} placement=${placement} delay=${delay}> <gaia-button variant=\"ghost\" aria-label=\"Settings\"> <gaia-icon name=\"settings\"></gaia-icon> </gaia-button> </gaia-tooltip> </div>`, }"},{"kind":"variable","name":"LongContent","type":{"text":"Story"},"default":"{ args: { content: 'This is a much longer tooltip that demonstrates how the component handles text wrapping when content exceeds the maximum width.', placement: 'top', delay: 500, }, render: ({ content, placement, delay }) => html`<div style=\"display: flex; justify-content: center; align-items: center; height: 200px;\"> <gaia-tooltip content=${content} placement=${placement} delay=${delay}> <gaia-button>Long content</gaia-button> </gaia-tooltip> </div>`, }"},{"kind":"variable","name":"NoDelay","type":{"text":"Story"},"default":"{ args: { content: 'Appears instantly', placement: 'top', delay: 0, }, render: ({ content, placement, delay }) => html`<div style=\"display: flex; justify-content: center; align-items: center; height: 200px;\"> <gaia-tooltip content=${content} placement=${placement} delay=${delay}> <gaia-button>No delay</gaia-button> </gaia-tooltip> </div>`, }"},{"kind":"variable","name":"DisabledTrigger","type":{"text":"Story"},"default":"{ args: { content: 'This should not appear', placement: 'top', delay: 0, }, render: ({ content, placement, delay }) => html`<div style=\"display: flex; justify-content: center; align-items: center; height: 200px;\"> <gaia-tooltip content=${content} placement=${placement} delay=${delay}> <button disabled>Disabled trigger</button> </gaia-tooltip> </div>`, }"}],"exports":[{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/primitives/tooltip/tooltip.stories.js"}},{"kind":"js","name":"Default","declaration":{"name":"Default","module":"components/primitives/tooltip/tooltip.stories.js"}},{"kind":"js","name":"WithTitle","declaration":{"name":"WithTitle","module":"components/primitives/tooltip/tooltip.stories.js"}},{"kind":"js","name":"TopPlacements","declaration":{"name":"TopPlacements","module":"components/primitives/tooltip/tooltip.stories.js"}},{"kind":"js","name":"BottomPlacements","declaration":{"name":"BottomPlacements","module":"components/primitives/tooltip/tooltip.stories.js"}},{"kind":"js","name":"LeftPlacements","declaration":{"name":"LeftPlacements","module":"components/primitives/tooltip/tooltip.stories.js"}},{"kind":"js","name":"RightPlacements","declaration":{"name":"RightPlacements","module":"components/primitives/tooltip/tooltip.stories.js"}},{"kind":"js","name":"WithIconButton","declaration":{"name":"WithIconButton","module":"components/primitives/tooltip/tooltip.stories.js"}},{"kind":"js","name":"LongContent","declaration":{"name":"LongContent","module":"components/primitives/tooltip/tooltip.stories.js"}},{"kind":"js","name":"NoDelay","declaration":{"name":"NoDelay","module":"components/primitives/tooltip/tooltip.stories.js"}},{"kind":"js","name":"DisabledTrigger","declaration":{"name":"DisabledTrigger","module":"components/primitives/tooltip/tooltip.stories.js"}}]},{"kind":"javascript-module","path":"components/primitives/tooltip/tooltip.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/primitives/tooltip/tooltip.styles.js"}}]},{"kind":"javascript-module","path":"components/primitives/tooltip/tooltip.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"components/primitives/tooltip/tooltip.js","declarations":[{"kind":"class","description":"A tooltip component that displays supplementary context on hover or focus.\n\nWraps a trigger element and shows a floating tooltip with an arrow caret\nwhen the user hovers over, focuses, or taps the trigger. Positioning is\nhandled by floating-ui with automatic flip/shift for viewport edges.\n\nFollows the GAIA design system tooltip spec:\n- 300 ms hover delay (configurable via `delay`)\n- Escape key dismissal\n- Disabled-trigger detection via MutationObserver\n- `role=\"tooltip\"` with `aria-describedby` association","name":"GaiaTooltip","cssParts":[{"description":"The floating tooltip container (for external style overrides)","name":"tooltip"}],"slots":[{"description":"The trigger element that activates the tooltip. Must be focusable (e.g. `<button>`, `<a>`, or an element with `tabindex=\"0\"`).","name":""}],"members":[{"kind":"field","name":"triggerElement","type":{"text":"HTMLElement"}},{"kind":"field","name":"tooltipElement","type":{"text":"HTMLElement"}},{"kind":"field","name":"arrowElement","type":{"text":"HTMLElement"}},{"kind":"field","name":"slotElement","type":{"text":"HTMLSlotElement"}},{"kind":"field","name":"isVisible","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"field","name":"tooltipId","privacy":"private","default":"`tooltip-${Math.random().toString(36).substring(2, 9)}`"},{"kind":"field","name":"disabled","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"field","name":"content","type":{"text":"string"},"default":"''","description":"The text content displayed in the tooltip body.\nAt least one of `content` or `title` must be set for the tooltip to appear.","attribute":"content"},{"kind":"field","name":"title","type":{"text":"string"},"default":"''","description":"An optional bold title displayed above the content.\nRendered with `font-weight: 600` per the GAIA tooltip spec.","attribute":"title"},{"kind":"field","name":"placement","type":{"text":"Placement"},"default":"'bottom'","description":"Preferred placement of the tooltip relative to its trigger.\nSupports all 12 floating-ui placements. The tooltip will automatically\nflip to the opposite side if it would overflow the viewport.","attribute":"placement"},{"kind":"field","name":"delay","type":{"text":"number"},"default":"500","description":"Delay in milliseconds before the tooltip appears on hover.\nSet to `0` for instant display (e.g. sequential tooltips).\nFocus-triggered display uses the same delay via FloatingController.","attribute":"delay"},{"kind":"field","name":"floating","type":{"text":"FloatingController"},"privacy":"private"},{"kind":"field","name":"triggerNode","type":{"text":"HTMLElement | null"},"privacy":"private","default":"null"},{"kind":"field","name":"mutationObserver","type":{"text":"MutationObserver | null"},"privacy":"private","default":"null"},{"kind":"method","name":"disconnectMutationObserver","privacy":"private"},{"kind":"method","name":"checkTriggerDisabled","privacy":"private"},{"kind":"method","name":"handleSlotChange","privacy":"private"},{"kind":"method","name":"attachTriggerBehavior","privacy":"private","parameters":[{"name":"element","type":{"text":"HTMLElement"}}]},{"kind":"method","name":"detachTriggerBehavior","privacy":"private","parameters":[{"name":"element","type":{"text":"HTMLElement"}}]},{"kind":"method","name":"addTriggerListeners","privacy":"private","parameters":[{"name":"element","type":{"text":"HTMLElement"}}]},{"kind":"method","name":"removeTriggerListeners","privacy":"private","parameters":[{"name":"element","type":{"text":"HTMLElement"}}]},{"kind":"field","name":"handleMouseEnter","privacy":"private"},{"kind":"field","name":"handleMouseLeave","privacy":"private"},{"kind":"field","name":"handleFocus","privacy":"private"},{"kind":"field","name":"handleBlur","privacy":"private"},{"kind":"field","name":"handleKeyDown","privacy":"private"},{"kind":"method","name":"show","privacy":"private"},{"kind":"method","name":"hide","privacy":"private"},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"attributes":[{"name":"content","type":{"text":"string"},"default":"''","description":"The text content displayed in the tooltip body.\nAt least one of `content` or `title` must be set for the tooltip to appear.","fieldName":"content","attribute":"content"},{"name":"title","type":{"text":"string"},"default":"''","description":"An optional bold title displayed above the content.\nRendered with `font-weight: 600` per the GAIA tooltip spec.","fieldName":"title","attribute":"title"},{"name":"placement","type":{"text":"Placement"},"default":"'bottom'","description":"Preferred placement of the tooltip relative to its trigger.\nSupports all 12 floating-ui placements. The tooltip will automatically\nflip to the opposite side if it would overflow the viewport.","fieldName":"placement","attribute":"placement"},{"name":"delay","type":{"text":"number"},"default":"500","description":"Delay in milliseconds before the tooltip appears on hover.\nSet to `0` for instant display (e.g. sequential tooltips).\nFocus-triggered display uses the same delay via FloatingController.","fieldName":"delay","attribute":"delay"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-tooltip","customElement":true}],"exports":[{"kind":"js","name":"GaiaTooltip","declaration":{"name":"GaiaTooltip","module":"components/primitives/tooltip/tooltip.js"}},{"kind":"custom-element-definition","name":"gaia-tooltip","declaration":{"name":"GaiaTooltip","module":"components/primitives/tooltip/tooltip.js"}}]},{"kind":"javascript-module","path":"components/session-ended-actions/session-ended-actions.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/session-ended-actions/session-ended-actions.styles.js"}}]},{"kind":"javascript-module","path":"components/session-ended-actions/session-ended-actions.test.js","declarations":[{"kind":"class","description":"","name":"TestWrapper","members":[{"kind":"field","name":"mockStore","type":{"text":"MockChatStore"},"readonly":true},{"kind":"field","name":"store","type":{"text":"ChatStore"},"default":"this.mockStore as unknown"}],"superclass":{"name":"LitElement","package":"lit"},"tagName":"test-wrapper-canvas-revision-selector","customElement":true}],"exports":[{"kind":"custom-element-definition","name":"test-wrapper-session-ended","declaration":{"name":"TestWrapper","module":"components/session-ended-actions/session-ended-actions.test.js"}}]},{"kind":"javascript-module","path":"components/session-ended-actions/session-ended-actions.js","declarations":[{"kind":"class","description":"Post-session actions shown after a support session ends.\n\nReplaces the message composer when the support session has concluded.\nOffers the user the option to provide feedback on the support operator\nor start a new conversation. After feedback is submitted, only the\nnew conversation option remains.","name":"GaiaSessionEndedActions","members":[{"kind":"field","name":"ctrl","privacy":"private","default":"new StoreController(this, selectSessionEndedState)"},{"kind":"method","name":"handleGiveFeedback","privacy":"private"},{"kind":"method","name":"handleNewConversation","privacy":"private"},{"kind":"field","name":"showFeedbackButton","type":{"text":"boolean"},"privacy":"private","readonly":true},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"events":[{"type":{"text":"ConversationClearedEvent"}},{"type":{"text":"ConversationClearedEvent"},"description":"When the user starts a new conversation","name":"conversation-cleared"}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-session-ended-actions","customElement":true}],"exports":[{"kind":"js","name":"GaiaSessionEndedActions","declaration":{"name":"GaiaSessionEndedActions","module":"components/session-ended-actions/session-ended-actions.js"}},{"kind":"custom-element-definition","name":"gaia-session-ended-actions","declaration":{"name":"GaiaSessionEndedActions","module":"components/session-ended-actions/session-ended-actions.js"}}]},{"kind":"javascript-module","path":"components/settings/settings-view.test.js","declarations":[{"kind":"class","description":"","name":"TestWrapper","members":[{"kind":"field","name":"store","type":{"text":"MockChatStore"}}],"superclass":{"name":"LitElement","package":"lit"},"tagName":"test-wrapper-canvas-revision-selector","customElement":true}],"exports":[{"kind":"custom-element-definition","name":"test-wrapper-settings-view","declaration":{"name":"TestWrapper","module":"components/settings/settings-view.test.js"}}]},{"kind":"javascript-module","path":"components/settings/settings-view.js","declarations":[{"kind":"class","description":"","name":"GaiaSettingsView","members":[{"kind":"field","name":"ctrl","privacy":"private","default":"new StoreController(this, selectSettingsViewState)"},{"kind":"field","name":"screen","type":{"text":"SettingsScreen"},"privacy":"private","default":"'menu'"},{"kind":"field","name":"revokeMessage","type":{"text":"string | null"},"privacy":"private","default":"null"},{"kind":"field","name":"expandedPluginTools","privacy":"private","default":"new Set<string>()"},{"kind":"field","name":"revokeTimeoutId","type":{"text":"ReturnType<typeof setTimeout> | null"},"privacy":"private","default":"null"},{"kind":"field","name":"handleBack","privacy":"private"},{"kind":"field","name":"openDataSettings","privacy":"private"},{"kind":"field","name":"openPluginSettings","privacy":"private"},{"kind":"field","name":"handleConsentToggle","privacy":"private"},{"kind":"field","name":"handlePluginSearchInput","privacy":"private"},{"kind":"method","name":"handlePluginToggle","privacy":"private","parameters":[{"name":"pluginId","type":{"text":"string"}},{"name":"e","type":{"text":"Event"}}]},{"kind":"method","name":"handleToolToggle","privacy":"private","parameters":[{"name":"pluginId","type":{"text":"string"}},{"name":"toolName","type":{"text":"string"}},{"name":"e","type":{"text":"Event"}}]},{"kind":"field","name":"blockPluginControlInteraction","privacy":"private"},{"kind":"method","name":"togglePluginTools","privacy":"private","parameters":[{"name":"pluginId","type":{"text":"string"}}]},{"kind":"method","name":"handleRevokeAll","privacy":"private"},{"kind":"method","name":"renderHeaderTitle","privacy":"private"},{"kind":"method","name":"renderMenuScreen","privacy":"private"},{"kind":"method","name":"renderDataSettingsScreen","privacy":"private"},{"kind":"method","name":"renderPluginScreen","privacy":"private"},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-settings-view","customElement":true}],"exports":[{"kind":"js","name":"GaiaSettingsView","declaration":{"name":"GaiaSettingsView","module":"components/settings/settings-view.js"}},{"kind":"custom-element-definition","name":"gaia-settings-view","declaration":{"name":"GaiaSettingsView","module":"components/settings/settings-view.js"}}]},{"kind":"javascript-module","path":"components/shared/__tests__/error-boundary.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"components/shared/animations.styles.js","declarations":[{"kind":"variable","name":"animationStyles","default":"css` @keyframes pulse { 0%, 100% { opacity: 0.3; } 50% { opacity: 1; } } @keyframes shimmer { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } } @keyframes message-enter { from { opacity: 0; transform: translateY(12px); } } @keyframes message-enter-user { from { opacity: 0; transform: translateX(32px); } } @keyframes breathe { 0%, 100% { opacity: 0.4; transform: scale(0.85); } 50% { opacity: 1; transform: scale(1.1); } } @keyframes dot-complete { 0% { transform: scale(1); } 50% { opacity: 0.5; transform: scale(1.8); } 100% { opacity: 1; transform: scale(1); } } @keyframes blink { 50% { opacity: 0; } } @keyframes pill-enter { from { opacity: 0; transform: translateY(6px); } } @keyframes confirm-pop { 0% { transform: scale(1); } 50% { transform: scale(1.15); } 100% { transform: scale(1); } } @keyframes fade-in { from { opacity: 0; transform: scale(0.95); } to { opacity: 1; transform: scale(1); } } @keyframes fade-out { from { opacity: 1; transform: scale(1); } to { opacity: 0; transform: scale(0.95); } } @keyframes fade-in-slide { from { opacity: 0; transform: translateY(-10px); } to { opacity: 1; transform: translateY(0); } } @keyframes fade-out-slide { from { opacity: 1; transform: translateY(0); } to { opacity: 0; transform: translateY(-10px); } } `"},{"kind":"variable","name":"shimmerTextStyles","default":"css` .shimmer-text { color: transparent; background-image: linear-gradient( to right, oklch(30.91% 0.049 233.96deg), oklch(50% 0.049 233.96deg) 40%, oklch(70% 0.049 233.96deg) 50%, oklch(50% 0.049 233.96deg) 60%, oklch(30.91% 0.049 233.96deg) 100% ); background-position: 0 50%; background-clip: text; background-size: 200%; animation: shimmer 3s infinite linear; } @media (prefers-reduced-motion: reduce) { .shimmer-text { animation: none; } } `","description":"Shimmer text gradient mixin — apply to any element to create\nthe animated gradient-text loading effect.\n\nUsage: add `.shimmer-text` class to the element."}],"exports":[{"kind":"js","name":"animationStyles","declaration":{"name":"animationStyles","module":"components/shared/animations.styles.js"}},{"kind":"js","name":"shimmerTextStyles","declaration":{"name":"shimmerTextStyles","module":"components/shared/animations.styles.js"}}]},{"kind":"javascript-module","path":"components/shared/base-element.js","declarations":[{"kind":"class","description":"","name":"BaseElement","members":[{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]"}],"superclass":{"name":"LitElement","package":"lit"},"customElement":true}],"exports":[{"kind":"js","name":"BaseElement","declaration":{"name":"BaseElement","module":"components/shared/base-element.js"}}]},{"kind":"javascript-module","path":"components/shared/controllers/conversation-scroll-controller.js","declarations":[{"kind":"class","description":"","name":"ConversationScrollController","members":[{"kind":"field","name":"scroll","type":{"text":"ScrollController"},"privacy":"private","default":"new ScrollController(host, containerRef, scrollViewRef)"},{"kind":"field","name":"prevMessages","type":{"text":"UiMessage[]"},"privacy":"private","default":"[]"},{"kind":"field","name":"prevFeedbackOpen","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"field","name":"prevFeedbackConfirmationVisible","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"field","name":"prevError","type":{"text":"AppError | null"},"privacy":"private","default":"null"},{"kind":"method","name":"hostConnected","return":{"type":{"text":"void"}}},{"kind":"method","name":"hostDisconnected","return":{"type":{"text":"void"}}},{"kind":"method","name":"processUpdate","return":{"type":{"text":"Promise<void>"}},"description":"Call from the host's `updated()` lifecycle to process scroll changes."},{"kind":"method","name":"handleScrollUpdate","privacy":"private","return":{"type":{"text":"void"}},"parameters":[{"name":"prevMessages","optional":true,"type":{"text":"UiMessage[]"}}]}]}],"exports":[{"kind":"js","name":"ConversationScrollController","declaration":{"name":"ConversationScrollController","module":"components/shared/controllers/conversation-scroll-controller.js"}}]},{"kind":"javascript-module","path":"components/shared/controllers/floating-controller.js","declarations":[{"kind":"class","description":"Reactive controller that manages floating-ui positioning and show/hide timing.\n\nEncapsulates the common pattern of:\n- Delayed show/hide with timeout management\n- `computePosition` + `autoUpdate` lifecycle\n- Arrow element positioning","name":"FloatingController","members":[{"kind":"field","name":"showTimeout","type":{"text":"number | null"},"privacy":"private","default":"null"},{"kind":"field","name":"hideTimeout","type":{"text":"number | null"},"privacy":"private","default":"null"},{"kind":"field","name":"cleanupAutoUpdate","type":{"text":"(() => void) | null"},"privacy":"private","default":"null"},{"kind":"field","name":"placement","type":{"text":"Placement"},"privacy":"private"},{"kind":"field","name":"strategy","type":{"text":"Strategy"},"privacy":"private"},{"kind":"field","name":"offsetPx","type":{"text":"number"},"privacy":"private"},{"kind":"field","name":"shiftPadding","type":{"text":"number"},"privacy":"private"},{"kind":"field","name":"showDelay","type":{"text":"number"}},{"kind":"field","name":"hideDelay","type":{"text":"number"}},{"kind":"field","name":"extraMiddleware","type":{"text":"Middleware[]"},"privacy":"private"},{"kind":"method","name":"updateOptions","parameters":[{"name":"options","type":{"text":"Partial<FloatingOptions>"}}],"description":"Update options that may change at runtime (e.g. placement, delays)."},{"kind":"method","name":"hostConnected"},{"kind":"method","name":"hostDisconnected"},{"kind":"method","name":"clearTimeouts","description":"Cancel any pending show/hide timers."},{"kind":"method","name":"scheduleShow","parameters":[{"name":"onShow","type":{"text":"() => void"}}],"description":"Schedule the show callback after `showDelay` ms. Clears pending timers first."},{"kind":"method","name":"scheduleHide","parameters":[{"name":"onHide","type":{"text":"() => void"}}],"description":"Schedule the hide callback after `hideDelay` ms. Clears pending timers first."},{"kind":"method","name":"stopAutoUpdate","description":"Stop the autoUpdate loop. Safe to call when not running."},{"kind":"method","name":"startAutoUpdate","parameters":[{"name":"reference","type":{"text":"HTMLElement"}},{"name":"floating","type":{"text":"HTMLElement"}},{"name":"arrowEl","type":{"text":"HTMLElement | null"}},{"name":"onPositioned","optional":true,"type":{"text":"(result: PositionResult) => void"}}],"description":"Start the floating-ui autoUpdate loop.\nCalls `updatePosition` each time the reference or floating element moves/resizes."},{"kind":"method","name":"computeAndApply","return":{"type":{"text":"Promise<PositionResult | null>"}},"parameters":[{"name":"reference","type":{"text":"HTMLElement"}},{"name":"floating","type":{"text":"HTMLElement"}},{"name":"arrowEl","type":{"text":"HTMLElement | null"}},{"name":"onPositioned","optional":true,"type":{"text":"(result: PositionResult) => void"}}],"description":"Run a single position computation and apply styles to the floating & arrow elements.\nReturns the computed placement for the caller to use if needed."}]}],"exports":[{"kind":"js","name":"FloatingController","declaration":{"name":"FloatingController","module":"components/shared/controllers/floating-controller.js"}}]},{"kind":"javascript-module","path":"components/shared/controllers/focus-trap-controller.test.js","declarations":[{"kind":"class","description":"","name":"TestHost","members":[{"kind":"field","name":"open","type":{"text":"boolean"},"default":"true","attribute":"open"},{"kind":"field","name":"onEscapeSpy"},{"kind":"field","name":"focusTrap","default":"new FocusTrapController(this, '.container', this.onEscapeSpy)"},{"kind":"method","name":"handleKeyDown","parameters":[{"name":"e","type":{"text":"KeyboardEvent"}}]}],"attributes":[{"name":"open","type":{"text":"boolean"},"default":"true","fieldName":"open"}],"superclass":{"name":"LitElement","package":"lit"},"tagName":"test-focus-trap-host","customElement":true}],"exports":[{"kind":"custom-element-definition","name":"test-focus-trap-host","declaration":{"name":"TestHost","module":"components/shared/controllers/focus-trap-controller.test.js"}}]},{"kind":"javascript-module","path":"components/shared/controllers/focus-trap-controller.js","declarations":[{"kind":"class","description":"Reactive controller that traps focus within a container element.\n\nHandles Tab/Shift+Tab wrapping and Escape key dismissal.\nThe host must call `handleKeyDown(e)` from its keydown handler.","name":"FocusTrapController","members":[{"kind":"field","name":"host","type":{"text":"ReactiveControllerHost & LitElement"},"privacy":"private","default":"host"},{"kind":"field","name":"containerSelector","type":{"text":"string"},"privacy":"private","default":"containerSelector"},{"kind":"field","name":"onEscape","type":{"text":"() => void | undefined"},"privacy":"private","default":"onEscape"},{"kind":"method","name":"hostConnected","return":{"type":{"text":"void"}}},{"kind":"method","name":"hostDisconnected","return":{"type":{"text":"void"}}},{"kind":"method","name":"handleKeyDown","return":{"type":{"text":"void"}},"parameters":[{"name":"e","type":{"text":"KeyboardEvent"}}]}]}],"exports":[{"kind":"js","name":"FocusTrapController","declaration":{"name":"FocusTrapController","module":"components/shared/controllers/focus-trap-controller.js"}}]},{"kind":"javascript-module","path":"components/shared/controllers/iframe-preview-controller.js","declarations":[{"kind":"class","description":"","name":"IframePreviewController","members":[{"kind":"field","name":"errorMessage","type":{"text":"string"},"default":"''"},{"kind":"field","name":"rendererReady","type":{"text":"boolean"},"default":"false"},{"kind":"field","name":"debounceTimer","type":{"text":"ReturnType<typeof setTimeout> | undefined"},"privacy":"private"},{"kind":"field","name":"renderCallback","type":{"text":"() => void | undefined"},"privacy":"private"},{"kind":"field","name":"renderTimeoutId","type":{"text":"ReturnType<typeof setTimeout> | undefined"},"privacy":"private"},{"kind":"method","name":"hostConnected","return":{"type":{"text":"void"}}},{"kind":"method","name":"hostDisconnected","return":{"type":{"text":"void"}}},{"kind":"method","name":"scheduleRender","return":{"type":{"text":"void"}},"parameters":[{"name":"callback","type":{"text":"() => void"}}],"description":"Schedule a debounced render. The callback is invoked after the debounce delay."},{"kind":"method","name":"cancelDebounce","return":{"type":{"text":"void"}},"description":"Cancel any pending debounced render."},{"kind":"method","name":"startRenderTimeout","return":{"type":{"text":"void"}},"description":"Start a timeout that fires if the iframe does not respond with a success\nor error message within `renderTimeoutMs`. This catches the case where the\niframe's main thread is completely blocked (e.g. infinite loop)."},{"kind":"method","name":"clearRenderTimeout","return":{"type":{"text":"void"}},"description":"Cancel any pending render timeout."},{"kind":"method","name":"setError","return":{"type":{"text":"void"}},"parameters":[{"name":"message","type":{"text":"string"}}],"description":"Set error state and dispatch a failed render result."},{"kind":"method","name":"setSuccess","return":{"type":{"text":"void"}},"description":"Clear error state and dispatch a successful render result."},{"kind":"method","name":"dispatchRenderResult","return":{"type":{"text":"void"}},"parameters":[{"name":"detail","type":{"text":"RenderResult"}}],"description":"Dispatch a canvas-render-result custom event on the host."},{"kind":"field","name":"handleMessage","privacy":"private"}]}],"exports":[{"kind":"js","name":"IframePreviewController","declaration":{"name":"IframePreviewController","module":"components/shared/controllers/iframe-preview-controller.js"}}]},{"kind":"javascript-module","path":"components/shared/controllers/resize-controller.js","declarations":[{"kind":"class","description":"","name":"ResizeController","members":[{"kind":"field","name":"host","type":{"text":"ResizeHost"},"privacy":"private"},{"kind":"field","name":"resizeObserver","type":{"text":"ResizeObserver"},"privacy":"private"},{"kind":"method","name":"hostConnected"},{"kind":"method","name":"hostDisconnected"},{"kind":"method","name":"getTextareaBounds","privacy":"private"},{"kind":"method","name":"setTextareaDimensions"}]}],"exports":[{"kind":"js","name":"ResizeController","declaration":{"name":"ResizeController","module":"components/shared/controllers/resize-controller.js"}}]},{"kind":"javascript-module","path":"components/shared/controllers/scroll-controller.js","declarations":[{"kind":"class","description":"","name":"ScrollController","members":[{"kind":"method","name":"hostConnected","return":{"type":{"text":"void"}}},{"kind":"method","name":"hostDisconnected","return":{"type":{"text":"void"}}},{"kind":"method","name":"scrollToBottom","return":{"type":{"text":"void"}},"parameters":[{"name":"behavior","default":"'instant'","type":{"text":"ScrollBehavior"}}],"description":"Scroll the container to the bottom."},{"kind":"method","name":"anchorToElement","return":{"type":{"text":"void"}},"parameters":[{"name":"element","type":{"text":"HTMLElement"}},{"name":"behavior","default":"'instant'","type":{"text":"ScrollBehavior"}}],"description":"Anchor to an element by setting the scroll view height to push it to the top."},{"kind":"method","name":"resetScrollHeight","return":{"type":{"text":"void"}},"description":"Reset scroll view height to auto."}]}],"exports":[{"kind":"js","name":"ScrollController","declaration":{"name":"ScrollController","module":"components/shared/controllers/scroll-controller.js"}}]},{"kind":"javascript-module","path":"components/shared/controllers/toolbar-controller.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"components/shared/controllers/toolbar-controller.js","declarations":[{"kind":"class","description":"","name":"ToolbarController","members":[{"kind":"field","name":"activeIndex","type":{"text":"number"},"default":"0"},{"kind":"method","name":"hostConnected","return":{"type":{"text":"void"}}},{"kind":"method","name":"updateTabindex","return":{"type":{"text":"void"}},"description":"Synchronize tabindex attributes with the active index.\nIf the active button is disabled, moves to the first enabled button."},{"kind":"field","name":"handleKeyDown","description":"Handle keydown events on the toolbar container.\nSupports ArrowRight/Left (wrap-around), Home, End."},{"kind":"method","name":"nextEnabledIndex","privacy":"private","return":{"type":{"text":"number"}},"parameters":[{"name":"buttons","type":{"text":"HTMLButtonElement[]"}},{"name":"from","type":{"text":"number"}},{"name":"direction","type":{"text":"1 | -1"}}]}]}],"exports":[{"kind":"js","name":"ToolbarController","declaration":{"name":"ToolbarController","module":"components/shared/controllers/toolbar-controller.js"}}]},{"kind":"javascript-module","path":"components/shared/disposable-controller.js","declarations":[{"kind":"class","description":"","name":"DisposableController","members":[{"kind":"field","name":"disposables","type":{"text":"(() => void)[]"},"privacy":"private","default":"[]"},{"kind":"method","name":"add","return":{"type":{"text":"void"}},"parameters":[{"name":"dispose","type":{"text":"() => void"}}],"description":"Register a cleanup function to run on disconnection."},{"kind":"method","name":"hostConnected","return":{"type":{"text":"void"}}},{"kind":"method","name":"hostDisconnected","return":{"type":{"text":"void"}}}]}],"exports":[{"kind":"js","name":"DisposableController","declaration":{"name":"DisposableController","module":"components/shared/disposable-controller.js"}}]},{"kind":"javascript-module","path":"components/shared/error-boundary.js","declarations":[{"kind":"class","description":"Error boundary that catches rendering errors from child components.\n\nWraps a section of the UI and, when an error event bubbles up from a\nchild, replaces the children with a fallback \"Something went wrong\"\nmessage. Resets automatically when the conversation is cleared.","name":"GaiaErrorBoundary","slots":[{"description":"Content to render when no error has occurred","name":""}],"members":[{"kind":"field","name":"hasError","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"method","name":"reportError","return":{"type":{"text":"void"}}},{"kind":"method","name":"reset","return":{"type":{"text":"void"}},"description":"Reset the error boundary so children can render again."},{"kind":"field","name":"handleReset","privacy":"private"},{"kind":"field","name":"handleError","privacy":"private"},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"superclass":{"name":"BaseElement","package":"@/components/shared/base-element"},"tagName":"gaia-error-boundary","customElement":true}],"exports":[{"kind":"js","name":"GaiaErrorBoundary","declaration":{"name":"GaiaErrorBoundary","module":"components/shared/error-boundary.js"}},{"kind":"custom-element-definition","name":"gaia-error-boundary","declaration":{"name":"GaiaErrorBoundary","module":"components/shared/error-boundary.js"}}]},{"kind":"javascript-module","path":"components/shared/suggested-question-pills.stories.js","declarations":[{"kind":"variable","name":"meta","type":{"text":"Meta"},"default":"{ title: 'Components/Suggested Questions', component: 'gaia-suggested-questions', }"},{"kind":"variable","name":"Default","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"max-width: 500px;\"> <gaia-suggested-questions .questions=${[ 'How do I reset my password?', 'What are the system requirements?', 'How do I contact support?', ]} ></gaia-suggested-questions> </div>`, }"},{"kind":"variable","name":"SingleQuestion","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"max-width: 500px;\"> <gaia-suggested-questions .questions=${['Tell me more about this feature']} ></gaia-suggested-questions> </div>`, }"},{"kind":"variable","name":"ManyQuestions","type":{"text":"Story"},"default":"{ render: () => html`<div style=\"max-width: 500px;\"> <gaia-suggested-questions .questions=${[ 'How do I get started?', 'What pricing plans are available?', 'Can I integrate with other tools?', 'Where can I find the documentation?', 'How do I export my data?', ]} ></gaia-suggested-questions> </div>`, }"}],"exports":[{"kind":"js","name":"default","declaration":{"name":"meta","module":"components/shared/suggested-question-pills.stories.js"}},{"kind":"js","name":"Default","declaration":{"name":"Default","module":"components/shared/suggested-question-pills.stories.js"}},{"kind":"js","name":"SingleQuestion","declaration":{"name":"SingleQuestion","module":"components/shared/suggested-question-pills.stories.js"}},{"kind":"js","name":"ManyQuestions","declaration":{"name":"ManyQuestions","module":"components/shared/suggested-question-pills.stories.js"}}]},{"kind":"javascript-module","path":"components/shared/suggested-question-pills.styles.js","declarations":[],"exports":[{"kind":"js","name":"default","declaration":{"module":"components/shared/suggested-question-pills.styles.js"}}]},{"kind":"javascript-module","path":"components/shared/suggested-question-pills.js","declarations":[{"kind":"class","description":"Row of clickable pill buttons showing suggested follow-up questions.\n\nUsed by the message composer (pre-conversation welcome state) and\ninline after assistant messages to offer quick follow-up prompts.","name":"GaiaSuggestedQuestions","members":[{"kind":"field","name":"questions","type":{"text":"ReadonlyArray<string>"},"default":"[]"},{"kind":"method","name":"handleClick","privacy":"private","parameters":[{"name":"question","type":{"text":"string"}}]},{"kind":"field","name":"_styles","type":{"text":"CSSResultGroup[]"},"privacy":"protected","static":true,"default":"[unsafeCSS(styles)]","inheritedFrom":{"name":"BaseElement","module":"components/shared/base-element.js"}}],"events":[{"name":"question-click","type":{"text":"CustomEvent"},"description":"When a question pill is clicked. `event.detail` contains `{ question: string }`."}],"superclass":{"name":"BaseElement","module":"/src/components/shared/base-element"},"tagName":"gaia-suggested-questions","customElement":true}],"exports":[{"kind":"js","name":"GaiaSuggestedQuestions","declaration":{"name":"GaiaSuggestedQuestions","module":"components/shared/suggested-question-pills.js"}},{"kind":"custom-element-definition","name":"gaia-suggested-questions","declaration":{"name":"GaiaSuggestedQuestions","module":"components/shared/suggested-question-pills.js"}}]},{"kind":"javascript-module","path":"core/adapters/citation-utils.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"core/adapters/citation-utils.js","declarations":[{"kind":"function","name":"collectCitationsForAssistant","return":{"type":{"text":"SearchCitation[]"}},"parameters":[{"name":"messages","type":{"text":"UiMessage[]"}},{"name":"fromIndex","type":{"text":"number"}}],"description":"Collect search citations for the assistant message at `fromIndex`.\nIncludes citations from:\n1. The message's own tool calls\n2. Tool calls on ALL preceding assistant messages across the entire conversation\n\nCitations are NOT deduplicated here — each entry represents a specific document\nchunk. ReferenceIds are qualified with a turn prefix (e.g., \"0:1\") to ensure\nuniqueness across turns, so the citationMap can use them as keys directly."},{"kind":"function","name":"sortCitations","return":{"type":{"text":"SearchCitation[]"}},"parameters":[{"name":"citations","type":{"text":"SearchCitation[]"}}],"description":"Sort citations by referenceId (turn index ascending, then sequence ascending).\nSupports both qualified \"0:1\" and legacy bare \"1\" formats."},{"kind":"function","name":"groupCitationsByDocument","return":{"type":{"text":"CitationGroup[]"}},"parameters":[{"name":"citations","type":{"text":"SearchCitation[]"}}],"description":"Group citations by document, keyed by documentId or URL fallback.\nCitations are sorted by referenceId before grouping."}],"exports":[{"kind":"js","name":"collectCitationsForAssistant","declaration":{"name":"collectCitationsForAssistant","module":"core/adapters/citation-utils.js"}},{"kind":"js","name":"sortCitations","declaration":{"name":"sortCitations","module":"core/adapters/citation-utils.js"}},{"kind":"js","name":"groupCitationsByDocument","declaration":{"name":"groupCitationsByDocument","module":"core/adapters/citation-utils.js"}}]},{"kind":"javascript-module","path":"core/adapters/index.js","declarations":[],"exports":[{"kind":"js","name":"UiUserMessage","declaration":{"name":"UiUserMessage","module":"./message-types"}},{"kind":"js","name":"UiAssistantMessage","declaration":{"name":"UiAssistantMessage","module":"./message-types"}},{"kind":"js","name":"UiToolCall","declaration":{"name":"UiToolCall","module":"./message-types"}},{"kind":"js","name":"UiAssistantPart","declaration":{"name":"UiAssistantPart","module":"./message-types"}},{"kind":"js","name":"UiAssistantReasoningPart","declaration":{"name":"UiAssistantReasoningPart","module":"./message-types"}},{"kind":"js","name":"UiAssistantTextPart","declaration":{"name":"UiAssistantTextPart","module":"./message-types"}},{"kind":"js","name":"UiAssistantToolCallPart","declaration":{"name":"UiAssistantToolCallPart","module":"./message-types"}},{"kind":"js","name":"UiAssistantSuggestedQuestionsPart","declaration":{"name":"UiAssistantSuggestedQuestionsPart","module":"./message-types"}},{"kind":"js","name":"UiOperatorMessage","declaration":{"name":"UiOperatorMessage","module":"./message-types"}},{"kind":"js","name":"UiActivityMessage","declaration":{"name":"UiActivityMessage","module":"./message-types"}},{"kind":"js","name":"UiMessage","declaration":{"name":"UiMessage","module":"./message-types"}},{"kind":"js","name":"isUiUserMessage","declaration":{"name":"isUiUserMessage","module":"./message-types"}},{"kind":"js","name":"isUiAssistantMessage","declaration":{"name":"isUiAssistantMessage","module":"./message-types"}},{"kind":"js","name":"isUiOperatorMessage","declaration":{"name":"isUiOperatorMessage","module":"./message-types"}},{"kind":"js","name":"isUiActivityMessage","declaration":{"name":"isUiActivityMessage","module":"./message-types"}},{"kind":"js","name":"getToolCallParts","declaration":{"name":"getToolCallParts","module":"./message-types"}},{"kind":"js","name":"getTextPart","declaration":{"name":"getTextPart","module":"./message-types"}},{"kind":"js","name":"getReasoningPart","declaration":{"name":"getReasoningPart","module":"./message-types"}},{"kind":"js","name":"mapToUiMessages","declaration":{"name":"mapToUiMessages","module":"./message-mapper"}},{"kind":"js","name":"createMemoizedMapper","declaration":{"name":"createMemoizedMapper","module":"./memoized-mapper"}},{"kind":"js","name":"ToolStatus","declaration":{"name":"ToolStatus","module":"./tool-utils"}},{"kind":"js","name":"SearchCitation","declaration":{"name":"SearchCitation","module":"./tool-utils"}},{"kind":"js","name":"UnwrappedApproval","declaration":{"name":"UnwrappedApproval","module":"./tool-utils"}},{"kind":"js","name":"safeParseJson","declaration":{"name":"safeParseJson","module":"./tool-utils"}},{"kind":"js","name":"safeParseArguments","declaration":{"name":"safeParseArguments","module":"./tool-utils"}},{"kind":"js","name":"unwrapApproval","declaration":{"name":"unwrapApproval","module":"./tool-utils"}},{"kind":"js","name":"parseSummaryFromArgs","declaration":{"name":"parseSummaryFromArgs","module":"./tool-utils"}},{"kind":"js","name":"isApprovalResponse","declaration":{"name":"isApprovalResponse","module":"./tool-utils"}},{"kind":"js","name":"isDeclined","declaration":{"name":"isDeclined","module":"./tool-utils"}},{"kind":"js","name":"isErrorResponse","declaration":{"name":"isErrorResponse","module":"./tool-utils"}},{"kind":"js","name":"parseSearchCitations","declaration":{"name":"parseSearchCitations","module":"./tool-utils"}},{"kind":"js","name":"parseResponseContent","declaration":{"name":"parseResponseContent","module":"./tool-utils"}},{"kind":"js","name":"resolveToolStatus","declaration":{"name":"resolveToolStatus","module":"./tool-utils"}},{"kind":"js","name":"resolveSourceLabel","declaration":{"name":"resolveSourceLabel","module":"./tool-utils"}},{"kind":"js","name":"resolveSourceIcon","declaration":{"name":"resolveSourceIcon","module":"./tool-utils"}},{"kind":"js","name":"CitationGroup","declaration":{"name":"CitationGroup","module":"./citation-utils"}},{"kind":"js","name":"collectCitationsForAssistant","declaration":{"name":"collectCitationsForAssistant","module":"./citation-utils"}},{"kind":"js","name":"sortCitations","declaration":{"name":"sortCitations","module":"./citation-utils"}},{"kind":"js","name":"groupCitationsByDocument","declaration":{"name":"groupCitationsByDocument","module":"./citation-utils"}}]},{"kind":"javascript-module","path":"core/adapters/memoized-mapper.js","declarations":[{"kind":"class","description":"Class-based memoized message mapper that short-circuits when inputs\nhaven't changed.\n\nDuring streaming, the AG-UI client appends to the messages array and\nmutates the last assistant message's content. Since `AgentService.getMessages()`\nreturns the same array reference (mutated in place), change detection uses\narray length rather than referential equality.\n\nBoth incremental and full-rebuild paths normalize the full message array\n(merge reasoning into assistant turns, drop orphans) then re-map all\nnormalized messages. Normalization can shift message boundaries so\nper-message prefix reuse is not safe. The incremental path still avoids\nrebuilding the tool-response index from scratch.","name":"MemoizedMapper","members":[{"kind":"field","name":"prevLength","type":{"text":"number"},"privacy":"private","default":"0"},{"kind":"field","name":"prevResult","type":{"text":"UiMessage[]"},"privacy":"private","default":"[]"},{"kind":"field","name":"prevToolResponseIndex","privacy":"private","default":"new Map<string, InternalToolMessage[]>()"},{"kind":"field","name":"prevPrefixRefs","type":{"text":"InternalMessage[]"},"privacy":"private","default":"[]","description":"Snapshot of message refs at indices 0..N-2 to detect prefix changes."},{"kind":"field","name":"summaryCache","privacy":"private","readonly":true,"default":"new Map<string, string>()","description":"Cache of tool call summaries from previous mappings. Ensures summaries\nsurvive across re-maps when the original sources (args or store summaries)\nbecome unavailable — e.g. after approve/decline triggers a new agent run\nwith fresh message objects."},{"kind":"method","name":"reset","return":{"type":{"text":"void"}},"description":"Clear all mutable state."},{"kind":"method","name":"map","return":{"type":{"text":"UiMessage[]"}},"parameters":[{"name":"messages","type":{"text":"InternalMessage[]"}},{"name":"summaries","optional":true,"type":{"text":"Record<string, string>"}},{"name":"messageRunIds","optional":true,"type":{"text":"Record<string, string>"}},{"name":"runState","optional":true,"type":{"text":"RunState"}}]},{"kind":"method","name":"incrementalUpdate","privacy":"private","return":{"type":{"text":"UiMessage[]"}},"parameters":[{"name":"messages","type":{"text":"InternalMessage[]"}},{"name":"normalized","type":{"text":"Exclude<InternalMessage, { role: 'reasoning' }>[]"}},{"name":"currentSummaries","type":{"text":"Record<string, string>"}},{"name":"messageRunIds","optional":true,"type":{"text":"Record<string, string>"}},{"name":"runState","optional":true,"type":{"text":"RunState"}}]},{"kind":"method","name":"fullRebuild","privacy":"private","return":{"type":{"text":"UiMessage[]"}},"parameters":[{"name":"messages","type":{"text":"InternalMessage[]"}},{"name":"normalized","type":{"text":"Exclude<InternalMessage, { role: 'reasoning' }>[]"}},{"name":"currentSummaries","type":{"text":"Record<string, string>"}},{"name":"messageRunIds","optional":true,"type":{"text":"Record<string, string>"}},{"name":"runState","optional":true,"type":{"text":"RunState"}}]}]},{"kind":"function","name":"createMemoizedMapper","description":"Factory function for backward compatibility.\nReturns a callable mapper function backed by MemoizedMapper."}],"exports":[{"kind":"js","name":"MemoizedMapper","declaration":{"name":"MemoizedMapper","module":"core/adapters/memoized-mapper.js"}},{"kind":"js","name":"createMemoizedMapper","declaration":{"name":"createMemoizedMapper","module":"core/adapters/memoized-mapper.js"}}]},{"kind":"javascript-module","path":"core/adapters/message-mapper.reasoning.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"core/adapters/message-mapper.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"core/adapters/message-mapper.js","declarations":[{"kind":"function","name":"indexToolResponses","return":{"type":{"text":"Map<string, InternalToolMessage[]>"}},"parameters":[{"name":"messages","type":{"text":"InternalMessage[]"}}],"description":"Index tool response messages by their toolCallId for efficient lookup.\r\nCollects ALL tool responses per tool call ID (approval + execution may share an ID)."},{"kind":"function","name":"mapToUiMessages","return":{"type":{"text":""}},"parameters":[{"name":"messages","type":{"text":"InternalMessage[]"},"description":"InternalMessage[] (converted from AG-UI at the AgentService boundary)"},{"name":"toolCallSummaries","optional":true,"type":{"text":"Record<string, string>"},"description":"Store-tracked summaries (populated during streaming\r\nvia onToolCallArgsEvent) used as fallback when args aren't fully parseable yet."},{"name":"messageRunIds","optional":true,"type":{"text":"Record<string, string>"},"description":"Map of messageId/toolCallId → runId for run grouping."},{"name":"runState","optional":true,"type":{"text":"RunState"},"description":"Current run state, used to set `isStreaming` on the last assistant message."}],"description":"Convert internal messages to UI messages for rendering.\r\nThis is the primary entry point for message transformation.\r\n\r\nEach InternalMessage maps to at most one UiMessage. Tool calls are embedded\r\ninline on UiAssistantMessage.toolCalls rather than being separate entries."},{"kind":"function","name":"convertToUiMessages","return":{"type":{"text":"UiMessage[]"}},"parameters":[{"name":"msg","type":{"text":"InternalMessage"}},{"name":"toolResponsesById","type":{"text":"Map<string, InternalToolMessage[]>"}},{"name":"toolCallSummaries","optional":true,"type":{"text":"Record<string, string>"}},{"name":"messageRunIds","optional":true,"type":{"text":"Record<string, string>"}}],"description":"Convert a single internal message to zero or more UI messages.\r\n\r\nEach InternalMessage maps to at most one UiMessage.\r\nTool calls are embedded inline on the assistant message."},{"kind":"function","name":"enrichAssistantMessages","return":{"type":{"text":"void"}},"parameters":[{"name":"result","type":{"text":"UiMessage[]"}},{"name":"runState","optional":true,"type":{"text":"RunState"}}],"description":"Enrich assistant messages with pre-computed citations and streaming status.\r\nRuns a single O(n) pass over the result array after initial mapping.\r\n\r\nCitations are now collected from the assistant message's own tool calls\r\nplus any tool calls from preceding assistant messages in the same turn."}],"exports":[{"kind":"js","name":"UiUserMessage","declaration":{"name":"UiUserMessage","module":"./message-types"}},{"kind":"js","name":"UiAssistantMessage","declaration":{"name":"UiAssistantMessage","module":"./message-types"}},{"kind":"js","name":"UiToolCall","declaration":{"name":"UiToolCall","module":"./message-types"}},{"kind":"js","name":"UiAssistantPart","declaration":{"name":"UiAssistantPart","module":"./message-types"}},{"kind":"js","name":"UiAssistantReasoningPart","declaration":{"name":"UiAssistantReasoningPart","module":"./message-types"}},{"kind":"js","name":"UiAssistantTextPart","declaration":{"name":"UiAssistantTextPart","module":"./message-types"}},{"kind":"js","name":"UiAssistantToolCallPart","declaration":{"name":"UiAssistantToolCallPart","module":"./message-types"}},{"kind":"js","name":"UiAssistantSuggestedQuestionsPart","declaration":{"name":"UiAssistantSuggestedQuestionsPart","module":"./message-types"}},{"kind":"js","name":"UiOperatorMessage","declaration":{"name":"UiOperatorMessage","module":"./message-types"}},{"kind":"js","name":"UiActivityMessage","declaration":{"name":"UiActivityMessage","module":"./message-types"}},{"kind":"js","name":"UiMessage","declaration":{"name":"UiMessage","module":"./message-types"}},{"kind":"js","name":"isUiUserMessage","declaration":{"name":"isUiUserMessage","module":"./message-types"}},{"kind":"js","name":"isUiAssistantMessage","declaration":{"name":"isUiAssistantMessage","module":"./message-types"}},{"kind":"js","name":"isUiOperatorMessage","declaration":{"name":"isUiOperatorMessage","module":"./message-types"}},{"kind":"js","name":"isUiActivityMessage","declaration":{"name":"isUiActivityMessage","module":"./message-types"}},{"kind":"js","name":"getToolCallParts","declaration":{"name":"getToolCallParts","module":"./message-types"}},{"kind":"js","name":"getTextPart","declaration":{"name":"getTextPart","module":"./message-types"}},{"kind":"js","name":"getReasoningPart","declaration":{"name":"getReasoningPart","module":"./message-types"}},{"kind":"js","name":"indexToolResponses","declaration":{"name":"indexToolResponses","module":"core/adapters/message-mapper.js"}},{"kind":"js","name":"mapToUiMessages","declaration":{"name":"mapToUiMessages","module":"core/adapters/message-mapper.js"}},{"kind":"js","name":"convertToUiMessages","declaration":{"name":"convertToUiMessages","module":"core/adapters/message-mapper.js"}},{"kind":"js","name":"enrichAssistantMessages","declaration":{"name":"enrichAssistantMessages","module":"core/adapters/message-mapper.js"}}]},{"kind":"javascript-module","path":"core/adapters/message-normalizer.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"core/adapters/message-normalizer.js","declarations":[{"kind":"function","name":"normalizeMessages","return":{"type":{"text":"NormalizedMessage[]"}},"parameters":[{"name":"messages","type":{"text":"InternalMessage[]"}},{"name":"runState","type":{"text":"RunState"}}],"description":"Normalize an InternalMessage transcript.\n\n1. Merge each reasoning message into the next assistant message's contentBlocks\n as a `thinking` block (prepended before existing blocks).\n2. If reasoning is trailing (no following assistant) and the run is active,\n create an assembling assistant turn.\n3. Drop orphaned tool responses whose toolCallId doesn't match any known tool call.\n4. Drop reasoning that can't be merged (e.g. followed by a non-assistant message when idle)."}],"exports":[{"kind":"js","name":"normalizeMessages","declaration":{"name":"normalizeMessages","module":"core/adapters/message-normalizer.js"}}]},{"kind":"javascript-module","path":"core/adapters/message-types.js","declarations":[{"kind":"function","name":"isUiUserMessage","return":{"type":{"text":"msg is UiUserMessage"}},"parameters":[{"name":"msg","type":{"text":"UiMessage"}}]},{"kind":"function","name":"isUiAssistantMessage","return":{"type":{"text":"msg is UiAssistantMessage"}},"parameters":[{"name":"msg","type":{"text":"UiMessage"}}]},{"kind":"function","name":"isUiOperatorMessage","return":{"type":{"text":"msg is UiOperatorMessage"}},"parameters":[{"name":"msg","type":{"text":"UiMessage"}}]},{"kind":"function","name":"isUiActivityMessage","return":{"type":{"text":"msg is UiActivityMessage"}},"parameters":[{"name":"msg","type":{"text":"UiMessage"}}]},{"kind":"function","name":"getToolCallParts","return":{"type":{"text":"UiAssistantToolCallPart[]"}},"parameters":[{"name":"msg","type":{"text":"UiAssistantMessage"}}],"description":"Extract all tool-call parts from an assistant message."},{"kind":"function","name":"getTextPart","return":{"type":{"text":"UiAssistantTextPart | null"}},"parameters":[{"name":"msg","type":{"text":"UiAssistantMessage"}}],"description":"Extract the first text part from an assistant message, or null."},{"kind":"function","name":"getReasoningPart","return":{"type":{"text":"UiAssistantReasoningPart | null"}},"parameters":[{"name":"msg","type":{"text":"UiAssistantMessage"}}],"description":"Extract the first reasoning part from an assistant message, or null."}],"exports":[{"kind":"js","name":"isUiUserMessage","declaration":{"name":"isUiUserMessage","module":"core/adapters/message-types.js"}},{"kind":"js","name":"isUiAssistantMessage","declaration":{"name":"isUiAssistantMessage","module":"core/adapters/message-types.js"}},{"kind":"js","name":"isUiOperatorMessage","declaration":{"name":"isUiOperatorMessage","module":"core/adapters/message-types.js"}},{"kind":"js","name":"isUiActivityMessage","declaration":{"name":"isUiActivityMessage","module":"core/adapters/message-types.js"}},{"kind":"js","name":"getToolCallParts","declaration":{"name":"getToolCallParts","module":"core/adapters/message-types.js"}},{"kind":"js","name":"getTextPart","declaration":{"name":"getTextPart","module":"core/adapters/message-types.js"}},{"kind":"js","name":"getReasoningPart","declaration":{"name":"getReasoningPart","module":"core/adapters/message-types.js"}}]},{"kind":"javascript-module","path":"core/adapters/reasoning-utils.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"core/adapters/reasoning-utils.js","declarations":[{"kind":"function","name":"extractLatestSectionTitle","return":{"type":{"text":"string | null"}},"parameters":[{"name":"content","type":{"text":"string"}}],"description":"Extract the latest section title from reasoning content.\n\nReasoning text often contains sections formatted as:\n **[title]**\\n\\n[content]\n\nThis function finds all such titles and returns the last one,\nor null if no section titles are found."},{"kind":"function","name":"parseReasoningSteps","return":{"type":{"text":"ReasoningStep[]"}},"parameters":[{"name":"content","type":{"text":"string"}}],"description":"Parse reasoning content into discrete steps.\n\nSplits on the `**Title**\\n\\n` pattern to produce an array of steps.\nIf no section headers are found, returns a single step with the\nfull content and a generic title."}],"exports":[{"kind":"js","name":"extractLatestSectionTitle","declaration":{"name":"extractLatestSectionTitle","module":"core/adapters/reasoning-utils.js"}},{"kind":"js","name":"parseReasoningSteps","declaration":{"name":"parseReasoningSteps","module":"core/adapters/reasoning-utils.js"}}]},{"kind":"javascript-module","path":"core/adapters/tool-utils.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"core/adapters/tool-utils.js","declarations":[{"kind":"function","name":"sanitizeUrl","return":{"type":{"text":"string"}},"parameters":[{"name":"url","type":{"text":"unknown"}}],"description":"Allow only http(s) URLs for href bindings. Returns `'#'` for missing input,\nunparseable URLs, or non-http(s) protocols (`javascript:`, `data:`, `vbscript:`).\n\nLit auto-escapes attribute values but does not strip URL protocols, and\ncitation/search URLs come from LLM-generated tool output that ultimately\nlands in `<a href>` outside the DOMPurify pipeline."},{"kind":"function","name":"sanitizeAttachmentUrl","return":{"type":{"text":"string"}},"parameters":[{"name":"url","type":{"text":"unknown"}},{"name":"mimeType","type":{"text":"string"}}],"description":"Sanitize URLs used for rendered attachments (`<a href>` / `<img src>`).\n\nUnlike sanitizeUrl (link hrefs — http(s) only), attachments are\nlegitimately delivered as `data:`/`blob:` URLs: the composer previews local\nimages via `URL.createObjectURL` (blob:), and restored `source.type:'data'`\nattachments arrive as `data:<mime>;base64,…`. Those schemes are therefore\nallowed in addition to http(s), while dangerous protocols (`javascript:`,\n`vbscript:`, …) still collapse to `'#'`.\n\n`data:` is a content container, not a single protocol, so the scheme alone\nis not a sufficient check: the same sanitized value lands in clickable\n`<a href>`s, and a forged attachment claiming `mimeType: 'image/png'` could\nsmuggle `data:text/html,…` past a scheme-only allowlist. The data URL's\nmedia type must therefore be consistent with the attachment's declared\n`mimeType` (`image/*` → `data:image/*`, excluding SVG — the one image type\nthat can carry script; `application/pdf` → `data:application/pdf`).\n\nAttachment URLs ultimately come from AG-UI message content (including\nrestored conversation history), which is outside the DOMPurify pipeline, so\nthe protocol must be checked before binding it into `href`/`src`.\n\nDetection is purely lexical (scheme prefix) rather than via `new URL()`:\nopaque `blob:`/`data:` values and a missing document base both make\n`new URL()` throw on otherwise-safe inputs, which would wrongly drop valid\nattachments."},{"kind":"function","name":"safeParseJson","return":{"type":{"text":"T | null"}},"parameters":[{"name":"input","type":{"text":"unknown"}},{"name":"schema","optional":true,"type":{"text":"ZodType<T>"}}],"description":"Safely parse a value that may be a JSON string or already-parsed object.\nReturns null for falsy input or unparseable strings.\n\nWhen a Zod schema is provided, the parsed value is validated against it.\nReturns null if validation fails."},{"kind":"function","name":"safeParseArguments","return":{"type":{"text":"Record<string, unknown>"}},"parameters":[{"name":"args","type":{"text":"string | object | undefined"}}],"description":"Safely parse tool call arguments from string or object."},{"kind":"function","name":"unwrapApproval","return":{"type":{"text":"UnwrappedApproval | null"}},"parameters":[{"name":"toolCall","type":{"text":"InternalToolCall"}}],"description":"Unwrap a requestApproval tool call to extract the inner function details.\nReturns null if the tool call is not a requestApproval."},{"kind":"function","name":"parseSummaryFromArgs","return":{"type":{"text":"string | null"}},"parameters":[{"name":"toolCall","type":{"text":"InternalToolCall"}}],"description":"Extract a display summary from tool call arguments.\nHandles both direct summary fields and nested requestApproval format."},{"kind":"function","name":"isApprovalResponse","return":{"type":{"text":"boolean"}},"parameters":[{"name":"toolResponse","optional":true,"type":{"text":"InternalToolMessage"}}],"description":"Check if a tool response is an approval response (has `approved` field)."},{"kind":"function","name":"isDeclined","return":{"type":{"text":"boolean"}},"parameters":[{"name":"toolResponse","optional":true,"type":{"text":"InternalToolMessage"}}],"description":"Check if a tool response indicates a declined approval."},{"kind":"function","name":"isErrorResponse","return":{"type":{"text":"boolean"}},"parameters":[{"name":"toolResponse","optional":true,"type":{"text":"InternalToolMessage"}}],"description":"Check if a tool response indicates an error."},{"kind":"function","name":"parseSearchCitations","return":{"type":{"text":"SearchCitation[]"}},"parameters":[{"name":"toolResponse","optional":true,"type":{"text":"InternalToolMessage"}}],"description":"Parse search citations from a tool response.\nThe response is a flat array of search result objects.\nEach entry represents a specific document chunk — no deduplication is performed\nsince different chunks from the same URL have distinct referenceIds used for\ninline [web:N] citation markers."},{"kind":"function","name":"parseResponseContent","return":{"type":{"text":"unknown"}},"parameters":[{"name":"toolResponse","optional":true,"type":{"text":"InternalToolMessage"}}],"description":"Parse tool response content into a structured value."},{"kind":"function","name":"resolveToolStatus","return":{"type":{"text":"ToolStatus"}},"parameters":[{"name":"message","type":{"text":"{ requiresApproval: boolean; approved: boolean | null; executionResponse?: unknown }"}},{"name":"_runIdle","type":{"text":"boolean"}}],"description":"Resolve the display status of a tool call.\nUses the explicit approval fields added in the approval model fix."},{"kind":"function","name":"resolveSourceLabel","return":{"type":{"text":"string"}},"parameters":[{"name":"sourceUrl","type":{"text":"string"}}],"description":"Resolve a human-readable source label based on URL hostname."},{"kind":"function","name":"resolveSourceIcon","return":{"type":{"text":"string"}},"parameters":[{"name":"sourceUrl","type":{"text":"string"}}],"description":"Resolve source icon name based on URL hostname."}],"exports":[{"kind":"js","name":"sanitizeUrl","declaration":{"name":"sanitizeUrl","module":"core/adapters/tool-utils.js"}},{"kind":"js","name":"sanitizeAttachmentUrl","declaration":{"name":"sanitizeAttachmentUrl","module":"core/adapters/tool-utils.js"}},{"kind":"js","name":"safeParseJson","declaration":{"name":"safeParseJson","module":"core/adapters/tool-utils.js"}},{"kind":"js","name":"safeParseArguments","declaration":{"name":"safeParseArguments","module":"core/adapters/tool-utils.js"}},{"kind":"js","name":"unwrapApproval","declaration":{"name":"unwrapApproval","module":"core/adapters/tool-utils.js"}},{"kind":"js","name":"parseSummaryFromArgs","declaration":{"name":"parseSummaryFromArgs","module":"core/adapters/tool-utils.js"}},{"kind":"js","name":"isApprovalResponse","declaration":{"name":"isApprovalResponse","module":"core/adapters/tool-utils.js"}},{"kind":"js","name":"isDeclined","declaration":{"name":"isDeclined","module":"core/adapters/tool-utils.js"}},{"kind":"js","name":"isErrorResponse","declaration":{"name":"isErrorResponse","module":"core/adapters/tool-utils.js"}},{"kind":"js","name":"parseSearchCitations","declaration":{"name":"parseSearchCitations","module":"core/adapters/tool-utils.js"}},{"kind":"js","name":"parseResponseContent","declaration":{"name":"parseResponseContent","module":"core/adapters/tool-utils.js"}},{"kind":"js","name":"resolveToolStatus","declaration":{"name":"resolveToolStatus","module":"core/adapters/tool-utils.js"}},{"kind":"js","name":"resolveSourceLabel","declaration":{"name":"resolveSourceLabel","module":"core/adapters/tool-utils.js"}},{"kind":"js","name":"resolveSourceIcon","declaration":{"name":"resolveSourceIcon","module":"core/adapters/tool-utils.js"}}]},{"kind":"javascript-module","path":"core/canvas/canvas-state-container.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"core/canvas/canvas-state-container.js","declarations":[{"kind":"class","description":"","name":"CanvasStateContainer","superclass":{"name":"StateContainer","package":"@/core/shared/state-container"},"members":[{"kind":"field","name":"_state","type":{"text":"T"},"privacy":"private","default":"{ ...initialState }","inheritedFrom":{"name":"StateContainer","module":"core/shared/state-container.js"}},{"kind":"field","name":"listeners","privacy":"private","default":"new Set<StateListener<T>>()","inheritedFrom":{"name":"StateContainer","module":"core/shared/state-container.js"}},{"kind":"field","name":"pendingNotify","type":{"text":"boolean"},"privacy":"private","default":"false","inheritedFrom":{"name":"StateContainer","module":"core/shared/state-container.js"}},{"kind":"field","name":"state","type":{"text":"T"},"readonly":true,"inheritedFrom":{"name":"StateContainer","module":"core/shared/state-container.js"}},{"kind":"method","name":"subscribe","return":{"type":{"text":"() => void"}},"parameters":[{"name":"listener","type":{"text":"StateListener<T>"}}],"inheritedFrom":{"name":"StateContainer","module":"core/shared/state-container.js"}},{"kind":"method","name":"setState","return":{"type":{"text":"void"}},"parameters":[{"name":"partial","type":{"text":"Partial<T>"}}],"inheritedFrom":{"name":"StateContainer","module":"core/shared/state-container.js"}},{"kind":"method","name":"scheduleNotify","privacy":"private","return":{"type":{"text":"void"}},"inheritedFrom":{"name":"StateContainer","module":"core/shared/state-container.js"}}]}],"exports":[{"kind":"js","name":"CanvasStateContainer","declaration":{"name":"CanvasStateContainer","module":"core/canvas/canvas-state-container.js"}}]},{"kind":"javascript-module","path":"core/canvas/canvas-store-controller.js","declarations":[{"kind":"class","description":"","name":"CanvasStoreController","superclass":{"name":"ContextStoreController","package":"@/core/shared/context-store-controller"},"members":[{"kind":"field","name":"_value","type":{"text":"T"},"privacy":"private","inheritedFrom":{"name":"ContextStoreController","module":"core/shared/context-store-controller.js"}},{"kind":"field","name":"_store","type":{"text":"TStore | null"},"privacy":"private","default":"null","inheritedFrom":{"name":"ContextStoreController","module":"core/shared/context-store-controller.js"}},{"kind":"field","name":"unsubscribeStore","type":{"text":"() => void | undefined"},"privacy":"private","inheritedFrom":{"name":"ContextStoreController","module":"core/shared/context-store-controller.js"}},{"kind":"field","name":"value","type":{"text":"T"},"description":"The current selected state slice.","readonly":true,"inheritedFrom":{"name":"ContextStoreController","module":"core/shared/context-store-controller.js"}},{"kind":"field","name":"store","type":{"text":"TStore"},"description":"The underlying store instance for dispatching actions.","readonly":true,"inheritedFrom":{"name":"ContextStoreController","module":"core/shared/context-store-controller.js"}},{"kind":"method","name":"attach","privacy":"private","return":{"type":{"text":"void"}},"parameters":[{"name":"store","type":{"text":"TStore"}}],"inheritedFrom":{"name":"ContextStoreController","module":"core/shared/context-store-controller.js"}},{"kind":"method","name":"detach","privacy":"private","return":{"type":{"text":"void"}},"inheritedFrom":{"name":"ContextStoreController","module":"core/shared/context-store-controller.js"}},{"kind":"method","name":"hostDisconnected","return":{"type":{"text":"void"}},"inheritedFrom":{"name":"ContextStoreController","module":"core/shared/context-store-controller.js"}}]}],"exports":[{"kind":"js","name":"CanvasStoreController","declaration":{"name":"CanvasStoreController","module":"core/canvas/canvas-store-controller.js"}}]},{"kind":"javascript-module","path":"core/canvas/canvas-store.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"core/canvas/canvas-store.js","declarations":[{"kind":"class","description":"","name":"CanvasStore","members":[{"kind":"field","name":"container","type":{"text":"CanvasStateContainer"},"readonly":true,"default":"new CanvasStateContainer(() => this.host.requestUpdate())"},{"kind":"field","name":"getConversationId","type":{"text":"() => string | null"},"privacy":"private","readonly":true},{"kind":"field","name":"exportRefreshTimer","type":{"text":"ReturnType<typeof setTimeout> | undefined"},"privacy":"private"},{"kind":"field","name":"renderResolve","type":{"text":"((result: CanvasRenderResult) => void) | null"},"privacy":"private","default":"null"},{"kind":"field","name":"pendingRenderResult","type":{"text":"CanvasRenderResult | null"},"privacy":"private","default":"null"},{"kind":"field","name":"resetEpoch","type":{"text":"number"},"privacy":"private","default":"0","description":"Incremented on every resetCanvas. Async fetches capture this at entry and\ndrop their response if the epoch has changed — preventing a stale REST\nreply from re-populating a conversation that's been cleared."},{"kind":"method","name":"getRendererUrl","return":{"type":{"text":"string"}},"description":"URL of the canvas renderer app served from the API."},{"kind":"method","name":"getChartsScriptUrl","return":{"type":{"text":"string"}},"description":"URL of the PDF charts bundle served from the API."},{"kind":"method","name":"ensureOpen","return":{"type":{"text":"void"}},"description":"Ensure the canvas is open, expanded, and on the preview tab.\nThe preview tab must be active for the render result to be reported."},{"kind":"method","name":"getCanvasRenderStatus","return":{"type":{"text":"Promise<CanvasRenderResult>"}},"parameters":[{"name":"timeout","default":"RENDER_TIMEOUT_MS"}],"description":"Ensures the canvas is open, then waits for the preview to report a render result.\nResolves immediately if a result is already pending (race-condition safe)."},{"kind":"method","name":"reportRenderResult","return":{"type":{"text":"void"}},"parameters":[{"name":"result","type":{"text":"CanvasRenderResult"}}],"description":"Called by the iframe-preview component (via workspace) when the iframe\nreports a render success or error."},{"kind":"method","name":"hostConnected","return":{"type":{"text":"void"}}},{"kind":"method","name":"hostDisconnected","return":{"type":{"text":"void"}}},{"kind":"method","name":"getState","return":{"type":{"text":"CanvasState"}}},{"kind":"method","name":"subscribe","return":{"type":{"text":"() => void"}},"parameters":[{"name":"listener","type":{"text":"CanvasStoreListener"}}]},{"kind":"method","name":"handleCanvasEvent","return":{"type":{"text":"void"}},"parameters":[{"name":"event","type":{"text":"unknown"}}]},{"kind":"method","name":"handleCanvasActivity","return":{"type":{"text":"void"}},"parameters":[{"name":"event","type":{"text":"{ activityType?: string; content?: unknown }"}}]},{"kind":"method","name":"openCanvas","return":{"type":{"text":"void"}},"parameters":[{"name":"canvasId","type":{"text":"string"}}]},{"kind":"method","name":"toggleExpanded","return":{"type":{"text":"void"}}},{"kind":"method","name":"setExpanded","return":{"type":{"text":"void"}},"parameters":[{"name":"expanded","type":{"text":"boolean"}}]},{"kind":"method","name":"closeCanvas","return":{"type":{"text":"void"}}},{"kind":"method","name":"reopenCanvas","return":{"type":{"text":"void"}}},{"kind":"method","name":"resetCanvas","return":{"type":{"text":"void"}}},{"kind":"method","name":"selectRevision","return":{"type":{"text":"void"}},"parameters":[{"name":"index","type":{"text":"number"}}]},{"kind":"method","name":"setActiveTab","return":{"type":{"text":"void"}},"parameters":[{"name":"tab","type":{"text":"'code' | 'preview'"}}]},{"kind":"method","name":"fetchCanvasState","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"conversationId","type":{"text":"string"}}]},{"kind":"method","name":"restoreRevision","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"canvasId","type":{"text":"string"}},{"name":"version","type":{"text":"number"}}]},{"kind":"method","name":"fetchCanvasContent","privacy":"private","return":{"type":{"text":"Promise<void>"}}},{"kind":"method","name":"scheduleExportRefresh","privacy":"private","return":{"type":{"text":"void"}},"description":"Debounced export refresh — coalesces multiple canvas events\nduring a single agent turn into one fetch after things settle."},{"kind":"method","name":"fetchExports","return":{"type":{"text":"Promise<void>"}}},{"kind":"method","name":"downloadExport","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"exportId","type":{"text":"string"}}]},{"kind":"method","name":"fetchRevisions","privacy":"private","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"_canvasId","type":{"text":"string"}}]}]},{"kind":"variable","name":"canvasStoreContext"}],"exports":[{"kind":"js","name":"CanvasStore","declaration":{"name":"CanvasStore","module":"core/canvas/canvas-store.js"}},{"kind":"js","name":"canvasStoreContext","declaration":{"name":"canvasStoreContext","module":"core/canvas/canvas-store.js"}}]},{"kind":"javascript-module","path":"core/canvas/canvas-types.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"core/canvas/canvas-types.js","declarations":[{"kind":"variable","name":"REPORT_SOURCE_KINDS","default":"new Set(['report-source-html'])","description":"Canvas kinds that represent report sources (support PDF export)."},{"kind":"function","name":"isReportSourceKind","return":{"type":{"text":"boolean"}},"parameters":[{"name":"kind","type":{"text":"string"}}]},{"kind":"variable","name":"initialCanvasState","type":{"text":"CanvasState"},"default":"{ active: false, expanded: false, canvasId: null, title: '', kind: 'react-app', status: 'idle', content: '', language: 'tsx', revision: 0, revisions: [], activeRevisionIndex: -1, activeTab: 'preview', error: null, exports: [], exportInProgress: false, }"}],"exports":[{"kind":"js","name":"REPORT_SOURCE_KINDS","declaration":{"name":"REPORT_SOURCE_KINDS","module":"core/canvas/canvas-types.js"}},{"kind":"js","name":"isReportSourceKind","declaration":{"name":"isReportSourceKind","module":"core/canvas/canvas-types.js"}},{"kind":"js","name":"initialCanvasState","declaration":{"name":"initialCanvasState","module":"core/canvas/canvas-types.js"}}]},{"kind":"javascript-module","path":"core/canvas/index.js","declarations":[],"exports":[{"kind":"js","name":"CanvasStore","declaration":{"name":"CanvasStore","module":"./canvas-store"}},{"kind":"js","name":"canvasStoreContext","declaration":{"name":"canvasStoreContext","module":"./canvas-store"}},{"kind":"js","name":"CanvasStoreDeps","declaration":{"name":"CanvasStoreDeps","module":"./canvas-store"}},{"kind":"js","name":"CanvasStoreController","declaration":{"name":"CanvasStoreController","module":"./canvas-store-controller"}},{"kind":"js","name":"CanvasState","declaration":{"name":"CanvasState","module":"./canvas-types"}},{"kind":"js","name":"CanvasRevision","declaration":{"name":"CanvasRevision","module":"./canvas-types"}},{"kind":"js","name":"CanvasExport","declaration":{"name":"CanvasExport","module":"./canvas-types"}},{"kind":"js","name":"isReportSourceKind","declaration":{"name":"isReportSourceKind","module":"./canvas-types"}},{"kind":"js","name":"REPORT_SOURCE_KINDS","declaration":{"name":"REPORT_SOURCE_KINDS","module":"./canvas-types"}}]},{"kind":"javascript-module","path":"core/constants.js","declarations":[{"kind":"variable","name":"PRIVACY_STATEMENT_URL","type":{"text":"string"},"default":"'https://www.vismasoftware.no/privacy-statement'","description":"Visma Software privacy statement URL."},{"kind":"variable","name":"REQUEST_APPROVAL_TOOL_NAME","type":{"text":"string"},"default":"'requestApproval'","description":"Tool name used by the backend to request user approval for a tool call."},{"kind":"variable","name":"HUMAN_SUPPORT_TOOL_NAME","type":{"text":"string"},"default":"'request_human_support'","description":"Tool name for the human support handoff function."},{"kind":"variable","name":"TOOL_CALL_REJECTED_MESSAGE","type":{"text":"string"},"default":"'Tool call invocation rejected.'","description":"Tool response text when the backend rejects a tool call invocation."},{"kind":"variable","name":"CANVAS_ACTIVITY","type":{"text":"{\n CREATED: 'CANVAS_CREATED',\n UPDATED: 'CANVAS_UPDATED',\n EXPORT_COMPLETED: 'EXPORT_COMPLETED',\n EXPORT_FAILED: 'EXPORT_FAILED',\n}"},"default":"{ CREATED: 'CANVAS_CREATED', UPDATED: 'CANVAS_UPDATED', EXPORT_COMPLETED: 'EXPORT_COMPLETED', EXPORT_FAILED: 'EXPORT_FAILED', }","description":"Canvas activity types sent via AG-UI activity snapshot events."}],"exports":[{"kind":"js","name":"PRIVACY_STATEMENT_URL","declaration":{"name":"PRIVACY_STATEMENT_URL","module":"core/constants.js"}},{"kind":"js","name":"REQUEST_APPROVAL_TOOL_NAME","declaration":{"name":"REQUEST_APPROVAL_TOOL_NAME","module":"core/constants.js"}},{"kind":"js","name":"HUMAN_SUPPORT_TOOL_NAME","declaration":{"name":"HUMAN_SUPPORT_TOOL_NAME","module":"core/constants.js"}},{"kind":"js","name":"TOOL_CALL_REJECTED_MESSAGE","declaration":{"name":"TOOL_CALL_REJECTED_MESSAGE","module":"core/constants.js"}},{"kind":"js","name":"CANVAS_ACTIVITY","declaration":{"name":"CANVAS_ACTIVITY","module":"core/constants.js"}}]},{"kind":"javascript-module","path":"core/errors.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"core/errors.js","declarations":[{"kind":"class","description":"","name":"SignalRError","members":[{"kind":"field","name":"name","type":{"text":"string"},"default":"'SignalRError'"}],"superclass":{"name":"Error","module":"src/core/errors.ts"}},{"kind":"class","description":"","name":"StreamError","members":[{"kind":"field","name":"name","type":{"text":"string"},"default":"'StreamError'"}],"superclass":{"name":"Error","module":"src/core/errors.ts"}},{"kind":"function","name":"responseTokenLimitError","return":{"type":{"text":"AppError"}},"parameters":[{"name":"cause","optional":true,"type":{"text":"unknown"}}]},{"kind":"function","name":"toAppError","return":{"type":{"text":"AppError"}},"parameters":[{"name":"err","type":{"text":"unknown"}}]},{"kind":"function","name":"resolveErrorMessage","return":{"type":{"text":"string"}},"parameters":[{"name":"error","type":{"text":"AppError"}}]},{"kind":"function","name":"ok","return":{"type":{"text":"Result<T, never>"}},"parameters":[{"name":"value","type":{"text":"T"}}]},{"kind":"function","name":"err","return":{"type":{"text":"Result<never, E>"}},"parameters":[{"name":"error","type":{"text":"E"}}]}],"exports":[{"kind":"js","name":"SignalRError","declaration":{"name":"SignalRError","module":"core/errors.js"}},{"kind":"js","name":"StreamError","declaration":{"name":"StreamError","module":"core/errors.js"}},{"kind":"js","name":"responseTokenLimitError","declaration":{"name":"responseTokenLimitError","module":"core/errors.js"}},{"kind":"js","name":"toAppError","declaration":{"name":"toAppError","module":"core/errors.js"}},{"kind":"js","name":"resolveErrorMessage","declaration":{"name":"resolveErrorMessage","module":"core/errors.js"}},{"kind":"js","name":"ok","declaration":{"name":"ok","module":"core/errors.js"}},{"kind":"js","name":"err","declaration":{"name":"err","module":"core/errors.js"}}]},{"kind":"javascript-module","path":"core/messages.js","declarations":[{"kind":"function","name":"createOperatorMessage","return":{"type":{"text":"Extract<InternalMessage, { role: 'operator' }>"}},"parameters":[{"name":"id","type":{"text":"string"}},{"name":"content","type":{"text":"string"}},{"name":"operator","type":{"text":"Operator"}},{"name":"isTyping","default":"false","type":{"text":"boolean"}}],"description":"Create an operator InternalMessage."},{"kind":"function","name":"isAssistantMessage","return":{"type":{"text":"msg is Extract<InternalMessage, { role: 'assistant' }>"}},"parameters":[{"name":"msg","type":{"text":"InternalMessage"}}],"description":"Type guards for narrowing InternalMessage."},{"kind":"function","name":"isToolMessage","return":{"type":{"text":"msg is InternalToolMessage"}},"parameters":[{"name":"msg","type":{"text":"InternalMessage"}}]},{"kind":"function","name":"isOperatorMessage","return":{"type":{"text":"msg is Extract<InternalMessage, { role: 'operator' }>"}},"parameters":[{"name":"msg","type":{"text":"InternalMessage"}}]},{"kind":"function","name":"isActivityMessage","return":{"type":{"text":"msg is Extract<InternalMessage, { role: 'activity' }>"}},"parameters":[{"name":"msg","type":{"text":"InternalMessage"}}]},{"kind":"function","name":"isReasoningMessage","return":{"type":{"text":"msg is Extract<InternalMessage, { role: 'reasoning' }>"}},"parameters":[{"name":"msg","type":{"text":"InternalMessage"}}]},{"kind":"function","name":"getAssistantText","return":{"type":{"text":"string"}},"parameters":[{"name":"msg","type":{"text":"Extract<InternalMessage, { role: 'assistant' }>"}}],"description":"Join all text blocks from an assistant message into a single string.\nUsed where downstream code needs a plain string (e.g. suggested question extraction)."}],"exports":[{"kind":"js","name":"createOperatorMessage","declaration":{"name":"createOperatorMessage","module":"core/messages.js"}},{"kind":"js","name":"isAssistantMessage","declaration":{"name":"isAssistantMessage","module":"core/messages.js"}},{"kind":"js","name":"isToolMessage","declaration":{"name":"isToolMessage","module":"core/messages.js"}},{"kind":"js","name":"isOperatorMessage","declaration":{"name":"isOperatorMessage","module":"core/messages.js"}},{"kind":"js","name":"isActivityMessage","declaration":{"name":"isActivityMessage","module":"core/messages.js"}},{"kind":"js","name":"isReasoningMessage","declaration":{"name":"isReasoningMessage","module":"core/messages.js"}},{"kind":"js","name":"getAssistantText","declaration":{"name":"getAssistantText","module":"core/messages.js"}}]},{"kind":"javascript-module","path":"core/shared/context-store-controller.js","declarations":[{"kind":"class","description":"","name":"ContextStoreController","members":[{"kind":"field","name":"_value","type":{"text":"T"},"privacy":"private"},{"kind":"field","name":"_store","type":{"text":"TStore | null"},"privacy":"private","default":"null"},{"kind":"field","name":"unsubscribeStore","type":{"text":"() => void | undefined"},"privacy":"private"},{"kind":"field","name":"value","type":{"text":"T"},"description":"The current selected state slice.","readonly":true},{"kind":"field","name":"store","type":{"text":"TStore"},"description":"The underlying store instance for dispatching actions.","readonly":true},{"kind":"method","name":"attach","privacy":"private","return":{"type":{"text":"void"}},"parameters":[{"name":"store","type":{"text":"TStore"}}]},{"kind":"method","name":"detach","privacy":"private","return":{"type":{"text":"void"}}},{"kind":"method","name":"hostDisconnected","return":{"type":{"text":"void"}}}]}],"exports":[{"kind":"js","name":"ContextStoreController","declaration":{"name":"ContextStoreController","module":"core/shared/context-store-controller.js"}}]},{"kind":"javascript-module","path":"core/shared/state-container.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"core/shared/state-container.js","declarations":[{"kind":"class","description":"","name":"StateContainer","members":[{"kind":"field","name":"_state","type":{"text":"T"},"privacy":"private","default":"{ ...initialState }"},{"kind":"field","name":"listeners","privacy":"private","default":"new Set<StateListener<T>>()"},{"kind":"field","name":"pendingNotify","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"field","name":"state","type":{"text":"T"},"readonly":true},{"kind":"method","name":"subscribe","return":{"type":{"text":"() => void"}},"parameters":[{"name":"listener","type":{"text":"StateListener<T>"}}]},{"kind":"method","name":"setState","return":{"type":{"text":"void"}},"parameters":[{"name":"partial","type":{"text":"Partial<T>"}}]},{"kind":"method","name":"scheduleNotify","privacy":"private","return":{"type":{"text":"void"}}}]}],"exports":[{"kind":"js","name":"StateContainer","declaration":{"name":"StateContainer","module":"core/shared/state-container.js"}}]},{"kind":"javascript-module","path":"core/store/agent-subscriber.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"core/store/agent-subscriber.js","declarations":[{"kind":"function","name":"createAgentSubscriber","return":{"type":{"text":"AgentSubscriber"}},"parameters":[{"name":"deps","type":{"text":"AgentSubscriberDeps"}}],"description":"Create an AgentSubscriber wired to the store via the deps interface.\nCleanup is scoped to the subscriber's run so overlapping runs do not\nclobber each other's state."}],"exports":[{"kind":"js","name":"createAgentSubscriber","declaration":{"name":"createAgentSubscriber","module":"core/store/agent-subscriber.js"}}]},{"kind":"javascript-module","path":"core/store/auth-coordinator.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"core/store/auth-coordinator.js","declarations":[{"kind":"class","description":"","name":"AuthCoordinator","members":[{"kind":"field","name":"currentIdentifier","type":{"text":"string | null"},"privacy":"private","default":"null"},{"kind":"field","name":"currentProfileId","type":{"text":"string | null"},"privacy":"private","default":"null"},{"kind":"field","name":"authService","type":{"text":"AuthService | null"},"privacy":"private","default":"null"},{"kind":"field","name":"authGeneration","type":{"text":"number"},"privacy":"private","default":"0"},{"kind":"method","name":"getAuthService","return":{"type":{"text":"AuthService | null"}}},{"kind":"method","name":"getVisitorUserId","return":{"type":{"text":"string | null"}}},{"kind":"method","name":"setAuth","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"strategyType","type":{"text":"StrategyType"}},{"name":"profileId","type":{"text":"string"}},{"name":"tokenProvider","optional":true,"type":{"text":"TokenFetcher"}},{"name":"baseUrl","optional":true,"type":{"text":"string"}},{"name":"conversationIdOverride","optional":true,"type":{"text":"string | null"}}],"description":"Set or update authentication, detect identity changes, and re-initialize.\n\n`conversationIdOverride` (#2644) — when the host has set the\n`conversation-id` attribute on `<gaia-chat>`, the value flows through here\nso the post-auth restore picks that exact conversation instead of the one\nin localStorage. This avoids the \"restore-then-switch\" flicker that would\notherwise happen if the attribute were applied after `loadHistory`."},{"kind":"method","name":"emitAuthFailed","privacy":"private","return":{"type":{"text":"void"}},"parameters":[{"name":"strategy","type":{"text":"AuthStrategyType"}},{"name":"reason","type":{"text":"AuthFailedReason"}},{"name":"phase","type":{"text":"'acquire' | 'request'"}}]}]}],"exports":[{"kind":"js","name":"AuthCoordinator","declaration":{"name":"AuthCoordinator","module":"core/store/auth-coordinator.js"}}]},{"kind":"javascript-module","path":"core/store/bootstrap-loader.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"core/store/bootstrap-loader.js","declarations":[{"kind":"function","name":"fetchBootstrapConfig","return":{"type":{"text":"Promise<BootstrapConfigResponse>"}},"parameters":[{"name":"apiClient","type":{"text":"ApiClient"}},{"name":"profileId","type":{"text":"string"}},{"name":"storage","default":"defaultStorageService","type":{"text":"StorageService"}}],"description":"Fetch bootstrap config, using storage cache when available."},{"kind":"function","name":"clearBootstrapStorage","return":{"type":{"text":"void"}},"parameters":[{"name":"storage","default":"defaultStorageService","type":{"text":"StorageService"}}],"description":"Remove cached bootstrap config from storage."}],"exports":[{"kind":"js","name":"fetchBootstrapConfig","declaration":{"name":"fetchBootstrapConfig","module":"core/store/bootstrap-loader.js"}},{"kind":"js","name":"clearBootstrapStorage","declaration":{"name":"clearBootstrapStorage","module":"core/store/bootstrap-loader.js"}}]},{"kind":"javascript-module","path":"core/store/chat-state-container.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"core/store/chat-state-container.js","declarations":[{"kind":"variable","name":"initialState","type":{"text":"ChatStoreState"},"default":"{ // Config initialized: false, maxInputLength: 2000, welcomeMessages: {}, suggestedQuestions: {}, visibleSuggestedQuestions: [], profileId: 'default', features: {}, // Session conversationId: null, channel: 'assistant', isActive: true, runState: 'idle', toolCallSummaries: {}, currentRunId: null, messageRunIds: {}, reasoningLabel: null, // Mode readonly: false, // Support supportSession: null, supportSessionEnded: false, // Messages messages: [], messageHostContexts: {}, // History view historyOpen: false, historyLoading: false, historyPaging: false, historyHasMore: true, historyError: null, conversationsList: [], hostContextSnapshot: null, settingsOpen: false, // UI backendAvailable: true, feedbackFormOpen: false, feedbackFormTarget: 'assistant', feedbackConfirmationVisible: false, feedbackSubmittedInSession: false, feedbackConsentGiven: false, composerDraft: '', sharingPromptVisible: false, sharingPromptAnswered: false, sharingConsentGiven: false, pluginSelections: [], pluginSelectionSearchQuery: '', pluginSelectionLoading: false, pluginSelectionSaving: false, error: null, errorStack: [], }"},{"kind":"class","description":"","name":"ChatStateContainer","members":[{"kind":"method","name":"setError","return":{"type":{"text":"void"}},"parameters":[{"name":"error","type":{"text":"AppError | null"}}]},{"kind":"method","name":"pushError","return":{"type":{"text":"void"}},"parameters":[{"name":"error","type":{"text":"AppError"}}]},{"kind":"method","name":"openFeedbackForm","return":{"type":{"text":"void"}},"parameters":[{"name":"target","type":{"text":"ChatChannel"}}]},{"kind":"method","name":"closeFeedbackForm","return":{"type":{"text":"void"}}},{"kind":"field","name":"_state","type":{"text":"T"},"privacy":"private","default":"{ ...initialState }","inheritedFrom":{"name":"StateContainer","module":"core/shared/state-container.js"}},{"kind":"field","name":"listeners","privacy":"private","default":"new Set<StateListener<T>>()","inheritedFrom":{"name":"StateContainer","module":"core/shared/state-container.js"}},{"kind":"field","name":"pendingNotify","type":{"text":"boolean"},"privacy":"private","default":"false","inheritedFrom":{"name":"StateContainer","module":"core/shared/state-container.js"}},{"kind":"field","name":"state","type":{"text":"T"},"readonly":true,"inheritedFrom":{"name":"StateContainer","module":"core/shared/state-container.js"}},{"kind":"method","name":"subscribe","return":{"type":{"text":"() => void"}},"parameters":[{"name":"listener","type":{"text":"StateListener<T>"}}],"inheritedFrom":{"name":"StateContainer","module":"core/shared/state-container.js"}},{"kind":"method","name":"setState","return":{"type":{"text":"void"}},"parameters":[{"name":"partial","type":{"text":"Partial<T>"}}],"inheritedFrom":{"name":"StateContainer","module":"core/shared/state-container.js"}},{"kind":"method","name":"scheduleNotify","privacy":"private","return":{"type":{"text":"void"}},"inheritedFrom":{"name":"StateContainer","module":"core/shared/state-container.js"}}],"superclass":{"name":"StateContainer","package":"@/core/shared/state-container"}}],"exports":[{"kind":"js","name":"initialState","declaration":{"name":"initialState","module":"core/store/chat-state-container.js"}},{"kind":"js","name":"ChatStateContainer","declaration":{"name":"ChatStateContainer","module":"core/store/chat-state-container.js"}}]},{"kind":"javascript-module","path":"core/store/chat-store.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"core/store/chat-store.js","declarations":[{"kind":"class","description":"","name":"ChatStore","members":[{"kind":"field","name":"state","type":{"text":"ChatStateContainer"},"readonly":true,"default":"new ChatStateContainer(() => this.host.requestUpdate())"},{"kind":"field","name":"run","type":{"text":"RunCoordinator"},"readonly":true,"default":"new RunCoordinator(agentService, { getState: () => this.state.state, setState: (partial) => this.state.setState(partial), pushError: (error) => this.pushError(error), dispatchHostEvent: (event) => { if (this.host instanceof HTMLElement) this.host.dispatchEvent(event); }, getFrontendTools: () => this.tools.tools, saveConversation: (profileId, threadId) => { this.state.setState(saveConversation(profileId, threadId)); }, onCanvasEvent: (event) => this.canvasHandlers?.onCanvasEvent(event), onCanvasActivity: (event) => this.canvasHandlers?.onCanvasActivity(event), })"},{"kind":"field","name":"support","type":{"text":"SupportManager"},"readonly":true,"default":"new SupportManager(supportService, agentService, { getState: () => this.state.state, setState: (partial) => this.state.setState(partial), pushError: (error) => this.pushError(error), openFeedbackForm: (target) => this.state.openFeedbackForm(target), })"},{"kind":"field","name":"auth","type":{"text":"AuthCoordinator"},"readonly":true,"default":"new AuthCoordinator(apiClient, { setState: (partial) => this.state.setState(partial), resetConversation: () => this.resetConversation(), abortCurrentTask: () => this.abortCurrentTask(), stopSupport: () => this.support.stopSupport(), loadConfig: (profileId) => this.doLoadConfig(profileId), loadHistory: (profileId, conversationIdOverride) => this.loadHistory(profileId, conversationIdOverride), clearBootstrapStorage: () => clearBootstrapStorage(), dispatchEvent: (event) => { if (this.host instanceof HTMLElement) this.host.dispatchEvent(event); }, })"},{"kind":"field","name":"tools","type":{"text":"ToolRegistry"},"readonly":true,"default":"new ToolRegistry()"},{"kind":"field","name":"feedback","type":{"text":"FeedbackCoordinator"},"readonly":true,"default":"new FeedbackCoordinator(apiClient, { getState: () => this.state.state, setState: (partial) => this.state.setState(partial), openFeedbackForm: (target) => this.state.openFeedbackForm(target), closeFeedbackForm: () => this.state.closeFeedbackForm(), setError: (error) => this.state.setError(error), setFeedbackToolEnabled: (enabled) => this.tools.setFeedbackToolEnabled(enabled), })"},{"kind":"field","name":"history","type":{"text":"HistoryCoordinator"},"readonly":true,"default":"new HistoryCoordinator(this.conversationsClient, { getState: () => this.state.state, setState: (partial) => this.state.setState(partial), pushError: (error) => this.pushError(error), restoreConversation: (threadId) => this.restoreConversationById(threadId), clearConversation: (profileId) => this.clearConversation(profileId), })"},{"kind":"field","name":"canvasHandlers","type":{"text":"CanvasHandlers | null"},"privacy":"private","default":"null"},{"kind":"field","name":"health","type":{"text":"HealthManager"},"privacy":"private","readonly":true,"default":"new HealthManager(() => apiClient.baseUrl, { getState: () => this.state.state, setState: (partial) => this.state.setState(partial), pushError: (error) => this.pushError(error), onRecovery: () => this.handleHealthRecovery(), })"},{"kind":"field","name":"projection","type":{"text":"MessageProjection"},"privacy":"private","readonly":true,"default":"new MessageProjection({ state: this.state, agentService, })"},{"kind":"field","name":"conversationsClient","type":{"text":"ConversationsClient"},"privacy":"private","readonly":true,"default":"new ConversationsClient(apiClient)"},{"kind":"field","name":"pluginSelectionsHydratedCacheKey","type":{"text":"string | null"},"privacy":"private","default":"null"},{"kind":"field","name":"pluginSelectionLoadGeneration","type":{"text":"number"},"privacy":"private","default":"0"},{"kind":"field","name":"pluginSelectionsIdentityKey","type":{"text":"string | null"},"privacy":"private","default":"null"},{"kind":"method","name":"hostConnected","return":{"type":{"text":"void"}}},{"kind":"method","name":"hostDisconnected","return":{"type":{"text":"void"}}},{"kind":"method","name":"getState","return":{"type":{"text":"ChatStoreState"}}},{"kind":"method","name":"subscribe","return":{"type":{"text":"() => void"}},"parameters":[{"name":"listener","type":{"text":"ChatStoreListener"}}]},{"kind":"method","name":"initialize","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"profileId","type":{"text":"string"}}]},{"kind":"method","name":"dispose","return":{"type":{"text":"void"}}},{"kind":"method","name":"setAuth","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"strategyType","type":{"text":"StrategyType"}},{"name":"profileId","type":{"text":"string"}},{"name":"tokenProvider","optional":true,"type":{"text":"TokenFetcher"}},{"name":"baseUrl","optional":true,"type":{"text":"string"}},{"name":"conversationIdOverride","optional":true,"type":{"text":"string | null"}}]},{"kind":"method","name":"setCanvasHandlers","return":{"type":{"text":"void"}},"parameters":[{"name":"handlers","type":{"text":"CanvasHandlers"}}]},{"kind":"method","name":"doLoadConfig","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"profileId","default":"this.state.state.profileId"}]},{"kind":"method","name":"clearConfig","return":{"type":{"text":"void"}}},{"kind":"method","name":"loadHistory","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"profileId","type":{"text":"string"}},{"name":"conversationIdOverride","optional":true,"type":{"text":"string | null"}}],"description":"Restore the user's conversation on app load.\n\nDefault behavior: read the persisted id from localStorage and hydrate. When\n`conversationIdOverride` is a non-empty string the restore is **scoped** —\nthat conversation is hydrated and localStorage is left untouched (#2644).\n`null` is the explicit \"no override, use localStorage\" signal so callers\ncan distinguish it from \"argument not supplied\" without a magic string."},{"kind":"method","name":"openHistory","return":{"type":{"text":"Promise<void>"}}},{"kind":"method","name":"closeHistory","return":{"type":{"text":"void"}}},{"kind":"method","name":"openSettings","return":{"type":{"text":"void"}}},{"kind":"method","name":"closeSettings","return":{"type":{"text":"void"}}},{"kind":"method","name":"refreshHistory","return":{"type":{"text":"Promise<void>"}}},{"kind":"method","name":"loadMoreHistory","return":{"type":{"text":"Promise<void>"}}},{"kind":"method","name":"selectConversationFromHistory","return":{"type":{"text":"Promise<HostContextSnapshot | null>"}},"parameters":[{"name":"summary","type":{"text":"ConversationSummary"}}],"description":"History-picker entry point: persist the selection to localStorage, restore the\nconversation, and close the history view. Returns the captured host-context\nsnapshot (or null) so callers can react to it.\n\nThis is distinct from restoreConversationById — the latter is the\nshared primitive that does NOT touch localStorage, reserved for the\nattribute-driven restore path in #2644 where the host wants a scoped view."},{"kind":"method","name":"renameConversation","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"id","type":{"text":"string"}},{"name":"title","type":{"text":"string"}}]},{"kind":"method","name":"deleteConversation","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"id","type":{"text":"string"}}]},{"kind":"method","name":"restoreConversationById","return":{"type":{"text":"Promise<HostContextSnapshot | null>"}},"parameters":[{"name":"threadId","type":{"text":"string"}}],"description":"Restore a specific conversation into the active chat and emit\nConversationRestoredEvent so host apps can re-orient their own UI.\n\nShared primitive with the attribute-driven restore from #2644 — both the history\npicker and a future host-provided `conversation-id` prop converge here."},{"kind":"method","name":"resetConversation","return":{"type":{"text":"void"}}},{"kind":"method","name":"clearConversation","return":{"type":{"text":"void"}},"parameters":[{"name":"profileId","default":"this.state.state.profileId","type":{"text":"string"}}]},{"kind":"method","name":"applyConversationReset","privacy":"private","return":{"type":{"text":"void"}},"parameters":[{"name":"resetState","type":{"text":"ReturnType<typeof resetConversationState>"}}]},{"kind":"method","name":"sendMessage","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"message","type":{"text":"string"}},{"name":"profileId","type":{"text":"string"}},{"name":"hostContext","optional":true,"type":{"text":"HostContext | null"}},{"name":"options","optional":true,"type":{"text":"SendMessageOptions"}}]},{"kind":"method","name":"uploadAttachment","return":{"type":{"text":"Promise<MessageAttachment>"}},"parameters":[{"name":"file","type":{"text":"File"}},{"name":"profileId","type":{"text":"string"}}]},{"kind":"method","name":"hideSuggestedQuestions","return":{"type":{"text":"void"}}},{"kind":"method","name":"approveToolCall","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"messageId","type":{"text":"string"}},{"name":"options","optional":true,"type":{"text":"{ consentToShareConversation?: boolean }"}}]},{"kind":"method","name":"declineToolCall","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"messageId","type":{"text":"string"}}]},{"kind":"method","name":"abortCurrentTask","return":{"type":{"text":"void"}}},{"kind":"method","name":"setComposerDraft","return":{"type":{"text":"void"}},"parameters":[{"name":"draft","type":{"text":"string"}}]},{"kind":"method","name":"clearComposerDraft","return":{"type":{"text":"void"}}},{"kind":"method","name":"setFrontendTools","return":{"type":{"text":"void"}},"parameters":[{"name":"tools","type":{"text":"FrontendTool[]"}}]},{"kind":"method","name":"patchCurrentMessageHostContext","return":{"type":{"text":"void"}},"parameters":[{"name":"props","type":{"text":"Record<string, unknown>"}}],"description":"Retroactively update the host-context snapshot for the most recent user\nmessage. Call this when context is confirmed mid-run (e.g. via a frontend\ntool) so the \"Context changed\" divider appears immediately rather than\nwaiting for the next message send."},{"kind":"method","name":"startSupport","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"baseUrl","type":{"text":"string"}},{"name":"conversationId","type":{"text":"string"}}]},{"kind":"method","name":"stopSupport","return":{"type":{"text":"void"}}},{"kind":"method","name":"sendSupportMessage","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"message","type":{"text":"string"}}]},{"kind":"method","name":"sendSupportTyping","return":{"type":{"text":"Promise<void>"}}},{"kind":"method","name":"submitFeedback","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"rating","type":{"text":"number"}},{"name":"comment","type":{"text":"string | null"}},{"name":"consent","type":{"text":"boolean"}}]},{"kind":"method","name":"submitMessageThumb","return":{"type":{"text":"Promise<boolean>"}},"parameters":[{"name":"messageId","type":{"text":"string"}},{"name":"isPositive","type":{"text":"boolean | null"}}]},{"kind":"method","name":"openFeedbackForm","return":{"type":{"text":"void"}},"parameters":[{"name":"target","type":{"text":"ChatChannel"}}]},{"kind":"method","name":"closeFeedbackForm","return":{"type":{"text":"void"}}},{"kind":"method","name":"showFeedbackConfirmation","return":{"type":{"text":"void"}},"parameters":[{"name":"consent","type":{"text":"boolean"}}]},{"kind":"method","name":"hideFeedbackConfirmation","return":{"type":{"text":"void"}}},{"kind":"method","name":"getVisitorUserId","return":{"type":{"text":"string | null"}}},{"kind":"method","name":"getUserIdentifier","privacy":"private","return":{"type":{"text":"string | null"}},"description":"Returns the current user identifier (works for both Visma Connect and visitor strategies)."},{"kind":"method","name":"setError","return":{"type":{"text":"void"}},"parameters":[{"name":"error","type":{"text":"AppError | null"}}]},{"kind":"method","name":"maybeTriggerSharingPrompt","return":{"type":{"text":"void"}},"description":"Shows the sharing prompt if conditions are met:\n- Profile is not public\n- Conversation sharing is allowed\n- The prompt hasn't been answered yet (persisted in localStorage)"},{"kind":"method","name":"respondToSharingPrompt","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"accepted","type":{"text":"boolean"}}],"description":"Handles the user's response to the sharing prompt dialog.\nIf accepted and a conversation exists, marks it as readable immediately.\nIf no conversation exists yet (new chat), stores consent so it's applied\nwhen the conversation is created."},{"kind":"method","name":"tryMarkConversationReadable","privacy":"private","return":{"type":{"text":"Promise<boolean>"}},"description":"Marks the current conversation as readable via the API.\nCalled when sharing consent is given and a conversation ID is available."},{"kind":"method","name":"revokeConversationSharing","return":{"type":{"text":"Promise<void>"}},"description":"Revokes the user's sharing consent for the current conversation.\nMarks the conversation as unreadable via the API and updates local state."},{"kind":"method","name":"updateSharingConsent","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"enabled","type":{"text":"boolean"}}],"description":"Update the persistent sharing consent preference."},{"kind":"method","name":"revokeAllConversationSharing","return":{"type":{"text":"Promise<boolean>"}},"description":"Revoke readable status on all past conversations. Returns true on success."},{"kind":"method","name":"hideSharingPrompt","return":{"type":{"text":"void"}}},{"kind":"method","name":"loadPluginSelections","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"profileId","default":"this.state.state.profileId"},{"name":"options","optional":true,"type":{"text":"{ forceRefresh?: boolean }"}}]},{"kind":"method","name":"isCurrentPluginSelectionLoad","privacy":"private","return":{"type":{"text":"boolean"}},"parameters":[{"name":"loadGeneration","type":{"text":"number"}},{"name":"cacheKey","type":{"text":"string"}}]},{"kind":"method","name":"getPluginSelectionContextKey","privacy":"private","return":{"type":{"text":"string"}}},{"kind":"method","name":"pluginHasActiveContributions","privacy":"private","return":{"type":{"text":"boolean"}},"parameters":[{"name":"plugin","type":{"text":"AgentPluginSelection"}}]},{"kind":"method","name":"resolveToolToggleable","privacy":"private","return":{"type":{"text":"boolean"}},"parameters":[{"name":"plugin","type":{"text":"AgentPluginSelection"}},{"name":"tool","type":{"text":"AgentPluginSelection['tools'][number]"}},{"name":"selectedTool","optional":true,"type":{"text":"AgentToolSelection"}}]},{"kind":"method","name":"resolveLocalToolToggleable","privacy":"private","return":{"type":{"text":"boolean"}},"parameters":[{"name":"plugin","type":{"text":"AgentPluginSelection"}},{"name":"tool","type":{"text":"AgentPluginSelection['tools'][number]"}}]},{"kind":"method","name":"setPluginSelectionSearchQuery","return":{"type":{"text":"void"}},"parameters":[{"name":"query","type":{"text":"string"}}]},{"kind":"method","name":"togglePluginSelection","return":{"type":{"text":"Promise<boolean>"}},"parameters":[{"name":"pluginId","type":{"text":"string"}},{"name":"isActive","type":{"text":"boolean"}}]},{"kind":"method","name":"toggleToolSelection","return":{"type":{"text":"Promise<boolean>"}},"parameters":[{"name":"pluginId","type":{"text":"string"}},{"name":"toolName","type":{"text":"string"}},{"name":"isActive","type":{"text":"boolean"}}]},{"kind":"method","name":"pushError","privacy":"private","return":{"type":{"text":"void"}},"parameters":[{"name":"error","type":{"text":"AppError"}}]},{"kind":"method","name":"handleHealthRecovery","privacy":"private","return":{"type":{"text":"Promise<void>"}},"description":"Re-run loadConfig if app wasn't initialized properly after health recovery.\nUses state.pushError instead of this.pushError to avoid re-reporting to\nHealthManager, which would flip backendAvailable back to false and create\nan oscillation loop."},{"kind":"method","name":"mergePluginToolsWithSelectionState","privacy":"private","return":{"type":{"text":"ReadonlyArray<AgentPluginSelection>"}},"parameters":[{"name":"plugins","type":{"text":"ReadonlyArray<AgentPluginSelection>"}},{"name":"toolSelections","type":{"text":"ReadonlyArray<AgentToolSelection>"}}]},{"kind":"method","name":"collectActiveTools","privacy":"private","return":{"type":{"text":"ReadonlyArray<ScopedToolSelection>"}},"parameters":[{"name":"plugins","type":{"text":"ReadonlyArray<AgentPluginSelection>"}}]}]},{"kind":"variable","name":"chatStoreContext"}],"exports":[{"kind":"js","name":"ChatStore","declaration":{"name":"ChatStore","module":"core/store/chat-store.js"}},{"kind":"js","name":"chatStoreContext","declaration":{"name":"chatStoreContext","module":"core/store/chat-store.js"}}]},{"kind":"javascript-module","path":"core/store/config-manager.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"core/store/config-manager.js","declarations":[{"kind":"function","name":"loadConfig","return":{"type":{"text":"Promise<Result<ConfigState>>"}},"parameters":[{"name":"apiClient","type":{"text":"ApiClient"}},{"name":"profileId","type":{"text":"string"}}],"description":"Fetch bootstrap config. Returns a Result with the config state or an error."},{"kind":"function","name":"clearConfig","return":{"type":{"text":"{\n initialized: false;\n welcomeMessages: Readonly<Record<string, WelcomeMessage>>;\n suggestedQuestions: Readonly<Record<string, ReadonlyArray<string>>>;\n visibleSuggestedQuestions: ReadonlyArray<string>;\n}"}},"description":"Clear cached bootstrap config and return reset state."},{"kind":"function","name":"getSuggestedQuestionsForActiveLocale","return":{"type":{"text":"ReadonlyArray<string>"}},"parameters":[{"name":"suggestedQuestions","type":{"text":"Readonly<Record<string, ReadonlyArray<string>>>"}}],"description":"Get suggested questions for the active locale."},{"kind":"function","name":"pickSuggestedQuestions","return":{"type":{"text":"string[]"}},"parameters":[{"name":"suggestedQuestions","type":{"text":"ReadonlyArray<string>"}}],"description":"Pick up to 3 random suggested questions from the pool."}],"exports":[{"kind":"js","name":"loadConfig","declaration":{"name":"loadConfig","module":"core/store/config-manager.js"}},{"kind":"js","name":"clearConfig","declaration":{"name":"clearConfig","module":"core/store/config-manager.js"}},{"kind":"js","name":"getSuggestedQuestionsForActiveLocale","declaration":{"name":"getSuggestedQuestionsForActiveLocale","module":"core/store/config-manager.js"}},{"kind":"js","name":"pickSuggestedQuestions","declaration":{"name":"pickSuggestedQuestions","module":"core/store/config-manager.js"}}]},{"kind":"javascript-module","path":"core/store/consent-storage.js","declarations":[{"kind":"function","name":"getSharingConsent","return":{"type":{"text":"boolean | null"}},"parameters":[{"name":"profileId","type":{"text":"string"}},{"name":"userId","type":{"text":"string | null"}}]},{"kind":"function","name":"setSharingConsent","return":{"type":{"text":"void"}},"parameters":[{"name":"profileId","type":{"text":"string"}},{"name":"userId","type":{"text":"string | null"}},{"name":"value","type":{"text":"boolean"}}]}],"exports":[{"kind":"js","name":"getSharingConsent","declaration":{"name":"getSharingConsent","module":"core/store/consent-storage.js"}},{"kind":"js","name":"setSharingConsent","declaration":{"name":"setSharingConsent","module":"core/store/consent-storage.js"}}]},{"kind":"javascript-module","path":"core/store/feedback-coordinator.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"core/store/feedback-coordinator.js","declarations":[{"kind":"class","description":"","name":"FeedbackCoordinator","members":[{"kind":"field","name":"feedbackFormPending","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"field","name":"unsubscribeFeedbackWatcher","type":{"text":"() => void | undefined"},"privacy":"private"},{"kind":"method","name":"startWatching","return":{"type":{"text":"void"}},"parameters":[{"name":"subscribe","type":{"text":"(listener: (s: ChatStoreState) => void) => () => void"}}],"description":"Subscribe to state changes to auto-open feedback form when agent finishes streaming.\nMust be called with a subscribe function from the state container."},{"kind":"method","name":"dispose","return":{"type":{"text":"void"}}},{"kind":"method","name":"reset","return":{"type":{"text":"void"}}},{"kind":"method","name":"submit","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"rating","type":{"text":"number"}},{"name":"comment","type":{"text":"string | null"}},{"name":"consent","type":{"text":"boolean"}}]},{"kind":"method","name":"open","return":{"type":{"text":"void"}},"parameters":[{"name":"target","type":{"text":"ChatChannel"}}]},{"kind":"method","name":"close","return":{"type":{"text":"void"}}},{"kind":"method","name":"showConfirmation","return":{"type":{"text":"void"}},"parameters":[{"name":"consent","type":{"text":"boolean"}}]},{"kind":"method","name":"hideConfirmation","return":{"type":{"text":"void"}}},{"kind":"method","name":"handleToolCall","return":{"type":{"text":"{ success: boolean; message: string }"}},"description":"Handler for the feedback tool call from the agent.\nSets pending flag so the form opens after the agent finishes streaming."}]}],"exports":[{"kind":"js","name":"FeedbackCoordinator","declaration":{"name":"FeedbackCoordinator","module":"core/store/feedback-coordinator.js"}}]},{"kind":"javascript-module","path":"core/store/feedback-manager.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"core/store/feedback-manager.js","declarations":[{"kind":"function","name":"submitFeedback","return":{"type":{"text":"Promise<Result<void>>"}},"parameters":[{"name":"apiClient","type":{"text":"ApiClient"}},{"name":"conversationId","type":{"text":"string"}},{"name":"target","type":{"text":"ChatChannel"}},{"name":"profileId","type":{"text":"string"}},{"name":"rating","type":{"text":"number"}},{"name":"comment","type":{"text":"string | null"}},{"name":"consent","type":{"text":"boolean"}}]},{"kind":"function","name":"submitMessageThumb","return":{"type":{"text":"Promise<Result<void>>"}},"parameters":[{"name":"apiClient","type":{"text":"ApiClient"}},{"name":"conversationId","type":{"text":"string"}},{"name":"profileId","type":{"text":"string"}},{"name":"messageId","type":{"text":"string"}},{"name":"isPositive","type":{"text":"boolean | null"}}]}],"exports":[{"kind":"js","name":"submitFeedback","declaration":{"name":"submitFeedback","module":"core/store/feedback-manager.js"}},{"kind":"js","name":"submitMessageThumb","declaration":{"name":"submitMessageThumb","module":"core/store/feedback-manager.js"}}]},{"kind":"javascript-module","path":"core/store/health-manager.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"core/store/health-manager.js","declarations":[{"kind":"class","description":"","name":"HealthManager","members":[{"kind":"field","name":"healthCheck","type":{"text":"PollingTask"},"privacy":"private","default":"new PollingTask(() => this.checkHealth(), HEALTH_CHECK_INTERVAL_MS)"},{"kind":"field","name":"heartbeat","type":{"text":"PollingTask"},"privacy":"private","default":"new PollingTask(() => this.heartbeatTick(), HEARTBEAT_INTERVAL_MS)"},{"kind":"field","name":"stopped","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"method","name":"start","return":{"type":{"text":"void"}},"description":"Start ambient heartbeat and attach browser network listeners."},{"kind":"method","name":"stop","return":{"type":{"text":"void"}},"description":"Stop all polling and remove browser network listeners."},{"kind":"method","name":"reportError","return":{"type":{"text":"void"}},"parameters":[{"name":"error","type":{"text":"AppError"}}],"description":"Called when an error occurs. Decides whether to start fast health checking."},{"kind":"field","name":"onOffline","privacy":"private"},{"kind":"field","name":"onOnline","privacy":"private"},{"kind":"method","name":"heartbeatTick","privacy":"private","return":{"type":{"text":"Promise<void>"}}},{"kind":"method","name":"pingHealthEndpoint","privacy":"private","return":{"type":{"text":"Promise<boolean>"}}},{"kind":"method","name":"checkHealth","privacy":"private","return":{"type":{"text":"Promise<void>"}}},{"kind":"method","name":"markBackendAvailable","privacy":"private","return":{"type":{"text":"void"}}}]}],"exports":[{"kind":"js","name":"HealthManager","declaration":{"name":"HealthManager","module":"core/store/health-manager.js"}}]},{"kind":"javascript-module","path":"core/store/history-coordinator.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"core/store/history-coordinator.js","declarations":[{"kind":"variable","name":"HISTORY_PAGE_SIZE","type":{"text":"number"},"default":"50","description":"Conversations fetched per page. The backend still supports larger limits\n(currently capped at 100), but 50 gives a snappy initial render and keeps\nscroll-triggered fetches small."},{"kind":"class","description":"","name":"HistoryCoordinator","members":[{"kind":"field","name":"#paging","privacy":"private","type":{"text":"boolean"},"default":"false","description":"Synchronous in-flight guard for `loadMore`. `ChatStateContainer` batches\n`setState` via `queueMicrotask`, so two `loadMore` calls in the same microtask\nboth observe `historyPaging: false` through `getState()` and would each issue\na fetch for the same offset. This is reachable in practice from the bottom-of-list\n`IntersectionObserver`, which can fire two entries in the same tick.\n\nThe state-mirror `historyPaging` flag still exists for UI subscribers; this\nprivate field is the actual lock and is set/cleared synchronously around the\nawait."},{"kind":"method","name":"open","return":{"type":{"text":"Promise<void>"}},"description":"Open the history view and fetch (or refetch) the first page."},{"kind":"method","name":"close","return":{"type":{"text":"void"}}},{"kind":"method","name":"refresh","return":{"type":{"text":"Promise<void>"}},"description":"Re-fetch the first page for the currently selected profile. Resets the\naccumulated list and the hasMore flag so the scroll trigger can page again."},{"kind":"method","name":"loadMore","return":{"type":{"text":"Promise<void>"}},"description":"Fetch the next page and append it to the list. No-op while a fetch is\nalready in flight (reentry-safe for scroll handlers), when the list has\nnot been loaded yet, or when the last page indicated end-of-data."},{"kind":"method","name":"rename","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"id","type":{"text":"string"}},{"name":"title","type":{"text":"string"}}],"description":"Rename with optimistic update. Reverts on failure.\nEmpty titles are rejected locally so we never fire a request the backend would 400."},{"kind":"method","name":"remove","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"id","type":{"text":"string"}}],"description":"Soft-delete with optimistic removal. Reverts on failure.\n\nFor the active-conversation case, the chat-surface clear is intentionally NOT\noptimistic: the row vanishes from the history list immediately, but the chat\nitself is only cleared after the backend confirms the delete. There's a brief\ninconsistency window during the round-trip where the row is gone from history\nbut the conversation still renders behind it. The trade-off:\n- Going optimistic on the chat would mean snapshotting and restoring every\n field `clearConversation` touches (AgentService messages, canvas state,\n feedback state, ~13 ChatStoreState fields). The rollback path itself becomes\n a meaningful failure surface for a rare case.\n- On API failure the user keeps their working chat. A fully optimistic version\n would briefly wipe the chat and then un-wipe it on failure, which is a worse\n visible glitch than the row reappearing.\nAcceptable for the MVP; revisit if delete latency grows or the failure path\nbecomes common enough that users notice the mismatch."},{"kind":"method","name":"select","return":{"type":{"text":"Promise<HostContextSnapshot | null>"}},"parameters":[{"name":"summary","type":{"text":"ConversationSummary"}}],"description":"Open a conversation by id: persist the thread id, close the history view\nimmediately so the chat area becomes visible, then restore the messages.\nReturns the host-context snapshot so the caller can emit\nConversationRestoredEvent.\n\nClosing before the restore await keeps the transition snappy — the user sees\nthe chat surface take over right away instead of the history list sitting\nthere during the network round-trip."}]}],"exports":[{"kind":"js","name":"HISTORY_PAGE_SIZE","declaration":{"name":"HISTORY_PAGE_SIZE","module":"core/store/history-coordinator.js"}},{"kind":"js","name":"HistoryCoordinator","declaration":{"name":"HistoryCoordinator","module":"core/store/history-coordinator.js"}}]},{"kind":"javascript-module","path":"core/store/index.js","declarations":[],"exports":[{"kind":"js","name":"ChatStore","declaration":{"name":"ChatStore","module":"./chat-store"}},{"kind":"js","name":"chatStoreContext","declaration":{"name":"chatStoreContext","module":"./chat-store"}},{"kind":"js","name":"CanvasHandlers","declaration":{"name":"CanvasHandlers","module":"./chat-store"}},{"kind":"js","name":"ChatStoreState","declaration":{"name":"ChatStoreState","module":"./chat-store"}},{"kind":"js","name":"RunState","declaration":{"name":"RunState","module":"./chat-store"}},{"kind":"js","name":"StrategyType","declaration":{"name":"StrategyType","module":"./chat-store"}},{"kind":"js","name":"ChatStateContainer","declaration":{"name":"ChatStateContainer","module":"./chat-state-container"}},{"kind":"js","name":"ChatStoreListener","declaration":{"name":"ChatStoreListener","module":"./chat-state-container"}},{"kind":"js","name":"StoreController","declaration":{"name":"StoreController","module":"./store-controller"}},{"kind":"js","name":"AuthCoordinator","declaration":{"name":"AuthCoordinator","module":"./auth-coordinator"}},{"kind":"js","name":"AuthCoordinatorDeps","declaration":{"name":"AuthCoordinatorDeps","module":"./auth-coordinator"}},{"kind":"js","name":"ToolRegistry","declaration":{"name":"ToolRegistry","module":"./tool-registry"}},{"kind":"js","name":"RunCoordinator","declaration":{"name":"RunCoordinator","module":"./run-coordinator"}},{"kind":"js","name":"RunCoordinatorDeps","declaration":{"name":"RunCoordinatorDeps","module":"./run-coordinator"}},{"kind":"js","name":"createAgentSubscriber","declaration":{"name":"createAgentSubscriber","module":"./agent-subscriber"}},{"kind":"js","name":"AgentSubscriberDeps","declaration":{"name":"AgentSubscriberDeps","module":"./agent-subscriber"}},{"kind":"js","name":"PendingToolCall","declaration":{"name":"PendingToolCall","module":"./agent-subscriber"}},{"kind":"js","name":"SupportManager","declaration":{"name":"SupportManager","module":"./support-manager"}},{"kind":"js","name":"SupportManagerDeps","declaration":{"name":"SupportManagerDeps","module":"./support-manager"}},{"kind":"js","name":"HealthManager","declaration":{"name":"HealthManager","module":"./health-manager"}},{"kind":"js","name":"HealthManagerDeps","declaration":{"name":"HealthManagerDeps","module":"./health-manager"}},{"kind":"js","name":"MessageProjection","declaration":{"name":"MessageProjection","module":"./message-projection"}},{"kind":"js","name":"MessageProjectionDeps","declaration":{"name":"MessageProjectionDeps","module":"./message-projection"}},{"kind":"js","name":"HistoryCoordinator","declaration":{"name":"HistoryCoordinator","module":"./history-coordinator"}},{"kind":"js","name":"HistoryCoordinatorDeps","declaration":{"name":"HistoryCoordinatorDeps","module":"./history-coordinator"}},{"kind":"js","name":"clearBootstrapStorage","declaration":{"name":"clearBootstrapStorage","module":"./bootstrap-loader"}},{"kind":"js","name":"fetchBootstrapConfig","declaration":{"name":"fetchBootstrapConfig","module":"./bootstrap-loader"}},{"kind":"js","name":"clearConfig","declaration":{"name":"clearConfig","module":"./config-manager"}},{"kind":"js","name":"getSuggestedQuestionsForActiveLocale","declaration":{"name":"getSuggestedQuestionsForActiveLocale","module":"./config-manager"}},{"kind":"js","name":"loadConfig","declaration":{"name":"loadConfig","module":"./config-manager"}},{"kind":"js","name":"pickSuggestedQuestions","declaration":{"name":"pickSuggestedQuestions","module":"./config-manager"}},{"kind":"js","name":"submitFeedback","declaration":{"name":"submitFeedback","module":"./feedback-manager"}},{"kind":"js","name":"submitMessageThumb","declaration":{"name":"submitMessageThumb","module":"./feedback-manager"}},{"kind":"js","name":"fetchPluginSelections","declaration":{"name":"fetchPluginSelections","module":"./plugin-selection-manager"}},{"kind":"js","name":"savePluginSelections","declaration":{"name":"savePluginSelections","module":"./plugin-selection-manager"}},{"kind":"js","name":"saveSelections","declaration":{"name":"saveSelections","module":"./selection-manager"}},{"kind":"js","name":"fetchToolSelections","declaration":{"name":"fetchToolSelections","module":"./tool-selection-manager"}},{"kind":"js","name":"saveToolSelections","declaration":{"name":"saveToolSelections","module":"./tool-selection-manager"}},{"kind":"js","name":"clearConversation","declaration":{"name":"clearConversation","module":"./session-manager"}},{"kind":"js","name":"restoreSession","declaration":{"name":"restoreSession","module":"./session-manager"}},{"kind":"js","name":"saveConversation","declaration":{"name":"saveConversation","module":"./session-manager"}},{"kind":"js","name":"createSelectConversationState","declaration":{"name":"createSelectConversationState","module":"./selectors"}},{"kind":"js","name":"filterRenderableUiMessages","declaration":{"name":"filterRenderableUiMessages","module":"./selectors"}},{"kind":"js","name":"groupMessagesByRun","declaration":{"name":"groupMessagesByRun","module":"./selectors"}},{"kind":"js","name":"isRenderableUiMessage","declaration":{"name":"isRenderableUiMessage","module":"./selectors"}},{"kind":"js","name":"selectAppHeaderState","declaration":{"name":"selectAppHeaderState","module":"./selectors"}},{"kind":"js","name":"selectComposerState","declaration":{"name":"selectComposerState","module":"./selectors"}},{"kind":"js","name":"selectConnectionStatus","declaration":{"name":"selectConnectionStatus","module":"./selectors"}},{"kind":"js","name":"selectFeedbackConfirmationState","declaration":{"name":"selectFeedbackConfirmationState","module":"./selectors"}},{"kind":"js","name":"selectFeedbackState","declaration":{"name":"selectFeedbackState","module":"./selectors"}},{"kind":"js","name":"selectHistoryViewState","declaration":{"name":"selectHistoryViewState","module":"./selectors"}},{"kind":"js","name":"selectSettingsViewState","declaration":{"name":"selectSettingsViewState","module":"./selectors"}},{"kind":"js","name":"selectIsInActiveRun","declaration":{"name":"selectIsInActiveRun","module":"./selectors"}},{"kind":"js","name":"selectIsStreaming","declaration":{"name":"selectIsStreaming","module":"./selectors"}},{"kind":"js","name":"selectSessionEndedState","declaration":{"name":"selectSessionEndedState","module":"./selectors"}},{"kind":"js","name":"selectSharingPromptState","declaration":{"name":"selectSharingPromptState","module":"./selectors"}},{"kind":"js","name":"selectShouldShowThinking","declaration":{"name":"selectShouldShowThinking","module":"./selectors"}},{"kind":"js","name":"selectToolApprovalState","declaration":{"name":"selectToolApprovalState","module":"./selectors"}},{"kind":"js","name":"selectToolStatusState","declaration":{"name":"selectToolStatusState","module":"./selectors"}},{"kind":"js","name":"RunGroup","declaration":{"name":"RunGroup","module":"./selectors"}}]},{"kind":"javascript-module","path":"core/store/message-projection.js","declarations":[{"kind":"class","description":"","name":"MessageProjection","members":[{"kind":"field","name":"unsubscribeMessages","type":{"text":"() => void | undefined"},"privacy":"private"},{"kind":"field","name":"unsubscribeRunState","type":{"text":"() => void | undefined"},"privacy":"private"},{"kind":"field","name":"memoizedMapper","privacy":"private"},{"kind":"field","name":"prevRunState","type":{"text":"RunState"},"privacy":"private","default":"'idle'"},{"kind":"method","name":"connect","return":{"type":{"text":"void"}},"description":"Subscribe to agent messages and runState changes.\nCall from hostConnected()."},{"kind":"method","name":"disconnect","return":{"type":{"text":"void"}},"description":"Unsubscribe from all sources.\nCall from hostDisconnected() / dispose()."},{"kind":"method","name":"reset","return":{"type":{"text":"void"}},"description":"Reset the memoized mapper (e.g. on clearConversation)."},{"kind":"field","name":"messages","type":{"text":"UiMessage[]"},"description":"Get the current mapped messages (for external reads without triggering a remap).","readonly":true},{"kind":"method","name":"mapMessages","privacy":"private","return":{"type":{"text":"UiMessage[]"}},"parameters":[{"name":"messages","type":{"text":"import('@/core/messages').InternalMessage[]"}}]},{"kind":"method","name":"remapMessages","privacy":"private","return":{"type":{"text":"void"}},"description":"Re-map current messages when runState changes (updates isStreaming flag)."}]}],"exports":[{"kind":"js","name":"MessageProjection","declaration":{"name":"MessageProjection","module":"core/store/message-projection.js"}}]},{"kind":"javascript-module","path":"core/store/plugin-selection-manager.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"core/store/plugin-selection-manager.js","declarations":[{"kind":"function","name":"fetchPluginSelections","return":{"type":{"text":"Promise<Result<ReadonlyArray<AgentPluginSelection>>>"}},"parameters":[{"name":"apiClient","type":{"text":"ApiClient"}},{"name":"profileId","type":{"text":"string"}}]},{"kind":"function","name":"savePluginSelections","return":{"type":{"text":"Promise<Result<void>>"}},"parameters":[{"name":"apiClient","type":{"text":"ApiClient"}},{"name":"profileId","type":{"text":"string"}},{"name":"activePluginIds","type":{"text":"ReadonlyArray<string>"}}]}],"exports":[{"kind":"js","name":"fetchPluginSelections","declaration":{"name":"fetchPluginSelections","module":"core/store/plugin-selection-manager.js"}},{"kind":"js","name":"savePluginSelections","declaration":{"name":"savePluginSelections","module":"core/store/plugin-selection-manager.js"}}]},{"kind":"javascript-module","path":"core/store/run-coordinator.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"core/store/run-coordinator.js","declarations":[{"kind":"variable","name":"MESSAGE_SOURCE_PROP_NAME","type":{"text":"string"},"default":"'_gaiaMessageSource'"},{"kind":"class","description":"","name":"RunCoordinator","members":[{"kind":"field","name":"MAX_EXPLICIT_ABORTED_RUN_IDS","type":{"text":"number"},"privacy":"private","static":true,"readonly":true,"default":"100"},{"kind":"field","name":"MAX_EXPECTED_ABORTED_RUN_IDS","type":{"text":"number"},"privacy":"private","static":true,"readonly":true,"default":"100"},{"kind":"field","name":"MAX_EXPECTED_PREINIT_SUPERSEDE_ABORTS","type":{"text":"number"},"privacy":"private","static":true,"readonly":true,"default":"100"},{"kind":"field","name":"pendingToolCalls","privacy":"private","default":"new Map<string, PendingToolCall>()","description":"Tracks in-flight tool calls during a run. Shared with the agent subscriber\nvia the deps interface — the subscriber populates/clears entries, while\nRunCoordinator reads them to auto-respond with frontend tool results."},{"kind":"field","name":"explicitlyAbortedRunIds","privacy":"private","default":"new Set<string>()"},{"kind":"field","name":"expectedContinuationAbortRunIds","privacy":"private","default":"new Set<string>()"},{"kind":"field","name":"expectedPreInitSupersedeAborts","type":{"text":"number"},"privacy":"private","default":"0"},{"kind":"field","name":"lastHostProps","type":{"text":"Record<string, unknown> | undefined"},"privacy":"private"},{"kind":"field","name":"respondingToFrontendTools","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"method","name":"sendMessage","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"profileId","type":{"text":"string"}},{"name":"message","type":{"text":"string"}},{"name":"hostContext","optional":true,"type":{"text":"HostContext | null"}},{"name":"options","optional":true,"type":{"text":"SendMessageOptions"}}],"description":"Create the user message, unpack host context, and execute an agent run."},{"kind":"method","name":"respondToToolCall","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"messageId","type":{"text":"string"}},{"name":"approved","type":{"text":"boolean"}},{"name":"options","optional":true,"type":{"text":"{ consentToShareConversation?: boolean }"}}],"description":"Respond to a tool call (approve or decline) and re-run the agent."},{"kind":"method","name":"mergeHostPropsForContinuation","return":{"type":{"text":"void"}},"parameters":[{"name":"props","type":{"text":"Record<string, unknown>"}}]},{"kind":"method","name":"executeRun","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"agent","type":{"text":"HttpAgent"}},{"name":"extraProps","optional":true,"type":{"text":"Record<string, unknown>"}},{"name":"context","optional":true,"type":{"text":"HostContext['context']"}},{"name":"profileId","default":"this.deps.getState().profileId","type":{"text":"string"}}],"description":"Execute an agent run with standard tools and error handling.\n\n`profileId` defaults to the current store value at call time, but callers\nthat already know which profile owns this run (e.g. `sendMessage`) should\npass it explicitly so a concurrent profile switch can't redirect the run's\n`saveConversation` callbacks onto a different profile's storage key."},{"kind":"method","name":"abort","return":{"type":{"text":"void"}},"description":"Abort the current in-flight run."},{"kind":"method","name":"respondToFrontendToolCalls","return":{"type":{"text":"Promise<void>"}},"description":"Invoke handlers for pending frontend tool calls and re-run the agent.\nTools with a `handler` get their return value as the tool result.\nTools without a handler get a default `{ success: true, rendered: true }`."},{"kind":"method","name":"buildSubscriber","privacy":"private","parameters":[{"name":"profileId","type":{"text":"string"}},{"name":"onRunIdCaptured","optional":true,"type":{"text":"(id: string) => void"}}]},{"kind":"method","name":"isExpectedAbort","privacy":"private","return":{"type":{"text":"boolean"}},"parameters":[{"name":"error","type":{"text":"unknown"}},{"name":"runId","type":{"text":"string | null"}}]},{"kind":"method","name":"isExpectedPreInitSupersedeAbort","privacy":"private","return":{"type":{"text":"boolean"}},"parameters":[{"name":"error","type":{"text":"unknown"}},{"name":"runId","type":{"text":"string | null"}}]},{"kind":"method","name":"isAbortExpectedForRun","privacy":"private","return":{"type":{"text":"boolean"}},"parameters":[{"name":"runId","type":{"text":"string | null"}}]},{"kind":"method","name":"isAbortError","privacy":"private","return":{"type":{"text":"boolean"}},"parameters":[{"name":"error","type":{"text":"unknown"}}]},{"kind":"method","name":"clearExpectedAbort","privacy":"private","return":{"type":{"text":"void"}},"parameters":[{"name":"runId","type":{"text":"string | null"}}]},{"kind":"method","name":"trackExplicitAbort","privacy":"private","return":{"type":{"text":"void"}},"parameters":[{"name":"runId","type":{"text":"string"}}]},{"kind":"method","name":"trackContinuationAbort","privacy":"private","return":{"type":{"text":"void"}},"parameters":[{"name":"runId","type":{"text":"string"}}]},{"kind":"method","name":"trackExpectedPreInitSupersedeAbort","privacy":"private","return":{"type":{"text":"void"}}},{"kind":"method","name":"consumeExpectedPreInitSupersedeAbort","privacy":"private","return":{"type":{"text":"void"}}}]}],"exports":[{"kind":"js","name":"MESSAGE_SOURCE_PROP_NAME","declaration":{"name":"MESSAGE_SOURCE_PROP_NAME","module":"core/store/run-coordinator.js"}},{"kind":"js","name":"RunCoordinator","declaration":{"name":"RunCoordinator","module":"core/store/run-coordinator.js"}}]},{"kind":"javascript-module","path":"core/store/selection-manager.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"core/store/selection-manager.js","declarations":[{"kind":"function","name":"saveSelections","return":{"type":{"text":"Promise<Result<void>>"}},"parameters":[{"name":"apiClient","type":{"text":"ApiClient"}},{"name":"profileId","type":{"text":"string"}},{"name":"activePluginIds","type":{"text":"ReadonlyArray<string>"}},{"name":"activeTools","type":{"text":"ReadonlyArray<ScopedToolSelection>"}}]}],"exports":[{"kind":"js","name":"saveSelections","declaration":{"name":"saveSelections","module":"core/store/selection-manager.js"}}]},{"kind":"javascript-module","path":"core/store/selectors.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"core/store/selectors/component-selectors.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"core/store/selectors/component-selectors.js","declarations":[{"kind":"function","name":"createSelectConversationState","description":"Build a per-consumer conversation-state selector.\n\nEach <gaia-conversation> instance must call this once and reuse the\nreturned function — the closure owns the memoization cache for filtering\nand grouping. Sharing one selector across multiple <gaia-chat> instances\nwould defeat the cache (each instance would invalidate the other's cache\non every render). See #2759 for the regression this prevents.\n\nAccepts locale as a parameter to avoid importing getLocale() inside the\nselector."},{"kind":"function","name":"selectComposerState","parameters":[{"name":"s","type":{"text":"ChatStoreState"}}],"description":"Selector for the message composer component."},{"kind":"function","name":"selectAppHeaderState","parameters":[{"name":"s","type":{"text":"ChatStoreState"}}],"description":"Selector for the app header component."},{"kind":"function","name":"selectHistoryViewState","parameters":[{"name":"s","type":{"text":"ChatStoreState"}}],"description":"Selector for the history view component."},{"kind":"function","name":"selectSettingsViewState","parameters":[{"name":"s","type":{"text":"ChatStoreState"}}]},{"kind":"function","name":"selectFeedbackState","parameters":[{"name":"s","type":{"text":"ChatStoreState"}}],"description":"Selector for the feedback form component."},{"kind":"function","name":"selectFeedbackConfirmationState","parameters":[{"name":"s","type":{"text":"ChatStoreState"}}],"description":"Selector for the feedback confirmation component."},{"kind":"function","name":"selectConnectionStatus","parameters":[{"name":"s","type":{"text":"ChatStoreState"}}],"description":"Selector for the connection status overlay component."},{"kind":"function","name":"selectToolApprovalState","parameters":[{"name":"s","type":{"text":"ChatStoreState"}}],"description":"Selector for the tool approval block component."},{"kind":"function","name":"selectToolStatusState","parameters":[{"name":"s","type":{"text":"ChatStoreState"}}],"description":"Selector for the tool status block component."},{"kind":"function","name":"selectSessionEndedState","parameters":[{"name":"s","type":{"text":"ChatStoreState"}}],"description":"Selector for the session-ended actions component."},{"kind":"function","name":"selectSharingPromptState","parameters":[{"name":"s","type":{"text":"ChatStoreState"}}],"description":"Selector for the sharing prompt dialog."}],"exports":[{"kind":"js","name":"createSelectConversationState","declaration":{"name":"createSelectConversationState","module":"core/store/selectors/component-selectors.js"}},{"kind":"js","name":"selectComposerState","declaration":{"name":"selectComposerState","module":"core/store/selectors/component-selectors.js"}},{"kind":"js","name":"selectAppHeaderState","declaration":{"name":"selectAppHeaderState","module":"core/store/selectors/component-selectors.js"}},{"kind":"js","name":"selectHistoryViewState","declaration":{"name":"selectHistoryViewState","module":"core/store/selectors/component-selectors.js"}},{"kind":"js","name":"selectSettingsViewState","declaration":{"name":"selectSettingsViewState","module":"core/store/selectors/component-selectors.js"}},{"kind":"js","name":"selectFeedbackState","declaration":{"name":"selectFeedbackState","module":"core/store/selectors/component-selectors.js"}},{"kind":"js","name":"selectFeedbackConfirmationState","declaration":{"name":"selectFeedbackConfirmationState","module":"core/store/selectors/component-selectors.js"}},{"kind":"js","name":"selectConnectionStatus","declaration":{"name":"selectConnectionStatus","module":"core/store/selectors/component-selectors.js"}},{"kind":"js","name":"selectToolApprovalState","declaration":{"name":"selectToolApprovalState","module":"core/store/selectors/component-selectors.js"}},{"kind":"js","name":"selectToolStatusState","declaration":{"name":"selectToolStatusState","module":"core/store/selectors/component-selectors.js"}},{"kind":"js","name":"selectSessionEndedState","declaration":{"name":"selectSessionEndedState","module":"core/store/selectors/component-selectors.js"}},{"kind":"js","name":"selectSharingPromptState","declaration":{"name":"selectSharingPromptState","module":"core/store/selectors/component-selectors.js"}}]},{"kind":"javascript-module","path":"core/store/selectors/index.js","declarations":[],"exports":[{"kind":"js","name":"filterRenderableUiMessages","declaration":{"name":"filterRenderableUiMessages","module":"./message-selectors"}},{"kind":"js","name":"groupMessagesByRun","declaration":{"name":"groupMessagesByRun","module":"./message-selectors"}},{"kind":"js","name":"isRenderableUiMessage","declaration":{"name":"isRenderableUiMessage","module":"./message-selectors"}},{"kind":"js","name":"selectIsInActiveRun","declaration":{"name":"selectIsInActiveRun","module":"./message-selectors"}},{"kind":"js","name":"selectIsStreaming","declaration":{"name":"selectIsStreaming","module":"./message-selectors"}},{"kind":"js","name":"selectShouldShowThinking","declaration":{"name":"selectShouldShowThinking","module":"./message-selectors"}},{"kind":"js","name":"RunGroup","declaration":{"name":"RunGroup","module":"./message-selectors"}},{"kind":"js","name":"createSelectConversationState","declaration":{"name":"createSelectConversationState","module":"./component-selectors"}},{"kind":"js","name":"selectAppHeaderState","declaration":{"name":"selectAppHeaderState","module":"./component-selectors"}},{"kind":"js","name":"selectComposerState","declaration":{"name":"selectComposerState","module":"./component-selectors"}},{"kind":"js","name":"selectConnectionStatus","declaration":{"name":"selectConnectionStatus","module":"./component-selectors"}},{"kind":"js","name":"selectFeedbackConfirmationState","declaration":{"name":"selectFeedbackConfirmationState","module":"./component-selectors"}},{"kind":"js","name":"selectFeedbackState","declaration":{"name":"selectFeedbackState","module":"./component-selectors"}},{"kind":"js","name":"selectHistoryViewState","declaration":{"name":"selectHistoryViewState","module":"./component-selectors"}},{"kind":"js","name":"selectSettingsViewState","declaration":{"name":"selectSettingsViewState","module":"./component-selectors"}},{"kind":"js","name":"selectSessionEndedState","declaration":{"name":"selectSessionEndedState","module":"./component-selectors"}},{"kind":"js","name":"selectSharingPromptState","declaration":{"name":"selectSharingPromptState","module":"./component-selectors"}},{"kind":"js","name":"selectToolApprovalState","declaration":{"name":"selectToolApprovalState","module":"./component-selectors"}},{"kind":"js","name":"selectToolStatusState","declaration":{"name":"selectToolStatusState","module":"./component-selectors"}}]},{"kind":"javascript-module","path":"core/store/selectors/message-selectors.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"core/store/selectors/message-selectors.js","declarations":[{"kind":"function","name":"selectIsStreaming","return":{"type":{"text":"boolean"}},"parameters":[{"name":"runState","type":{"text":"RunState"}},{"name":"messages","type":{"text":"UiMessage[]"}},{"name":"messageId","type":{"text":"string"}}]},{"kind":"function","name":"selectIsInActiveRun","return":{"type":{"text":"boolean"}},"parameters":[{"name":"runState","type":{"text":"RunState"}},{"name":"currentRunId","type":{"text":"string | null"}},{"name":"messageRunIds","type":{"text":"Record<string, string>"}},{"name":"messageId","type":{"text":"string"}}]},{"kind":"function","name":"selectShouldShowThinking","return":{"type":{"text":"boolean"}},"parameters":[{"name":"isThinking","type":{"text":"boolean"}},{"name":"renderableMessages","type":{"text":"UiMessage[]"}}]},{"kind":"function","name":"isRenderableUiMessage","return":{"type":{"text":"boolean"}},"parameters":[{"name":"message","type":{"text":"UiMessage"}}]},{"kind":"function","name":"filterRenderableUiMessages","return":{"type":{"text":"UiMessage[]"}},"parameters":[{"name":"messages","type":{"text":"UiMessage[]"}}]},{"kind":"function","name":"groupMessagesByRun","return":{"type":{"text":"RunGroup[]"}},"parameters":[{"name":"messages","type":{"text":"UiMessage[]"}},{"name":"currentRunId","type":{"text":"string | null"}}]}],"exports":[{"kind":"js","name":"selectIsStreaming","declaration":{"name":"selectIsStreaming","module":"core/store/selectors/message-selectors.js"}},{"kind":"js","name":"selectIsInActiveRun","declaration":{"name":"selectIsInActiveRun","module":"core/store/selectors/message-selectors.js"}},{"kind":"js","name":"selectShouldShowThinking","declaration":{"name":"selectShouldShowThinking","module":"core/store/selectors/message-selectors.js"}},{"kind":"js","name":"isRenderableUiMessage","declaration":{"name":"isRenderableUiMessage","module":"core/store/selectors/message-selectors.js"}},{"kind":"js","name":"filterRenderableUiMessages","declaration":{"name":"filterRenderableUiMessages","module":"core/store/selectors/message-selectors.js"}},{"kind":"js","name":"groupMessagesByRun","declaration":{"name":"groupMessagesByRun","module":"core/store/selectors/message-selectors.js"}}]},{"kind":"javascript-module","path":"core/store/session-manager.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"core/store/session-manager.js","declarations":[{"kind":"function","name":"loadConversationId","return":{"type":{"text":"string | null"}},"parameters":[{"name":"profileId","type":{"text":"string"}},{"name":"storage","default":"defaultStorageService","type":{"text":"StorageService"}}]},{"kind":"function","name":"saveConversationId","return":{"type":{"text":"void"}},"parameters":[{"name":"profileId","type":{"text":"string"}},{"name":"id","type":{"text":"string"}},{"name":"storage","default":"defaultStorageService","type":{"text":"StorageService"}}]},{"kind":"function","name":"clearConversationId","return":{"type":{"text":"void"}},"parameters":[{"name":"profileId","type":{"text":"string"}},{"name":"storage","default":"defaultStorageService","type":{"text":"StorageService"}}]},{"kind":"function","name":"restoreSession","return":{"type":{"text":"Promise<Result<SessionState | null>>"}},"parameters":[{"name":"agentService","type":{"text":"AgentService"}},{"name":"profileId","type":{"text":"string"}}],"description":"Load conversation from storage and restore via AgentService.\nReturns a Result with the session state or null if nothing to restore."},{"kind":"function","name":"saveConversation","return":{"type":{"text":"{ conversationId: string }"}},"parameters":[{"name":"profileId","type":{"text":"string"}},{"name":"threadId","type":{"text":"string"}}],"description":"Persist a conversation ID and return the state update."},{"kind":"function","name":"distillRestoredMessageContexts","return":{"type":{"text":"Record<string, HostContextSnapshot>"}},"parameters":[{"name":"raw","type":{"text":"Record<string, HostContextSnapshot> | undefined"}}],"description":"Run each restored per-message snapshot through `distillHostContext`. Skips entries\nthat filter down to nothing (e.g. an old row that only had internal-only keys) so\nthe map keeps \"key absent = no context\" as the canonical signal. Used by both\nrehydration paths (page-refresh `restoreSession` and history-picker\n`restoreConversationById`) so they produce the same in-memory shape."},{"kind":"function","name":"resetConversationState","parameters":[{"name":"agentService","type":{"text":"AgentService"}}],"description":"Reset conversation state and agent messages without touching localStorage.\n\nUse this when the active chat needs to be torn down but the stored thread id\nfor the *outgoing* profile must survive — e.g. on profile/identity transitions\ninside `AuthCoordinator`, where wiping storage for the about-to-load profile\nwould race the immediately following `loadHistory` and lose the thread."},{"kind":"function","name":"clearConversation","parameters":[{"name":"profileId","type":{"text":"string"}},{"name":"agentService","type":{"text":"AgentService"}}],"description":"Clear conversation state, agent messages, and the stored thread id for\n`profileId`. Used by the explicit user-driven \"new chat\" / \"delete chat\"\npaths where we want the next page-refresh to start fresh for that profile."}],"exports":[{"kind":"js","name":"loadConversationId","declaration":{"name":"loadConversationId","module":"core/store/session-manager.js"}},{"kind":"js","name":"saveConversationId","declaration":{"name":"saveConversationId","module":"core/store/session-manager.js"}},{"kind":"js","name":"clearConversationId","declaration":{"name":"clearConversationId","module":"core/store/session-manager.js"}},{"kind":"js","name":"restoreSession","declaration":{"name":"restoreSession","module":"core/store/session-manager.js"}},{"kind":"js","name":"saveConversation","declaration":{"name":"saveConversation","module":"core/store/session-manager.js"}},{"kind":"js","name":"distillRestoredMessageContexts","declaration":{"name":"distillRestoredMessageContexts","module":"core/store/session-manager.js"}},{"kind":"js","name":"resetConversationState","declaration":{"name":"resetConversationState","module":"core/store/session-manager.js"}},{"kind":"js","name":"clearConversation","declaration":{"name":"clearConversation","module":"core/store/session-manager.js"}}]},{"kind":"javascript-module","path":"core/store/store-controller.js","declarations":[{"kind":"class","description":"","name":"StoreController","superclass":{"name":"ContextStoreController","package":"@/core/shared/context-store-controller"},"members":[{"kind":"field","name":"_value","type":{"text":"T"},"privacy":"private","inheritedFrom":{"name":"ContextStoreController","module":"core/shared/context-store-controller.js"}},{"kind":"field","name":"_store","type":{"text":"TStore | null"},"privacy":"private","default":"null","inheritedFrom":{"name":"ContextStoreController","module":"core/shared/context-store-controller.js"}},{"kind":"field","name":"unsubscribeStore","type":{"text":"() => void | undefined"},"privacy":"private","inheritedFrom":{"name":"ContextStoreController","module":"core/shared/context-store-controller.js"}},{"kind":"field","name":"value","type":{"text":"T"},"description":"The current selected state slice.","readonly":true,"inheritedFrom":{"name":"ContextStoreController","module":"core/shared/context-store-controller.js"}},{"kind":"field","name":"store","type":{"text":"TStore"},"description":"The underlying store instance for dispatching actions.","readonly":true,"inheritedFrom":{"name":"ContextStoreController","module":"core/shared/context-store-controller.js"}},{"kind":"method","name":"attach","privacy":"private","return":{"type":{"text":"void"}},"parameters":[{"name":"store","type":{"text":"TStore"}}],"inheritedFrom":{"name":"ContextStoreController","module":"core/shared/context-store-controller.js"}},{"kind":"method","name":"detach","privacy":"private","return":{"type":{"text":"void"}},"inheritedFrom":{"name":"ContextStoreController","module":"core/shared/context-store-controller.js"}},{"kind":"method","name":"hostDisconnected","return":{"type":{"text":"void"}},"inheritedFrom":{"name":"ContextStoreController","module":"core/shared/context-store-controller.js"}}]}],"exports":[{"kind":"js","name":"StoreController","declaration":{"name":"StoreController","module":"core/store/store-controller.js"}}]},{"kind":"javascript-module","path":"core/store/support-manager.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"core/store/support-manager.js","declarations":[{"kind":"class","description":"","name":"SupportManager","members":[{"kind":"field","name":"suppressSessionEnded","type":{"text":"boolean"},"privacy":"private","default":"false","description":"Whether the session-ended handler should be suppressed during explicit teardown."},{"kind":"field","name":"listenerCleanups","type":{"text":"Array<() => void>"},"privacy":"private","default":"[]","description":"Cleanup functions for event listeners registered on the SupportEventEmitter."},{"kind":"method","name":"startSupport","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"baseUrl","type":{"text":"string"}},{"name":"conversationId","type":{"text":"string"}}]},{"kind":"method","name":"stopSupport","return":{"type":{"text":"Promise<void>"}}},{"kind":"method","name":"dispose","return":{"type":{"text":"void"}}},{"kind":"method","name":"sendMessage","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"message","type":{"text":"string"}}]},{"kind":"method","name":"sendTyping","return":{"type":{"text":"Promise<void>"}}},{"kind":"method","name":"setupEventListeners","privacy":"private","return":{"type":{"text":"void"}}}]}],"exports":[{"kind":"js","name":"SupportManager","declaration":{"name":"SupportManager","module":"core/store/support-manager.js"}}]},{"kind":"javascript-module","path":"core/store/tool-registry.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"core/store/tool-registry.js","declarations":[{"kind":"class","description":"","name":"ToolRegistry","members":[{"kind":"field","name":"userTools","type":{"text":"FrontendTool[]"},"privacy":"private","default":"[]"},{"kind":"field","name":"canvasEnabled","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"field","name":"canvasToolHandler","type":{"text":"FrontendTool['handler'] | null"},"privacy":"private","default":"null"},{"kind":"field","name":"feedbackToolAllowed","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"field","name":"feedbackToolEnabled","type":{"text":"boolean"},"privacy":"private","default":"true"},{"kind":"field","name":"feedbackToolHandler","type":{"text":"FrontendTool['handler'] | null"},"privacy":"private","default":"null"},{"kind":"field","name":"cachedTools","type":{"text":"FrontendTool[] | null"},"privacy":"private","default":"null"},{"kind":"method","name":"setUserTools","return":{"type":{"text":"void"}},"parameters":[{"name":"tools","type":{"text":"FrontendTool[]"}}],"description":"Set user-provided frontend tools (validates and filters invalid ones)."},{"kind":"method","name":"setCanvasEnabled","return":{"type":{"text":"void"}},"parameters":[{"name":"enabled","type":{"text":"boolean"}}],"description":"Enable or disable the built-in canvas render verification tool."},{"kind":"method","name":"setCanvasToolHandler","return":{"type":{"text":"void"}},"parameters":[{"name":"handler","type":{"text":"FrontendTool['handler']"}}],"description":"Set the handler for the canvas tool.\nCalled once from ChatStore to bind the handler that waits for render results."},{"kind":"method","name":"setFeedbackToolAllowed","return":{"type":{"text":"void"}},"parameters":[{"name":"allowed","type":{"text":"boolean"}}],"description":"Allow or disallow the feedback tool based on the feature flag.\nSet from bootstrap config; false until config is loaded."},{"kind":"method","name":"setFeedbackToolEnabled","return":{"type":{"text":"void"}},"parameters":[{"name":"enabled","type":{"text":"boolean"}}],"description":"Enable or disable the built-in feedback tool.\nDisabled after the tool fires; re-enabled on form dismiss (if not submitted)\nor on conversation clear."},{"kind":"method","name":"setFeedbackToolHandler","return":{"type":{"text":"void"}},"parameters":[{"name":"handler","type":{"text":"FrontendTool['handler']"}}],"description":"Set the handler for the feedback tool.\nCalled once from ChatStore to bind the handler that opens the feedback form."},{"kind":"field","name":"tools","type":{"text":"FrontendTool[]"},"description":"Merged list of built-in + user-provided frontend tools.\nBuilt-in tools are enabled based on feature flags.\nUser tools override built-ins with the same name.","readonly":true},{"kind":"method","name":"isFrontendTool","return":{"type":{"text":"boolean"}},"parameters":[{"name":"name","type":{"text":"string"}}],"description":"Check whether a tool name corresponds to a registered frontend tool."}]}],"exports":[{"kind":"js","name":"ToolRegistry","declaration":{"name":"ToolRegistry","module":"core/store/tool-registry.js"}}]},{"kind":"javascript-module","path":"core/store/tool-selection-manager.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"core/store/tool-selection-manager.js","declarations":[{"kind":"function","name":"fetchToolSelections","return":{"type":{"text":"Promise<Result<ReadonlyArray<AgentToolSelection>>>"}},"parameters":[{"name":"apiClient","type":{"text":"ApiClient"}},{"name":"profileId","type":{"text":"string"}}]},{"kind":"function","name":"saveToolSelections","return":{"type":{"text":"Promise<Result<void>>"}},"parameters":[{"name":"apiClient","type":{"text":"ApiClient"}},{"name":"profileId","type":{"text":"string"}},{"name":"activeTools","type":{"text":"ReadonlyArray<ScopedToolSelection>"}}]}],"exports":[{"kind":"js","name":"fetchToolSelections","declaration":{"name":"fetchToolSelections","module":"core/store/tool-selection-manager.js"}},{"kind":"js","name":"saveToolSelections","declaration":{"name":"saveToolSelections","module":"core/store/tool-selection-manager.js"}}]},{"kind":"javascript-module","path":"core/tools/built-in-tools.js","declarations":[{"kind":"variable","name":"CANVAS_TOOL_NAME","type":{"text":"string"},"default":"'get_canvas_render_status'"},{"kind":"variable","name":"canvasFrontendTool","type":{"text":"FrontendTool"},"default":"{ name: CANVAS_TOOL_NAME, description: 'Opens the canvas preview and returns its render status. ' + 'Returns success or failure with error details. ' + 'Always call this after create_canvas or update_canvas to verify the code renders correctly.', parameters: { type: 'object', properties: {}, }, }"},{"kind":"variable","name":"FEEDBACK_TOOL_NAME","type":{"text":"string"},"default":"'askForFeedback'"},{"kind":"variable","name":"feedbackToolDefinition","type":{"text":"Omit<FrontendTool, 'handler'>"},"default":"{ name: FEEDBACK_TOOL_NAME, description: 'Opens the feedback form so the user can rate their experience. ' + 'RULES — read carefully before calling: ' + '(1) Do not interrupt active problem-solving mid-conversation. Prioritize answering first, then call this. ' + 'If the user immediately follows up with an expression of satisfaction or dissatisfaction in the same turn, finish the answer and then call the feedback form once. ' + '(2) SHOULD call after any emotional signal — satisfaction or dissatisfaction. When in doubt, call it. ' + 'Supported languages: English, Norwegian (Bokmål), Swedish, Danish, Finnish, Dutch. ' + 'Detect feedback in ALL supported languages, not just English. ' + '(3) Satisfaction signals: English — \"Thanks\", \"Thank you\", \"That helped\", \"Perfect\", \"Great\". ' + 'Multilingual keywords — takk, tack, tak, kiitos, dank (and common variants). ' + '(4) Dissatisfaction signals: English — \"That\\'s wrong\", \"Wrong source\", \"That didn\\'t work\", \"You can\\'t help me\", \"Bad response\", \"No\". ' + 'Multilingual keywords — nei, nej, ei, ikke, inte, feil, fel, väärä, forkert, dårlig (and common variants). ' + 'These keywords are high-signal triggers; for ambiguous cases, fall back to sentiment/intent analysis across all supported languages. ' + '(5) NEVER call this more than once per conversation.', parameters: { type: 'object' as const, properties: {}, }, }","description":"Built-in frontend tool that opens the feedback form.\n\nThe description is the LLM's only guidance on when to call this tool,\nso it is deliberately conservative to avoid over-prompting.\n\nThe handler is set dynamically by ChatStore (via ToolRegistry) so the\ntool definition itself stays free of store/framework dependencies."}],"exports":[{"kind":"js","name":"CANVAS_TOOL_NAME","declaration":{"name":"CANVAS_TOOL_NAME","module":"core/tools/built-in-tools.js"}},{"kind":"js","name":"canvasFrontendTool","declaration":{"name":"canvasFrontendTool","module":"core/tools/built-in-tools.js"}},{"kind":"js","name":"FEEDBACK_TOOL_NAME","declaration":{"name":"FEEDBACK_TOOL_NAME","module":"core/tools/built-in-tools.js"}},{"kind":"js","name":"feedbackToolDefinition","declaration":{"name":"feedbackToolDefinition","module":"core/tools/built-in-tools.js"}}]},{"kind":"javascript-module","path":"core/types.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"core/types.js","declarations":[{"kind":"function","name":"distillHostContext","return":{"type":{"text":"HostContextSnapshot | null"}},"parameters":[{"name":"raw","type":{"text":"Record<string, unknown> | null | undefined"}}],"description":"Distill an arbitrary forwardedProps blob (or a stored `HostContextSnapshot`) into the\nshape we want to persist and compare against. Drops internal-only keys; returns null\nif nothing remains. Used on both the in-flight turn write path (run-coordinator) and\nthe session-restore write path (chat-store) so the divider's deep-equal comparison is\napples-to-apples on both sides."},{"kind":"function","name":"isSupportSessionActivityType","return":{"type":{"text":"type is SupportSessionActivityType"}},"parameters":[{"name":"type","type":{"text":"string"}}],"description":"Check if an activity type string is a support session activity type."},{"kind":"function","name":"createSupportSessionActivity","return":{"type":{"text":"Extract<InternalMessage, { role: 'activity' }>"}},"parameters":[{"name":"activityType","type":{"text":"SupportSessionActivityType"}},{"name":"content","default":"{}","type":{"text":"SupportSessionActivityContent"}}],"description":"Create a support session activity message."}],"exports":[{"kind":"js","name":"distillHostContext","declaration":{"name":"distillHostContext","module":"core/types.js"}},{"kind":"js","name":"isSupportSessionActivityType","declaration":{"name":"isSupportSessionActivityType","module":"core/types.js"}},{"kind":"js","name":"createSupportSessionActivity","declaration":{"name":"createSupportSessionActivity","module":"core/types.js"}}]},{"kind":"javascript-module","path":"generated/locale-codes.js","declarations":[{"kind":"variable","name":"sourceLocale","default":"`en`","description":"The locale code that templates in this source code are written in."},{"kind":"variable","name":"targetLocales","type":{"text":"[\n `da`,\n `fi`,\n `nb`,\n `nl`,\n `sv`,\n]"},"default":"[ `da`, `fi`, `nb`, `nl`, `sv`, ]","description":"The other locale codes that this application is localized into. Sorted\nlexicographically."},{"kind":"variable","name":"allLocales","type":{"text":"[\n `da`,\n `en`,\n `fi`,\n `nb`,\n `nl`,\n `sv`,\n]"},"default":"[ `da`, `en`, `fi`, `nb`, `nl`, `sv`, ]","description":"All valid project locale codes. Sorted lexicographically."}],"exports":[{"kind":"js","name":"sourceLocale","declaration":{"name":"sourceLocale","module":"generated/locale-codes.js"}},{"kind":"js","name":"targetLocales","declaration":{"name":"targetLocales","module":"generated/locale-codes.js"}},{"kind":"js","name":"allLocales","declaration":{"name":"allLocales","module":"generated/locale-codes.js"}}]},{"kind":"javascript-module","path":"generated/locales/da.js","declarations":[{"kind":"variable","name":"templates","type":{"text":"object"},"default":"{ 'activity-support-begin': `Du er blevet forbundet til support`, 'activity-support-end': `Supportsession afsluttet`, 'app-region-label': `Chatassistent`, 'assistant-message-approve': `Ja`, 'assistant-message-decline': `Nej`, 'attachment-error-too-large': `Vedhæftningen er for stor. Upload en mindre fil.`, 'attachment-error-unsupported-type': `Kun understøttede billedfiler og PDF-filer accepteres.`, 'attachment-upload-failed': `Upload af vedhæftning mislykkedes.`, 'canvas-preview-title': `Canvas-forhåndsvisning`, 'canvas-render-timeout-error': `Canvas-gengivelsen overskred tidsgrænsen på 30 sekunder`, 'canvas-toolbar-close-canvas': `Luk canvas`, 'canvas-toolbar-code-tab': `Kode`, 'canvas-toolbar-download-pdf': `Download PDF`, 'canvas-toolbar-preview-tab': `Forhåndsvisning`, 'citation-link-label': `Kilde`, 'citation-link-next': `Næste kilde`, 'citation-link-previous': `Forrige kilde`, 'citation-popover-label': `Kildehenvisninger`, 'composer-aria-label': `Skriv dit spørgsmål her`, 'composer-attachment-button-label': `Vedhæft en fil`, 'composer-attachment-drop-overlay': `Slip filen for at vedhæfte`, 'composer-attachment-error-reset': `Ryd vedhæftningsfejl`, 'composer-attachment-uploading-label': `Uploader vedhæftning`, 'composer-dictation-aria-label': `Slå stemmediktering til/fra`, 'composer-error-character-limit': `Tegngrænsen er overskredet.`, 'composer-placeholder': `Skriv dit spørgsmål her...`, 'composer-plugin-empty': `Ingen plugins fundet`, 'composer-plugin-loading': `Indlæser plugins…`, 'composer-plugin-search-placeholder': `Søg efter plugins`, 'composer-plugin-tools-label': `Værktøjer`, 'composer-send-aria-label': `Send besked`, 'composer-stop-aria-label': `Stop svar`, 'connection-overlay-description': `Vi forsøger at oprette forbindelse igen. Vent venligst et øjeblik.`, 'connection-overlay-title': `Tjenesten er midlertidigt utilgængelig`, 'consent-dialog-consent-text': `Ved at klikke \"Ja\" giver jeg samtykke til, at Visma Software AS kan læse denne samtale for at forbedre tjenesten. Jeg kan trække mit samtykke tilbage når som helst. Læs mere om opbevaringsperioder og dine rettigheder i vores`, 'consent-dialog-description': `Hjælp os med at blive bedre! For bedre at forstå din feedback vil vi gerne gennemgå samtalen mellem dig og GAiA.`, 'consent-dialog-no': `Nej`, 'consent-dialog-privacy-link': `privatlivserklæring`, 'consent-dialog-title': `Del samtalehistorikken?`, 'consent-dialog-yes': `Ja`, 'context-changed-divider': `Konteksten er ændret`, 'context-changed-section-added': `Tilføjet`, 'context-changed-section-changed': `Ændret`, 'context-changed-section-removed': `Fjernet`, 'conversation-aria-label': `Samtalebeskeder`, 'data-settings-revoke-all': `Tilbagekald samtykke for tidligere samtaler`, 'data-settings-revoke-error': `Kunne ikke tilbagekalde samtykke. Prøv igen.`, 'data-settings-revoke-note': `Dette påvirker ikke kontakten ovenfor. Slå kontakten fra for at stoppe deling af fremtidige samtaler.`, 'data-settings-revoke-success': `Samtykke tilbagekaldt for alle tidligere samtaler`, 'data-settings-sharing-label': `Del samtaler for at forbedre tjenesten`, 'disclaimer-link': `brugsvilkår`, 'disclaimer-text': `Svar genereres af AI og kan indeholde fejl, læs mere`, 'error-boundary-fallback': `Noget gik galt.`, 'error-forbidden': `Du har ikke adgang til denne handling.`, 'error-network-error': `Netværksfejl. Tjek din forbindelse.`, 'error-not-found': `Ikke fundet.`, 'error-offline': `Du er offline. Tjek din forbindelse.`, 'error-profile-not-found': `Kunne ikke indlæse den aktuelle profil. Bruger du den rigtige profil?`, 'error-rate-limit': `For mange forespørgsler. Vær venlig at sænke farten.`, 'error-request-canceled': `Forespørgsel annulleret.`, 'error-response-token-limit': `Assistentens svar er muligvis ufuldstændigt, fordi det nåede grænsen for maksimalt antal output-tokens. Prøv igen med et mere præcist spørgsmål, eller bed assistenten om at fortsætte.`, 'error-server-error': `Serveren havde et problem. Prøv venligst igen.`, 'error-session-expired': `Din session er udløbet. Log venligst ind igen.`, 'error-something-went-wrong': `Der gik noget galt.`, 'error-sse-error': `Live-svarstrømmen blev afbrudt. Prøv igen.`, 'error-unexpected-error': `Uventet fejl. Prøv venligst igen.`, 'error-ws-error': `Fejl i livechatforbindelsen. At genoprette forbindelsen kan hjælpe.`, 'feedback-close-aria-label': `Luk feedbackformular`, 'feedback-confirmation-message': `Tak for din feedback!`, 'feedback-form-comment-placeholder': `Skriv din kommentar her`, 'feedback-form-comments-title': `Nogle yderligere kommentarer?`, 'feedback-form-description': `Del venligst dine tanker og forslag for at hjælpe os med at blive bedre.`, 'feedback-form-rating-hint-high': `Meget tilfreds`, 'feedback-form-rating-hint-low': `Meget utilfreds`, 'feedback-form-satisfaction-title--assistant': `Hvor tilfreds er du med GAiA assistenten?`, 'feedback-form-satisfaction-title--support': `Hvor tilfreds er du med den hjælp, du fik?`, 'feedback-form-submit': `Indsend`, 'feedback-form-title': `Feedback`, 'feedback-privacy-id-copied': `Kopieret`, 'feedback-privacy-id-copy': `Kopiér privatlivs-ID`, 'feedback-privacy-id-hint': `Gem venligst dette ID; du skal bruge det, hvis du ønsker at anmode om sletning af data.`, 'feedback-privacy-id-label': str`Dit unikke privatlivs-ID er`, 'header-toolbar-label': `Chathandlinger`, 'history-back-aria': `Tilbage til chatten`, 'history-empty': `Ingen tidligere samtaler.`, 'history-error': `Kunne ikke indlæse samtaler.`, 'history-item-cancel': `Annuller`, 'history-item-delete-aria': `Slet samtale`, 'history-item-edit-label': `Samtaletitel`, 'history-item-rename-aria': `Omdøb samtale`, 'history-item-save': `Gem`, 'history-item-untitled': `Uden titel`, 'history-loading': `Indlæser samtaler…`, 'history-paging': `Indlæser flere…`, 'history-retry': `Prøv igen`, 'history-title': `Historik`, 'message-aria-label-assistant': `Assistentbesked`, 'message-aria-label-operator': `Operatørbesked`, 'message-aria-label-system': `Systembesked`, 'message-aria-label-user': `Din besked`, 'message-attachment-image-alt': `Vedhæftet billede`, 'message-attachment-pdf-label': `PDF-dokument`, 'message-attachment-remove': `Fjern vedhæftning`, 'message-copy-done': `Kopieret`, 'message-copy-label': `Kopiér besked`, 'message-feedback-down-label': `Dårligt svar`, 'message-feedback-up-label': `Godt svar`, 'modal-close-label': `Luk`, 'notification-close-aria-label': `Luk notifikation`, 'opens-in-new-tab': `åbner i ny fane`, 'reasoning-thinking-complete': `Tænker`, 'reasoning-thinking-indicator': `Tænker…`, 'session-ended-feedback-prompt': `Hvordan var din oplevelse med supportoperatøren?`, 'session-ended-give-feedback': `Vurder din oplevelse`, 'session-ended-new-conversation': `Start ny samtale`, 'session-ended-title': `Supportsessionen er afsluttet`, 'settings-back-aria': `Tilbage til chatten`, 'settings-back-to-menu-aria': `Tilbage til indstillinger`, 'settings-plugins-title': `Plugins og værktøjer`, 'settings-region-label': `Indstillinger`, 'settings-select-tool-aria': str`Vælg værktøjet ${0}`, 'settings-title': `Indstillinger`, 'sharing-prompt-dialog-no': `Nej`, 'sharing-prompt-dialog-privacy-link': `privatlivserklæring`, 'sharing-prompt-dialog-title': `Hjælp med at forbedre GAiA`, 'sharing-prompt-dialog-yes': `Ja`, 'sharing-prompt-inline-consent-text': `Ved at klikke på \"Ja\" giver jeg samtykke til, at Visma Software AS gennemgår denne samtale for at forbedre tjenesten. Jeg kan til enhver tid trække mit samtykke tilbage. Læs mere i vores`, 'source-label-fallback': `Kilde`, 'spinner-aria-label': `Indlæser`, 'suggested-questions-aria-label': `Foreslåede opfølgningsspørgsmål`, 'tag-dismiss-label': `Fjern`, 'thinking-indicator-sr-text': `Assistenten tænker`, 'thinking-indicator-text': `Tænker...`, 'tool-approval-approve-aria-label': `Godkend handling`, 'tool-approval-approved-status': `Værktøj godkendt`, 'tool-approval-aria-label': `Handling kræver godkendelse`, 'tool-approval-decline-aria-label': `Afvis handling`, 'tool-approval-declined-status': `Værktøj afvist`, 'tool-approval-privacy-id-message': str`Dit unikke privatlivs-ID er ${0}. Gem venligst dette ID; du skal bruge det, hvis du ønsker at anmode om sletning af data.`, 'tool-approval-privacy-link': `privatlivserklæring`, 'tool-approval-share-conversation-consent': `Jeg giver samtykke til at dele denne samtale med supportagenten`, 'tool-approval-share-conversation-description': `For at hjælpe supportagenten med at forstå dit problem bedre, kan du vælge at dele din samtale med GAiA. Læs mere om opbevaringsperioder og dine rettigheder i vores`, 'tool-status-no-results': `Ingen resultater fundet`, 'tool-status-show-less': `Vis mindre`, 'tool-status-show-more': `Vis mere`, 'tool-status-unable-display-response': `[Kan ikke vise svaret]`, 'tooltip-close-chat': `Luk chat`, 'tooltip-data-settings': `Dataindstillinger`, 'tooltip-history': `Samtalehistorik`, 'tooltip-new-chat': `Ny chat`, 'tooltip-open-feedback': `Åbn feedback`, 'tooltip-settings': `Indstillinger`, 'typing-indicator-aria-label': `Operatør skriver`, }"}],"exports":[{"kind":"js","name":"templates","declaration":{"name":"templates","module":"generated/locales/da.js"}}]},{"kind":"javascript-module","path":"generated/locales/fi.js","declarations":[{"kind":"variable","name":"templates","type":{"text":"object"},"default":"{ 'activity-support-begin': `Sinut on yhdistetty tukeen`, 'activity-support-end': `Tukisessio päättyi`, 'app-region-label': `Chat-avustaja`, 'assistant-message-approve': `Kyllä`, 'assistant-message-decline': `Ei`, 'attachment-error-too-large': `Liite on liian suuri. Lataa pienempi tiedosto.`, 'attachment-error-unsupported-type': `Vain tuetut kuvatiedostot ja PDF-tiedostot hyväksytään.`, 'attachment-upload-failed': `Liitteen lataus epäonnistui.`, 'canvas-preview-title': `Canvas-esikatselu`, 'canvas-render-timeout-error': `Canvas-renderöinti ylitti 30 sekunnin aikarajan`, 'canvas-toolbar-close-canvas': `Sulje kanvas`, 'canvas-toolbar-code-tab': `Koodi`, 'canvas-toolbar-download-pdf': `Lataa PDF`, 'canvas-toolbar-preview-tab': `Esikatselu`, 'citation-link-label': `Lähde`, 'citation-link-next': `Seuraava lähde`, 'citation-link-previous': `Edellinen lähde`, 'citation-popover-label': `Lähdeviitteet`, 'composer-aria-label': `Kirjoita kysymyksesi tähän`, 'composer-attachment-button-label': `Liitä tiedosto`, 'composer-attachment-drop-overlay': `Pudota tiedosto liittääksesi`, 'composer-attachment-error-reset': `Tyhjennä liitevirhe`, 'composer-attachment-uploading-label': `Ladataan liitettä`, 'composer-dictation-aria-label': `Ota äänisanelu käyttöön tai poista se käytöstä`, 'composer-error-character-limit': `Merkkiraja ylitetty.`, 'composer-placeholder': `Kirjoita kysymyksesi tähän...`, 'composer-plugin-empty': `Plugins ei löytynyt`, 'composer-plugin-loading': `Ladataan plugins…`, 'composer-plugin-search-placeholder': `Hae plugins`, 'composer-plugin-tools-label': `Työkalut`, 'composer-send-aria-label': `Lähetä viesti`, 'composer-stop-aria-label': `Pysäytä vastaus`, 'connection-overlay-description': `Yritämme muodostaa yhteyden uudelleen. Odota hetki.`, 'connection-overlay-title': `Palvelu on tilapäisesti poissa käytöstä`, 'consent-dialog-consent-text': `Klikkaamalla \"Kyllä\" annan suostumukseni siihen, että Visma Software AS voi tarkastella tätä keskustelua palvelun parantamiseksi. Voin peruuttaa suostumukseni milloin tahansa. Lue lisää säilytysajoista ja oikeuksistasi meidän`, 'consent-dialog-description': `Auta meitä parantamaan! Ymmärtääksemme palautettasi paremmin haluaisimme tarkastella sinun ja GAiAn välistä keskustelua.`, 'consent-dialog-no': `Ei`, 'consent-dialog-privacy-link': `tietosuojaseloste`, 'consent-dialog-title': `Jaa nykyinen keskustelu?`, 'consent-dialog-yes': `Kyllä`, 'context-changed-divider': `Konteksti muuttui`, 'context-changed-section-added': `Lisätty`, 'context-changed-section-changed': `Muutettu`, 'context-changed-section-removed': `Poistettu`, 'conversation-aria-label': `Keskusteluviestit`, 'data-settings-revoke-all': `Peru aiempien keskustelujen suostumus`, 'data-settings-revoke-error': `Suostumuksen peruminen epäonnistui. Yritä uudelleen.`, 'data-settings-revoke-note': `Tämä ei vaikuta yllä olevaan kytkimeen. Lopeta tulevien keskustelujen jakaminen poistamalla kytkin käytöstä.`, 'data-settings-revoke-success': `Suostumus peruttu kaikkien aiempien keskustelujen osalta`, 'data-settings-sharing-label': `Jaa keskusteluja palvelun parantamiseksi`, 'disclaimer-link': `käyttöehdot`, 'disclaimer-text': `Vastaukset ovat tekoälyn tuottamia ja voivat sisältää virheitä, lue lisää`, 'error-boundary-fallback': `Jokin meni pieleen.`, 'error-forbidden': `Sinulla ei ole oikeutta tähän toimintoon.`, 'error-network-error': `Verkkoyhteysvirhe. Tarkista yhteytesi.`, 'error-not-found': `Ei löytynyt.`, 'error-offline': `Olet offline-tilassa. Tarkista yhteytesi.`, 'error-profile-not-found': `Nykyisen profiilin lataus epäonnistui. Käytätkö oikeaa profiilia?`, 'error-rate-limit': `Liian monta pyyntöä. Odota hetki.`, 'error-request-canceled': `Pyyntö peruutettiin.`, 'error-response-token-limit': `Avustajan vastaus saattaa olla epätäydellinen, koska se saavutti tulostemerkkien enimmäismäärän. Yritä uudelleen suppeammalla kysymyksellä tai pyydä avustajaa jatkamaan.`, 'error-server-error': `Palvelimella ilmeni ongelma. Yritä uudelleen.`, 'error-session-expired': `Istuntosi on vanhentunut. Kirjaudu uudelleen sisään.`, 'error-something-went-wrong': `Jokin meni pieleen.`, 'error-sse-error': `Reaaliaikainen vastausvirta keskeytyi. Yritä uudelleen.`, 'error-unexpected-error': `Odottamaton virhe. Yritä uudelleen.`, 'error-ws-error': `Reaaliaikaisen chatin yhteysvirhe. Uudelleenyhdistäminen saattaa auttaa.`, 'feedback-close-aria-label': `Sulje palautelomake`, 'feedback-confirmation-message': `Kiitos palautteestasi!`, 'feedback-form-comment-placeholder': `Kirjoita kommenttisi tähän`, 'feedback-form-comments-title': `Muita kommentteja?`, 'feedback-form-description': `Jaa ajatuksesi ja ehdotuksesi, jotta voimme parantaa palvelua.`, 'feedback-form-rating-hint-high': `Erittäin tyytyväinen`, 'feedback-form-rating-hint-low': `Erittäin tyytymätön`, 'feedback-form-satisfaction-title--assistant': `Kuinka tyytyväinen olet GAiA avustajaan?`, 'feedback-form-satisfaction-title--support': `Kuinka tyytyväinen olet saamaasi apuun?`, 'feedback-form-submit': `Lähetä`, 'feedback-form-title': `Palaute`, 'feedback-privacy-id-copied': `Kopioitu`, 'feedback-privacy-id-copy': `Kopioi tietosuojatunnus`, 'feedback-privacy-id-hint': `Tallenna tämä tunnus; tarvitset sitä, jos haluat pyytää tietojen poistamista.`, 'feedback-privacy-id-label': str`Yksilöllinen tietosuojatunnuksesi on`, 'header-toolbar-label': `Chat-toiminnot`, 'history-back-aria': `Takaisin chattiin`, 'history-empty': `Ei aiempia keskusteluja.`, 'history-error': `Keskusteluja ei voitu ladata.`, 'history-item-cancel': `Peruuta`, 'history-item-delete-aria': `Poista keskustelu`, 'history-item-edit-label': `Keskustelun otsikko`, 'history-item-rename-aria': `Nimeä keskustelu uudelleen`, 'history-item-save': `Tallenna`, 'history-item-untitled': `Nimetön`, 'history-loading': `Ladataan keskusteluja…`, 'history-paging': `Ladataan lisää…`, 'history-retry': `Yritä uudelleen`, 'history-title': `Historia`, 'message-aria-label-assistant': `Avustajan viesti`, 'message-aria-label-operator': `Operaattorin viesti`, 'message-aria-label-system': `Järjestelmäviesti`, 'message-aria-label-user': `Viestisi`, 'message-attachment-image-alt': `Liitetty kuva`, 'message-attachment-pdf-label': `PDF-dokumentti`, 'message-attachment-remove': `Poista liite`, 'message-copy-done': `Kopioitu`, 'message-copy-label': `Kopioi viesti`, 'message-feedback-down-label': `Huono vastaus`, 'message-feedback-up-label': `Hyvä vastaus`, 'modal-close-label': `Sulje`, 'notification-close-aria-label': `Sulje ilmoitus`, 'opens-in-new-tab': `avautuu uuteen välilehteen`, 'reasoning-thinking-complete': `Ajattelu`, 'reasoning-thinking-indicator': `Ajattelee…`, 'session-ended-feedback-prompt': `Millainen kokemuksesi oli tukihenkilön kanssa?`, 'session-ended-give-feedback': `Arvioi kokemuksesi`, 'session-ended-new-conversation': `Aloita uusi keskustelu`, 'session-ended-title': `Tukiistunto päättyi`, 'settings-back-aria': `Takaisin chattiin`, 'settings-back-to-menu-aria': `Takaisin asetuksiin`, 'settings-plugins-title': `Plugins ja työkalut`, 'settings-region-label': `Asetukset`, 'settings-select-tool-aria': str`Valitse työkalu ${0}`, 'settings-title': `Asetukset`, 'sharing-prompt-dialog-no': `Ei`, 'sharing-prompt-dialog-privacy-link': `tietosuojaseloste`, 'sharing-prompt-dialog-title': `Auta parantamaan GAiA`, 'sharing-prompt-dialog-yes': `Kyllä`, 'sharing-prompt-inline-consent-text': `Valitsemalla \"Kyllä\" annan suostumukseni siihen, että Visma Software AS tarkistaa tämän keskustelun palvelun parantamiseksi. Voin peruuttaa suostumukseni milloin tahansa. Lue lisää:`, 'source-label-fallback': `Lähde`, 'spinner-aria-label': `Ladataan`, 'suggested-questions-aria-label': `Ehdotetut jatkokysymykset`, 'tag-dismiss-label': `Poista`, 'thinking-indicator-sr-text': `Avustaja ajattelee`, 'thinking-indicator-text': `Miettii...`, 'tool-approval-approve-aria-label': `Hyväksy toiminto`, 'tool-approval-approved-status': `Työkalu hyväksytty`, 'tool-approval-aria-label': `Toiminto vaatii hyväksyntää`, 'tool-approval-decline-aria-label': `Hylkää toiminto`, 'tool-approval-declined-status': `Työkalu hylätty`, 'tool-approval-privacy-id-message': str`Yksilöllinen yksityisyystunnuksesi on ${0}. Tallenna tämä tunnus; tarvitset sitä, jos haluat pyytää tietojen poistamista.`, 'tool-approval-privacy-link': `tietosuojaseloste`, 'tool-approval-share-conversation-consent': `Suostun jakamaan tämän keskustelun tukihenkilön kanssa`, 'tool-approval-share-conversation-description': `Auttaaksesi tukihenkilöä ymmärtämään asiaasi paremmin, voit valita jakaa keskustelusi GAiAn kanssa. Lue lisää säilytysajoista ja oikeuksistasi meidän`, 'tool-status-no-results': `Tuloksia ei löytynyt`, 'tool-status-show-less': `Näytä vähemmän`, 'tool-status-show-more': `Näytä lisää`, 'tool-status-unable-display-response': `[Vastausta ei voi näyttää]`, 'tooltip-close-chat': `Sulje keskustelu`, 'tooltip-data-settings': `Tietoasetukset`, 'tooltip-history': `Keskusteluhistoria`, 'tooltip-new-chat': `Uusi keskustelu`, 'tooltip-open-feedback': `Avoin palaute`, 'tooltip-settings': `Asetukset`, 'typing-indicator-aria-label': `Operaattori kirjoittaa`, }"}],"exports":[{"kind":"js","name":"templates","declaration":{"name":"templates","module":"generated/locales/fi.js"}}]},{"kind":"javascript-module","path":"generated/locales/nb.js","declarations":[{"kind":"variable","name":"templates","type":{"text":"object"},"default":"{ 'activity-support-begin': `Du har blitt koblet til support`, 'activity-support-end': `Supportøkten er avsluttet`, 'app-region-label': `Chatassistent`, 'assistant-message-approve': `Ja`, 'assistant-message-decline': `Nei`, 'attachment-error-too-large': `Vedlegget er for stort. Last opp en mindre fil.`, 'attachment-error-unsupported-type': `Bare støttede bildefiler og PDF-er godtas.`, 'attachment-upload-failed': `Opplasting av vedlegg mislyktes.`, 'canvas-preview-title': `Canvas-forhåndsvisning`, 'canvas-render-timeout-error': `Canvas-gjengivelsen overskred tidsgrensen på 30 sekunder`, 'canvas-toolbar-close-canvas': `Lukk lerret`, 'canvas-toolbar-code-tab': `Kode`, 'canvas-toolbar-download-pdf': `Last ned PDF`, 'canvas-toolbar-preview-tab': `Forhåndsvisning`, 'citation-link-label': `Kilde`, 'citation-link-next': `Neste kilde`, 'citation-link-previous': `Forrige kilde`, 'citation-popover-label': `Kildehenvisninger`, 'composer-aria-label': `Skriv spørsmålet ditt her`, 'composer-attachment-button-label': `Legg ved en fil`, 'composer-attachment-drop-overlay': `Slipp filen for å legge ved`, 'composer-attachment-error-reset': `Fjern vedleggsfeil`, 'composer-attachment-uploading-label': `Laster opp vedlegg`, 'composer-dictation-aria-label': `Slå på/av talediktering`, 'composer-error-character-limit': `Karakterbegrensning overskredet.`, 'composer-placeholder': `Skriv inn spørsmålet ditt her...`, 'composer-plugin-empty': `Ingen plugins funnet`, 'composer-plugin-loading': `Laster inn plugins…`, 'composer-plugin-search-placeholder': `Søk etter plugins`, 'composer-plugin-tools-label': `Verktøy`, 'composer-send-aria-label': `Send melding`, 'composer-stop-aria-label': `Stopp svaret`, 'connection-overlay-description': `Vi prøver å koble til på nytt. Vennligst vent et øyeblikk.`, 'connection-overlay-title': `Tjenesten er midlertidig utilgjengelig`, 'consent-dialog-consent-text': `Ved å trykke \"Ja\" samtykker jeg til at Visma Software AS kan lese denne samtalen for å forbedre tjenesten. Jeg kan trekke samtykket når som helst. Les mer om lagringstid og dine rettigheter i vår`, 'consent-dialog-description': `Hjelp oss å bli bedre! For å forstå tilbakemeldingen din bedre vil vi gjerne se hva du og GAiA snakket om.`, 'consent-dialog-no': `Nei`, 'consent-dialog-privacy-link': `personvernerklæring`, 'consent-dialog-title': `Del samtalehistorikken?`, 'consent-dialog-yes': `Ja`, 'context-changed-divider': `Konteksten er endret`, 'context-changed-section-added': `Lagt til`, 'context-changed-section-changed': `Endret`, 'context-changed-section-removed': `Fjernet`, 'conversation-aria-label': `Samtalemeldinger`, 'data-settings-revoke-all': `Trekk tilbake samtykke for tidligere samtaler`, 'data-settings-revoke-error': `Kunne ikke trekke tilbake samtykket. Prøv på nytt.`, 'data-settings-revoke-note': `Dette påvirker ikke bryteren ovenfor. Slå av bryteren for å slutte å dele fremtidige samtaler.`, 'data-settings-revoke-success': `Samtykke trukket tilbake for alle tidligere samtaler`, 'data-settings-sharing-label': `Del samtaler for å forbedre tjenesten`, 'disclaimer-link': `bruksvilkår`, 'disclaimer-text': `Svar er generert av AI og kan inneholde feil, les mer`, 'error-boundary-fallback': `Noe gikk galt.`, 'error-forbidden': `Du har ikke tilgang til denne handlingen.`, 'error-network-error': `Nettverksfeil. Sjekk tilkoblingen.`, 'error-not-found': `Ikke funnet.`, 'error-offline': `Du er frakoblet. Sjekk tilkoblingen din.`, 'error-profile-not-found': `Kunne ikke laste inn nåværende profil. Bruker du riktig profil?`, 'error-rate-limit': `For mange forespørsler. Vennligst sakt ned.`, 'error-request-canceled': `Forespørsel avbrutt.`, 'error-response-token-limit': `Assistentens svar kan være ufullstendig fordi det nådde grensen for maksimalt antall utdatatokens. Prøv igjen med et smalere spørsmål, eller be assistenten om å fortsette.`, 'error-server-error': `Serverproblemer. Vennligst prøv igjen.`, 'error-session-expired': `Din sesjon har utløpt. Vennligst logg inn igjen.`, 'error-something-went-wrong': `Noe gikk galt.`, 'error-sse-error': `Live responsestream avbrutt. Prøv igjen.`, 'error-unexpected-error': `Uventet feil. Vennligst prøv igjen.`, 'error-ws-error': `Live chatsesjon feil. Det kan hjelpe å prøve igjen.`, 'feedback-close-aria-label': `Lukk tilbakemeldingsskjema`, 'feedback-confirmation-message': `Takk for din tilbakemelding!`, 'feedback-form-comment-placeholder': `Skriv inn tilbakemeldingen her`, 'feedback-form-comments-title': `Eventuelle tilbakemeldinger?`, 'feedback-form-description': `Vennligst del dine tanker og forslag for å hjelpe oss å forbedre.`, 'feedback-form-rating-hint-high': `Svært fornøyd`, 'feedback-form-rating-hint-low': `Svært misfornøyd`, 'feedback-form-satisfaction-title--assistant': `Hvor fornøyd er du med GAiA assistenten?`, 'feedback-form-satisfaction-title--support': `Hvor fornøyd er du med hjelpen du fikk?`, 'feedback-form-submit': `Send`, 'feedback-form-title': `Feedback`, 'feedback-privacy-id-copied': `Kopiert`, 'feedback-privacy-id-copy': `Kopier personvern-ID`, 'feedback-privacy-id-hint': `Vennligst lagre denne ID-en; du trenger den hvis du ønsker å be om sletting av data.`, 'feedback-privacy-id-label': str`Din unike personvern-ID er`, 'header-toolbar-label': `Chathandlinger`, 'history-back-aria': `Tilbake til chatten`, 'history-empty': `Ingen tidligere samtaler.`, 'history-error': `Kunne ikke laste inn samtaler.`, 'history-item-cancel': `Avbryt`, 'history-item-delete-aria': `Slett samtale`, 'history-item-edit-label': `Samtaletittel`, 'history-item-rename-aria': `Gi samtalen nytt navn`, 'history-item-save': `Lagre`, 'history-item-untitled': `Uten tittel`, 'history-loading': `Laster inn samtaler…`, 'history-paging': `Laster inn mer…`, 'history-retry': `Prøv på nytt`, 'history-title': `Historikk`, 'message-aria-label-assistant': `Assistentmelding`, 'message-aria-label-operator': `Operatørmelding`, 'message-aria-label-system': `Systemmelding`, 'message-aria-label-user': `Din melding`, 'message-attachment-image-alt': `Vedlagt bilde`, 'message-attachment-pdf-label': `PDF-dokument`, 'message-attachment-remove': `Fjern vedlegg`, 'message-copy-done': `Kopiert`, 'message-copy-label': `Kopier melding`, 'message-feedback-down-label': `Dårlig svar`, 'message-feedback-up-label': `Godt svar`, 'modal-close-label': `Lukk`, 'notification-close-aria-label': `Lukk varsel`, 'opens-in-new-tab': `åpner i ny fane`, 'reasoning-thinking-complete': `Tenker`, 'reasoning-thinking-indicator': `Tenker…`, 'session-ended-feedback-prompt': `Hvordan var opplevelsen din med supportoperatøren?`, 'session-ended-give-feedback': `Vurder opplevelsen din`, 'session-ended-new-conversation': `Start ny samtale`, 'session-ended-title': `Supportøkten er avsluttet`, 'settings-back-aria': `Tilbake til chatten`, 'settings-back-to-menu-aria': `Tilbake til innstillingene`, 'settings-plugins-title': `Plugins og verktøy`, 'settings-region-label': `Innstillinger`, 'settings-select-tool-aria': str`Velg verktøyet ${0}`, 'settings-title': `Innstillinger`, 'sharing-prompt-dialog-no': `Nei`, 'sharing-prompt-dialog-privacy-link': `personvernerklæring`, 'sharing-prompt-dialog-title': `Hjelp oss å forbedre GAiA`, 'sharing-prompt-dialog-yes': `Ja`, 'sharing-prompt-inline-consent-text': `Ved å trykke på \"Ja\" samtykker jeg til at Visma Software AS gjennomgår denne samtalen for å forbedre tjenesten. Jeg kan trekke tilbake samtykket mitt når som helst. Les mer i vår`, 'source-label-fallback': `Kilde`, 'spinner-aria-label': `Laster`, 'suggested-questions-aria-label': `Foreslåtte oppfølgingsspørsmål`, 'tag-dismiss-label': `Fjern`, 'thinking-indicator-sr-text': `Assistenten tenker`, 'thinking-indicator-text': `Tenker...`, 'tool-approval-approve-aria-label': `Godkjenn handling`, 'tool-approval-approved-status': `Verktøy godkjent`, 'tool-approval-aria-label': `Handling krever godkjenning`, 'tool-approval-decline-aria-label': `Avslå handling`, 'tool-approval-declined-status': `Verktøy avvist`, 'tool-approval-privacy-id-message': str`Din unike personvern-ID er ${0}. Vennligst lagre denne IDen; du vil trenge den hvis du ønsker å be om sletting av data.`, 'tool-approval-privacy-link': `personvernerklæring`, 'tool-approval-share-conversation-consent': `Jeg samtykker til å dele denne samtalen med supportagenten`, 'tool-approval-share-conversation-description': `For å hjelpe supportagenten med å forstå saken din bedre, kan du velge å dele samtalen din med GAiA. Les mer om lagringstid og dine rettigheter i vår`, 'tool-status-no-results': `Ingen resultater funnet`, 'tool-status-show-less': `Vis mindre`, 'tool-status-show-more': `Vis mer`, 'tool-status-unable-display-response': `[Kan ikke vise svaret]`, 'tooltip-close-chat': `Lukk chat`, 'tooltip-data-settings': `Datainnstillinger`, 'tooltip-history': `Samtalehistorikk`, 'tooltip-new-chat': `Ny chat`, 'tooltip-open-feedback': `Åpne tilbakemeldingsskjema`, 'tooltip-settings': `Innstillinger`, 'typing-indicator-aria-label': `Operatør skriver`, }"}],"exports":[{"kind":"js","name":"templates","declaration":{"name":"templates","module":"generated/locales/nb.js"}}]},{"kind":"javascript-module","path":"generated/locales/nl.js","declarations":[{"kind":"variable","name":"templates","type":{"text":"object"},"default":"{ 'activity-support-begin': `U bent verbonden met support`, 'activity-support-end': `Supportsessie beëindigd`, 'app-region-label': `Chatassistent`, 'assistant-message-approve': `Ja`, 'assistant-message-decline': `Nee`, 'attachment-error-too-large': `De bijlage is te groot. Upload een kleiner bestand.`, 'attachment-error-unsupported-type': `Alleen ondersteunde afbeeldingsbestanden en pdf's worden geaccepteerd.`, 'attachment-upload-failed': `Uploaden van bijlage mislukt.`, 'canvas-preview-title': `Canvasvoorbeeld`, 'canvas-render-timeout-error': `Canvas-rendering overschreed de tijdslimiet van 30 seconden`, 'canvas-toolbar-close-canvas': `Canvas sluiten`, 'canvas-toolbar-code-tab': `Code`, 'canvas-toolbar-download-pdf': `PDF downloaden`, 'canvas-toolbar-preview-tab': `Voorbeeld`, 'citation-link-label': `Bronvermelding`, 'citation-link-next': `Volgende bronvermelding`, 'citation-link-previous': `Vorige bronvermelding`, 'citation-popover-label': `Bronvermeldingen`, 'composer-aria-label': `Typ hier je vraag`, 'composer-attachment-button-label': `Bestand bijvoegen`, 'composer-attachment-drop-overlay': `Bestand neerzetten om bij te voegen`, 'composer-attachment-error-reset': `Bijlagefout wissen`, 'composer-attachment-uploading-label': `Bijlage wordt geüpload`, 'composer-dictation-aria-label': `Spraakdicteren in-/uitschakelen`, 'composer-error-character-limit': `Tekenlimiet overschreden.`, 'composer-placeholder': `Typ hier je vraag...`, 'composer-plugin-empty': `Geen plugins gevonden`, 'composer-plugin-loading': `Plugins laden…`, 'composer-plugin-search-placeholder': `Plugins zoeken`, 'composer-plugin-tools-label': `Tools`, 'composer-send-aria-label': `Bericht verzenden`, 'composer-stop-aria-label': `Antwoord stoppen`, 'connection-overlay-description': `We proberen opnieuw verbinding te maken. Even geduld alstublieft.`, 'connection-overlay-title': `Service tijdelijk niet beschikbaar`, 'consent-dialog-consent-text': `Door op \"Ja\" te klikken, geef ik toestemming aan Visma Software AS om dit gesprek te bekijken ter verbetering van de dienst. Ik kan mijn toestemming op elk moment intrekken. Lees meer over bewaartermijnen en uw rechten in onze`, 'consent-dialog-description': `Help ons verbeteren! Om uw feedback beter te begrijpen, willen we graag het gesprek tussen u en GAiA bekijken.`, 'consent-dialog-no': `Nee`, 'consent-dialog-privacy-link': `privacyverklaring`, 'consent-dialog-title': `Huidig gesprek delen?`, 'consent-dialog-yes': `Ja`, 'context-changed-divider': `Context gewijzigd`, 'context-changed-section-added': `Toegevoegd`, 'context-changed-section-changed': `Gewijzigd`, 'context-changed-section-removed': `Verwijderd`, 'conversation-aria-label': `Gespreksberichten`, 'data-settings-revoke-all': `Toestemming voor eerdere gesprekken intrekken`, 'data-settings-revoke-error': `Toestemming intrekken mislukt. Probeer het opnieuw.`, 'data-settings-revoke-note': `Dit heeft geen invloed op de schakelaar hierboven. Schakel die uit om toekomstige gesprekken niet meer te delen.`, 'data-settings-revoke-success': `Toestemming ingetrokken voor alle eerdere gesprekken`, 'data-settings-sharing-label': `Gesprekken delen om de service te verbeteren`, 'disclaimer-link': `gebruiksvoorwaarden`, 'disclaimer-text': `Antwoorden worden gegenereerd door AI en kunnen fouten bevatten, lees meer`, 'error-boundary-fallback': `Er is iets misgegaan.`, 'error-forbidden': `Je hebt geen toegang tot deze actie.`, 'error-network-error': `Netwerkfout. Controleer je verbinding.`, 'error-not-found': `Niet gevonden.`, 'error-offline': `Je bent offline. Controleer je verbinding.`, 'error-profile-not-found': `Kon het huidige profiel niet laden. Gebruik je het juiste profiel?`, 'error-rate-limit': `Te veel verzoeken. Doe het rustig aan.`, 'error-request-canceled': `Verzoek geannuleerd.`, 'error-response-token-limit': `Het antwoord van de assistent is mogelijk onvolledig omdat het de maximale uitvoertokenlimiet heeft bereikt. Probeer het opnieuw met een specifiekere vraag of vraag de assistent om door te gaan.`, 'error-server-error': `Er is een probleem met de server. Probeer het opnieuw.`, 'error-session-expired': `Je sessie is verlopen. Log opnieuw in.`, 'error-something-went-wrong': `Er is iets misgegaan.`, 'error-sse-error': `Live-responsstroom onderbroken. Probeer het opnieuw.`, 'error-unexpected-error': `Onverwachte fout. Probeer het opnieuw.`, 'error-ws-error': `Verbindingsfout live chat. Opnieuw verbinden kan helpen.`, 'feedback-close-aria-label': `Feedbackformulier sluiten`, 'feedback-confirmation-message': `Bedankt voor je feedback!`, 'feedback-form-comment-placeholder': `Voer hier je opmerking in`, 'feedback-form-comments-title': `Nog andere opmerkingen?`, 'feedback-form-description': `Deel je ideëen en suggesties om ons te helpen verbeteren.`, 'feedback-form-rating-hint-high': `Zeer tevreden`, 'feedback-form-rating-hint-low': `Zeer ontevreden`, 'feedback-form-satisfaction-title--assistant': `Hoe tevreden ben je over de GAiA assistent?`, 'feedback-form-satisfaction-title--support': `Hoe tevreden ben je over de ontvangen hulp?`, 'feedback-form-submit': `Verzenden`, 'feedback-form-title': `Feedback`, 'feedback-privacy-id-copied': `Gekopieerd`, 'feedback-privacy-id-copy': `Kopieer privacy-ID`, 'feedback-privacy-id-hint': `Sla dit ID op; u heeft het nodig als u gegevensverwijdering wilt aanvragen.`, 'feedback-privacy-id-label': str`Uw unieke privacy-ID is`, 'header-toolbar-label': `Chatacties`, 'history-back-aria': `Terug naar chat`, 'history-empty': `Geen eerdere gesprekken.`, 'history-error': `Gesprekken konden niet worden geladen.`, 'history-item-cancel': `Annuleren`, 'history-item-delete-aria': `Gesprek verwijderen`, 'history-item-edit-label': `Gesprekstitel`, 'history-item-rename-aria': `Gesprek hernoemen`, 'history-item-save': `Opslaan`, 'history-item-untitled': `Naamloos`, 'history-loading': `Gesprekken laden…`, 'history-paging': `Meer wordt geladen…`, 'history-retry': `Opnieuw proberen`, 'history-title': `Geschiedenis`, 'message-aria-label-assistant': `Assistentbericht`, 'message-aria-label-operator': `Operatorbericht`, 'message-aria-label-system': `Systeembericht`, 'message-aria-label-user': `Je bericht`, 'message-attachment-image-alt': `Bijgevoegde afbeelding`, 'message-attachment-pdf-label': `PDF-document`, 'message-attachment-remove': `Bijlage verwijderen`, 'message-copy-done': `Gekopieerd`, 'message-copy-label': `Bericht kopiëren`, 'message-feedback-down-label': `Slecht antwoord`, 'message-feedback-up-label': `Goed antwoord`, 'modal-close-label': `Sluiten`, 'notification-close-aria-label': `Melding sluiten`, 'opens-in-new-tab': `opent in nieuw tabblad`, 'reasoning-thinking-complete': `Denken`, 'reasoning-thinking-indicator': `Denkt na…`, 'session-ended-feedback-prompt': `Hoe was uw ervaring met de supportmedewerker?`, 'session-ended-give-feedback': `Beoordeel uw ervaring`, 'session-ended-new-conversation': `Start nieuw gesprek`, 'session-ended-title': `Supportsessie beëindigd`, 'settings-back-aria': `Terug naar chat`, 'settings-back-to-menu-aria': `Terug naar instellingen`, 'settings-plugins-title': `Plugins en tools`, 'settings-region-label': `Instellingen`, 'settings-select-tool-aria': str`Tool ${0} selecteren`, 'settings-title': `Instellingen`, 'sharing-prompt-dialog-no': `Nee`, 'sharing-prompt-dialog-privacy-link': `privacyverklaring`, 'sharing-prompt-dialog-title': `Help GAiA verbeteren`, 'sharing-prompt-dialog-yes': `Ja`, 'sharing-prompt-inline-consent-text': `Door op \"Ja\" te klikken, geef ik toestemming aan Visma Software AS om dit gesprek te bekijken om de service te verbeteren. Ik kan mijn toestemming op elk moment intrekken. Lees meer in onze`, 'source-label-fallback': `Bron`, 'spinner-aria-label': `Laden`, 'suggested-questions-aria-label': `Voorgestelde vervolgvragen`, 'tag-dismiss-label': `Verwijderen`, 'thinking-indicator-sr-text': `Assistent is aan het nadenken`, 'thinking-indicator-text': `Aan het denken...`, 'tool-approval-approve-aria-label': `Actie goedkeuren`, 'tool-approval-approved-status': `Hulpmiddel goedgekeurd`, 'tool-approval-aria-label': `Actie vereist goedkeuring`, 'tool-approval-decline-aria-label': `Actie afwijzen`, 'tool-approval-declined-status': `Hulpmiddel afgewezen`, 'tool-approval-privacy-id-message': str`Uw unieke privacy-ID is ${0}. Bewaar dit ID; u heeft het nodig als u verwijdering van gegevens wilt aanvragen.`, 'tool-approval-privacy-link': `privacyverklaring`, 'tool-approval-share-conversation-consent': `Ik geef toestemming om dit gesprek te delen met de supportmedewerker`, 'tool-approval-share-conversation-description': `Om de supportmedewerker te helpen uw probleem beter te begrijpen, kunt u ervoor kiezen uw gesprek met GAiA te delen. Lees meer over bewaartermijnen en uw rechten in onze`, 'tool-status-no-results': `Geen resultaten gevonden`, 'tool-status-show-less': `Minder tonen`, 'tool-status-show-more': `Meer tonen`, 'tool-status-unable-display-response': `[Kan antwoord niet weergeven]`, 'tooltip-close-chat': `Chat sluiten`, 'tooltip-data-settings': `Gegevensinstellingen`, 'tooltip-history': `Gespreksgeschiedenis`, 'tooltip-new-chat': `Nieuwe chat`, 'tooltip-open-feedback': `Feedback openen`, 'tooltip-settings': `Instellingen`, 'typing-indicator-aria-label': `Operator is aan het typen`, }"}],"exports":[{"kind":"js","name":"templates","declaration":{"name":"templates","module":"generated/locales/nl.js"}}]},{"kind":"javascript-module","path":"generated/locales/sv.js","declarations":[{"kind":"variable","name":"templates","type":{"text":"object"},"default":"{ 'activity-support-begin': `Du har kopplats till support`, 'activity-support-end': `Supportsessionen avslutad`, 'app-region-label': `Chattassistent`, 'assistant-message-approve': `Ja`, 'assistant-message-decline': `Nej`, 'attachment-error-too-large': `Bilagan är för stor. Ladda upp en mindre fil.`, 'attachment-error-unsupported-type': `Endast bildfiler och PDF:er som stöds accepteras.`, 'attachment-upload-failed': `Det gick inte att ladda upp bilagan.`, 'canvas-preview-title': `Canvas-förhandsvisning`, 'canvas-render-timeout-error': `Canvas-renderingen överskred tidsgränsen på 30 sekunder`, 'canvas-toolbar-close-canvas': `Stäng canvas`, 'canvas-toolbar-code-tab': `Kod`, 'canvas-toolbar-download-pdf': `Ladda ner PDF`, 'canvas-toolbar-preview-tab': `Förhandsgranskning`, 'citation-link-label': `Källa`, 'citation-link-next': `Nästa källa`, 'citation-link-previous': `Föregående källa`, 'citation-popover-label': `Källhänvisningar`, 'composer-aria-label': `Skriv din fråga här`, 'composer-attachment-button-label': `Bifoga en fil`, 'composer-attachment-drop-overlay': `Släpp filen för att bifoga`, 'composer-attachment-error-reset': `Rensa bilagefel`, 'composer-attachment-uploading-label': `Laddar upp bilaga`, 'composer-dictation-aria-label': `Slå på/av röstdiktering`, 'composer-error-character-limit': `Teckenbegränsningen har överskridits.`, 'composer-placeholder': `Skriv din fråga här...`, 'composer-plugin-empty': `Inga plugins hittades`, 'composer-plugin-loading': `Läser in plugins…`, 'composer-plugin-search-placeholder': `Sök efter plugins`, 'composer-plugin-tools-label': `Verktyg`, 'composer-send-aria-label': `Skicka meddelande`, 'composer-stop-aria-label': `Stoppa svaret`, 'connection-overlay-description': `Vi försöker återansluta. Vänta ett ögonblick.`, 'connection-overlay-title': `Tjänsten är tillfälligt otillgänglig`, 'consent-dialog-consent-text': `Genom att klicka \"Ja\" samtycker jag till att Visma Software AS kan granska denna konversation för att förbättra tjänsten. Jag kan återkalla mitt samtycke när som helst. Läs mer om lagringstider och dina rättigheter i vår`, 'consent-dialog-description': `Hjälp oss att bli bättre! För att bättre förstå din feedback vill vi gärna granska konversationen mellan dig och GAiA.`, 'consent-dialog-no': `Nej`, 'consent-dialog-privacy-link': `integritetspolicy`, 'consent-dialog-title': `Dela samtalshistoriken?`, 'consent-dialog-yes': `Ja`, 'context-changed-divider': `Kontexten har ändrats`, 'context-changed-section-added': `Tillagt`, 'context-changed-section-changed': `Ändrat`, 'context-changed-section-removed': `Borttaget`, 'conversation-aria-label': `Konversationsmeddelanden`, 'data-settings-revoke-all': `Återkalla samtycke för tidigare konversationer`, 'data-settings-revoke-error': `Kunde inte återkalla samtycket. Försök igen.`, 'data-settings-revoke-note': `Detta påverkar inte reglaget ovan. Stäng av reglaget för att sluta dela framtida konversationer.`, 'data-settings-revoke-success': `Samtycke återkallat för alla tidigare konversationer`, 'data-settings-sharing-label': `Dela konversationer för att förbättra tjänsten`, 'disclaimer-link': `användarvillkor`, 'disclaimer-text': `Svar genereras av AI och kan innehålla fel, läs mer`, 'error-boundary-fallback': `Något gick fel.`, 'error-forbidden': `Du har inte behörighet till denna åtgärd.`, 'error-network-error': `Nätverksfel. Kontrollera din anslutning.`, 'error-not-found': `Hittades inte.`, 'error-offline': `Du är offline. Kontrollera din anslutning.`, 'error-profile-not-found': `Kunde inte ladda den aktuella profilen. Använder du rätt profil?`, 'error-rate-limit': `För många förfrågningar. Vänligen sakta ner.`, 'error-request-canceled': `Förfrågan avbröts.`, 'error-response-token-limit': `Assistentens svar kan vara ofullständigt eftersom det nådde den maximala gränsen för utdatatoken. Försök igen med en mer specifik fråga eller be assistenten att fortsätta.`, 'error-server-error': `Servern hade ett problem. Vänligen försök igen.`, 'error-session-expired': `Din session har löpt ut. Vänligen logga in igen.`, 'error-something-went-wrong': `Något gick fel.`, 'error-sse-error': `Live-svarströmmen avbröts. Försök igen.`, 'error-unexpected-error': `Oväntat fel. Vänligen försök igen.`, 'error-ws-error': `Fel vid livechattanslutning. Att återansluta kan hjälpa.`, 'feedback-close-aria-label': `Stäng feedbackformulär`, 'feedback-confirmation-message': `Tack för din feedback!`, 'feedback-form-comment-placeholder': `Skriv din kommentar här`, 'feedback-form-comments-title': `Några ytterligare kommentarer?`, 'feedback-form-description': `Dela gärna dina tankar och förslag för att hjälpa oss att bli bättre.`, 'feedback-form-rating-hint-high': `Mycket nöjd`, 'feedback-form-rating-hint-low': `Mycket missnöjd`, 'feedback-form-satisfaction-title--assistant': `Hur nöjd är du med GAiA assistenten?`, 'feedback-form-satisfaction-title--support': `Hur nöjd är du med hjälpen du fick?`, 'feedback-form-submit': `Skicka`, 'feedback-form-title': `Feedback`, 'feedback-privacy-id-copied': `Kopierat`, 'feedback-privacy-id-copy': `Kopiera integritets-ID`, 'feedback-privacy-id-hint': `Vänligen spara detta ID; du behöver det om du vill begära radering av data.`, 'feedback-privacy-id-label': str`Ditt unika integritets-ID är`, 'header-toolbar-label': `Chattåtgärder`, 'history-back-aria': `Tillbaka till chatten`, 'history-empty': `Inga tidigare konversationer.`, 'history-error': `Kunde inte läsa in konversationer.`, 'history-item-cancel': `Avbryt`, 'history-item-delete-aria': `Ta bort konversation`, 'history-item-edit-label': `Konversationens titel`, 'history-item-rename-aria': `Byt namn på konversation`, 'history-item-save': `Spara`, 'history-item-untitled': `Namnlös`, 'history-loading': `Läser in konversationer…`, 'history-paging': `Läser in fler…`, 'history-retry': `Försök igen`, 'history-title': `Historik`, 'message-aria-label-assistant': `Assistentmeddelande`, 'message-aria-label-operator': `Operatörsmeddelande`, 'message-aria-label-system': `Systemmeddelande`, 'message-aria-label-user': `Ditt meddelande`, 'message-attachment-image-alt': `Bifogad bild`, 'message-attachment-pdf-label': `PDF-dokument`, 'message-attachment-remove': `Ta bort bilaga`, 'message-copy-done': `Kopierat`, 'message-copy-label': `Kopiera meddelande`, 'message-feedback-down-label': `Dåligt svar`, 'message-feedback-up-label': `Bra svar`, 'modal-close-label': `Stäng`, 'notification-close-aria-label': `Stäng avisering`, 'opens-in-new-tab': `öppnas i ny flik`, 'reasoning-thinking-complete': `Tänker`, 'reasoning-thinking-indicator': `Tänker…`, 'session-ended-feedback-prompt': `Hur var din upplevelse med supportoperatören?`, 'session-ended-give-feedback': `Betygsätt din upplevelse`, 'session-ended-new-conversation': `Starta ny konversation`, 'session-ended-title': `Supportsessionen har avslutats`, 'settings-back-aria': `Tillbaka till chatten`, 'settings-back-to-menu-aria': `Tillbaka till inställningarna`, 'settings-plugins-title': `Plugins och verktyg`, 'settings-region-label': `Inställningar`, 'settings-select-tool-aria': str`Välj verktyget ${0}`, 'settings-title': `Inställningar`, 'sharing-prompt-dialog-no': `Nej`, 'sharing-prompt-dialog-privacy-link': `integritetspolicy`, 'sharing-prompt-dialog-title': `Hjälp till att förbättra GAiA`, 'sharing-prompt-dialog-yes': `Ja`, 'sharing-prompt-inline-consent-text': `Genom att klicka på \"Ja\" samtycker jag till att Visma Software AS granskar den här konversationen för att förbättra tjänsten. Jag kan återkalla mitt samtycke när som helst. Läs mer i vår`, 'source-label-fallback': `Källa`, 'spinner-aria-label': `Laddar`, 'suggested-questions-aria-label': `Föreslagna uppföljningsfrågor`, 'tag-dismiss-label': `Ta bort`, 'thinking-indicator-sr-text': `Assistenten tänker`, 'thinking-indicator-text': `Tänker...`, 'tool-approval-approve-aria-label': `Godkänn åtgärd`, 'tool-approval-approved-status': `Verktyg godkänt`, 'tool-approval-aria-label': `Åtgärd kräver godkännande`, 'tool-approval-decline-aria-label': `Avslå åtgärd`, 'tool-approval-declined-status': `Verktyg avvisat`, 'tool-approval-privacy-id-message': str`Ditt unika integritets-ID är ${0}. Vänligen spara detta ID; du kommer att behöva det om du vill begära radering av data.`, 'tool-approval-privacy-link': `integritetspolicy`, 'tool-approval-share-conversation-consent': `Jag samtycker till att dela denna konversation med supportagenten`, 'tool-approval-share-conversation-description': `För att hjälpa supportagenten att bättre förstå ditt ärende kan du välja att dela din konversation med GAiA. Läs mer om lagringstider och dina rättigheter i vår`, 'tool-status-no-results': `Inga resultat hittades`, 'tool-status-show-less': `Visa mindre`, 'tool-status-show-more': `Visa mer`, 'tool-status-unable-display-response': `[Kan inte visa svaret]`, 'tooltip-close-chat': `Stäng chatt`, 'tooltip-data-settings': `Datainställningar`, 'tooltip-history': `Konversationshistorik`, 'tooltip-new-chat': `Ny chatt`, 'tooltip-open-feedback': `Öppna feedback`, 'tooltip-settings': `Inställningar`, 'typing-indicator-aria-label': `Operatör skriver`, }"}],"exports":[{"kind":"js","name":"templates","declaration":{"name":"templates","module":"generated/locales/sv.js"}}]},{"kind":"javascript-module","path":"globals.d.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"index.js","declarations":[],"exports":[{"kind":"js","name":"AuthFailedEvent","declaration":{"name":"AuthFailedEvent","package":"@/types"}},{"kind":"js","name":"CanvasLayoutChangedEvent","declaration":{"name":"CanvasLayoutChangedEvent","package":"@/types"}},{"kind":"js","name":"ConversationRestoredEvent","declaration":{"name":"ConversationRestoredEvent","package":"@/types"}},{"kind":"js","name":"InlineQuestionClickEvent","declaration":{"name":"InlineQuestionClickEvent","package":"@/types"}},{"kind":"js","name":"ToolCallEvent","declaration":{"name":"ToolCallEvent","package":"@/types"}},{"kind":"js","name":"validateFrontendTools","declaration":{"name":"validateFrontendTools","package":"@/types"}},{"kind":"js","name":"AuthFailedEventDetail","declaration":{"name":"AuthFailedEventDetail","package":"@/types"}},{"kind":"js","name":"AuthFailedReason","declaration":{"name":"AuthFailedReason","package":"@/types"}},{"kind":"js","name":"ConversationRestoredEventDetail","declaration":{"name":"ConversationRestoredEventDetail","package":"@/types"}},{"kind":"js","name":"ConversationSummary","declaration":{"name":"ConversationSummary","package":"@/types"}},{"kind":"js","name":"FrontendTool","declaration":{"name":"FrontendTool","package":"@/types"}},{"kind":"js","name":"HostContext","declaration":{"name":"HostContext","package":"@/types"}},{"kind":"js","name":"HostContextProvider","declaration":{"name":"HostContextProvider","package":"@/types"}},{"kind":"js","name":"HostContextSnapshot","declaration":{"name":"HostContextSnapshot","package":"@/types"}},{"kind":"js","name":"registerIcons","declaration":{"name":"registerIcons","package":"@/components/primitives/icon/icon-registry"}},{"kind":"js","name":"IconName","declaration":{"name":"IconName","package":"@/components/primitives/icon/icon-registry"}},{"kind":"js","name":"ChatApp","declaration":{"name":"ChatApp","module":"index.js"}}]},{"kind":"javascript-module","path":"services/agent-service.test.js","declarations":[{"kind":"variable","name":"messages"}],"exports":[]},{"kind":"javascript-module","path":"services/agent-service.js","declarations":[{"kind":"function","name":"convertThreadMessages","return":{"type":{"text":"AgUiMessage[]"}},"parameters":[{"name":"messages","type":{"text":"unknown[]"}}],"description":"Convert backend thread messages to AG-UI Message format.\n\nHandles operator messages which come in two formats:\n1. Legacy: `{ role: 'operator', name, avatarUrl, content }`\n2. Current: `{ role: 'assistant', operator: { id, name, email, pictureUrl }, content }`"},{"kind":"class","description":"Service for managing the AG-UI HttpAgent and agent-related API calls.\nAlso serves as the single source of truth for messages via subscription.\n\nAgent lifecycle:\n- `getOrCreateAgent()` creates or reuses an agent for a profile/thread\n- `runAgent()` creates a new agent with fresh headers, runs it, then\n promotes it to `this.agent` only after the run completes. This prevents\n overlapping runs from corrupting the active agent reference.","name":"AgentService","members":[{"kind":"field","name":"agent","type":{"text":"HttpAgent | null"},"privacy":"private","default":"null"},{"kind":"field","name":"activeRunAgent","type":{"text":"HttpAgent | null"},"privacy":"private","default":"null"},{"kind":"field","name":"currentRunAbortController","type":{"text":"AbortController | null"},"privacy":"private","default":"null"},{"kind":"field","name":"currentProfileId","type":{"text":"string | null"},"privacy":"private","default":"null"},{"kind":"field","name":"messageSubscribers","privacy":"private","default":"new Set<MessagesChangedCallback>()"},{"kind":"field","name":"notifyThrottleId","type":{"text":"ReturnType<typeof setTimeout> | null"},"privacy":"private","default":"null"},{"kind":"field","name":"pendingNotify","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"field","name":"converter","privacy":"private","readonly":true,"default":"new MessageConverter()"},{"kind":"method","name":"getCurrentAgent","return":{"type":{"text":"HttpAgent | null"}},"description":"Get the current HttpAgent instance, if one exists.\nDuring an active run, returns the run's agent so messages are read\nfrom the agent that is actively receiving events."},{"kind":"method","name":"getOrCreateAgent","return":{"type":{"text":"HttpAgent"}},"parameters":[{"name":"profileId","type":{"text":"string"}},{"name":"threadId","optional":true,"type":{"text":"string"}}],"description":"Get or create an HttpAgent for the given profile and thread."},{"kind":"method","name":"runAgent","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"agent","type":{"text":"HttpAgent"}},{"name":"parameters","type":{"text":"RunAgentParameters"}},{"name":"subscriber","type":{"text":"AgentSubscriber"}}],"description":"Run the agent with the given parameters.\n\nCreates a new HttpAgent with fresh auth headers for each run.\nThe new agent is set as `activeRunAgent` during execution so that\n`getCurrentAgent()` and `getMessages()` read from the running agent.\nAfter the run completes (success or failure), the agent reference\nis promoted to `this.agent`."},{"kind":"method","name":"abortCurrentRun","return":{"type":{"text":"void"}},"description":"Abort the current agent run if one is in progress."},{"kind":"method","name":"getThreadState","return":{"type":{"text":"Promise<AgUiThreadState>"}},"parameters":[{"name":"threadId","type":{"text":"string"}},{"name":"profileId","optional":true,"type":{"text":"string"}}],"description":"Get thread state from the agent endpoint for rehydration."},{"kind":"method","name":"restoreSession","return":{"type":{"text":""}},"parameters":[{"name":"profileId","type":{"text":"string"},"description":"The profile ID for agent creation"},{"name":"threadId","type":{"text":"string | null"},"description":"The thread ID to restore (null if no stored session)"}],"description":"Restore a session from a stored thread ID.\nFetches thread state and converts messages to AG-UI format."},{"kind":"method","name":"addMessage","return":{"type":{"text":"void"}},"parameters":[{"name":"message","type":{"text":"AgUiMessage"}}],"description":"Add a message to the current agent (AG-UI format).\nNotifies subscribers of the change."},{"kind":"method","name":"setMessages","return":{"type":{"text":"void"}},"parameters":[{"name":"messages","type":{"text":"AgUiMessage[]"}}],"description":"Set messages on the current agent (AG-UI format).\nNotifies subscribers of the change."},{"kind":"method","name":"addInternalMessage","return":{"type":{"text":"void"}},"parameters":[{"name":"message","type":{"text":"InternalMessage"}}],"description":"Add a message using internal types. Converts to AG-UI format internally."},{"kind":"method","name":"setInternalMessages","return":{"type":{"text":"void"}},"parameters":[{"name":"messages","type":{"text":"InternalMessage[]"}}],"description":"Replace all messages using internal types."},{"kind":"method","name":"getInternalMessages","return":{"type":{"text":"InternalMessage[]"}},"description":"Get current messages as InternalMessage[]."},{"kind":"method","name":"getMessages","return":{"type":{"text":"AgUiMessage[]"}},"description":"Get the current agent's messages (AG-UI format)."},{"kind":"method","name":"getState","return":{"type":{"text":"unknown"}},"description":"Get the current agent's state."},{"kind":"method","name":"clear","return":{"type":{"text":"void"}},"description":"Clear the current agent.\nNotifies subscribers of the change."},{"kind":"method","name":"subscribeToMessages","return":{"type":{"text":"() => void"}},"parameters":[{"name":"callback","type":{"text":"MessagesChangedCallback"}}],"description":"Subscribe to message changes.\nReturns an unsubscribe function.\nCallback receives InternalMessage[] (converted from AG-UI)."},{"kind":"method","name":"notifyMessageSubscribers","privacy":"private","return":{"type":{"text":"void"}},"description":"Notify all subscribers of message changes.\nThrottled to ~30fps (33ms) during active streaming to reduce\nredundant mapper calls and re-renders. Fires immediately on the\nfirst call, then defers subsequent calls until the throttle window expires."},{"kind":"method","name":"flushPendingNotify","privacy":"private","return":{"type":{"text":"void"}},"description":"Flush any pending throttled notification."},{"kind":"method","name":"doNotify","privacy":"private","return":{"type":{"text":"void"}},"description":"Deliver messages to all subscribers immediately.\nConverts AG-UI messages to InternalMessage[] before emitting."},{"kind":"method","name":"getAuthHeaders","privacy":"private","return":{"type":{"text":"Promise<Record<string, string>>"}},"description":"Get authentication headers for API requests."}]}],"exports":[{"kind":"js","name":"convertThreadMessages","declaration":{"name":"convertThreadMessages","module":"services/agent-service.js"}},{"kind":"js","name":"AgentService","declaration":{"name":"AgentService","module":"services/agent-service.js"}}]},{"kind":"javascript-module","path":"services/api-client.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"services/api-client.js","declarations":[{"kind":"class","description":"","name":"ApiError","members":[{"kind":"field","name":"isUnauthorized","readonly":true},{"kind":"field","name":"isForbidden","readonly":true},{"kind":"field","name":"isNotFound","readonly":true},{"kind":"field","name":"isServerError","readonly":true},{"kind":"field","name":"isNetworkError","readonly":true},{"kind":"field","name":"name","type":{"text":"string"},"default":"'ApiError'"}],"superclass":{"name":"Error","module":"src/services/api-client.ts"}},{"kind":"function","name":"buildApiError","parameters":[{"name":"res","type":{"text":"Response"}}]},{"kind":"function","name":"ensureOk","parameters":[{"name":"res","type":{"text":"Response"}}]},{"kind":"function","name":"ensureBody","parameters":[{"name":"res","type":{"text":"Response"}}]},{"kind":"function","name":"ensureBodyJson","return":{"type":{"text":"Promise<T>"}},"parameters":[{"name":"res","type":{"text":"Response"}}]},{"kind":"class","description":"","name":"ApiClient","members":[{"kind":"field","name":"version","privacy":"private","readonly":true},{"kind":"field","name":"_baseUrl","type":{"text":"string"},"privacy":"private","default":"baseUrl"},{"kind":"field","name":"authService","type":{"text":"AuthService | null"},"privacy":"private","default":"null"},{"kind":"field","name":"retryConfig","type":{"text":"RetryConfig"},"privacy":"private","default":"{ ...DEFAULT_RETRY_CONFIG, ...retryConfig }"},{"kind":"field","name":"onAuthFailed","type":{"text":"AuthFailedCallback | null"},"privacy":"private","default":"null"},{"kind":"method","name":"setOnAuthFailed","return":{"type":{"text":"void"}},"parameters":[{"name":"callback","type":{"text":"AuthFailedCallback | null"}}]},{"kind":"method","name":"notifyAuthFailed","return":{"type":{"text":"void"}},"parameters":[{"name":"phase","type":{"text":"'acquire' | 'request'"}},{"name":"reason","default":"'unauthorized'","type":{"text":"AuthFailedReason"}}],"description":"Notify the host that auth acquisition failed.\nUsed by AgentService when AG-UI runs fail to acquire auth headers."},{"kind":"field","name":"baseUrl","type":{"text":"string"}},{"kind":"method","name":"setAuthService","return":{"type":{"text":"void"}},"parameters":[{"name":"authService","type":{"text":"AuthService | null"}}],"description":"Set the auth service."},{"kind":"method","name":"getAuthService","return":{"type":{"text":"AuthService | null"}},"description":"Get the current auth service."},{"kind":"method","name":"getAuthHeader","return":{"type":{"text":"Promise<{ name: string; value: string } | null>"}},"description":"Get the current authentication header for external use (e.g., HttpAgent).\nReturns the header name and value based on the current auth service."},{"kind":"method","name":"request","parameters":[{"name":"input","type":{"text":"RequestInfo | URL"}},{"name":"init","default":"{}","type":{"text":"RequestInit"}}]},{"kind":"method","name":"getProfilePluginSelections","return":{"type":{"text":"Promise<ReadonlyArray<AgentPluginSelection>>"}},"parameters":[{"name":"profileId","type":{"text":"string"}}]},{"kind":"method","name":"updateProfilePluginSelections","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"profileId","type":{"text":"string"}},{"name":"activePluginIds","type":{"text":"ReadonlyArray<string>"}}]},{"kind":"method","name":"getProfileToolSelections","return":{"type":{"text":"Promise<ReadonlyArray<AgentToolSelection>>"}},"parameters":[{"name":"profileId","type":{"text":"string"}}]},{"kind":"method","name":"updateProfileToolSelections","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"profileId","type":{"text":"string"}},{"name":"activeTools","type":{"text":"ReadonlyArray<ScopedToolSelection>"}}]},{"kind":"method","name":"updateProfileSelections","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"profileId","type":{"text":"string"}},{"name":"activePluginIds","type":{"text":"ReadonlyArray<string>"}},{"name":"activeTools","type":{"text":"ReadonlyArray<ScopedToolSelection>"}}]},{"kind":"method","name":"retryWithBackoff","privacy":"private","return":{"type":{"text":"Promise<Response>"}},"parameters":[{"name":"sendRequest","type":{"text":"() => Promise<Response>"}},{"name":"lastResponse","type":{"text":"Response"}}]},{"kind":"method","name":"handleAuthRetry","privacy":"private","parameters":[{"name":"sendRequest","type":{"text":"() => Promise<Response>"}}]},{"kind":"method","name":"sendRequestOnce","privacy":"private","parameters":[{"name":"input","type":{"text":"RequestInfo | URL"}},{"name":"init","default":"{}","type":{"text":"RequestInit"}}]},{"kind":"method","name":"composeHeaders","privacy":"private","parameters":[{"name":"initial","type":{"text":"HeadersInit | undefined"}}]},{"kind":"method","name":"formatUrl","privacy":"private","parameters":[{"name":"input","type":{"text":"RequestInfo | URL"}}]}]}],"exports":[{"kind":"js","name":"ApiError","declaration":{"name":"ApiError","module":"services/api-client.js"}},{"kind":"js","name":"buildApiError","declaration":{"name":"buildApiError","module":"services/api-client.js"}},{"kind":"js","name":"ensureOk","declaration":{"name":"ensureOk","module":"services/api-client.js"}},{"kind":"js","name":"ensureBody","declaration":{"name":"ensureBody","module":"services/api-client.js"}},{"kind":"js","name":"ensureBodyJson","declaration":{"name":"ensureBodyJson","module":"services/api-client.js"}},{"kind":"js","name":"ApiClient","declaration":{"name":"ApiClient","module":"services/api-client.js"}}]},{"kind":"javascript-module","path":"services/api-schemas.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"services/api-schemas.js","declarations":[{"kind":"function","name":"__resetBootstrapWarnDedup","return":{"type":{"text":"void"}},"description":"Test-only: reset all warn state (warnedPaths + contractSkewWarned) so each test asserts warnings independently."},{"kind":"variable","name":"BOOTSTRAP_CONTRACT_VERSION","type":{"text":"number"},"default":"1"},{"kind":"function","name":"warnOnContractSkew","return":{"type":{"text":"void"}},"parameters":[{"name":"emittedVersion","type":{"text":"number | undefined"}}],"description":"Warn (once per session) when the backend emits a bootstrap contract newer than this bundle\nunderstands. The resilient schema absorbs the unknown shape; this surfaces the deploy skew."},{"kind":"variable","name":"bootstrapConfigSchema"},{"kind":"variable","name":"threadStateSchema"},{"kind":"variable","name":"agentPluginSelectionListSchema"},{"kind":"variable","name":"updateAgentPluginSelectionRequestSchema"},{"kind":"variable","name":"agentToolSelectionListSchema"},{"kind":"variable","name":"updateAgentToolSelectionRequestSchema"},{"kind":"variable","name":"updateAgentSelectionRequestSchema"},{"kind":"variable","name":"conversationSummarySchema"},{"kind":"variable","name":"conversationSummariesSchema"},{"kind":"function","name":"parseBootstrapConfig","return":{"type":{"text":"z.infer<typeof bootstrapConfigSchema>"}},"parameters":[{"name":"data","type":{"text":"unknown"}}],"description":"Parse a bootstrap config response. Never throws — including on a non-object root\n(null / array / string / number): malformed optional fields degrade to absent,\nload-bearing fields fall back to safe defaults, and a wholly-unusable root yields a\nsafe empty config. Each distinct defect is logged once via console.warn."},{"kind":"function","name":"parseThreadState","parameters":[{"name":"data","type":{"text":"unknown"}}],"description":"Parse and validate a thread state response.\nThrows ZodError on validation failure."},{"kind":"function","name":"parseAgentPluginSelections","parameters":[{"name":"data","type":{"text":"unknown"}}],"description":"Parse and validate /agent/{profileId}/plugins response.\nThrows ZodError on validation failure."},{"kind":"function","name":"parseUpdateAgentPluginSelectionRequest","parameters":[{"name":"data","type":{"text":"unknown"}}],"description":"Parse and validate /agent/{profileId}/plugins/selection request payload.\nThrows ZodError on validation failure."},{"kind":"function","name":"parseAgentToolSelections","parameters":[{"name":"data","type":{"text":"unknown"}}],"description":"Parse and validate /agent/{profileId}/tools response.\nThrows ZodError on validation failure."},{"kind":"function","name":"parseUpdateAgentToolSelectionRequest","parameters":[{"name":"data","type":{"text":"unknown"}}],"description":"Parse and validate /agent/{profileId}/tools/selection request payload.\nThrows ZodError on validation failure."},{"kind":"function","name":"parseUpdateAgentSelectionRequest","parameters":[{"name":"data","type":{"text":"unknown"}}],"description":"Parse and validate /agent/{profileId}/selection request payload.\nThrows ZodError on validation failure."},{"kind":"function","name":"parseConversationSummaries","parameters":[{"name":"data","type":{"text":"unknown"}}],"description":"Parse and validate the list of conversation summaries returned by\nGET /api/v1/conversations."}],"exports":[{"kind":"js","name":"__resetBootstrapWarnDedup","declaration":{"name":"__resetBootstrapWarnDedup","module":"services/api-schemas.js"}},{"kind":"js","name":"BOOTSTRAP_CONTRACT_VERSION","declaration":{"name":"BOOTSTRAP_CONTRACT_VERSION","module":"services/api-schemas.js"}},{"kind":"js","name":"warnOnContractSkew","declaration":{"name":"warnOnContractSkew","module":"services/api-schemas.js"}},{"kind":"js","name":"bootstrapConfigSchema","declaration":{"name":"bootstrapConfigSchema","module":"services/api-schemas.js"}},{"kind":"js","name":"threadStateSchema","declaration":{"name":"threadStateSchema","module":"services/api-schemas.js"}},{"kind":"js","name":"agentPluginSelectionListSchema","declaration":{"name":"agentPluginSelectionListSchema","module":"services/api-schemas.js"}},{"kind":"js","name":"updateAgentPluginSelectionRequestSchema","declaration":{"name":"updateAgentPluginSelectionRequestSchema","module":"services/api-schemas.js"}},{"kind":"js","name":"agentToolSelectionListSchema","declaration":{"name":"agentToolSelectionListSchema","module":"services/api-schemas.js"}},{"kind":"js","name":"updateAgentToolSelectionRequestSchema","declaration":{"name":"updateAgentToolSelectionRequestSchema","module":"services/api-schemas.js"}},{"kind":"js","name":"updateAgentSelectionRequestSchema","declaration":{"name":"updateAgentSelectionRequestSchema","module":"services/api-schemas.js"}},{"kind":"js","name":"conversationSummarySchema","declaration":{"name":"conversationSummarySchema","module":"services/api-schemas.js"}},{"kind":"js","name":"conversationSummariesSchema","declaration":{"name":"conversationSummariesSchema","module":"services/api-schemas.js"}},{"kind":"js","name":"parseBootstrapConfig","declaration":{"name":"parseBootstrapConfig","module":"services/api-schemas.js"}},{"kind":"js","name":"parseThreadState","declaration":{"name":"parseThreadState","module":"services/api-schemas.js"}},{"kind":"js","name":"parseAgentPluginSelections","declaration":{"name":"parseAgentPluginSelections","module":"services/api-schemas.js"}},{"kind":"js","name":"parseUpdateAgentPluginSelectionRequest","declaration":{"name":"parseUpdateAgentPluginSelectionRequest","module":"services/api-schemas.js"}},{"kind":"js","name":"parseAgentToolSelections","declaration":{"name":"parseAgentToolSelections","module":"services/api-schemas.js"}},{"kind":"js","name":"parseUpdateAgentToolSelectionRequest","declaration":{"name":"parseUpdateAgentToolSelectionRequest","module":"services/api-schemas.js"}},{"kind":"js","name":"parseUpdateAgentSelectionRequest","declaration":{"name":"parseUpdateAgentSelectionRequest","module":"services/api-schemas.js"}},{"kind":"js","name":"parseConversationSummaries","declaration":{"name":"parseConversationSummaries","module":"services/api-schemas.js"}}]},{"kind":"javascript-module","path":"services/auth-service.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"services/auth-service.js","declarations":[{"kind":"class","description":"Structured error thrown by AuthService to convey specific failure reasons.","name":"AuthError","members":[{"kind":"field","name":"name","type":{"text":"string"},"default":"'AuthError'"}],"superclass":{"name":"Error","module":"src/services/auth-service.ts"}},{"kind":"class","description":"","name":"AuthService","members":[{"kind":"field","name":"token","type":{"text":"TokenInfo | null"},"privacy":"private","default":"null","description":"Cached token (visitor only — visma never caches)."},{"kind":"field","name":"refreshPromise","type":{"text":"Promise<string | null> | null"},"privacy":"private","default":"null","description":"Deduplication promise for concurrent getToken() calls."},{"kind":"field","name":"lastIdentifier","type":{"text":"string | null"},"privacy":"private","default":"null","description":"Identity tracking — stored separately because visma doesn't cache tokens."},{"kind":"field","name":"generation","type":{"text":"number"},"privacy":"private","default":"0","description":"Monotonically increasing counter to ignore stale/timed-out tokenProvider resolutions."},{"kind":"field","name":"config","type":{"text":"AuthConfig"},"privacy":"private","default":"config"},{"kind":"field","name":"STORAGE_KEY","type":{"text":"string"},"privacy":"private","readonly":true,"default":"'gaia-chat:visitor-token'"},{"kind":"method","name":"updateConfig","return":{"type":{"text":"void"}},"parameters":[{"name":"config","type":{"text":"AuthConfig"}}],"description":"Update the auth configuration.\nCall this when the strategy or token provider changes."},{"kind":"method","name":"getToken","return":{"type":{"text":"Promise<string | null>"}},"description":"Get the current access token, refreshing if necessary.\nThrows AuthError on structural failures. Returns null only on unrecoverable failure."},{"kind":"method","name":"getHeaderName","return":{"type":{"text":"string"}},"description":"Get the HTTP header name for this auth strategy."},{"kind":"method","name":"formatHeader","return":{"type":{"text":"string"}},"parameters":[{"name":"token","type":{"text":"string"}}],"description":"Format the token value for the HTTP header."},{"kind":"method","name":"getIdentifier","return":{"type":{"text":"string | null"}},"description":"Get the user/visitor identifier from the last successful auth."},{"kind":"method","name":"invalidate","return":{"type":{"text":"void"}},"description":"Invalidate the current token and clear storage."},{"kind":"method","name":"getStrategy","return":{"type":{"text":"AuthStrategy"}},"description":"Get the current strategy name."},{"kind":"method","name":"forceRefresh","return":{"type":{"text":"Promise<string | null>"}},"description":"Force a token refresh."},{"kind":"method","name":"getVismaToken","privacy":"private","return":{"type":{"text":"Promise<string | null>"}},"description":"Get a visma token. Never cached — always calls tokenProvider.\nConcurrent calls are deduplicated via refreshPromise."},{"kind":"method","name":"fetchVismaToken","privacy":"private","return":{"type":{"text":"Promise<string | null>"}}},{"kind":"method","name":"refreshVisitor","privacy":"private","return":{"type":{"text":"Promise<string | null>"}}},{"kind":"method","name":"fetchVisitorToken","privacy":"private","return":{"type":{"text":"Promise<string>"}}},{"kind":"method","name":"parseAndValidateToken","privacy":"private","return":{"type":{"text":"TokenInfo"}},"parameters":[{"name":"raw","type":{"text":"string"}}],"description":"Parse and validate a JWT token. Throws AuthError on failure.\n\nSecurity note: We intentionally use decode() without signature verification.\nThis is a frontend client where tokens originate from trusted sources (our\nbackend API or the host app's OAuth provider). The actual signature\nverification happens server-side on every API request. Client-side\nverification would require exposing signing keys, which is a security\nanti-pattern. We only extract exp/sub for caching and display purposes."},{"kind":"method","name":"isExpired","privacy":"private","return":{"type":{"text":"boolean"}},"parameters":[{"name":"token","type":{"text":"TokenInfo"}}]},{"kind":"method","name":"loadFromStorage","privacy":"private","return":{"type":{"text":"void"}}}]}],"exports":[{"kind":"js","name":"AuthError","declaration":{"name":"AuthError","module":"services/auth-service.js"}},{"kind":"js","name":"AuthService","declaration":{"name":"AuthService","module":"services/auth-service.js"}}]},{"kind":"javascript-module","path":"services/conversations-client.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"services/conversations-client.js","declarations":[{"kind":"class","description":"","name":"ConversationsClient","members":[{"kind":"method","name":"list","return":{"type":{"text":"Promise<ConversationSummary[]>"}},"parameters":[{"name":"profileId","type":{"text":"string"}},{"name":"options","default":"{}","type":{"text":"ListConversationsOptions"}}],"description":"List conversations for the given profile, newest first. Pagination uses the\n`offset` query param on the backend; pair it with `limit` to page through\nresults. The call returns fewer than `limit` rows when the end of the list\nis reached — callers use that as the \"hasMore = false\" signal."},{"kind":"method","name":"rename","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"id","type":{"text":"string"}},{"name":"title","type":{"text":"string"}}],"description":"Rename a conversation. The backend rejects empty titles."},{"kind":"method","name":"remove","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"id","type":{"text":"string"}}],"description":"Soft-delete a conversation. Reversible via restore."},{"kind":"method","name":"restore","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"id","type":{"text":"string"}}],"description":"Undo a soft-delete."}]}],"exports":[{"kind":"js","name":"ConversationsClient","declaration":{"name":"ConversationsClient","module":"services/conversations-client.js"}}]},{"kind":"javascript-module","path":"services/index.js","declarations":[],"exports":[{"kind":"js","name":"AgentService","declaration":{"name":"AgentService","module":"./agent-service"}},{"kind":"js","name":"convertThreadMessages","declaration":{"name":"convertThreadMessages","module":"./agent-service"}},{"kind":"js","name":"MessagesChangedCallback","declaration":{"name":"MessagesChangedCallback","module":"./agent-service"}},{"kind":"js","name":"SessionRestoreResult","declaration":{"name":"SessionRestoreResult","module":"./agent-service"}},{"kind":"js","name":"ApiClient","declaration":{"name":"ApiClient","module":"./api-client"}},{"kind":"js","name":"ApiError","declaration":{"name":"ApiError","module":"./api-client"}},{"kind":"js","name":"buildApiError","declaration":{"name":"buildApiError","module":"./api-client"}},{"kind":"js","name":"ensureOk","declaration":{"name":"ensureOk","module":"./api-client"}},{"kind":"js","name":"ensureBody","declaration":{"name":"ensureBody","module":"./api-client"}},{"kind":"js","name":"ensureBodyJson","declaration":{"name":"ensureBodyJson","module":"./api-client"}},{"kind":"js","name":"ApiProblemDetail","declaration":{"name":"ApiProblemDetail","module":"./api-client"}},{"kind":"js","name":"RetryConfig","declaration":{"name":"RetryConfig","module":"./api-client"}},{"kind":"js","name":"parseAgentPluginSelections","declaration":{"name":"parseAgentPluginSelections","module":"./api-schemas"}},{"kind":"js","name":"parseAgentToolSelections","declaration":{"name":"parseAgentToolSelections","module":"./api-schemas"}},{"kind":"js","name":"parseBootstrapConfig","declaration":{"name":"parseBootstrapConfig","module":"./api-schemas"}},{"kind":"js","name":"parseUpdateAgentSelectionRequest","declaration":{"name":"parseUpdateAgentSelectionRequest","module":"./api-schemas"}},{"kind":"js","name":"parseUpdateAgentPluginSelectionRequest","declaration":{"name":"parseUpdateAgentPluginSelectionRequest","module":"./api-schemas"}},{"kind":"js","name":"parseUpdateAgentToolSelectionRequest","declaration":{"name":"parseUpdateAgentToolSelectionRequest","module":"./api-schemas"}},{"kind":"js","name":"parseThreadState","declaration":{"name":"parseThreadState","module":"./api-schemas"}},{"kind":"js","name":"agentPluginSelectionListSchema","declaration":{"name":"agentPluginSelectionListSchema","module":"./api-schemas"}},{"kind":"js","name":"agentToolSelectionListSchema","declaration":{"name":"agentToolSelectionListSchema","module":"./api-schemas"}},{"kind":"js","name":"bootstrapConfigSchema","declaration":{"name":"bootstrapConfigSchema","module":"./api-schemas"}},{"kind":"js","name":"threadStateSchema","declaration":{"name":"threadStateSchema","module":"./api-schemas"}},{"kind":"js","name":"updateAgentSelectionRequestSchema","declaration":{"name":"updateAgentSelectionRequestSchema","module":"./api-schemas"}},{"kind":"js","name":"updateAgentPluginSelectionRequestSchema","declaration":{"name":"updateAgentPluginSelectionRequestSchema","module":"./api-schemas"}},{"kind":"js","name":"updateAgentToolSelectionRequestSchema","declaration":{"name":"updateAgentToolSelectionRequestSchema","module":"./api-schemas"}},{"kind":"js","name":"AuthService","declaration":{"name":"AuthService","module":"./auth-service"}},{"kind":"js","name":"AuthError","declaration":{"name":"AuthError","module":"./auth-service"}},{"kind":"js","name":"AuthConfig","declaration":{"name":"AuthConfig","module":"./auth-service"}},{"kind":"js","name":"AuthStrategy","declaration":{"name":"AuthStrategy","module":"./auth-service"}},{"kind":"js","name":"TokenFetcher","declaration":{"name":"TokenFetcher","module":"./auth-service"}},{"kind":"js","name":"MessageConverter","declaration":{"name":"MessageConverter","module":"./message-converter"}},{"kind":"js","name":"StorageService","declaration":{"name":"StorageService","module":"./storage-service"}},{"kind":"js","name":"LocalStorageService","declaration":{"name":"LocalStorageService","module":"./storage-service"}},{"kind":"js","name":"MapStorageService","declaration":{"name":"MapStorageService","module":"./storage-service"}},{"kind":"js","name":"defaultStorageService","declaration":{"name":"defaultStorageService","module":"./storage-service"}},{"kind":"js","name":"SupportService","declaration":{"name":"SupportService","module":"./support-service"}},{"kind":"js","name":"SupportEventEmitter","declaration":{"name":"SupportEventEmitter","module":"./support-service"}},{"kind":"js","name":"SupportEventMap","declaration":{"name":"SupportEventMap","module":"./support-service"}}]},{"kind":"javascript-module","path":"services/message-converter.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"services/message-converter.js","declarations":[{"kind":"class","description":"","name":"MessageConverter","members":[{"kind":"field","name":"conversionCache","privacy":"private","default":"new WeakMap<AgUiMessage, InternalMessage>()","description":"Cache: AG-UI message → InternalMessage, preserving referential equality for the memoized mapper."},{"kind":"method","name":"toInternal","return":{"type":{"text":"InternalMessage[]"}},"parameters":[{"name":"messages","type":{"text":"AgUiMessage[]"}}],"description":"Convert AG-UI Message[] to InternalMessage[].\n\nPrefix messages (all but the last) are cached so the memoized mapper's\n`isPrefixMatch()` sees stable references and can take the fast path.\nThe last message is always freshly converted because AG-UI may still be\nmutating it (streaming content)."},{"kind":"method","name":"toAgUi","return":{"type":{"text":"AgUiMessage"}},"parameters":[{"name":"msg","type":{"text":"InternalMessage"}}],"description":"Convert InternalMessage back to AG-UI Message for HttpAgent."},{"kind":"method","name":"toAgUiBatch","return":{"type":{"text":"AgUiMessage[]"}},"parameters":[{"name":"messages","type":{"text":"InternalMessage[]"}}],"description":"Convert a batch of InternalMessages to AG-UI format."},{"kind":"method","name":"buildInternalMessage","privacy":"private","return":{"type":{"text":"InternalMessage | null"}},"parameters":[{"name":"msg","type":{"text":"AgUiMessage"}}]},{"kind":"method","name":"extractContentBlocks","privacy":"private","return":{"type":{"text":"InternalContentBlock[]"}},"parameters":[{"name":"msg","type":{"text":"AgUiMessage"}}]},{"kind":"method","name":"extractContent","privacy":"private","return":{"type":{"text":"string"}},"parameters":[{"name":"msg","type":{"text":"AgUiMessage"}}]},{"kind":"method","name":"createUserAgUiMessage","privacy":"private","return":{"type":{"text":"AgUiMessage"}},"parameters":[{"name":"msg","type":{"text":"Extract<InternalMessage, { role: 'user' }>"}}]},{"kind":"method","name":"extractAttachmentsFromContent","privacy":"private","return":{"type":{"text":"{ attachments?: MessageAttachment[] }"}},"parameters":[{"name":"msg","type":{"text":"AgUiMessage"}}]},{"kind":"method","name":"deriveAttachmentName","privacy":"private","return":{"type":{"text":"{ name?: string }"}},"parameters":[{"name":"url","type":{"text":"string"}},{"name":"metadata","optional":true,"type":{"text":"unknown"}}]},{"kind":"method","name":"tryGetAttachmentNameFromMetadata","privacy":"private","return":{"type":{"text":"string | undefined"}},"parameters":[{"name":"metadata","type":{"text":"unknown"}}]}]}],"exports":[{"kind":"js","name":"MessageConverter","declaration":{"name":"MessageConverter","module":"services/message-converter.js"}}]},{"kind":"javascript-module","path":"services/older-bundle-skew.scenario.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"services/storage-service.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"services/storage-service.js","declarations":[{"kind":"class","description":"","name":"LocalStorageService","members":[{"kind":"method","name":"get","return":{"type":{"text":"T | null"}},"parameters":[{"name":"key","type":{"text":"string"}}]},{"kind":"method","name":"set","return":{"type":{"text":"void"}},"parameters":[{"name":"key","type":{"text":"string"}},{"name":"value","type":{"text":"T"}}]},{"kind":"method","name":"remove","return":{"type":{"text":"void"}},"parameters":[{"name":"key","type":{"text":"string"}}]},{"kind":"method","name":"has","return":{"type":{"text":"boolean"}},"parameters":[{"name":"key","type":{"text":"string"}}]}]},{"kind":"class","description":"","name":"MapStorageService","members":[{"kind":"field","name":"store","privacy":"private","default":"new Map<string, string>()"},{"kind":"method","name":"get","return":{"type":{"text":"T | null"}},"parameters":[{"name":"key","type":{"text":"string"}}]},{"kind":"method","name":"set","return":{"type":{"text":"void"}},"parameters":[{"name":"key","type":{"text":"string"}},{"name":"value","type":{"text":"T"}}]},{"kind":"method","name":"remove","return":{"type":{"text":"void"}},"parameters":[{"name":"key","type":{"text":"string"}}]},{"kind":"method","name":"has","return":{"type":{"text":"boolean"}},"parameters":[{"name":"key","type":{"text":"string"}}]}]},{"kind":"variable","name":"defaultStorageService","type":{"text":"StorageService"},"default":"new LocalStorageService()"}],"exports":[{"kind":"js","name":"LocalStorageService","declaration":{"name":"LocalStorageService","module":"services/storage-service.js"}},{"kind":"js","name":"MapStorageService","declaration":{"name":"MapStorageService","module":"services/storage-service.js"}},{"kind":"js","name":"defaultStorageService","declaration":{"name":"defaultStorageService","module":"services/storage-service.js"}}]},{"kind":"javascript-module","path":"services/support-service.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"services/support-service.js","declarations":[{"kind":"class","description":"","name":"SupportEventEmitter","members":[{"kind":"field","name":"listeners","privacy":"private","default":"new Map<keyof SupportEventMap, Set<Listener<never[]>>>()"},{"kind":"method","name":"on","return":{"type":{"text":"void"}},"parameters":[{"name":"event","type":{"text":"K"}},{"name":"listener","type":{"text":"Listener<SupportEventMap[K]>"}}]},{"kind":"method","name":"off","return":{"type":{"text":"void"}},"parameters":[{"name":"event","type":{"text":"K"}},{"name":"listener","type":{"text":"Listener<SupportEventMap[K]>"}}]},{"kind":"method","name":"emit","return":{"type":{"text":"void"}},"parameters":[{"name":"event","type":{"text":"K"}},{"name":"args","type":{"text":"SupportEventMap[K]"}}]},{"kind":"method","name":"removeAllListeners","return":{"type":{"text":"void"}}}]},{"kind":"class","description":"SupportService handles SignalR connection management and REST API calls for support.\n\nThis service manages:\n- SignalR hub connection for real-time support messaging\n- Operator typing indicators and message tracking\n- REST API calls for sending messages and typing indicators\n\nEvents are emitted via the typed `events` emitter instead of mutable callbacks.","name":"SupportService","members":[{"kind":"field","name":"connection","type":{"text":"HubConnection | undefined"},"privacy":"private"},{"kind":"field","name":"conversationId","type":{"text":"string | undefined"},"privacy":"private"},{"kind":"field","name":"baseUrl","type":{"text":"string | undefined"},"privacy":"private"},{"kind":"field","name":"typingTimeoutMs","type":{"text":"number"},"privacy":"private","readonly":true,"default":"10_000"},{"kind":"field","name":"operatorMsgIdByOp","privacy":"private","readonly":true,"default":"new Map<string, string>()"},{"kind":"field","name":"typingTimeoutByOp","privacy":"private","readonly":true,"default":"new Map<string, number>()"},{"kind":"field","name":"events","readonly":true,"default":"new SupportEventEmitter()","description":"Typed event emitter for support events."},{"kind":"field","name":"tokenFactory","type":{"text":"() => Promise<string>"},"privacy":"private","description":"Get a token factory function for SignalR authentication.","readonly":true},{"kind":"method","name":"isConnected","return":{"type":{"text":"boolean"}},"description":"Check if SignalR connection is active."},{"kind":"method","name":"getConversationId","return":{"type":{"text":"string | undefined"}},"description":"Get the current conversation ID."},{"kind":"method","name":"hasOperatorMessage","return":{"type":{"text":"boolean"}},"parameters":[{"name":"operatorId","type":{"text":"string"}}],"description":"Check if an operator has an active typing/message."},{"kind":"method","name":"getOperatorMessageId","return":{"type":{"text":"string | undefined"}},"parameters":[{"name":"operatorId","type":{"text":"string"}}],"description":"Get the message ID for an operator's current typing/message."},{"kind":"method","name":"setOperatorMessageId","return":{"type":{"text":"void"}},"parameters":[{"name":"operatorId","type":{"text":"string"}},{"name":"messageId","type":{"text":"string"}}],"description":"Track an operator's message ID."},{"kind":"method","name":"removeOperatorMessageId","return":{"type":{"text":"void"}},"parameters":[{"name":"operatorId","type":{"text":"string"}}],"description":"Remove tracking for an operator's message."},{"kind":"method","name":"connect","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"baseUrl","type":{"text":"string"}},{"name":"conversationId","type":{"text":"string"}}],"description":"Connect to the support SignalR hub."},{"kind":"method","name":"disconnect","return":{"type":{"text":"Promise<void>"}},"description":"Disconnect from the support SignalR hub.\nDoes not emit 'session-ended' — callers should handle cleanup themselves."},{"kind":"method","name":"sendMessage","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"conversationId","type":{"text":"string"}},{"name":"content","type":{"text":"string"}}],"description":"Send a message via REST API."},{"kind":"method","name":"sendTyping","return":{"type":{"text":"Promise<void>"}},"parameters":[{"name":"conversationId","type":{"text":"string"}}],"description":"Send typing indicator via REST API."},{"kind":"method","name":"resolveUrl","privacy":"private","return":{"type":{"text":"string | undefined"}},"parameters":[{"name":"url","type":{"text":"string | undefined"}}],"description":"Resolve a relative URL against the base URL."},{"kind":"method","name":"clearTyping","privacy":"private","return":{"type":{"text":"void"}},"parameters":[{"name":"operatorId","type":{"text":"string"}}],"description":"Clear typing timeout for an operator."},{"kind":"method","name":"scheduleTypingRemoval","privacy":"private","return":{"type":{"text":"void"}},"parameters":[{"name":"operatorId","type":{"text":"string"}}],"description":"Schedule removal of typing indicator after timeout."},{"kind":"method","name":"handleTyping","privacy":"private","return":{"type":{"text":"void"}},"parameters":[{"name":"data","type":{"text":"TypingMessageDto"}}],"description":"Handle incoming typing event from SignalR."},{"kind":"method","name":"handleText","privacy":"private","return":{"type":{"text":"void"}},"parameters":[{"name":"data","type":{"text":"TextMessageDto"}}],"description":"Handle incoming text message from SignalR."},{"kind":"method","name":"handleClose","privacy":"private","return":{"type":{"text":"void"}},"parameters":[{"name":"_data","type":{"text":"CloseMessageDto"}}],"description":"Handle close event from SignalR."}]}],"exports":[{"kind":"js","name":"SupportEventEmitter","declaration":{"name":"SupportEventEmitter","module":"services/support-service.js"}},{"kind":"js","name":"SupportService","declaration":{"name":"SupportService","module":"services/support-service.js"}}]},{"kind":"javascript-module","path":"test/canvas-store.helper.js","declarations":[{"kind":"function","name":"createMockCanvasStore","parameters":[{"name":"overrides","optional":true,"type":{"text":"Partial<CanvasState>"}}]}],"exports":[{"kind":"js","name":"createMockCanvasStore","declaration":{"name":"createMockCanvasStore","module":"test/canvas-store.helper.js"}}]},{"kind":"javascript-module","path":"test/message.builder.js","declarations":[{"kind":"class","description":"USER","name":"UserMessageBuilder","members":[{"kind":"method","name":"withContent","parameters":[{"name":"content","type":{"text":"string"}}]},{"kind":"field","name":"msg","type":{"text":"TMessage"},"privacy":"protected","default":"{ id: newId(), ...seed, }","inheritedFrom":{"name":"BaseMessageBuilder","module":"test/message.builder.js"}},{"kind":"method","name":"withId","parameters":[{"name":"id","type":{"text":"string"}}],"inheritedFrom":{"name":"BaseMessageBuilder","module":"test/message.builder.js"}},{"kind":"method","name":"mutate","parameters":[{"name":"fn","type":{"text":"(msg: TMessage) => void"}}],"inheritedFrom":{"name":"BaseMessageBuilder","module":"test/message.builder.js"}},{"kind":"method","name":"build","return":{"type":{"text":"TMessage"}},"inheritedFrom":{"name":"BaseMessageBuilder","module":"test/message.builder.js"}}],"superclass":{"name":"BaseMessageBuilder","module":"src/test/message.builder.ts"}},{"kind":"class","description":"ASSISTANT","name":"AssistantMessageBuilder","members":[{"kind":"method","name":"withContent","parameters":[{"name":"content","type":{"text":"string"}}]},{"kind":"method","name":"withToolCalls","parameters":[{"name":"calls","type":{"text":"ToolCall[]"}}]},{"kind":"method","name":"addToolCall","parameters":[{"name":"call","type":{"text":"ToolCall"}}]},{"kind":"field","name":"msg","type":{"text":"TMessage"},"privacy":"protected","default":"{ id: newId(), ...seed, }","inheritedFrom":{"name":"BaseMessageBuilder","module":"test/message.builder.js"}},{"kind":"method","name":"withId","parameters":[{"name":"id","type":{"text":"string"}}],"inheritedFrom":{"name":"BaseMessageBuilder","module":"test/message.builder.js"}},{"kind":"method","name":"mutate","parameters":[{"name":"fn","type":{"text":"(msg: TMessage) => void"}}],"inheritedFrom":{"name":"BaseMessageBuilder","module":"test/message.builder.js"}},{"kind":"method","name":"build","return":{"type":{"text":"TMessage"}},"inheritedFrom":{"name":"BaseMessageBuilder","module":"test/message.builder.js"}}],"superclass":{"name":"BaseMessageBuilder","module":"src/test/message.builder.ts"}},{"kind":"class","description":"OPERATOR","name":"OperatorMessageBuilder","members":[{"kind":"method","name":"withOperatorInfo","parameters":[{"name":"info","type":{"text":"Operator"}}]},{"kind":"method","name":"withContent","parameters":[{"name":"content","type":{"text":"string"}}]},{"kind":"method","name":"typing","parameters":[{"name":"isTyping","default":"true"}]},{"kind":"field","name":"msg","type":{"text":"TMessage"},"privacy":"protected","default":"{ id: newId(), ...seed, }","inheritedFrom":{"name":"BaseMessageBuilder","module":"test/message.builder.js"}},{"kind":"method","name":"withId","parameters":[{"name":"id","type":{"text":"string"}}],"inheritedFrom":{"name":"BaseMessageBuilder","module":"test/message.builder.js"}},{"kind":"method","name":"mutate","parameters":[{"name":"fn","type":{"text":"(msg: TMessage) => void"}}],"inheritedFrom":{"name":"BaseMessageBuilder","module":"test/message.builder.js"}},{"kind":"method","name":"build","return":{"type":{"text":"TMessage"}},"inheritedFrom":{"name":"BaseMessageBuilder","module":"test/message.builder.js"}}],"superclass":{"name":"BaseMessageBuilder","module":"src/test/message.builder.ts"}},{"kind":"variable","name":"MessageBuilder","type":{"text":"object"},"default":"{ user: () => new UserMessageBuilder(), assistant: () => new AssistantMessageBuilder(), operator: () => new OperatorMessageBuilder(), }","description":"Convenience factory"}],"exports":[{"kind":"js","name":"UserMessageBuilder","declaration":{"name":"UserMessageBuilder","module":"test/message.builder.js"}},{"kind":"js","name":"AssistantMessageBuilder","declaration":{"name":"AssistantMessageBuilder","module":"test/message.builder.js"}},{"kind":"js","name":"OperatorMessageBuilder","declaration":{"name":"OperatorMessageBuilder","module":"test/message.builder.js"}},{"kind":"js","name":"MessageBuilder","declaration":{"name":"MessageBuilder","module":"test/message.builder.js"}}]},{"kind":"javascript-module","path":"test/store.helper.js","declarations":[{"kind":"function","name":"createMockChatStore","parameters":[{"name":"overrides","optional":true,"type":{"text":"Partial<ChatStoreState>"}}]}],"exports":[{"kind":"js","name":"createMockChatStore","declaration":{"name":"createMockChatStore","module":"test/store.helper.js"}}]},{"kind":"javascript-module","path":"test/vitest.setup.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"types/events.js","declarations":[{"kind":"class","description":"","name":"PublicEvent","superclass":{"name":"CustomEvent","module":"src/types/events.ts"}},{"kind":"class","description":"","name":"AuthFailedEvent","superclass":{"name":"PublicEvent","module":"src/types/events.ts"}},{"kind":"class","description":"","name":"ConversationClearedEvent","superclass":{"name":"PublicEvent","module":"src/types/events.ts"}},{"kind":"class","description":"","name":"MessageSentEvent","superclass":{"name":"PublicEvent","module":"src/types/events.ts"}},{"kind":"class","description":"","name":"ToolCallApprovedEvent","superclass":{"name":"PublicEvent","module":"src/types/events.ts"}},{"kind":"class","description":"","name":"ToolCallDeclinedEvent","superclass":{"name":"PublicEvent","module":"src/types/events.ts"}},{"kind":"class","description":"","name":"FeedbackSubmittedEvent","superclass":{"name":"PublicEvent","module":"src/types/events.ts"}},{"kind":"class","description":"","name":"CloseRequestedEvent","superclass":{"name":"PublicEvent","module":"src/types/events.ts"}},{"kind":"class","description":"","name":"InlineQuestionClickEvent","superclass":{"name":"PublicEvent","module":"src/types/events.ts"}},{"kind":"class","description":"","name":"ToolCallEvent","superclass":{"name":"PublicEvent","module":"src/types/events.ts"}},{"kind":"class","description":"","name":"CanvasLayoutChangedEvent","superclass":{"name":"PublicEvent","module":"src/types/events.ts"}},{"kind":"class","description":"","name":"FeedbackClosedEvent","superclass":{"name":"PublicEvent","module":"src/types/events.ts"}},{"kind":"class","description":"","name":"ConversationRestoredEvent","superclass":{"name":"PublicEvent","module":"src/types/events.ts"}}],"exports":[{"kind":"js","name":"PublicEvent","declaration":{"name":"PublicEvent","module":"types/events.js"}},{"kind":"js","name":"AuthFailedEvent","declaration":{"name":"AuthFailedEvent","module":"types/events.js"}},{"kind":"js","name":"ConversationClearedEvent","declaration":{"name":"ConversationClearedEvent","module":"types/events.js"}},{"kind":"js","name":"MessageSentEvent","declaration":{"name":"MessageSentEvent","module":"types/events.js"}},{"kind":"js","name":"ToolCallApprovedEvent","declaration":{"name":"ToolCallApprovedEvent","module":"types/events.js"}},{"kind":"js","name":"ToolCallDeclinedEvent","declaration":{"name":"ToolCallDeclinedEvent","module":"types/events.js"}},{"kind":"js","name":"FeedbackSubmittedEvent","declaration":{"name":"FeedbackSubmittedEvent","module":"types/events.js"}},{"kind":"js","name":"CloseRequestedEvent","declaration":{"name":"CloseRequestedEvent","module":"types/events.js"}},{"kind":"js","name":"InlineQuestionClickEvent","declaration":{"name":"InlineQuestionClickEvent","module":"types/events.js"}},{"kind":"js","name":"ToolCallEvent","declaration":{"name":"ToolCallEvent","module":"types/events.js"}},{"kind":"js","name":"CanvasLayoutChangedEvent","declaration":{"name":"CanvasLayoutChangedEvent","module":"types/events.js"}},{"kind":"js","name":"FeedbackClosedEvent","declaration":{"name":"FeedbackClosedEvent","module":"types/events.js"}},{"kind":"js","name":"ConversationRestoredEvent","declaration":{"name":"ConversationRestoredEvent","module":"types/events.js"}}]},{"kind":"javascript-module","path":"types/frontend-tool.js","declarations":[{"kind":"function","name":"validateFrontendTools","return":{"type":{"text":"FrontendTool[]"}},"parameters":[{"name":"tools","type":{"text":"FrontendTool[]"}}],"description":"Validates an array of FrontendTools, logging warnings for any issues.\nInvalid tools are filtered out and only valid tools are returned."}],"exports":[{"kind":"js","name":"validateFrontendTools","declaration":{"name":"validateFrontendTools","module":"types/frontend-tool.js"}}]},{"kind":"javascript-module","path":"types/host-context.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"types/index.js","declarations":[],"exports":[{"kind":"js","name":"AuthFailedEvent","declaration":{"name":"AuthFailedEvent","module":"./events"}},{"kind":"js","name":"CanvasLayoutChangedEvent","declaration":{"name":"CanvasLayoutChangedEvent","module":"./events"}},{"kind":"js","name":"CloseRequestedEvent","declaration":{"name":"CloseRequestedEvent","module":"./events"}},{"kind":"js","name":"ConversationClearedEvent","declaration":{"name":"ConversationClearedEvent","module":"./events"}},{"kind":"js","name":"ConversationRestoredEvent","declaration":{"name":"ConversationRestoredEvent","module":"./events"}},{"kind":"js","name":"FeedbackSubmittedEvent","declaration":{"name":"FeedbackSubmittedEvent","module":"./events"}},{"kind":"js","name":"InlineQuestionClickEvent","declaration":{"name":"InlineQuestionClickEvent","module":"./events"}},{"kind":"js","name":"MessageSentEvent","declaration":{"name":"MessageSentEvent","module":"./events"}},{"kind":"js","name":"PublicEvent","declaration":{"name":"PublicEvent","module":"./events"}},{"kind":"js","name":"ToolCallApprovedEvent","declaration":{"name":"ToolCallApprovedEvent","module":"./events"}},{"kind":"js","name":"ToolCallDeclinedEvent","declaration":{"name":"ToolCallDeclinedEvent","module":"./events"}},{"kind":"js","name":"ToolCallEvent","declaration":{"name":"ToolCallEvent","module":"./events"}},{"kind":"js","name":"AuthFailedEventDetail","declaration":{"name":"AuthFailedEventDetail","module":"./events"}},{"kind":"js","name":"AuthFailedReason","declaration":{"name":"AuthFailedReason","module":"./events"}},{"kind":"js","name":"ConversationRestoredEventDetail","declaration":{"name":"ConversationRestoredEventDetail","module":"./events"}},{"kind":"js","name":"FrontendTool","declaration":{"name":"FrontendTool","module":"./frontend-tool"}},{"kind":"js","name":"validateFrontendTools","declaration":{"name":"validateFrontendTools","module":"./frontend-tool"}},{"kind":"js","name":"AgUiContextEntry","declaration":{"name":"AgUiContextEntry","module":"./host-context"}},{"kind":"js","name":"HostContext","declaration":{"name":"HostContext","module":"./host-context"}},{"kind":"js","name":"HostContextProvider","declaration":{"name":"HostContextProvider","module":"./host-context"}},{"kind":"js","name":"ConversationSummary","declaration":{"name":"ConversationSummary","package":"@/core/types"}},{"kind":"js","name":"HostContextSnapshot","declaration":{"name":"HostContextSnapshot","package":"@/core/types"}},{"kind":"js","name":"MessageAttachment","declaration":{"name":"MessageAttachment","module":"./message-attachment"}}]},{"kind":"javascript-module","path":"types/message-attachment.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"utils/i18n-check-helpers.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"utils/i18n-check-helpers.js","declarations":[{"kind":"function","name":"createSourceFile","parameters":[{"name":"filePath","type":{"text":"string"}},{"name":"source","type":{"text":"string"}}]},{"kind":"function","name":"collectLitTemplateRanges","parameters":[{"name":"sourceFile","type":{"text":"ts.SourceFile"}}]},{"kind":"function","name":"isLitTemplateTag","parameters":[{"name":"tag","type":{"text":"ts.LeftHandSideExpression"}}]},{"kind":"function","name":"isInsideTemplate","parameters":[{"name":"lineNumber","type":{"text":"number"}},{"name":"ranges","type":{"text":"Array<{ startLine: number; endLine: number }>"}}]},{"kind":"function","name":"collectUiTextCandidates","parameters":[{"name":"line","type":{"text":"string"}}]},{"kind":"function","name":"stripTemplateInterpolations","parameters":[{"name":"value","type":{"text":"string"}}]},{"kind":"function","name":"normalizeText","parameters":[{"name":"value","type":{"text":"string"}}]},{"kind":"function","name":"looksLikeUiText","parameters":[{"name":"value","type":{"text":"string"}}]}],"exports":[{"kind":"js","name":"createSourceFile","declaration":{"name":"createSourceFile","module":"utils/i18n-check-helpers.js"}},{"kind":"js","name":"collectLitTemplateRanges","declaration":{"name":"collectLitTemplateRanges","module":"utils/i18n-check-helpers.js"}},{"kind":"js","name":"isLitTemplateTag","declaration":{"name":"isLitTemplateTag","module":"utils/i18n-check-helpers.js"}},{"kind":"js","name":"isInsideTemplate","declaration":{"name":"isInsideTemplate","module":"utils/i18n-check-helpers.js"}},{"kind":"js","name":"collectUiTextCandidates","declaration":{"name":"collectUiTextCandidates","module":"utils/i18n-check-helpers.js"}},{"kind":"js","name":"stripTemplateInterpolations","declaration":{"name":"stripTemplateInterpolations","module":"utils/i18n-check-helpers.js"}},{"kind":"js","name":"normalizeText","declaration":{"name":"normalizeText","module":"utils/i18n-check-helpers.js"}},{"kind":"js","name":"looksLikeUiText","declaration":{"name":"looksLikeUiText","module":"utils/i18n-check-helpers.js"}}]},{"kind":"javascript-module","path":"utils/polling-task.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"utils/polling-task.js","declarations":[{"kind":"class","description":"","name":"PollingTask","members":[{"kind":"field","name":"timer","type":{"text":"ReturnType<typeof setInterval> | undefined"},"privacy":"private"},{"kind":"field","name":"executing","type":{"text":"boolean"},"privacy":"private","default":"false"},{"kind":"method","name":"execute","privacy":"private","return":{"type":{"text":"void"}}},{"kind":"method","name":"start","return":{"type":{"text":"void"}},"parameters":[{"name":"options","optional":true,"type":{"text":"{ immediate?: boolean }"}},{"description":"When `true` (default) the task runs once\nimmediately (leading edge). Pass `false` to defer the first run until\nafter the first interval — useful for ambient polling that must not fire\nbefore its dependencies (e.g. a configured base URL) are in place.","name":"options.immediate"}],"description":"Begin polling on the configured interval."},{"kind":"method","name":"stop","return":{"type":{"text":"void"}}},{"kind":"field","name":"running","type":{"text":"boolean"},"readonly":true}]}],"exports":[{"kind":"js","name":"PollingTask","declaration":{"name":"PollingTask","module":"utils/polling-task.js"}}]},{"kind":"javascript-module","path":"utils/suggested-question-tags.test.js","declarations":[],"exports":[]},{"kind":"javascript-module","path":"utils/suggested-question-tags.js","declarations":[{"kind":"function","name":"extractSuggestedQuestions","return":{"type":{"text":"{\n cleanContent: string;\n questions: string[];\n}"}},"parameters":[{"name":"content","type":{"text":"string"}}]}],"exports":[{"kind":"js","name":"extractSuggestedQuestions","declaration":{"name":"extractSuggestedQuestions","module":"utils/suggested-question-tags.js"}}]}],"package":{"name":"@visma-swno/gaia-chat-ui","description":"Web component library for the Gaia Assistant Chat UI","version":"5.2.0","author":"Visma Software Nordic","license":"UNLICENSED"}}
|