@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.
- package/custom-elements.json +3046 -2837
- package/dist/ai-artifact/ai-artifact.scss.mjs +1 -1
- package/dist/ai-assistant-response/ai-assistant-response.d.ts +0 -2
- package/dist/ai-assistant-response/ai-assistant-response.mjs +24 -106
- package/dist/ai-assistant-response/ai-assistant-response.scss.mjs +1 -1
- package/dist/ai-chat-header/ai-chat-header.scss.mjs +1 -1
- package/dist/ai-chatbot/ai-chatbot-base.d.ts +4 -2
- package/dist/ai-chatbot/ai-chatbot-base.mjs +16 -24
- package/dist/ai-chatbot/ai-chatbot-tool-call.d.ts +0 -5
- package/dist/ai-chatbot/ai-chatbot-tool-call.mjs +5 -175
- package/dist/ai-chatbot/ai-chatbot-tool-call.scss.mjs +1 -1
- package/dist/ai-chatbot/ai-chatbot.mjs +5 -258
- package/dist/ai-chatbot/ai-chatbot.scss.mjs +1 -1
- package/dist/ai-chatbot/index.d.ts +1 -1
- package/dist/ai-chatbot/utils.d.ts +20 -1
- package/dist/ai-chatbot/utils.mjs +44 -0
- package/dist/ai-chatbot-launcher/ai-chatbot-launcher.mjs +20 -9
- package/dist/ai-chatbot-launcher/ai-chatbot-launcher.scss.mjs +1 -1
- package/dist/ai-error-message/ai-error-message.scss.mjs +1 -1
- package/dist/ai-floating-chat/ai-floating-chat.d.ts +8 -0
- package/dist/ai-floating-chat/ai-floating-chat.mjs +8 -0
- package/dist/ai-message-thread/ai-message-thread.d.ts +1 -1
- package/dist/ai-message-thread/ai-message-thread.mjs +13 -20
- package/dist/ai-message-thread/ai-message-thread.scss.mjs +1 -1
- package/dist/ai-prompt/ai-prompt.mjs +4 -4
- package/dist/ai-reasoning-header/ai-reasoning-header.mjs +4 -4
- package/dist/ai-response-message/ai-response-message.scss.mjs +1 -1
- package/dist/ai-response-message-toolbar/ai-response-message-toolbar.mjs +12 -12
- package/dist/ai-thread-actions-menu/ai-thread-actions-menu.mjs +3 -2
- package/dist/ai-thread-actions-menu/ai-thread-actions-menu.scss.mjs +1 -1
- package/dist/ai-tool-call-indicator/ai-tool-call-indicator.d.ts +12 -8
- package/dist/ai-tool-call-indicator/ai-tool-call-indicator.mjs +244 -32
- package/dist/ai-tool-call-indicator/ai-tool-call-indicator.scss.mjs +1 -1
- package/dist/ai-user-message/ai-user-message.scss.mjs +1 -1
- package/dist/core/tooltip/tooltip.scss.mjs +1 -1
- package/dist/tools/ai-data-table/ai-data-table.mjs +60 -25
- package/dist/tools/ai-data-table/ai-data-table.scss.mjs +1 -1
- package/dist/utils/csv-utils.d.ts +4 -0
- package/dist/utils/csv-utils.mjs +65 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.mjs +6 -1
- package/package.json +5 -5
- package/dist/ai-event-stream-viewer/ai-event-stream-viewer.d.ts +0 -19
- package/dist/ai-event-stream-viewer/ai-event-stream-viewer.mjs +0 -164
- package/dist/ai-event-stream-viewer/ai-event-stream-viewer.scss.mjs +0 -4
- package/dist/ai-event-stream-viewer/index.d.ts +0 -1
- 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.
|
|
465
|
-
|
|
466
|
-
|
|
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,
|
|
2
|
-
import { property,
|
|
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,
|
|
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")
|
|
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
|
-
|
|
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
|
};
|