@tylertech/forge-ai 0.13.10 → 0.13.12

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.
Files changed (67) hide show
  1. package/custom-elements.json +581 -51
  2. package/dist/ai-assistant-response/ai-assistant-response.d.ts +1 -0
  3. package/dist/ai-assistant-response/ai-assistant-response.mjs +35 -3
  4. package/dist/ai-assistant-response/ai-assistant-response.scss.mjs +1 -1
  5. package/dist/ai-chain-of-thought/thought-detail/thought-detail.mjs +1 -1
  6. package/dist/ai-chain-of-thought/thought-image/thought-image.mjs +1 -1
  7. package/dist/ai-chain-of-thought/thought-search-result/thought-search-result.mjs +2 -2
  8. package/dist/ai-chat-header/ai-chat-header.mjs +27 -10
  9. package/dist/ai-chatbot/agent-adapter.d.ts +1 -0
  10. package/dist/ai-chatbot/ai-chatbot-base.d.ts +23 -1
  11. package/dist/ai-chatbot/ai-chatbot-base.mjs +28 -9
  12. package/dist/ai-chatbot/ai-chatbot.d.ts +2 -0
  13. package/dist/ai-chatbot/ai-chatbot.mjs +5 -0
  14. package/dist/ai-chatbot/index.d.ts +1 -1
  15. package/dist/ai-chatbot/message-state-controller.d.ts +11 -1
  16. package/dist/ai-chatbot/message-state-controller.mjs +54 -1
  17. package/dist/ai-chatbot/types.d.ts +27 -0
  18. package/dist/ai-chatbot-launcher/ai-chatbot-launcher.mjs +7 -2
  19. package/dist/ai-client-message/ai-client-message.d.ts +28 -0
  20. package/dist/ai-client-message/ai-client-message.mjs +112 -0
  21. package/dist/ai-client-message/ai-client-message.scss.mjs +4 -0
  22. package/dist/ai-client-message/index.d.ts +1 -0
  23. package/dist/ai-client-message/index.mjs +5 -0
  24. package/dist/ai-conversations-panel/ai-conversations-panel.d.ts +1 -0
  25. package/dist/ai-conversations-panel/ai-conversations-panel.mjs +21 -8
  26. package/dist/ai-conversations-panel/ai-conversations-panel.scss.mjs +1 -1
  27. package/dist/ai-copy-button/ai-copy-button.mjs +2 -2
  28. package/dist/ai-dialog/ai-dialog.d.ts +4 -0
  29. package/dist/ai-dialog/ai-dialog.mjs +10 -3
  30. package/dist/ai-dropdown-menu/ai-dropdown-menu-item.mjs +10 -2
  31. package/dist/ai-dropdown-menu/ai-dropdown-menu.d.ts +5 -0
  32. package/dist/ai-dropdown-menu/ai-dropdown-menu.mjs +4 -0
  33. package/dist/ai-edit-thread/ai-edit-thread.mjs +2 -2
  34. package/dist/ai-embedded-chat/ai-embedded-chat.d.ts +4 -0
  35. package/dist/ai-embedded-chat/ai-embedded-chat.mjs +5 -0
  36. package/dist/ai-empty-state/ai-empty-state.scss.mjs +1 -1
  37. package/dist/ai-error-message/ai-error-message.mjs +2 -1
  38. package/dist/ai-file-picker/ai-file-picker.mjs +1 -1
  39. package/dist/ai-floating-chat/ai-floating-chat.d.ts +5 -0
  40. package/dist/ai-floating-chat/ai-floating-chat.mjs +5 -0
  41. package/dist/ai-icon/ai-icon.mjs +1 -1
  42. package/dist/ai-message-thread/ai-message-thread.mjs +18 -25
  43. package/dist/ai-message-thread/ai-message-thread.scss.mjs +1 -1
  44. package/dist/ai-modal/ai-modal.d.ts +4 -0
  45. package/dist/ai-modal/ai-modal.mjs +5 -1
  46. package/dist/ai-prompt/ai-prompt.mjs +3 -3
  47. package/dist/ai-reasoning-header/ai-reasoning-header.mjs +3 -3
  48. package/dist/ai-response-message-toolbar/ai-response-message-toolbar.mjs +6 -6
  49. package/dist/ai-slash-command-menu/ai-slash-command-menu.mjs +1 -1
  50. package/dist/ai-spinner/ai-spinner.mjs +1 -1
  51. package/dist/ai-suggestions/ai-suggestions.mjs +1 -1
  52. package/dist/ai-thread-actions-menu/ai-thread-actions-menu.mjs +14 -3
  53. package/dist/ai-threads/ai-threads.mjs +5 -3
  54. package/dist/ai-threads-search/ai-threads-search.mjs +3 -3
  55. package/dist/ai-tool-call-indicator/ai-tool-call-indicator.mjs +32 -6
  56. package/dist/ai-user-message-toolbar/ai-user-message-toolbar.mjs +3 -3
  57. package/dist/ai-voice-input/ai-voice-input.mjs +1 -1
  58. package/dist/core/chatbot-core-controller.d.ts +5 -1
  59. package/dist/core/chatbot-core-controller.mjs +25 -10
  60. package/dist/index.d.ts +1 -0
  61. package/dist/index.mjs +3 -0
  62. package/dist/tools/ai-data-table/ai-data-table.d.ts +0 -1
  63. package/dist/tools/ai-data-table/ai-data-table.mjs +9 -16
  64. package/dist/tools/ai-data-table/ai-data-table.scss.mjs +1 -1
  65. package/dist/tools/ai-paginator/ai-paginator.mjs +2 -2
  66. package/dist/utils/markdown.mjs +1 -1
  67. package/package.json +6 -6
@@ -132,6 +132,7 @@ export interface ToolResultEvent {
132
132
  toolCallId: string;
133
133
  result: unknown;
134
134
  message: ChatMessage;
135
+ isError?: boolean;
135
136
  }
