@tylertech/forge-ai 0.13.3 → 0.13.4

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 (47) hide show
  1. package/custom-elements.json +3046 -2837
  2. package/dist/ai-artifact/ai-artifact.scss.mjs +1 -1
  3. package/dist/ai-assistant-response/ai-assistant-response.d.ts +0 -2
  4. package/dist/ai-assistant-response/ai-assistant-response.mjs +24 -106
  5. package/dist/ai-assistant-response/ai-assistant-response.scss.mjs +1 -1
  6. package/dist/ai-chat-header/ai-chat-header.scss.mjs +1 -1
  7. package/dist/ai-chatbot/ai-chatbot-base.d.ts +4 -2
  8. package/dist/ai-chatbot/ai-chatbot-base.mjs +16 -24
  9. package/dist/ai-chatbot/ai-chatbot-tool-call.d.ts +0 -5
  10. package/dist/ai-chatbot/ai-chatbot-tool-call.mjs +5 -175
  11. package/dist/ai-chatbot/ai-chatbot-tool-call.scss.mjs +1 -1
  12. package/dist/ai-chatbot/ai-chatbot.mjs +5 -258
  13. package/dist/ai-chatbot/ai-chatbot.scss.mjs +1 -1
  14. package/dist/ai-chatbot/index.d.ts +1 -1
  15. package/dist/ai-chatbot/utils.d.ts +20 -1
  16. package/dist/ai-chatbot/utils.mjs +44 -0
  17. package/dist/ai-chatbot-launcher/ai-chatbot-launcher.mjs +20 -9
  18. package/dist/ai-chatbot-launcher/ai-chatbot-launcher.scss.mjs +1 -1
  19. package/dist/ai-error-message/ai-error-message.scss.mjs +1 -1
  20. package/dist/ai-floating-chat/ai-floating-chat.d.ts +8 -0
  21. package/dist/ai-floating-chat/ai-floating-chat.mjs +8 -0
  22. package/dist/ai-message-thread/ai-message-thread.d.ts +1 -1
  23. package/dist/ai-message-thread/ai-message-thread.mjs +13 -20
  24. package/dist/ai-message-thread/ai-message-thread.scss.mjs +1 -1
  25. package/dist/ai-prompt/ai-prompt.mjs +4 -4
  26. package/dist/ai-reasoning-header/ai-reasoning-header.mjs +4 -4
  27. package/dist/ai-response-message/ai-response-message.scss.mjs +1 -1
  28. package/dist/ai-response-message-toolbar/ai-response-message-toolbar.mjs +12 -12
  29. package/dist/ai-thread-actions-menu/ai-thread-actions-menu.mjs +3 -2
  30. package/dist/ai-thread-actions-menu/ai-thread-actions-menu.scss.mjs +1 -1
  31. package/dist/ai-tool-call-indicator/ai-tool-call-indicator.d.ts +12 -8
  32. package/dist/ai-tool-call-indicator/ai-tool-call-indicator.mjs +244 -32
  33. package/dist/ai-tool-call-indicator/ai-tool-call-indicator.scss.mjs +1 -1
  34. package/dist/ai-user-message/ai-user-message.scss.mjs +1 -1
  35. package/dist/core/tooltip/tooltip.scss.mjs +1 -1
  36. package/dist/tools/ai-data-table/ai-data-table.mjs +60 -25
  37. package/dist/tools/ai-data-table/ai-data-table.scss.mjs +1 -1
  38. package/dist/utils/csv-utils.d.ts +4 -0
  39. package/dist/utils/csv-utils.mjs +65 -0
  40. package/dist/utils/index.d.ts +1 -0
  41. package/dist/utils/index.mjs +6 -1
  42. package/package.json +5 -5
  43. package/dist/ai-event-stream-viewer/ai-event-stream-viewer.d.ts +0 -19
  44. package/dist/ai-event-stream-viewer/ai-event-stream-viewer.mjs +0 -164
  45. package/dist/ai-event-stream-viewer/ai-event-stream-viewer.scss.mjs +0 -4
  46. package/dist/ai-event-stream-viewer/index.d.ts +0 -1
  47. package/dist/ai-event-stream-viewer/index.mjs +0 -5
@@ -1,7 +1,7 @@
1
1
  import { LitElement } from "lit";
2
2
  import { property } from "lit/decorators.js";
3
3
  import { ChatbotCoreController } from "../core/chatbot-core-controller.mjs";
4
- import { fileAttachmentsToContextItems, generateId, downloadFile } from "./utils.mjs";
4
+ import { fileAttachmentsToContextItems, generateId, formatChatTranscript, downloadFile, createChatExportFilename } from "./utils.mjs";
5
5
  var __defProp = Object.defineProperty;