136
137
  export type StreamEvent = {
137
138
  type: 'message-start';
@@ -181,6 +182,31 @@ export interface ChatMessage {
181
182
  feedback?: ResponseFeedback;
182
183
  children?: ResponseItem[];
183
184
  clientOnly?: boolean;
185
+ kind?: ClientMessageKind;
186
+ header?: string;
187
+ actions?: ClientMessageAction[];
188
+ }
189
+ /**
190
+ * Visual treatment for a client-only message. `text` matches the plain,
191
+ * italic system-message style; the others render as a Forge inline-message
192
+ * banner with a matching icon.
193
+ */
194
+ export type ClientMessageKind = 'text' | 'info' | 'warning' | 'error' | 'success';
195
+ export interface ClientMessageAction {
196
+ id: string;
197
+ label: string;
198
+ onClick: () => void;
199
+ }
200
+ /**
201
+ * Input to {@link AiChatbotBase.addClientMessage}. Pass the same `id` on a
202
+ * later call to upsert (replace) a previously added client message.
203
+ */
204
+ export interface ClientMessageInput {
205
+ id?: string;
206
+ content: string;
207
+ kind?: ClientMessageKind;
208
+ header?: string;
209
+ actions?: ClientMessageAction[];
184
210
  }
185
211
  export interface ToolCall<TArgs = Record<string, unknown>> {
186
212
  id: string;
@@ -216,6 +242,7 @@ export interface AssistantResponse {
216
242
  timestamp: number;
217
243
  eventStream?: StreamEvent[];
218
244
  feedback?: ResponseFeedback;
245
+ isThinking?: boolean;
219
246
  }
220
247
  export interface FileAttachment {
221
248
  id: string;
@@ -323,7 +323,7 @@ threadName_get = function() {
323
323
  return html`
324
324
  <div class="thread-name" slot="thread-name">
325
325
  <div class="thread-name__separator">
326
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" class="forge-icon">
326
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" class="forge-icon" aria-hidden="true">
327
327
  <path d="m7 21 7.9-18H17L9.1 21z" />
328
328
  </svg>
329
329
  </div>
@@ -378,7 +378,12 @@ threadActionsMenu_get = function() {
378
378
  ?show-delete=${this.showThreadDelete}
379
379
  @forge-ai-thread-actions-menu-rename=${__privateMethod(this, _AiChatbotLauncherComponent_instances, handleThreadRename_fn)}
380
380
  @forge-ai-thread-actions-menu-delete-click=${__privateMethod(this, _AiChatbotLauncherComponent_instances, handleThreadDelete_fn)}>
381
- <svg slot="trigger-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" class="forge-icon">
381
+ <svg
382
+ slot="trigger-icon"
383
+ xmlns="http://www.w3.org/2000/svg"
384
+ viewBox="0 0 24 24"
385
+ class="forge-icon"
386
+ aria-hidden="true">
382
387
  <path fill="none" d="M0 0h24v24H0z" />
383
388
  <path d="m7 10 5 5 5-5z" />
384
389
  </svg>
@@ -0,0 +1,28 @@
1
+ import { LitElement, TemplateResult, CSSResult } from 'lit';
2
+ import { ClientMessageAction, ClientMessageKind } from '../ai-chatbot/types.js';
3
+ declare global {
4
+ interface HTMLElementTagNameMap {
5
+ 'forge-ai-client-message': AiClientMessageComponent;
6
+ }
7
+ }
8
+ export declare const AiClientMessageComponentTagName: keyof HTMLElementTagNameMap;
9
+ /**
10
+ * @tag forge-ai-client-message
11
+ *
12
+ * @summary Renders a client-only status message (never sent to the agent adapter) as
13
+ * either plain system-message text or a Forge inline-message banner, depending on `kind`.
14
+ *
15
+ * @description
16
+ * Used internally by `forge-ai-message-thread` to render messages added via
17
+ * `AiChatbotBase.addClientMessage()`. Not intended to be used standalone outside a
18
+ * message thread, but exported for direct Storybook/testing use.
19
+ */
20
+ export declare class AiClientMessageComponent extends LitElement {
21
+ #private;
22
+ static styles: CSSResult;
23
+ kind: ClientMessageKind;
24
+ header?: string;
25
+ content: string;
26
+ actions: ClientMessageAction[];
27
+ render(): TemplateResult;
28
+ }
@@ -0,0 +1,112 @@
1
+ import { unsafeCSS, LitElement, html, nothing } from "lit";
2
+ import { property, customElement } from "lit/decorators.js";
3
+ import { when } from "lit/directives/when.js";
4
+ import styles from "./ai-client-message.scss.mjs";
5
+ var __defProp = Object.defineProperty;
6
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
7
+ var __typeError = (msg) => {
8
+ throw TypeError(msg);
9
+ };
10
+ var __decorateClass = (decorators, target, key, kind) => {
11
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
12
+ for (var i = decorators.length - 1, decorator; i >= 0; i--)
13
+ if (decorator = decorators[i])
14
+ result = (kind ? decorator(target, key, result) : decorator(result)) || result;
15
+ if (kind && result) __defProp(target, key, result);
16
+ return result;
17
+ };
18
+ var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
19
+ var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
20
+ var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
21
+ var _AiClientMessageComponent_instances, icon_get, actions_get;
22
+ const AiClientMessageComponentTagName = "forge-ai-client-message";
23
+ const KIND_ICON_PATHS = {
24
+ info: "M11 7h2v2h-2zm0 4h2v6h-2zm1-9C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2m0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8",
25
+ warning: "M12 2 1 21h22zm0 3.99L19.53 19H4.47zM11 10v4h2v-4zm0 6v2h2v-2z",
26
+ error: "M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2m1 15h-2v-2h2zm0-4h-2V7h2z",
27
+ success: "M21 7 9 19l-5.5-5.5 1.41-1.41L9 16.17 19.59 5.59z"
28
+ };
29
+ let AiClientMessageComponent = class extends LitElement {
30
+ constructor() {
31
+ super(...arguments);
32
+ __privateAdd(this, _AiClientMessageComponent_instances);
33
+ this.kind = "text";
34
+ this.content = "";
35
+ this.actions = [];
36
+ }
37
+ render() {
38
+ if (this.kind === "text") {
39
+ return html`
40
+ <div class="client-message--text">
41
+ <span>${this.content}</span>
42
+ ${__privateGet(this, _AiClientMessageComponent_instances, actions_get)}
43
+ </div>
44
+ `;
45
+ }
46
+ return html`
47
+ <div class="forge-inline-message">
48
+ ${__privateGet(this, _AiClientMessageComponent_instances, icon_get)} ${when(this.header, () => html`<div class="forge-inline-message__title">${this.header}</div>`)}
49
+ <div class="forge-inline-message__content">
50
+ <span>${this.content}</span>
51
+ ${__privateGet(this, _AiClientMessageComponent_instances, actions_get)}
52
+ </div>
53
+ </div>
54
+ `;
55
+ }
56
+ };
57
+ _AiClientMessageComponent_instances = /* @__PURE__ */ new WeakSet();
58
+ icon_get = function() {
59
+ if (this.kind === "text") {
60
+ return nothing;
61
+ }
62
+ return html`
63
+ <svg
64
+ class="forge-inline-message__icon"
65
+ xmlns="http://www.w3.org/2000/svg"
66
+ viewBox="0 0 24 24"
67
+ height="24"
68
+ width="24"
69
+ fill="currentColor"
70
+ aria-hidden="true">
71
+ <path fill="none" d="M0 0h24v24H0z" />
72
+ <path d="${KIND_ICON_PATHS[this.kind]}" />
73
+ </svg>
74
+ `;
75
+ };
76
+ actions_get = function() {
77
+ return when(
78
+ this.actions.length > 0,
79
+ () => html`
80
+ <div class="client-message__actions">
81
+ ${this.actions.map(
82
+ (action) => html`<button
83
+ type="button"
84
+ class="forge-button forge-button--outlined forge-button--dense"
85
+ @click=${() => action.onClick()}>
86
+ ${action.label}
87
+ </button>`
88
+ )}
89
+ </div>
90
+ `
91
+ );
92
+ };
93
+ AiClientMessageComponent.styles = unsafeCSS(styles);
94
+ __decorateClass([
95
+ property({ type: String, reflect: true })
96
+ ], AiClientMessageComponent.prototype, "kind", 2);
97
+ __decorateClass([
98
+ property({ type: String })
99
+ ], AiClientMessageComponent.prototype, "header", 2);
100
+ __decorateClass([
101
+ property({ type: String })
102
+ ], AiClientMessageComponent.prototype, "content", 2);
103
+ __decorateClass([
104
+ property({ attribute: false })
105
+ ], AiClientMessageComponent.prototype, "actions", 2);
106
+ AiClientMessageComponent = __decorateClass([
107
+ customElement(AiClientMessageComponentTagName)
108
+ ], AiClientMessageComponent);
109
+ export {
110
+ AiClientMessageComponent,
111
+ AiClientMessageComponentTagName
112
+ };
@@ -0,0 +1,4 @@
1
+ const styles = '/* prettier-ignore */\n/**\n * @license\n * Copyright Tyler Technologies, Inc.\n * License: Apache-2.0\n */\n.forge-inline-message {\n --_inline-message-background:var(--forge-inline-message-background, var(--forge-theme-info-container-low, #e3edf7));\n --_inline-message-color:var(--forge-inline-message-color, var(--forge-theme-text-high, rgba(0, 0, 0, 0.87)));\n --_inline-message-shape:var(--forge-inline-message-shape, calc(var(--forge-shape-medium, 4px) * var(--forge-shape-factor, 1)));\n --_inline-message-padding:var(--forge-inline-message-padding, var(--forge-spacing-small, 12px));\n --_inline-message-padding-inline:var(--forge-inline-message-padding-inline, var(--_inline-message-padding));\n --_inline-message-padding-block:var(--forge-inline-message-padding-block, var(--_inline-message-padding));\n --_inline-message-border-width:var(--forge-inline-message-border-width, var(--forge-border-thin, 1px));\n --_inline-message-border-style:var(--forge-inline-message-border-style, none);\n --_inline-message-border-color:var(--forge-inline-message-border-color, var(--forge-theme-info-container, #c7daf0));\n --_inline-message-gap:var(--forge-inline-message-gap, var(--forge-spacing-small, 12px));\n --_inline-message-icon-gap:var(--forge-inline-message-icon-gap, var(--_inline-message-gap));\n --_inline-message-content-gap:var(--forge-inline-message-content-gap, var(--_inline-message-gap));\n --_inline-message-icon-color:var(--forge-inline-message-icon-color, var(--forge-theme-on-info-container-low, #0b3768));\n}\n\n.forge-inline-message {\n display: block;\n -moz-osx-font-smoothing: grayscale;\n -webkit-font-smoothing: antialiased;\n font-family: var(--forge-typography-body1-font-family, var(--forge-typography-font-family, "Roboto", sans-serif));\n font-size: var(--forge-typography-body1-font-size, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-body-font-size-scale, 0.875)));\n font-weight: var(--forge-typography-body1-font-weight, 400);\n line-height: var(--forge-typography-body1-line-height, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-body-line-height-scale, 1.125)));\n letter-spacing: var(--forge-typography-body1-letter-spacing, 0.0357142857em);\n text-transform: var(--forge-typography-body1-text-transform, inherit);\n text-decoration: var(--forge-typography-body1-text-decoration, inherit);\n background: var(--_inline-message-background);\n color: var(--_inline-message-color);\n border-radius: var(--_inline-message-shape);\n border-width: var(--_inline-message-border-width);\n border-style: var(--_inline-message-border-style);\n border-color: var(--_inline-message-border-color);\n display: flex;\n align-items: center;\n gap: var(--_inline-message-icon-gap);\n box-sizing: border-box;\n padding-inline: var(--_inline-message-padding-inline);\n padding-block: var(--_inline-message-padding-block);\n display: grid;\n grid-template-columns: auto 1fr;\n grid-template-rows: auto 1fr;\n}\n\n.forge-inline-message:not(:has(.forge-inline-message__icon)) {\n grid-template-columns: 1fr;\n}\n\n.forge-inline-message__title {\n -moz-osx-font-smoothing: grayscale;\n -webkit-font-smoothing: antialiased;\n font-family: var(--forge-typography-heading1-font-family, var(--forge-typography-font-family, "Roboto", sans-serif));\n font-size: var(--forge-typography-heading1-font-size, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-heading1-font-size-scale, 0.875)));\n font-weight: var(--forge-typography-heading1-font-weight, 500);\n line-height: var(--forge-typography-heading1-line-height, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-heading1-line-height-scale, 1.125)));\n letter-spacing: var(--forge-typography-heading1-letter-spacing, 0.0178571429em);\n text-transform: var(--forge-typography-heading1-text-transform, inherit);\n text-decoration: var(--forge-typography-heading1-text-decoration, inherit);\n}\n\n.forge-inline-message__icon {\n color: var(--_inline-message-icon-color);\n align-self: start;\n grid-row: 1/span 2;\n}\n\n/**\n * @license\n * Copyright Tyler Technologies, Inc.\n * License: Apache-2.0\n */\n.forge-button {\n --_button-primary-color:var(--forge-button-primary-color, var(--forge-theme-primary, #3f51b5));\n --_button-text-color:var(--forge-button-text-color, var(--_button-primary-color));\n --_button-disabled-color:var(--forge-button-disabled-color, var(--forge-theme-surface-container, #e0e0e0));\n --_button-padding:var(--forge-button-padding, var(--forge-spacing-medium, 16px));\n --_button-display:var(--forge-button-display, inline-grid);\n --_button-justify:var(--forge-button-justify, center);\n --_button-shape:var(--forge-button-shape, calc(var(--forge-shape-medium, 4px) * var(--forge-shape-factor, 1)));\n --_button-height:var(--forge-button-height, 36px);\n --_button-min-width:var(--forge-button-min-width, 64px);\n --_button-spacing:var(--forge-button-spacing, var(--forge-spacing-xsmall, 8px));\n --_button-border-width:var(--forge-button-border-width, medium);\n --_button-border-style:var(--forge-button-border-style, none);\n --_button-border-color:var(--forge-button-border-color, currentColor);\n --_button-shape-start-start-radius:var(--forge-button-shape-start-start-radius, var(--_button-shape));\n --_button-shape-start-end-radius:var(--forge-button-shape-start-end-radius, var(--_button-shape));\n --_button-shape-end-start-radius:var(--forge-button-shape-end-start-radius, var(--_button-shape));\n --_button-shape-end-end-radius:var(--forge-button-shape-end-end-radius, var(--_button-shape));\n --_button-padding-block:var(--forge-button-padding-block, var(--_button-0));\n --_button-padding-inline:var(--forge-button-padding-inline, var(--_button-padding));\n --_button-background:var(--forge-button-background, transparent);\n --_button-hover-background:var(--forge-button-hover-background, var(--_button-background));\n --_button-active-background:var(--forge-button-active-background, var(--_button-background));\n --_button-color:var(--forge-button-color, var(--_button-text-color));\n --_button-icon-size:var(--forge-button-icon-size, calc(var(--forge-typography-font-size, 1rem) * 1.125));\n --_button-shadow:var(--forge-button-shadow, none);\n --_button-hover-shadow:var(--forge-button-hover-shadow, none);\n --_button-active-shadow:var(--forge-button-active-shadow, none);\n --_button-cursor:var(--forge-button-cursor, pointer);\n --_button-transition-duration:var(--forge-button-transition-duration, var(--forge-animation-duration-short3, 150ms));\n --_button-transition-timing:var(--forge-button-transition-timing, var(--forge-animation-easing-standard, cubic-bezier(0.2, 0, 0, 1)));\n --_button-text-padding-inline:var(--forge-button-text-padding-inline, var(--forge-spacing-xsmall, 8px));\n --_button-outlined-background:var(--forge-button-outlined-background, transparent);\n --_button-outlined-color:var(--forge-button-outlined-color, var(--_button-primary-color));\n --_button-outlined-border-width:var(--forge-button-outlined-border-width, var(--forge-border-thin, 1px));\n --_button-outlined-border-style:var(--forge-button-outlined-border-style, solid);\n --_button-outlined-border-color:var(--forge-button-outlined-border-color, var(--_button-primary-color));\n --_button-tonal-background:var(--forge-button-tonal-background, var(--forge-theme-primary-container, #d1d5ed));\n --_button-tonal-disabled-background:var(--forge-button-tonal-disabled-background, var(--_button-disabled-color));\n --_button-tonal-color:var(--forge-button-tonal-color, var(--forge-theme-on-primary-container, #222c62));\n --_button-tonal-disabled-color:var(--forge-button-tonal-disabled-color, var(--_button-disabled-text-color));\n --_button-filled-background:var(--forge-button-filled-background, var(--_button-primary-color));\n --_button-filled-disabled-background:var(--forge-button-filled-disabled-background, var(--_button-disabled-color));\n --_button-filled-color:var(--forge-button-filled-color, var(--forge-theme-on-primary, #ffffff));\n --_button-filled-disabled-color:var(--forge-button-filled-disabled-color, var(--_button-disabled-text-color));\n --_button-raised-background:var(--forge-button-raised-background, var(--_button-primary-color));\n --_button-raised-disabled-background:var(--forge-button-raised-disabled-background, var(--_button-disabled-color));\n --_button-raised-color:var(--forge-button-raised-color, var(--forge-theme-on-primary, #ffffff));\n --_button-raised-disabled-color:var(--forge-button-raised-disabled-color, var(--_button-disabled-text-color));\n --_button-raised-shadow:var(--forge-button-raised-shadow, 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12));\n --_button-raised-hover-shadow:var(--forge-button-raised-hover-shadow, 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12));\n --_button-raised-active-shadow:var(--forge-button-raised-active-shadow, 0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12));\n --_button-raised-disabled-shadow:var(--forge-button-raised-disabled-shadow, none);\n --_button-link-color:var(--forge-button-link-color, var(--_button-primary-color));\n --_button-link-text-decoration:var(--forge-button-link-text-decoration, underline);\n --_button-link-height:var(--forge-button-link-height, auto);\n --_button-link-padding:var(--forge-button-link-padding, 0);\n --_button-link-line-height:var(--forge-button-link-line-height, normal);\n --_button-link-width:var(--forge-button-link-width, auto);\n --_button-link-hover-text-decoration:var(--forge-button-link-hover-text-decoration, none);\n --_button-link-active-opacity:var(--forge-button-link-active-opacity, 0.65);\n --_button-link-transition-duration:var(--forge-button-link-transition-duration, var(--forge-animation-duration-short3, 150ms));\n --_button-link-transition-timing:var(--forge-button-link-transition-timing, var(--forge-animation-easing-standard, cubic-bezier(0.2, 0, 0, 1)));\n --_button-disabled-cursor:var(--forge-button-disabled-cursor, not-allowed);\n --_button-disabled-text-color:var(--forge-button-disabled-text-color, var(--forge-theme-text-low, rgba(0, 0, 0, 0.38)));\n --_button-disabled-background:var(--forge-button-disabled-background, transparent);\n --_button-disabled-border-color:var(--forge-button-disabled-border-color, var(--_button-disabled-color));\n --_button-disabled-shadow:var(--forge-button-disabled-shadow, none);\n --_button-dense-height:var(--forge-button-dense-height, 24px);\n --_button-pill-shape:var(--forge-button-pill-shape, calc(var(--forge-shape-full, 9999px) * var(--forge-shape-factor, 1)));\n --_button-pill-padding-inline:var(--forge-button-pill-padding-inline, var(--forge-spacing-small, 12px));\n --_button-focus-indicator-offset:var(--forge-button-focus-indicator-offset, 4px);\n --_button-text-focus-indicator-offset:var(--forge-button-text-focus-indicator-offset, 0px);\n --_button-link-focus-indicator-offset:var(--forge-button-link-focus-indicator-offset, 2px);\n --_button-popover-icon-transition-duration:var(--forge-button-popover-icon-transition-duration, var(--forge-animation-duration-short3, 150ms));\n --_button-popover-icon-transition-timing:var(--forge-button-popover-icon-transition-timing, var(--forge-animation-easing-standard, cubic-bezier(0.2, 0, 0, 1)));\n --_button-popover-icon-open-rotation:var(--forge-button-popover-icon-open-rotation, 180deg);\n}\n\n.forge-button {\n display: var(--_button-display);\n position: relative;\n outline: none;\n vertical-align: middle;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n -moz-osx-font-smoothing: grayscale;\n -webkit-font-smoothing: antialiased;\n font-family: var(--forge-typography-button-font-family, var(--forge-typography-font-family, "Roboto", sans-serif));\n font-size: var(--forge-typography-button-font-size, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-button-font-size-scale, 0.875)));\n font-weight: var(--forge-typography-button-font-weight, 500);\n line-height: var(--forge-typography-button-line-height, normal);\n letter-spacing: var(--forge-typography-button-letter-spacing, 0.0714285714em);\n text-transform: var(--forge-typography-button-text-transform, inherit);\n text-decoration: var(--forge-typography-button-text-decoration, inherit);\n position: relative;\n display: var(--_button-display);\n grid-auto-flow: column;\n align-items: center;\n justify-content: var(--_button-justify);\n gap: var(--_button-spacing);\n z-index: 0;\n box-sizing: border-box;\n min-inline-size: var(--_button-min-width);\n height: var(--_button-height);\n inline-size: 100%;\n border-width: var(--_button-border-width);\n border-style: var(--_button-border-style);\n border-color: var(--_button-border-color);\n border-start-start-radius: var(--_button-shape-start-start-radius);\n border-start-end-radius: var(--_button-shape-start-end-radius);\n border-end-start-radius: var(--_button-shape-end-start-radius);\n border-end-end-radius: var(--_button-shape-end-end-radius);\n padding-block: var(--_button-padding-block);\n padding-inline: var(--_button-padding-inline);\n box-shadow: var(--_button-shadow);\n outline: none;\n user-select: none;\n -webkit-appearance: none;\n vertical-align: middle;\n text-decoration: none;\n white-space: nowrap;\n background: var(--_button-background);\n color: var(--_button-color);\n cursor: var(--_button-cursor);\n transition-property: box-shadow, background;\n transition-duration: var(--_button-transition-duration);\n transition-timing-function: var(--_button-transition-timing);\n}\n\n.forge-button::-moz-focus-inner {\n padding: 0;\n border: 0;\n}\n\n.forge-button:hover {\n --_button-shadow:var(--_button-hover-shadow);\n background: var(--_button-hover-background);\n}\n\n.forge-button:active {\n --_button-shadow:var(--_button-active-shadow);\n background: var(--_button-active-background);\n}\n\n.forge-button {\n position: relative;\n inline-size: auto;\n}\n\n.forge-button:not(:disabled):not(.forge-button--link) {\n --_state-layer-display:var(--forge-state-layer-display, flex);\n --_state-layer-color:var(--forge-state-layer-color, var(--forge-theme-on-surface, #000000));\n --_state-layer-hover-color:var(--forge-state-layer-hover-color, var(--_state-layer-color));\n --_state-layer-hover-opacity:var(--forge-state-layer-hover-opacity, 0.08);\n --_state-layer-pressed-color:var(--forge-state-layer-pressed-color, var(--_state-layer-color));\n --_state-layer-pressed-opacity:var(--forge-state-layer-pressed-opacity, 0.12);\n --_state-layer-hover-duration:var(--forge-state-layer-hover-duration, 15ms);\n --_state-layer-pressed-duration:var(--forge-state-layer-pressed-duration, 105ms);\n --_state-layer-animation-duration:var(--forge-state-layer-animation-duration, 375ms);\n}\n\n.forge-button:not(:disabled):not(.forge-button--link)::before {\n opacity: 0;\n position: absolute;\n backface-visibility: hidden;\n transform: translateZ(0);\n background-color: var(--_state-layer-hover-color);\n inset: 0;\n transition: opacity var(--_state-layer-hover-duration) linear, background-color var(--_state-layer-hover-duration) linear;\n --_state-layer-hover-duration:var(--forge-state-layer-hover-duration, 100ms);\n content: "";\n opacity: 0;\n border-radius: inherit;\n}\n\n.forge-button:not(:disabled):not(.forge-button--link):hover::before {\n background-color: var(--_state-layer-hover-color);\n opacity: var(--_state-layer-hover-opacity);\n}\n\n.forge-button:not(:disabled):not(.forge-button--link):active::before {\n opacity: var(--_state-layer-pressed-opacity);\n transition-duration: var(--_state-layer-pressed-duration);\n --_state-layer-pressed-opacity:var(--forge-state-layer-pressed-opacity, 0.18);\n}\n\n@keyframes forge-focus-indicator-outward-grow {\n from {\n outline-width: 0;\n }\n to {\n outline-width: var(--_focus-indicator-active-width);\n }\n}\n@keyframes forge-focus-indicator-outward-shrink {\n from {\n outline-width: var(--_focus-indicator-active-width);\n }\n}\n@keyframes forge-focus-indicator-inward-grow {\n from {\n border-width: 0;\n }\n to {\n border-width: var(--_focus-indicator-active-width);\n }\n}\n@keyframes forge-focus-indicator-inward-shrink {\n from {\n border-width: var(--_focus-indicator-active-width);\n }\n}\n.forge-button:not(:disabled) {\n outline: none;\n}\n\n.forge-button:not(:disabled):focus-visible::after {\n --_focus-indicator-display:var(--forge-focus-indicator-display, flex);\n --_focus-indicator-width:var(--forge-focus-indicator-width, var(--forge-border-medium, 2px));\n --_focus-indicator-active-width:var(--forge-focus-indicator-active-width, 6px);\n --_focus-indicator-color:var(--forge-focus-indicator-color, var(--forge-theme-primary, #3f51b5));\n --_focus-indicator-shape:var(--forge-focus-indicator-shape, calc(var(--forge-shape-extra-small, 1px) * var(--forge-shape-factor, 1)));\n --_focus-indicator-duration:var(--forge-focus-indicator-duration, var(--forge-animation-duration-long4, 600ms));\n --_focus-indicator-easing:var(--forge-focus-indicator-easing, var(--forge-animation-easing-emphasized, cubic-bezier(0.2, 0, 0, 1)));\n --_focus-indicator-shape-start-start:var(--forge-focus-indicator-shape-start-start, var(--_focus-indicator-shape));\n --_focus-indicator-shape-start-end:var(--forge-focus-indicator-shape-start-end, var(--_focus-indicator-shape));\n --_focus-indicator-shape-end-end:var(--forge-focus-indicator-shape-end-end, var(--_focus-indicator-shape));\n --_focus-indicator-shape-end-start:var(--forge-focus-indicator-shape-end-start, var(--_focus-indicator-shape));\n --_focus-indicator-outward-offset:var(--forge-focus-indicator-outward-offset, var(--forge-spacing-xxsmall, 4px));\n --_focus-indicator-inward-offset:var(--forge-focus-indicator-inward-offset, 0px);\n --_focus-indicator-offset-block:var(--forge-focus-indicator-offset-block, 0);\n --_focus-indicator-offset-inline:var(--forge-focus-indicator-offset-inline, 0);\n}\n\n.forge-button:not(:disabled):focus-visible::after {\n animation-delay: 0s, calc(var(--_focus-indicator-duration) * 0.25);\n animation-duration: calc(var(--_focus-indicator-duration) * 0.25), calc(var(--_focus-indicator-duration) * 0.75);\n animation-timing-function: var(--_focus-indicator-easing);\n box-sizing: border-box;\n color: var(--_focus-indicator-color);\n display: none;\n pointer-events: none;\n position: absolute;\n margin-block: var(--_focus-indicator-offset-block);\n margin-inline: var(--_focus-indicator-offset-inline);\n animation-name: forge-focus-indicator-outward-grow, forge-focus-indicator-outward-shrink;\n border-end-end-radius: calc(var(--_focus-indicator-shape-end-end) + var(--_focus-indicator-outward-offset));\n border-end-start-radius: calc(var(--_focus-indicator-shape-end-start) + var(--_focus-indicator-outward-offset));\n border-start-end-radius: calc(var(--_focus-indicator-shape-start-end) + var(--_focus-indicator-outward-offset));\n border-start-start-radius: calc(var(--_focus-indicator-shape-start-start) + var(--_focus-indicator-outward-offset));\n inset: calc(-1 * var(--_focus-indicator-outward-offset));\n outline: var(--_focus-indicator-width) solid currentColor;\n content: "";\n display: block;\n}\n\n.forge-button:not(:disabled) {\n --forge-focus-indicator-color: var(--_button-primary-color);\n}\n\n.forge-button:disabled {\n cursor: var(--_button-disabled-cursor);\n --_button-background:var(--_button-disabled-background);\n --_button-color:var(--_button-disabled-text-color);\n --_button-shadow:var(--_button-disabled-shadow);\n pointer-events: none;\n pointer-events: initial;\n}\n\n.forge-button:where(:not(.forge-button--outlined, .forge-button--tonal, .forge-button--filled, .forge-button--raised, .forge-button--link)), .forge-button--text {\n --_button-padding-inline:var(--_button-text-padding-inline);\n}\n\n.forge-button--outlined {\n --_button-background:var(--_button-outlined-background);\n --_button-color:var(--_button-outlined-color);\n --_button-border-width:var(--_button-outlined-border-width);\n --_button-border-style:var(--_button-outlined-border-style);\n --_button-border-color:var(--_button-outlined-border-color);\n}\n\n.forge-button--outlined:disabled {\n --_button-border-color:var(--_button-disabled-border-color);\n}\n\n.forge-button--tonal {\n --_button-background:var(--_button-tonal-background);\n --_button-color:var(--_button-tonal-color);\n}\n\n.forge-button--tonal:disabled {\n --_button-background:var(--_button-tonal-disabled-background);\n --_button-color:var(--_button-tonal-disabled-color);\n}\n\n.forge-button--filled, .forge-button--raised {\n --_button-background:var(--_button-filled-background);\n --_button-color:var(--_button-filled-color);\n --forge-state-layer-color: var(--_button-filled-color);\n}\n\n.forge-button--filled:disabled, .forge-button--raised:disabled {\n --_button-background:var(--_button-filled-disabled-background);\n --_button-color:var(--_button-filled-disabled-color);\n}\n\n.forge-button--raised {\n --_button-background:var(--_button-raised-background);\n --_button-color:var(--_button-raised-color);\n --_button-shadow:var(--_button-raised-shadow);\n}\n\n.forge-button--raised:hover {\n --_button-shadow:var(--_button-raised-hover-shadow);\n}\n\n.forge-button--raised:active {\n --_button-shadow:var(--_button-raised-active-shadow);\n}\n\n.forge-button--raised:disabled {\n --_button-background:var(--_button-raised-disabled-background);\n --_button-color:var(--_button-raised-disabled-color);\n --_button-shadow:var(--_button-raised-disabled-shadow);\n}\n\n.forge-button--link {\n --_button-color:var(--_button-link-color);\n --_button-height:var(--_button-link-height);\n --_button-padding:var(--_button-link-padding);\n --_button-focus-indicator-offset:var(--_button-link-focus-indicator-offset);\n text-decoration: var(--_button-link-text-decoration);\n line-height: var(--_button-link-line-height);\n transition: opacity var(--_button-link-transition-duration) var(--_button-link-transition-timing);\n inline-size: var(--_button-link-width);\n}\n\n.forge-button--link:hover {\n text-decoration: var(--_button-link-hover-text-decoration);\n}\n\n.forge-button--link:active {\n opacity: var(--_button-link-active-opacity);\n}\n\n.forge-button--pill {\n --_button-shape:var(--_button-pill-shape);\n --_button-padding-inline:var(--_button-pill-padding-inline);\n --forge-focus-indicator-shape: var(--_button-pill-shape);\n}\n\n.forge-button {\n --forge-icon-font-size: var(--_button-icon-size);\n}\n\n.forge-button--dense {\n --_button-height:var(--_button-dense-height);\n}\n\n:host {\n display: block;\n}\n\n.forge-inline-message {\n --forge-inline-message-border-style: solid;\n}\n.forge-inline-message__title {\n font-weight: bold;\n}\n.forge-inline-message__content {\n display: flex;\n flex-direction: column;\n gap: var(--forge-spacing-xsmall, 8px);\n overflow-wrap: anywhere;\n}\n.forge-inline-message:not(:has(.forge-inline-message__title)) .forge-inline-message__icon {\n align-self: center;\n}\n.forge-inline-message:not(:has(.forge-inline-message__title)) .forge-inline-message__content {\n grid-row: 1/-1;\n align-self: center;\n}\n\n:host([kind=info]) .forge-inline-message {\n --forge-inline-message-background: var(--forge-theme-info-container-low, #e3edf7);\n --forge-inline-message-color: var(--forge-theme-on-info-container-low, #0b3768);\n --forge-inline-message-icon-color: var(--forge-theme-on-info-container-low, #0b3768);\n --forge-inline-message-border-color: var(--forge-theme-info-container, #c7daf0);\n}\n\n:host([kind=warning]) .forge-inline-message {\n --forge-inline-message-background: var(--forge-theme-warning-container-low, #f9e9e0);\n --forge-inline-message-color: var(--forge-theme-on-warning-container-low, #712700);\n --forge-inline-message-icon-color: var(--forge-theme-on-warning-container-low, #712700);\n --forge-inline-message-border-color: var(--forge-theme-warning-container, #f4d3c2);\n}\n\n:host([kind=error]) .forge-inline-message {\n --forge-inline-message-background: var(--forge-theme-error-container-low, #f6e0e4);\n --forge-inline-message-color: var(--forge-theme-on-error-container-low, #5f0011);\n --forge-inline-message-icon-color: var(--forge-theme-on-error-container-low, #5f0011);\n --forge-inline-message-border-color: var(--forge-theme-error-container, #ecc2c9);\n}\n\n:host([kind=success]) .forge-inline-message {\n --forge-inline-message-background: var(--forge-theme-success-container-low, #e6efe6);\n --forge-inline-message-color: var(--forge-theme-on-success-container-low, #19441b);\n --forge-inline-message-icon-color: var(--forge-theme-on-success-container-low, #19441b);\n --forge-inline-message-border-color: var(--forge-theme-success-container, #cde0ce);\n}\n\n.client-message--text {\n -moz-osx-font-smoothing: grayscale;\n -webkit-font-smoothing: antialiased;\n font-family: var(--forge-typography-subheading2-font-family, var(--forge-typography-font-family, "Roboto", sans-serif));\n font-size: var(--forge-typography-subheading2-font-size, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-subheading2-font-size-scale, 1)));\n font-weight: var(--forge-typography-subheading2-font-weight, 400);\n line-height: var(--forge-typography-subheading2-line-height, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-subheading2-line-height-scale, 1.25)));\n letter-spacing: var(--forge-typography-subheading2-letter-spacing, normal);\n text-transform: var(--forge-typography-subheading2-text-transform, inherit);\n text-decoration: var(--forge-typography-subheading2-text-decoration, inherit);\n display: flex;\n flex-direction: column;\n gap: var(--forge-spacing-xxsmall, 4px);\n padding-block: var(--forge-spacing-small, 12px);\n color: var(--forge-theme-text-medium, rgba(0, 0, 0, 0.6));\n font-style: italic;\n}\n\n.client-message__actions {\n display: flex;\n gap: var(--forge-spacing-xsmall, 8px);\n font-style: normal;\n}\n.client-message__actions .forge-button {\n --forge-button-outlined-color: currentColor;\n --forge-button-outlined-border-color: currentColor;\n}';
2
+ export {
3
+ styles as default
4
+ };
@@ -0,0 +1 @@
1
+ export { AiClientMessageComponent, AiClientMessageComponentTagName } from './ai-client-message.js';
@@ -0,0 +1,5 @@
1
+ import { AiClientMessageComponent, AiClientMessageComponentTagName } from "./ai-client-message.mjs";
2
+ export {
3
+ AiClientMessageComponent,
4
+ AiClientMessageComponentTagName
5
+ };
@@ -67,6 +67,7 @@ export declare class AiConversationsPanelComponent extends LitElement {
67
67
  selectedThreadId: string | null;
68
68
  showConversationRename: boolean;
69
69
  showConversationDelete: boolean;
70
+ loading: boolean;
70
71
  private _viewState;
71
72
  private _isSearching;
72
73
  private _searchResults;
@@ -27,7 +27,7 @@ var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read fr
27
27
  var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
28
28
  var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), member.set(obj, value), value);
29
29
  var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
30
- var _searchDebounceTimeout, _deleteThreadController, _recentChatsScrollController, _searchChatsScrollController, _AiConversationsPanelComponent_instances, shouldEnableRecentPagination_get, shouldEnableSearchPagination_get, attachScrollController_fn, displayedThreads_get, handleSearch_fn, handleSearchInput_fn, handleRecentChatsLoadMore_fn, handleSearchChatsLoadMore_fn, transitionToSearch_fn, transitionToMain_fn, handleBackClick_fn, handleThreadSelect_fn, handleNewChatClick_fn, handleSearchChatsClick_fn, handleCloseClick_fn, handleMenuRename_fn, handleMenuOpen_fn, handleMenuClose_fn, handleMenuDeleteClick_fn, handleEditSave_fn, handleEditCancel_fn, _header, headerSearch_get, _chatsLabel, searchFieldSearch_get, emptyState_get, loadingMoreIndicator_get, threadList_get, threadListContainer_get, _chatActionsList;
30
+ var _searchDebounceTimeout, _deleteThreadController, _recentChatsScrollController, _searchChatsScrollController, _AiConversationsPanelComponent_instances, shouldEnableRecentPagination_get, shouldEnableSearchPagination_get, attachScrollController_fn, displayedThreads_get, handleSearch_fn, handleSearchInput_fn, handleRecentChatsLoadMore_fn, handleSearchChatsLoadMore_fn, transitionToSearch_fn, transitionToMain_fn, handleBackClick_fn, handleThreadSelect_fn, handleNewChatClick_fn, handleSearchChatsClick_fn, handleCloseClick_fn, handleMenuRename_fn, handleMenuOpen_fn, handleMenuClose_fn, handleMenuDeleteClick_fn, handleEditSave_fn, handleEditCancel_fn, _header, headerSearch_get, _chatsLabel, searchFieldSearch_get, emptyState_get, loadingMoreIndicator_get, _loadingIndicator, threadList_get, threadListContainer_get, _chatActionsList;
31
31
  const AiConversationsPanelComponentTagName = "forge-ai-conversations-panel";
32
32
  let AiConversationsPanelComponent = class extends LitElement {
33
33
  constructor() {
@@ -38,6 +38,7 @@ let AiConversationsPanelComponent = class extends LitElement {
38
38
  this.selectedThreadId = null;
39
39
  this.showConversationRename = false;
40
40
  this.showConversationDelete = false;
41
+ this.loading = false;
41
42
  this._viewState = "main";
42
43
  this._isSearching = false;
43
44
  this._searchResults = [];
@@ -85,7 +86,7 @@ let AiConversationsPanelComponent = class extends LitElement {
85
86
  class="close-button forge-icon-button forge-icon-button--medium"
86
87
  @click=${__privateMethod(this, _AiConversationsPanelComponent_instances, handleCloseClick_fn)}
87
88
  aria-label="Close conversations panel">
88
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
89
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" aria-hidden="true">
89
90
  <path fill="none" d="M0 0h24v24H0z" />
90
91
  <path
91
92
  d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z" />
@@ -94,11 +95,16 @@ let AiConversationsPanelComponent = class extends LitElement {
94
95
  </div>
95
96
  `);
96
97
  __privateAdd(this, _chatsLabel, html`<div class="chats-label">Recent chats</div>`);
98
+ __privateAdd(this, _loadingIndicator, html`
99
+ <div class="loading-indicator">
100
+ <forge-ai-spinner size="small"></forge-ai-spinner>
101
+ </div>
102
+ `);
97
103
  __privateAdd(this, _chatActionsList, html`
98
104
  <ul class="forge-list forge-list--dense forge-list--navlist chat-actions-list" role="list">
99
105
  <li class="forge-list-item new-chat-item" role="listitem">
100
106
  <button @click=${__privateMethod(this, _AiConversationsPanelComponent_instances, handleNewChatClick_fn)}>
101
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" class="forge-icon">
107
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" class="forge-icon" aria-hidden="true">
102
108
  <path
103
109
  d="M20 2H4c-1.1 0-2 .9-2 2v18l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2m0 14H5.2L4 17.2V4h16zm-4-7v2h-3v3h-2v-3H8V9h3V6h2v3z" />
104
110
  </svg>
@@ -107,7 +113,7 @@ let AiConversationsPanelComponent = class extends LitElement {
107
113
  </li>
108
114
  <li class="forge-list-item new-chat-item" role="listitem">
109
115
  <button @click=${__privateMethod(this, _AiConversationsPanelComponent_instances, handleSearchChatsClick_fn)}>
110
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" class="forge-icon">
116
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" class="forge-icon" aria-hidden="true">
111
117
  <path
112
118
  d="M9 6v2H2V6zm0 5v2H2v-2zm9 5v2H2v-2zm1.31-4.5c.44-.68.69-1.5.69-2.39 0-2.5-2-4.5-4.5-4.5s-4.5 2-4.5 4.5 2 4.5 4.5 4.5c.87 0 1.69-.25 2.38-.68L21 16l1.39-1.39zm-3.81.11c-1.38 0-2.5-1.11-2.5-2.5s1.12-2.5 2.5-2.5a2.5 2.5 0 0 1 0 5" />
113
119
  </svg>
@@ -382,7 +388,7 @@ headerSearch_get = function() {
382
388
  class="back-button forge-icon-button forge-icon-button--medium"
383
389
  @click=${__privateMethod(this, _AiConversationsPanelComponent_instances, handleBackClick_fn)}
384
390
  aria-label="Back to recent chats">
385
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
391
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" aria-hidden="true">
386
392
  <path fill="none" d="M0 0h24v24H0z" />
387
393
  <path d="M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20z" />
388
394
  </svg>
@@ -393,7 +399,7 @@ headerSearch_get = function() {
393
399
  class="close-button forge-icon-button forge-icon-button--medium"
394
400
  @click=${__privateMethod(this, _AiConversationsPanelComponent_instances, handleCloseClick_fn)}
395
401
  aria-label="Close conversations panel">
396
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
402
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" aria-hidden="true">
397
403
  <path fill="none" d="M0 0h24v24H0z" />
398
404
  <path
399
405
  d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z" />
@@ -407,7 +413,7 @@ _chatsLabel = /* @__PURE__ */ new WeakMap();
407
413
  searchFieldSearch_get = function() {
408
414
  return html`
409
415
  <div class="forge-field forge-field--small search-field">
410
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" class="forge-icon">
416
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" class="forge-icon" aria-hidden="true">
411
417
  <path fill="none" d="M0 0h24v24H0z" />
412
418
  <path
413
419
  d="M15.5 14h-.79l-.28-.27A6.47 6.47 0 0 0 16 9.5 6.5 6.5 0 1 0 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14" />
@@ -427,7 +433,7 @@ searchFieldSearch_get = function() {
427
433
  `;
428
434
  };
429
435
  emptyState_get = function() {
430
- const message = this._viewState === "search" && this._searchQuery.trim() ? "No conversations found" : "No conversations yet";
436
+ const message = this._viewState === "search" && this._searchQuery.trim() ? "No chats found" : "No chats yet";
431
437
  return html`
432
438
  <div class="empty-state">
433
439
  <p>${message}</p>
@@ -445,9 +451,13 @@ loadingMoreIndicator_get = function() {
445
451
  </div>
446
452
  `;
447
453
  };
454
+ _loadingIndicator = /* @__PURE__ */ new WeakMap();
448
455
  threadList_get = function() {
449
456
  const threads = __privateGet(this, _AiConversationsPanelComponent_instances, displayedThreads_get);
450
457
  if (threads.length === 0) {
458
+ if (this.loading && this._viewState === "main") {
459
+ return __privateGet(this, _loadingIndicator);
460
+ }
451
461
  return __privateGet(this, _AiConversationsPanelComponent_instances, emptyState_get);
452
462
  }
453
463
  return html`
@@ -519,6 +529,9 @@ __decorateClass([
519
529
  __decorateClass([
520
530
  property({ type: Boolean, attribute: "show-conversation-delete" })
521
531
  ], AiConversationsPanelComponent.prototype, "showConversationDelete", 2);
532
+ __decorateClass([
533
+ property({ type: Boolean, reflect: true })
534
+ ], AiConversationsPanelComponent.prototype, "loading", 2);
522
535
  __decorateClass([
523
536
  state()
524
537
  ], AiConversationsPanelComponent.prototype, "_viewState", 2);