6
6
  var __decorateClass = (decorators, target, key, kind) => {
7
7
  var result = void 0;
@@ -15,6 +15,8 @@ class AiChatbotBase extends LitElement {
15
15
  constructor() {
16
16
  super(...arguments);
17
17
  this.fileUpload = "off";
18
+ this.maxFileSize = 10485760;
19
+ this.acceptedFileTypes = "";
18
20
  this.voiceInput = "on";
19
21
  this.placeholder = "Ask a question...";
20
22
  this.enableReactions = false;
@@ -23,6 +25,7 @@ class AiChatbotBase extends LitElement {
23
25
  this.debugMode = false;
24
26
  this.disclaimerText = "AI can make mistakes. Always verify responses.";
25
27
  this.debugCommand = "on";
28
+ this.exportOption = "on";
26
29
  this.agents = [];
27
30
  this.contextItems = [];
28
31
  }
@@ -446,34 +449,14 @@ class AiChatbotBase extends LitElement {
446
449
  this.dispatchEvent(event);
447
450
  return event;
448
451
  }
449
- _formatToolCallForExport(toolCall) {
450
- const lines = [` Tool: ${toolCall.name}`, ` Args: ${JSON.stringify(toolCall.args)}`];
451
- if (toolCall.status === "error") {
452
- const errorMsg = typeof toolCall.result === "object" && toolCall.result !== null && "error" in toolCall.result ? toolCall.result.error : "Unknown error";
453
- lines.push(` Error: ${errorMsg}`);
454
- } else if (toolCall.result !== void 0) {
455
- lines.push(` Result: ${JSON.stringify(toolCall.result)}`);
456
- }
457
- return lines.join("\n");
458
- }
459
452
  _handleExport() {
460
453
  const messages = this.getMessages();
461
454
  if (messages.length === 0) {
462
455
  return;
463
456
  }
464
- const chatText = messages.map((message) => {
465
- const timestamp = new Date(message.timestamp).toLocaleString();
466
- const role = message.role === "user" ? "You" : "Assistant";
467
- let output = `[${timestamp}] ${role}:
468
- ${message.content}
469
- `;
470
- if (message.toolCalls?.length) {
471
- output += "\n" + message.toolCalls.map((tc) => this._formatToolCallForExport(tc)).join("\n\n") + "\n";
472
- }
473
- return output;
474
- }).join("\n");
475
- const filename = `chat-history-${(/* @__PURE__ */ new Date()).toISOString().slice(0, 19).replace(/:/g, "-")}.txt`;
476
- downloadFile(chatText, filename, "text/plain");
457
+ const chatText = formatChatTranscript(messages, { includeToolCalls: this.debugMode });
458
+ const agentName = this.getSelectedAgent()?.name ?? this.titleText;
459
+ downloadFile(chatText, createChatExportFilename(agentName), "text/plain");
477
460
  }
478
461
  }
479
462
  __decorateClass([
@@ -482,6 +465,12 @@ __decorateClass([
482
465
  __decorateClass([
483
466
  property({ attribute: "file-upload" })
484
467
  ], AiChatbotBase.prototype, "fileUpload");
468
+ __decorateClass([
469
+ property({ type: Number, attribute: "max-file-size" })
470
+ ], AiChatbotBase.prototype, "maxFileSize");
471
+ __decorateClass([
472
+ property({ attribute: "accepted-file-types" })
473
+ ], AiChatbotBase.prototype, "acceptedFileTypes");
485
474
  __decorateClass([
486
475
  property({ attribute: "voice-input" })
487
476
  ], AiChatbotBase.prototype, "voiceInput");
@@ -509,6 +498,9 @@ __decorateClass([
509
498
  __decorateClass([
510
499
  property({ attribute: "debug-command" })
511
500
  ], AiChatbotBase.prototype, "debugCommand");
501
+ __decorateClass([
502
+ property({ attribute: "export-option" })
503
+ ], AiChatbotBase.prototype, "exportOption");
512
504
  __decorateClass([
513
505
  property({ type: Object, attribute: false })
514
506
  ], AiChatbotBase.prototype, "agentInfo");
@@ -14,11 +14,6 @@ export declare class AiChatbotToolCallComponent extends LitElement {
14
14
  static styles: CSSResult;
15
15
  toolCall: ToolCall;
16
16
  toolDefinition?: ToolDefinition;
17
- debugMode: boolean;
18
- private _popoverOpen;
19
- private _debugPopoverOpen;
20
- private _infoButton?;
21
- private _debugButton?;
22
17
  updated(changedProperties: PropertyValues<this>): void;
23
18
  render(): TemplateResult | typeof nothing;
24
19
  }
@@ -1,10 +1,6 @@
1
- import { unsafeCSS, LitElement, html, nothing } from "lit";
2
- import { property, state, query, customElement } from "lit/decorators.js";
1
+ import { unsafeCSS, LitElement, nothing, html } from "lit";
2
+ import { property, customElement } from "lit/decorators.js";
3
3
  import { createRef, ref } from "lit/directives/ref.js";
4
- import "../core/popover/popover.mjs";
5
- import "../ai-spinner/ai-spinner.mjs";
6
- import "../ai-event-stream-viewer/ai-event-stream-viewer.mjs";
7
- import "../core/tooltip/tooltip.mjs";
8
4
  import styles from "./ai-chatbot-tool-call.scss.mjs";
9
5
  var __defProp = Object.defineProperty;
10
6
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -24,32 +20,18 @@ var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read fr
24
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);
25
21
  var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), member.set(obj, value), value);
26
22
  var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
27
- var _customRendererRef, _renderedElement, _AiChatbotToolCallComponent_instances, shouldRenderCustom_get, handleButtonClick_fn, handlePopoverToggle_fn, handleDebugClick_fn, handleDebugPopoverToggle_fn, dispatchScrollRequest_fn, statusIcon_get, _infoIcon, _debugIcon, customRenderer_get, debugButton_get, debugPopover_get, popoverContent_get;
23
+ var _customRendererRef, _renderedElement, _AiChatbotToolCallComponent_instances, shouldRenderCustom_get, dispatchScrollRequest_fn, customRenderer_get;
28
24
  const AiChatbotToolCallComponentTagName = "forge-ai-chatbot-tool-call";
29
25
  let AiChatbotToolCallComponent = class extends LitElement {
30
26
  constructor() {
31
27
  super(...arguments);
32
28
  __privateAdd(this, _AiChatbotToolCallComponent_instances);
33
- this.debugMode = false;
34
- this._popoverOpen = false;
35
- this._debugPopoverOpen = false;
36
29
  __privateAdd(this, _customRendererRef, createRef());
37
30
  __privateAdd(this, _renderedElement);
38
- __privateAdd(this, _infoIcon, html`
39
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" height="24" width="24" fill="currentColor">
40
- <path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2m1 15h-2v-6h2zm0-8h-2V7h2z" />
41
- </svg>
42
- `);
43
- __privateAdd(this, _debugIcon, html`
44
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
45
- <path
46
- d="M14 12h-4v-2h4m0 6h-4v-2h4m6-6h-2.81a6 6 0 0 0-1.82-1.96L17 4.41 15.59 3l-2.17 2.17a6 6 0 0 0-2.83 0L8.41 3 7 4.41l1.62 1.63C7.88 6.55 7.26 7.22 6.81 8H4v2h2.09c-.05.33-.09.66-.09 1v1H4v2h2v1c0 .34.04.67.09 1H4v2h2.81c1.04 1.79 2.97 3 5.19 3s4.15-1.21 5.19-3H20v-2h-2.09c.05-.33.09-.66.09-1v-1h2v-2h-2v-1c0-.34-.04-.67-.09-1H20z" />
47
- </svg>
48
- `);
49
31
  }
50
32
  updated(changedProperties) {
51
33
  super.updated(changedProperties);
52
- if (changedProperties.has("toolCall") || changedProperties.has("toolDefinition") || changedProperties.has("debugMode")) {
34
+ if (changedProperties.has("toolCall") || changedProperties.has("toolDefinition")) {
53
35
  const renderer = this.toolDefinition?.renderer;
54
36
  const container = __privateGet(this, _customRendererRef).value;
55
37
  if (container && __privateGet(this, _AiChatbotToolCallComponent_instances, shouldRenderCustom_get)) {
@@ -71,46 +53,7 @@ let AiChatbotToolCallComponent = class extends LitElement {
71
53
  }
72
54
  }
73
55
  render() {
74
- const isError = this.toolCall.status === "error";
75
- const isComplete = this.toolCall.status === "complete";
76
- const showDetails = isComplete || isError;
77
- if (!this.debugMode) {
78
- return __privateGet(this, _AiChatbotToolCallComponent_instances, customRenderer_get);
79
- }
80
- return html`
81
- <div class="tool-call ${isError ? "tool-call--error" : ""}">
82
- <span class="status-icon">${__privateGet(this, _AiChatbotToolCallComponent_instances, statusIcon_get)}</span>
83
- <span class="tool-name">${this.toolDefinition?.displayName ?? this.toolCall.name}</span>
84
- <div class="tool-actions">
85
- ${showDetails ? html`
86
- <div>
87
- <button
88
- id="info-btn"
89
- class="forge-icon-button forge-icon-button--small info-button"
90
- type="button"
91
- aria-label="${this._popoverOpen ? "Hide" : "Show"} tool details"
92
- aria-expanded="${this._popoverOpen}"
93
- @click=${__privateMethod(this, _AiChatbotToolCallComponent_instances, handleButtonClick_fn)}>
94
- ${__privateGet(this, _infoIcon)}
95
- </button>
96
- <forge-ai-tooltip for="info-btn" placement="bottom">Details</forge-ai-tooltip>
97
- </div>
98
- ${__privateGet(this, _AiChatbotToolCallComponent_instances, debugButton_get)}
99
- ` : nothing}
100
- </div>
101
- </div>
102
- ${showDetails ? html`
103
- <forge-ai-popover
104
- .anchor=${this._infoButton}
105
- .open=${this._popoverOpen}
106
- placement="bottom-start"
107
- .flip=${true}
108
- @forge-ai-popover-toggle=${__privateMethod(this, _AiChatbotToolCallComponent_instances, handlePopoverToggle_fn)}>
109
- ${__privateGet(this, _AiChatbotToolCallComponent_instances, popoverContent_get)}
110
- </forge-ai-popover>
111
- ` : nothing}
112
- ${__privateGet(this, _AiChatbotToolCallComponent_instances, debugPopover_get)} ${__privateGet(this, _AiChatbotToolCallComponent_instances, customRenderer_get)}
113
- `;
56
+ return __privateGet(this, _AiChatbotToolCallComponent_instances, customRenderer_get);
114
57
  }
115
58
  };
116
59
  _customRendererRef = /* @__PURE__ */ new WeakMap();
@@ -126,18 +69,6 @@ shouldRenderCustom_get = function() {
126
69
  }
127
70
  return false;
128
71
  };
129
- handleButtonClick_fn = function(_evt) {
130
- this._popoverOpen = !this._popoverOpen;
131
- };
132
- handlePopoverToggle_fn = function(evt) {
133
- this._popoverOpen = evt.detail.newState === "open";
134
- };
135
- handleDebugClick_fn = function() {
136
- this._debugPopoverOpen = !this._debugPopoverOpen;
137
- };
138
- handleDebugPopoverToggle_fn = function(event) {
139
- this._debugPopoverOpen = event.detail.open;
140
- };
141
72
  dispatchScrollRequest_fn = function() {
142
73
  this.dispatchEvent(
143
74
  new CustomEvent("forge-ai-message-thread-scroll-request", {
@@ -146,30 +77,6 @@ dispatchScrollRequest_fn = function() {
146
77
  })
147
78
  );
148
79
  };
149
- statusIcon_get = function() {
150
- switch (this.toolCall.status) {
151
- case "pending":
152
- case "executing":
153
- return html`<forge-ai-spinner size="small"></forge-ai-spinner>`;
154
- case "complete":
155
- return html`
156
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" height="24" width="24" fill="currentColor">
157
- <path d="M21 7 9 19l-5.5-5.5 1.41-1.41L9 16.17 19.59 5.59z" />
158
- </svg>
159
- `;
160
- case "error":
161
- return html`
162
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" height="24" width="24" fill="currentColor">
163
- <path fill="none" d="M0 0h24v24H0z" />
164
- <path d="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" />
165
- </svg>
166
- `;
167
- default:
168
- return nothing;
169
- }
170
- };
171
- _infoIcon = /* @__PURE__ */ new WeakMap();
172
- _debugIcon = /* @__PURE__ */ new WeakMap();
173
80
  customRenderer_get = function() {
174
81
  const renderer = this.toolDefinition?.renderer;
175
82
  if (!renderer || !__privateGet(this, _AiChatbotToolCallComponent_instances, shouldRenderCustom_get)) {
@@ -180,68 +87,6 @@ customRenderer_get = function() {
180
87
  }
181
88
  return nothing;
182
89
  };
183
- debugButton_get = function() {
184
- const hasDebugData = this.debugMode && (this.toolCall.eventStream?.length ?? 0) > 0;
185
- if (!hasDebugData) {
186
- return nothing;
187
- }
188
- return html`
189
- <div>
190
- <button
191
- id="debug-btn"
192
- aria-label="View event stream"
193
- class="forge-icon-button forge-icon-button--tonal forge-icon-button--small debug-button"
194
- @click=${__privateMethod(this, _AiChatbotToolCallComponent_instances, handleDebugClick_fn)}>
195
- ${__privateGet(this, _debugIcon)}
196
- </button>
197
- <forge-ai-tooltip for="debug-btn" placement="bottom">Event stream</forge-ai-tooltip>
198
- </div>
199
- `;
200
- };
201
- debugPopover_get = function() {
202
- const hasDebugData = this.debugMode && this.toolCall.eventStream;
203
- if (!hasDebugData) {
204
- return nothing;
205
- }
206
- return html`
207
- <forge-ai-popover
208
- .anchor=${this._debugButton}
209
- .open=${this._debugPopoverOpen}
210
- id="debug-popover"
211
- placement="right"
212
- flip
213
- @forge-ai-popover-toggle=${__privateMethod(this, _AiChatbotToolCallComponent_instances, handleDebugPopoverToggle_fn)}>
214
- <forge-ai-event-stream-viewer
215
- .events=${this.toolCall.eventStream}></forge-ai-event-stream-viewer>
216
- </forge-ai-popover>
217
- `;
218
- };
219
- popoverContent_get = function() {
220
- const hasArgs = Object.keys(this.toolCall.args).length > 0;
221
- const hasArgsBuffer = this.toolCall.argsBuffer && this.toolCall.argsBuffer.length > 0;
222
- const hasResult = this.toolCall.result !== void 0;
223
- return html`
224
- <div class="tool-details">
225
- ${hasArgsBuffer ? html`
226
- <div class="tool-section">
227
- <div class="section-label">Arguments (streaming):</div>
228
- <pre class="code-block">${this.toolCall.argsBuffer}</pre>
229
- </div>
230
- ` : hasArgs ? html`
231
- <div class="tool-section">
232
- <div class="section-label">Arguments:</div>
233
- <pre class="code-block">${JSON.stringify(this.toolCall.args, null, 2)}</pre>
234
- </div>
235
- ` : nothing}
236
- ${hasResult ? html`
237
- <div class="tool-section">
238
- <div class="section-label">Result:</div>
239
- <pre class="code-block">${JSON.stringify(this.toolCall.result, null, 2)}</pre>
240
- </div>
241
- ` : nothing}
242
- </div>
243
- `;
244
- };
245
90
  AiChatbotToolCallComponent.styles = unsafeCSS(styles);
246
91
  __decorateClass([
247
92
  property({ attribute: false })
@@ -249,21 +94,6 @@ __decorateClass([
249
94
  __decorateClass([
250
95
  property({ attribute: false })
251
96
  ], AiChatbotToolCallComponent.prototype, "toolDefinition", 2);
252
- __decorateClass([
253
- property({ type: Boolean, attribute: "debug-mode" })
254
- ], AiChatbotToolCallComponent.prototype, "debugMode", 2);
255
- __decorateClass([
256
- state()
257
- ], AiChatbotToolCallComponent.prototype, "_popoverOpen", 2);
258
- __decorateClass([
259
- state()
260
- ], AiChatbotToolCallComponent.prototype, "_debugPopoverOpen", 2);
261
- __decorateClass([
262
- query(".info-button")
263
- ], AiChatbotToolCallComponent.prototype, "_infoButton", 2);
264
- __decorateClass([
265
- query("#debug-btn")
266
- ], AiChatbotToolCallComponent.prototype, "_debugButton", 2);
267
97
  AiChatbotToolCallComponent = __decorateClass([
268
98
  customElement(AiChatbotToolCallComponentTagName)
269
99
  ], AiChatbotToolCallComponent);
@@ -1,4 +1,4 @@
1
- const styles = '/* prettier-ignore */\n/**\n * @license\n * Copyright Tyler Technologies, Inc.\n * License: Apache-2.0\n */\n.forge-icon-button {\n --_icon-button-display:var(--forge-icon-button-display, inline-flex);\n --_icon-button-size:var(--forge-icon-button-size, 48px);\n --_icon-button-gap:var(--forge-icon-button-gap, 0);\n --_icon-button-icon-color:var(--forge-icon-button-icon-color, currentColor);\n --_icon-button-background-color:var(--forge-icon-button-background-color, none);\n --_icon-button-icon-size:var(--forge-icon-button-icon-size, calc(var(--forge-typography-font-size, 1rem) * 1.5));\n --_icon-button-cursor:var(--forge-icon-button-cursor, pointer);\n --_icon-button-padding:var(--forge-icon-button-padding, var(--forge-spacing-xxsmall, 4px));\n --_icon-button-border:var(--forge-icon-button-border, none);\n --_icon-button-shadow:var(--forge-icon-button-shadow, none);\n --_icon-button-transition-duration:var(--forge-icon-button-transition-duration, var(--forge-animation-duration-short3, 150ms));\n --_icon-button-transition-timing:var(--forge-icon-button-transition-timing, var(--forge-animation-easing-standard, cubic-bezier(0.2, 0, 0, 1)));\n --_icon-button-shape:var(--forge-icon-button-shape, calc(var(--forge-shape-full, 9999px) * var(--forge-shape-factor, 1)));\n --_icon-button-shape-start-start:var(--forge-icon-button-shape-start-start, var(--_icon-button-shape));\n --_icon-button-shape-start-end:var(--forge-icon-button-shape-start-end, var(--_icon-button-shape));\n --_icon-button-shape-end-start:var(--forge-icon-button-shape-end-start, var(--_icon-button-shape));\n --_icon-button-shape-end-end:var(--forge-icon-button-shape-end-end, var(--_icon-button-shape));\n --_icon-button-shape-squared:var(--forge-icon-button-shape-squared, calc(var(--forge-shape-medium, 4px) * var(--forge-shape-factor, 1)));\n --_icon-button-outlined-border-width:var(--forge-icon-button-outlined-border-width, 1px);\n --_icon-button-outlined-border-style:var(--forge-icon-button-outlined-border-style, solid);\n --_icon-button-outlined-border-color:var(--forge-icon-button-outlined-border-color, var(--_icon-button-icon-color));\n --_icon-button-tonal-icon-color:var(--forge-icon-button-tonal-icon-color, var(--forge-theme-on-primary-container, #222c62));\n --_icon-button-tonal-background-color:var(--forge-icon-button-tonal-background-color, var(--forge-theme-primary-container, #d1d5ed));\n --_icon-button-filled-icon-color:var(--forge-icon-button-filled-icon-color, var(--forge-theme-on-primary, #ffffff));\n --_icon-button-filled-background-color:var(--forge-icon-button-filled-background-color, var(--forge-theme-primary, #3f51b5));\n --_icon-button-raised-shadow:var(--forge-icon-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 --_icon-button-raised-hover-shadow:var(--forge-icon-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 --_icon-button-raised-active-shadow:var(--forge-icon-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 --_icon-button-raised-disabled-shadow:var(--forge-icon-button-raised-disabled-shadow, none);\n --_icon-button-density-small-size:var(--forge-icon-button-density-small-size, 24px);\n --_icon-button-density-small-padding:var(--forge-icon-button-density-small-padding, var(--forge-spacing-xxxsmall, 2px));\n --_icon-button-density-small-icon-size:var(--forge-icon-button-density-small-icon-size, calc(var(--forge-typography-font-size, 1rem) * 1.125));\n --_icon-button-density-medium-size:var(--forge-icon-button-density-medium-size, 36px);\n --_icon-button-density-medium-padding:var(--forge-icon-button-density-medium-padding, var(--forge-spacing-xxsmall, 4px));\n --_icon-button-density-large-size:var(--forge-icon-button-density-large-size, var(--_icon-button-size));\n --_icon-button-toggle-on-background-color:var(--forge-icon-button-toggle-on-background-color, var(--forge-theme-primary-container, #d1d5ed));\n --_icon-button-toggle-on-icon-color:var(--forge-icon-button-toggle-on-icon-color, var(--forge-theme-primary, #3f51b5));\n --_icon-button-outlined-toggle-on-background-color:var(--forge-icon-button-outlined-toggle-on-background-color, var(--forge-theme-primary-container, #d1d5ed));\n --_icon-button-outlined-toggle-on-icon-color:var(--forge-icon-button-outlined-toggle-on-icon-color, var(--forge-theme-primary, #3f51b5));\n --_icon-button-tonal-toggle-background-color:var(--forge-icon-button-tonal-toggle-background-color, var(--forge-theme-surface-container-low, #ebebeb));\n --_icon-button-tonal-toggle-on-background-color:var(--forge-icon-button-tonal-toggle-on-background-color, var(--forge-theme-primary-container, #d1d5ed));\n --_icon-button-tonal-toggle-on-icon-color:var(--forge-icon-button-tonal-toggle-on-icon-color, var(--forge-theme-primary, #3f51b5));\n --_icon-button-filled-toggle-background-color:var(--forge-icon-button-filled-toggle-background-color, var(--forge-theme-surface-container-low, #ebebeb));\n --_icon-button-filled-toggle-icon-color:var(--forge-icon-button-filled-toggle-icon-color, var(--forge-theme-primary, #3f51b5));\n --_icon-button-filled-toggle-on-background-color:var(--forge-icon-button-filled-toggle-on-background-color, var(--forge-theme-primary, #3f51b5));\n --_icon-button-filled-toggle-on-icon-color:var(--forge-icon-button-filled-toggle-on-icon-color, var(--forge-theme-on-primary, #ffffff));\n --_icon-button-disabled-cursor:var(--forge-icon-button-disabled-cursor, not-allowed);\n --_icon-button-disabled-opacity:var(--forge-icon-button-disabled-opacity, 0.38);\n --_icon-button-popover-icon-padding:var(--forge-icon-button-popover-icon-padding, var(--forge-spacing-xsmall, 8px));\n --_icon-button-focus-indicator-color:var(--forge-icon-button-focus-indicator-color, var(--forge-theme-primary, #3f51b5));\n}\n\n.forge-icon-button {\n display: var(--_icon-button-display);\n position: relative;\n outline: none;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n position: relative;\n z-index: 0;\n display: var(--_icon-button-display);\n align-items: center;\n justify-content: center;\n gap: var(--_icon-button-gap);\n box-sizing: border-box;\n height: var(--_icon-button-density-large-size);\n min-width: var(--_icon-button-density-large-size);\n border: var(--_icon-button-border);\n border-start-start-radius: var(--_icon-button-shape-start-start);\n border-start-end-radius: var(--_icon-button-shape-start-end);\n border-end-start-radius: var(--_icon-button-shape-end-start);\n border-end-end-radius: var(--_icon-button-shape-end-end);\n padding: var(--_icon-button-padding);\n box-shadow: var(--_icon-button-shadow);\n color: var(--_icon-button-icon-color);\n background: var(--_icon-button-background-color);\n font-size: var(--_icon-button-icon-size);\n cursor: var(--_icon-button-cursor);\n user-select: none;\n transition-property: box-shadow, background;\n transition-duration: var(--_icon-button-transition-duration);\n transition-timing-function: var(--_icon-button-transition-timing);\n}\n\n.forge-icon-button img, .forge-icon-button svg {\n height: var(--_icon-button-icon-size);\n width: var(--_icon-button-icon-size);\n}\n\n.forge-icon-button svg {\n fill: currentColor;\n}\n\n.forge-icon-button:not(:disabled) {\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-icon-button:not(:disabled)::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-icon-button:not(:disabled):hover::before {\n background-color: var(--_state-layer-hover-color);\n opacity: var(--_state-layer-hover-opacity);\n}\n\n.forge-icon-button:not(:disabled):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.forge-icon-button:not(:disabled) {\n --forge-state-layer-color: var(--_icon-button-icon-color);\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-icon-button:not(:disabled) {\n outline: none;\n}\n\n.forge-icon-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-icon-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-icon-button:not(:disabled) {\n --forge-focus-indicator-color: var(--_icon-button-focus-indicator-color);\n --forge-focus-indicator-shape: var(--_icon-button-shape);\n}\n\n.forge-icon-button:not(:disabled):where(.forge-icon-button--text, :not(:where(.forge-icon-button--outlined, .forge-icon-button--tonal, .forge-icon-button--filled, .forge-icon-button--raised))) {\n --forge-focus-indicator-outward-offset: 0px;\n}\n\n.forge-icon-button--outlined {\n border-width: var(--_icon-button-outlined-border-width);\n border-style: var(--_icon-button-outlined-border-style);\n border-color: var(--_icon-button-outlined-border-color);\n}\n\n.forge-icon-button--tonal {\n --_icon-button-icon-color:var(--_icon-button-tonal-icon-color);\n --_icon-button-background-color:var(--_icon-button-tonal-background-color);\n}\n\n.forge-icon-button--filled, .forge-icon-button--raised {\n --_icon-button-icon-color:var(--_icon-button-filled-icon-color);\n --_icon-button-background-color:var(--_icon-button-filled-background-color);\n}\n\n.forge-icon-button--raised {\n --_icon-button-shadow:var(--_icon-button-raised-shadow);\n}\n\n.forge-icon-button--raised:hover {\n --_icon-button-raised-shadow:var(--_icon-button-raised-hover-shadow);\n}\n\n.forge-icon-button--raised:active {\n --_icon-button-raised-shadow:var(--_icon-button-raised-active-shadow);\n}\n\n.forge-icon-button--squared {\n --_icon-button-shape:var(--_icon-button-shape-squared);\n}\n\n.forge-icon-button--small {\n --_icon-button-size:var(--_icon-button-density-small-size);\n --_icon-button-icon-size:var(--_icon-button-density-small-icon-size);\n --_icon-button-padding:var(--_icon-button-density-small-padding);\n}\n\n.forge-icon-button--small > * {\n font-size: var(--_icon-button-density-small-icon-size);\n}\n\n.forge-icon-button--medium {\n --_icon-button-size:var(--_icon-button-density-medium-size);\n --_icon-button-padding:var(--_icon-button-density-medium-padding);\n}\n\n.forge-icon-button:disabled {\n pointer-events: none;\n opacity: var(--_icon-button-disabled-opacity);\n pointer-events: auto;\n cursor: not-allowed;\n}\n\n.forge-icon-button forge-circular-progress {\n --forge-circular-progress-indicator-color: var(--_icon-button-icon-color);\n --forge-circular-progress-track-color: transparent;\n --forge-circular-progress-size: 1em;\n}\n\n:host {\n display: block;\n}\n\n.tool-call {\n display: flex;\n align-items: center;\n gap: var(--forge-spacing-xsmall, 8px);\n background: var(--forge-theme-surface-container-minimum, #f5f5f5);\n border-radius: calc(var(--forge-shape-medium, 4px) * var(--forge-shape-factor, 1));\n border: 1px solid var(--forge-theme-outline, #e0e0e0);\n margin-block: var(--forge-spacing-medium, 16px);\n padding: var(--forge-spacing-xxsmall, 4px) var(--forge-spacing-xsmall, 8px);\n overflow: hidden;\n}\n.tool-call--error {\n border-color: var(--forge-theme-error, #b00020);\n background: var(--forge-theme-error-container-low, #f6e0e4);\n}\n.tool-call--error .status-icon {\n color: var(--forge-theme-error, #b00020);\n}\n\n.debug-button {\n color: var(--forge-theme-on-error-container-low, #5f0011);\n --forge-icon-button-focus-indicator-color: var(--forge-theme-error, #b00020);\n --forge-icon-button-tonal-background-color: var(--forge-theme-error-container-low, #f6e0e4);\n}\n\n.tool-name {\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 color: var(--forge-theme-text-medium, rgba(0, 0, 0, 0.6));\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n}\n\n.status-icon {\n flex-shrink: 0;\n display: flex;\n align-items: center;\n color: var(--forge-theme-text-medium, rgba(0, 0, 0, 0.6));\n}\n\n.info-button {\n color: var(--forge-theme-text-medium, rgba(0, 0, 0, 0.6));\n}\n.info-button:hover {\n color: var(--forge-theme-text-high, rgba(0, 0, 0, 0.87));\n}\n\n.tool-details {\n display: grid;\n gap: var(--forge-spacing-medium, 16px);\n padding: var(--forge-spacing-medium, 16px);\n min-width: 300px;\n max-width: 500px;\n min-height: 100px;\n max-height: 400px;\n overflow-y: auto;\n}\n\n.tool-section {\n display: grid;\n gap: var(--forge-spacing-xsmall, 8px);\n}\n\n.tool-actions {\n display: flex;\n gap: var(--forge-spacing-small, 12px);\n margin-inline-start: auto;\n}\n.tool-actions > * {\n display: flex;\n align-items: center;\n}\n\n.section-label {\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.code-block {\n background-color: var(--forge-theme-surface-container-minimum, #f5f5f5);\n color: var(--forge-theme-on-surface-container-minimum, #000000);\n padding: var(--forge-spacing-small, 12px);\n border-radius: calc(var(--forge-shape-medium, 4px) * var(--forge-shape-factor, 1));\n overflow-x: auto;\n margin: 0;\n font-family: monospace;\n font-size: 0.85em;\n white-space: pre-wrap;\n word-wrap: break-word;\n}\n\n.tool-error {\n -moz-osx-font-smoothing: grayscale;\n -webkit-font-smoothing: antialiased;\n font-family: var(--forge-typography-body2-font-family, var(--forge-typography-font-family, "Roboto", sans-serif));\n font-size: var(--forge-typography-body2-font-size, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-body-font-size-scale, 1)));\n font-weight: var(--forge-typography-body2-font-weight, 400);\n line-height: var(--forge-typography-body2-line-height, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-body-line-height-scale, 1.375)));\n letter-spacing: var(--forge-typography-body2-letter-spacing, 0.015625em);\n text-transform: var(--forge-typography-body2-text-transform, inherit);\n text-decoration: var(--forge-typography-body2-text-decoration, inherit);\n display: flex;\n align-items: center;\n gap: var(--forge-spacing-xsmall, 8px);\n color: var(--forge-theme-error, #b00020);\n padding: var(--forge-spacing-small, 12px);\n margin-block: var(--forge-spacing-small, 12px);\n background: var(--forge-theme-error-container-low, #f6e0e4);\n border-radius: calc(var(--forge-shape-medium, 4px) * var(--forge-shape-factor, 1));\n}';
1
+ const styles = ":host {\n display: block;\n}";
2
2
  export {
3
3
  styles as default
4
4
  };