@tylertech/forge-ai 0.4.1 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/custom-elements.json +6894 -2090
- package/dist/ai-actions-toolbar/ai-actions-toolbar.d.ts +24 -1
- package/dist/ai-actions-toolbar/ai-actions-toolbar.mjs +171 -42
- package/dist/ai-actions-toolbar/ai-actions-toolbar.scss.mjs +1 -1
- package/dist/ai-agent-info/ai-agent-info.d.ts +29 -0
- package/dist/ai-agent-info/ai-agent-info.mjs +123 -0
- package/dist/ai-agent-info/ai-agent-info.scss.mjs +4 -0
- package/dist/ai-agent-info/index.d.ts +1 -0
- package/dist/ai-agent-info/index.mjs +5 -0
- package/dist/ai-artifact/ai-artifact.scss.mjs +1 -1
- package/dist/ai-attachment/ai-attachment.d.ts +39 -0
- package/dist/ai-attachment/ai-attachment.mjs +130 -0
- package/dist/ai-attachment/ai-attachment.scss.mjs +4 -0
- package/dist/ai-attachment/index.d.ts +1 -0
- package/dist/ai-attachment/index.mjs +5 -0
- package/dist/ai-button/ai-button.mjs +1 -0
- package/dist/ai-button/ai-button.scss.mjs +1 -1
- package/dist/ai-chain-of-thought/thought-base/thought-base.scss.mjs +1 -1
- package/dist/ai-chat-header/ai-chat-header.d.ts +39 -17
- package/dist/ai-chat-header/ai-chat-header.mjs +136 -30
- package/dist/ai-chat-header/ai-chat-header.scss.mjs +1 -1
- package/dist/ai-chat-header/index.d.ts +1 -0
- package/dist/ai-chat-interface/ai-chat-interface.d.ts +2 -4
- package/dist/ai-chat-interface/ai-chat-interface.mjs +24 -28
- package/dist/ai-chat-interface/ai-chat-interface.scss.mjs +1 -1
- package/dist/ai-chatbot/ag-ui-adapter.d.ts +22 -0
- package/dist/ai-chatbot/ag-ui-adapter.mjs +340 -0
- package/dist/ai-chatbot/agent-adapter.d.ts +133 -0
- package/dist/ai-chatbot/agent-adapter.mjs +136 -0
- package/dist/ai-chatbot/agent-runner.d.ts +41 -0
- package/dist/ai-chatbot/agent-runner.mjs +264 -0
- package/dist/ai-chatbot/ai-chatbot-tool-call.d.ts +24 -0
- package/dist/ai-chatbot/ai-chatbot-tool-call.mjs +252 -0
- package/dist/ai-chatbot/ai-chatbot-tool-call.scss.mjs +4 -0
- package/dist/ai-chatbot/ai-chatbot.d.ts +134 -0
- package/dist/ai-chatbot/ai-chatbot.mjs +816 -0
- package/dist/ai-chatbot/ai-chatbot.scss.mjs +4 -0
- package/dist/ai-chatbot/create-tool-renderer.d.ts +9 -0
- package/dist/ai-chatbot/create-tool-renderer.mjs +16 -0
- package/dist/ai-chatbot/event-emitter.d.ts +43 -0
- package/dist/ai-chatbot/event-emitter.mjs +81 -0
- package/dist/ai-chatbot/file-upload-manager.d.ts +27 -0
- package/dist/ai-chatbot/file-upload-manager.mjs +106 -0
- package/dist/ai-chatbot/http-agent-with-credentials.d.ts +8 -0
- package/dist/ai-chatbot/http-agent-with-credentials.mjs +14 -0
- package/dist/ai-chatbot/index.d.ts +15 -0
- package/dist/ai-chatbot/index.mjs +30 -0
- package/dist/ai-chatbot/markdown-stream-controller.d.ts +13 -0
- package/dist/ai-chatbot/markdown-stream-controller.mjs +49 -0
- package/dist/ai-chatbot/message-state-controller.d.ts +49 -0
- package/dist/ai-chatbot/message-state-controller.mjs +257 -0
- package/dist/ai-chatbot/types.d.ts +209 -0
- package/dist/ai-chatbot/utils.d.ts +12 -0
- package/dist/ai-chatbot/utils.mjs +32 -0
- package/dist/ai-confirmation-prompt/ai-confirmation-prompt.d.ts +28 -0
- package/dist/ai-confirmation-prompt/ai-confirmation-prompt.mjs +89 -0
- package/dist/ai-confirmation-prompt/ai-confirmation-prompt.scss.mjs +4 -0
- package/dist/ai-confirmation-prompt/index.d.ts +1 -0
- package/dist/ai-confirmation-prompt/index.mjs +5 -0
- package/dist/ai-dialog/ai-dialog.scss.mjs +1 -1
- package/dist/ai-dropdown-menu/ai-dropdown-menu-item.d.ts +1 -9
- package/dist/ai-dropdown-menu/ai-dropdown-menu-item.mjs +3 -16
- package/dist/ai-dropdown-menu/ai-dropdown-menu-item.scss.mjs +1 -1
- package/dist/ai-dropdown-menu/ai-dropdown-menu.d.ts +11 -6
- package/dist/ai-dropdown-menu/ai-dropdown-menu.mjs +13 -3
- package/dist/ai-dropdown-menu/ai-dropdown-menu.scss.mjs +1 -1
- package/dist/ai-dropdown-menu/selection-manager.mjs +3 -3
- package/dist/ai-embedded-chat/ai-embedded-chat.d.ts +18 -5
- package/dist/ai-embedded-chat/ai-embedded-chat.mjs +44 -18
- package/dist/ai-empty-state/ai-empty-state.d.ts +4 -2
- package/dist/ai-empty-state/ai-empty-state.mjs +237 -57
- package/dist/ai-empty-state/ai-empty-state.scss.mjs +1 -1
- package/dist/ai-error-message/ai-error-message.d.ts +19 -0
- package/dist/ai-error-message/ai-error-message.mjs +44 -0
- package/dist/ai-error-message/ai-error-message.scss.mjs +4 -0
- package/dist/ai-error-message/index.d.ts +1 -0
- package/dist/ai-error-message/index.mjs +5 -0
- package/dist/ai-event-stream-viewer/ai-event-stream-viewer.d.ts +19 -0
- package/dist/ai-event-stream-viewer/ai-event-stream-viewer.mjs +164 -0
- package/dist/ai-event-stream-viewer/ai-event-stream-viewer.scss.mjs +4 -0
- package/dist/ai-event-stream-viewer/index.d.ts +1 -0
- package/dist/ai-event-stream-viewer/index.mjs +5 -0
- package/dist/ai-fab/ai-fab.scss.mjs +1 -1
- package/dist/ai-file-picker/ai-file-picker.d.ts +20 -14
- package/dist/ai-file-picker/ai-file-picker.mjs +67 -20
- package/dist/ai-file-picker/ai-file-picker.scss.mjs +1 -1
- package/dist/ai-file-picker/index.d.ts +1 -1
- package/dist/ai-floating-chat/ai-floating-chat.d.ts +5 -30
- package/dist/ai-floating-chat/ai-floating-chat.mjs +19 -42
- package/dist/ai-gradient-container/ai-gradient-container.scss.mjs +1 -1
- package/dist/ai-icon/ai-icon.scss.mjs +1 -1
- package/dist/ai-icon-button/ai-icon-button.d.ts +19 -0
- package/dist/ai-icon-button/ai-icon-button.mjs +63 -0
- package/dist/ai-icon-button/ai-icon-button.scss.mjs +4 -0
- package/dist/ai-icon-button/index.d.ts +1 -0
- package/dist/ai-icon-button/index.mjs +5 -0
- package/dist/ai-message-thread/ai-message-thread.d.ts +59 -0
- package/dist/ai-message-thread/ai-message-thread.mjs +238 -0
- package/dist/ai-message-thread/ai-message-thread.scss.mjs +4 -0
- package/dist/ai-message-thread/index.d.ts +2 -0
- package/dist/ai-message-thread/index.mjs +5 -0
- package/dist/ai-modal/ai-modal.d.ts +6 -0
- package/dist/ai-modal/ai-modal.mjs +31 -14
- package/dist/ai-modal/ai-modal.scss.mjs +1 -1
- package/dist/ai-prompt/ai-prompt.d.ts +21 -0
- package/dist/ai-prompt/ai-prompt.mjs +135 -15
- package/dist/ai-prompt/ai-prompt.scss.mjs +1 -1
- package/dist/ai-prompt/prompt-button/prompt-button.scss.mjs +1 -1
- package/dist/ai-response-message/ai-response-message.d.ts +17 -21
- package/dist/ai-response-message/ai-response-message.mjs +86 -85
- package/dist/ai-response-message/ai-response-message.scss.mjs +1 -1
- package/dist/ai-sidebar/ai-sidebar.mjs +1 -1
- package/dist/ai-sidebar-chat/ai-sidebar-chat.d.ts +5 -29
- package/dist/ai-sidebar-chat/ai-sidebar-chat.mjs +23 -43
- package/dist/ai-slash-command-menu/ai-slash-command-menu.d.ts +33 -0
- package/dist/ai-slash-command-menu/ai-slash-command-menu.mjs +200 -0
- package/dist/ai-slash-command-menu/ai-slash-command-menu.scss.mjs +4 -0
- package/dist/ai-slash-command-menu/index.d.ts +1 -0
- package/dist/ai-slash-command-menu/index.mjs +5 -0
- package/dist/ai-spinner/ai-spinner.d.ts +24 -0
- package/dist/ai-spinner/ai-spinner.mjs +41 -0
- package/dist/ai-spinner/ai-spinner.scss.mjs +4 -0
- package/dist/ai-spinner/index.d.ts +1 -0
- package/dist/ai-spinner/index.mjs +5 -0
- package/dist/ai-suggestions/ai-suggestions.d.ts +4 -0
- package/dist/ai-suggestions/ai-suggestions.mjs +66 -7
- package/dist/ai-suggestions/ai-suggestions.scss.mjs +1 -1
- package/dist/ai-suggestions/index.d.ts +2 -1
- package/dist/ai-thinking-indicator/ai-thinking-indicator.d.ts +6 -1
- package/dist/ai-thinking-indicator/ai-thinking-indicator.mjs +94 -5
- package/dist/ai-thinking-indicator/ai-thinking-indicator.scss.mjs +320 -1
- package/dist/ai-threads/ai-threads.d.ts +9 -4
- package/dist/ai-threads/ai-threads.mjs +21 -41
- package/dist/ai-threads/ai-threads.scss.mjs +1 -1
- package/dist/ai-user-message/ai-user-message.scss.mjs +1 -1
- package/dist/ai-voice-input/ai-voice-input.scss.mjs +1 -1
- package/dist/core/drag-controller.mjs +3 -0
- package/dist/core/overlay/index.d.ts +1 -1
- package/dist/core/overlay/overlay.d.ts +20 -5
- package/dist/core/overlay/overlay.mjs +29 -4
- package/dist/core/popover/index.d.ts +1 -1
- package/dist/core/popover/popover.d.ts +24 -13
- package/dist/core/popover/popover.mjs +22 -3
- package/dist/core/popover/popover.scss.mjs +1 -1
- package/dist/core/tooltip/tooltip.d.ts +10 -9
- package/dist/core/tooltip/tooltip.mjs +45 -16
- package/dist/core/tooltip/tooltip.scss.mjs +1 -1
- package/dist/index.d.ts +12 -4
- package/dist/index.mjs +58 -9
- package/dist/tools/ai-data-table/ai-data-table-definition.d.ts +2 -0
- package/dist/tools/ai-data-table/ai-data-table-definition.mjs +43 -0
- package/dist/tools/ai-data-table/ai-data-table.d.ts +33 -0
- package/dist/tools/ai-data-table/ai-data-table.mjs +206 -0
- package/dist/tools/ai-data-table/ai-data-table.scss.mjs +4 -0
- package/dist/tools/ai-data-table/index.d.ts +2 -0
- package/dist/tools/ai-data-table/index.mjs +6 -0
- package/dist/tools/ai-paginator/ai-paginator.d.ts +17 -0
- package/dist/tools/ai-paginator/ai-paginator.mjs +110 -0
- package/dist/tools/ai-paginator/ai-paginator.scss.mjs +4 -0
- package/dist/tools/ai-paginator/index.d.ts +1 -0
- package/dist/tools/ai-paginator/index.mjs +4 -0
- package/dist/tools/index.d.ts +2 -0
- package/dist/tools/index.mjs +8 -0
- package/dist/utils/keyboard-navigation-controller.d.ts +13 -0
- package/dist/utils/keyboard-navigation-controller.mjs +71 -0
- package/package.json +65 -60
|
@@ -2,8 +2,6 @@ import { unsafeCSS, LitElement, html } from "lit";
|
|
|
2
2
|
import { property, state, customElement } from "lit/decorators.js";
|
|
3
3
|
import { createRef, ref } from "lit/directives/ref.js";
|
|
4
4
|
import "../ai-dialog/ai-dialog.mjs";
|
|
5
|
-
import "../ai-chat-interface/ai-chat-interface.mjs";
|
|
6
|
-
import "../ai-chat-header/ai-chat-header.mjs";
|
|
7
5
|
import styles from "./ai-floating-chat.scss.mjs";
|
|
8
6
|
var __defProp = Object.defineProperty;
|
|
9
7
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
@@ -22,7 +20,7 @@ var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot
|
|
|
22
20
|
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
23
21
|
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);
|
|
24
22
|
var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
|
|
25
|
-
var _dialogRef, _AiFloatingChatComponent_instances, handleFullscreenChange_fn,
|
|
23
|
+
var _dialogRef, _AiFloatingChatComponent_instances, handleFullscreenChange_fn, handleChatbotExpand_fn, handleChatbotMinimize_fn, handleDialogClose_fn, dispatchEvent_fn;
|
|
26
24
|
const AiFloatingChatComponentTagName = "forge-ai-floating-chat";
|
|
27
25
|
let AiFloatingChatComponent = class extends LitElement {
|
|
28
26
|
constructor() {
|
|
@@ -30,14 +28,9 @@ let AiFloatingChatComponent = class extends LitElement {
|
|
|
30
28
|
__privateAdd(this, _AiFloatingChatComponent_instances);
|
|
31
29
|
this.open = false;
|
|
32
30
|
this.expanded = false;
|
|
33
|
-
this.
|
|
31
|
+
this._userExpanded = false;
|
|
34
32
|
__privateAdd(this, _dialogRef, createRef());
|
|
35
33
|
}
|
|
36
|
-
updated() {
|
|
37
|
-
if (__privateGet(this, _dialogRef).value && this._isFullscreen !== __privateGet(this, _dialogRef).value.isFullscreen) {
|
|
38
|
-
this._isFullscreen = __privateGet(this, _dialogRef).value.isFullscreen;
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
34
|
render() {
|
|
42
35
|
return html`
|
|
43
36
|
<forge-ai-dialog
|
|
@@ -46,33 +39,16 @@ let AiFloatingChatComponent = class extends LitElement {
|
|
|
46
39
|
?expanded=${this.expanded}
|
|
47
40
|
@forge-ai-dialog-fullscreen-change=${__privateMethod(this, _AiFloatingChatComponent_instances, handleFullscreenChange_fn)}
|
|
48
41
|
@forge-ai-dialog-close=${__privateMethod(this, _AiFloatingChatComponent_instances, handleDialogClose_fn)}>
|
|
49
|
-
<
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
@forge-ai-chat-header-expand=${__privateMethod(this, _AiFloatingChatComponent_instances, handleHeaderExpand_fn)}
|
|
53
|
-
@forge-ai-chat-header-minimize=${__privateMethod(this, _AiFloatingChatComponent_instances, handleHeaderMinimize_fn)}
|
|
54
|
-
?show-expand-button=${!this._isFullscreen}
|
|
55
|
-
show-minimize-button
|
|
56
|
-
minimize-icon="default"
|
|
57
|
-
?expanded=${this.expanded}>
|
|
58
|
-
</forge-ai-chat-header>
|
|
59
|
-
<slot></slot>
|
|
60
|
-
<slot name="suggestions" slot="suggestions"></slot>
|
|
61
|
-
<slot name="prompt" slot="prompt"></slot>
|
|
62
|
-
</forge-ai-chat-interface>
|
|
42
|
+
<slot
|
|
43
|
+
@forge-ai-chatbot-expand=${__privateMethod(this, _AiFloatingChatComponent_instances, handleChatbotExpand_fn)}
|
|
44
|
+
@forge-ai-chatbot-minimize=${__privateMethod(this, _AiFloatingChatComponent_instances, handleChatbotMinimize_fn)}></slot>
|
|
63
45
|
</forge-ai-dialog>
|
|
64
46
|
`;
|
|
65
47
|
}
|
|
66
|
-
/**
|
|
67
|
-
* Opens the chat.
|
|
68
|
-
*/
|
|
69
48
|
show() {
|
|
70
49
|
this.open = true;
|
|
71
50
|
__privateMethod(this, _AiFloatingChatComponent_instances, dispatchEvent_fn).call(this, "forge-ai-floating-chat-open");
|
|
72
51
|
}
|
|
73
|
-
/**
|
|
74
|
-
* Closes the chat.
|
|
75
|
-
*/
|
|
76
52
|
close() {
|
|
77
53
|
if (this.expanded) {
|
|
78
54
|
this.expanded = false;
|
|
@@ -81,9 +57,6 @@ let AiFloatingChatComponent = class extends LitElement {
|
|
|
81
57
|
this.open = false;
|
|
82
58
|
__privateMethod(this, _AiFloatingChatComponent_instances, dispatchEvent_fn).call(this, "forge-ai-floating-chat-close");
|
|
83
59
|
}
|
|
84
|
-
/**
|
|
85
|
-
* Toggles the chat open state.
|
|
86
|
-
*/
|
|
87
60
|
toggle() {
|
|
88
61
|
if (this.open) {
|
|
89
62
|
this.close();
|
|
@@ -91,21 +64,17 @@ let AiFloatingChatComponent = class extends LitElement {
|
|
|
91
64
|
this.show();
|
|
92
65
|
}
|
|
93
66
|
}
|
|
94
|
-
/**
|
|
95
|
-
* Expands the chat to full width.
|
|
96
|
-
*/
|
|
97
67
|
expand() {
|
|
98
68
|
if (!this.expanded) {
|
|
99
69
|
this.expanded = true;
|
|
70
|
+
this._userExpanded = true;
|
|
100
71
|
__privateMethod(this, _AiFloatingChatComponent_instances, dispatchEvent_fn).call(this, "forge-ai-floating-chat-expand");
|
|
101
72
|
}
|
|
102
73
|
}
|
|
103
|
-
/**
|
|
104
|
-
* Collapses the chat to normal width.
|
|
105
|
-
*/
|
|
106
74
|
collapse() {
|
|
107
75
|
if (this.expanded) {
|
|
108
76
|
this.expanded = false;
|
|
77
|
+
this._userExpanded = false;
|
|
109
78
|
__privateMethod(this, _AiFloatingChatComponent_instances, dispatchEvent_fn).call(this, "forge-ai-floating-chat-collapse");
|
|
110
79
|
}
|
|
111
80
|
}
|
|
@@ -113,17 +82,25 @@ let AiFloatingChatComponent = class extends LitElement {
|
|
|
113
82
|
_dialogRef = /* @__PURE__ */ new WeakMap();
|
|
114
83
|
_AiFloatingChatComponent_instances = /* @__PURE__ */ new WeakSet();
|
|
115
84
|
handleFullscreenChange_fn = function(event) {
|
|
116
|
-
|
|
85
|
+
const { isFullscreen } = event.detail;
|
|
86
|
+
if (isFullscreen && !this.expanded) {
|
|
87
|
+
this.expanded = true;
|
|
88
|
+
__privateMethod(this, _AiFloatingChatComponent_instances, dispatchEvent_fn).call(this, "forge-ai-floating-chat-expand");
|
|
89
|
+
} else if (!isFullscreen && this.expanded && !this._userExpanded) {
|
|
90
|
+
this.expanded = false;
|
|
91
|
+
__privateMethod(this, _AiFloatingChatComponent_instances, dispatchEvent_fn).call(this, "forge-ai-floating-chat-collapse");
|
|
92
|
+
}
|
|
117
93
|
};
|
|
118
|
-
|
|
94
|
+
handleChatbotExpand_fn = function() {
|
|
119
95
|
this.expanded = !this.expanded;
|
|
96
|
+
this._userExpanded = this.expanded;
|
|
120
97
|
if (this.expanded) {
|
|
121
98
|
__privateMethod(this, _AiFloatingChatComponent_instances, dispatchEvent_fn).call(this, "forge-ai-floating-chat-expand");
|
|
122
99
|
} else {
|
|
123
100
|
__privateMethod(this, _AiFloatingChatComponent_instances, dispatchEvent_fn).call(this, "forge-ai-floating-chat-collapse");
|
|
124
101
|
}
|
|
125
102
|
};
|
|
126
|
-
|
|
103
|
+
handleChatbotMinimize_fn = function() {
|
|
127
104
|
this.close();
|
|
128
105
|
};
|
|
129
106
|
handleDialogClose_fn = function() {
|
|
@@ -147,7 +124,7 @@ __decorateClass([
|
|
|
147
124
|
], AiFloatingChatComponent.prototype, "expanded", 2);
|
|
148
125
|
__decorateClass([
|
|
149
126
|
state()
|
|
150
|
-
], AiFloatingChatComponent.prototype, "
|
|
127
|
+
], AiFloatingChatComponent.prototype, "_userExpanded", 2);
|
|
151
128
|
AiFloatingChatComponent = __decorateClass([
|
|
152
129
|
customElement(AiFloatingChatComponentTagName)
|
|
153
130
|
], AiFloatingChatComponent);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const styles = "/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n@keyframes fadein {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n:host {\n display: block;\n --forge-
|
|
1
|
+
const styles = "/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n@keyframes fadein {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n:host {\n display: block;\n --forge-drawer-background: transparent;\n border: calc(var(--forge-shape-small, 2px) * var(--forge-shape-factor, 1)) solid transparent;\n border-radius: var(--forge-ai-gradient-container-radius, calc(var(--forge-shape-large, 8px) * var(--forge-shape-factor, 1)));\n background-origin: border-box;\n background-clip: padding-box, border-box;\n}\n\n:host(:state(low)) {\n background-image: linear-gradient(var(--forge-theme-surface, #ffffff), var(--forge-theme-surface, #ffffff)), linear-gradient(to top, var(--forge-theme-tertiary-container-low, #e8ebff), var(--forge-theme-outline, #e0e0e0));\n}\n\n:host(:state(medium)) {\n background-image: linear-gradient(var(--forge-theme-surface, #ffffff), var(--forge-theme-surface, #ffffff)), linear-gradient(to top, var(--forge-theme-tertiary-container, #d0d7ff), var(--forge-theme-outline, #e0e0e0));\n}\n\n:host(:state(high)) {\n background-image: linear-gradient(var(--forge-theme-surface, #ffffff), var(--forge-theme-surface, #ffffff)), linear-gradient(to top, var(--forge-theme-tertiary, #3d5afe), var(--forge-theme-outline, #e0e0e0));\n}\n\n:host(:state(disabled)) {\n background-image: linear-gradient(var(--forge-theme-surface, #ffffff), var(--forge-theme-surface, #ffffff)), linear-gradient(to top, var(--forge-theme-text-low, rgba(0, 0, 0, 0.38)), var(--forge-theme-text-low, rgba(0, 0, 0, 0.38)));\n}";
|
|
2
2
|
export {
|
|
3
3
|
styles as default
|
|
4
4
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const styles = "/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n:host {\n --forge-ai-icon-fill-color
|
|
1
|
+
const styles = "/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n:host {\n --_ai-icon-fill-color: var(--forge-ai-icon-fill-color, var(--forge-theme-tertiary, #3d5afe));\n box-sizing: border-box;\n display: grid;\n place-items: center;\n height: 36px;\n width: 36px;\n}\n\nforge-ai-gradient-container {\n display: grid;\n place-items: center;\n height: 36px;\n width: 36px;\n}\n\nsvg {\n fill: var(--_ai-icon-fill-color);\n height: 24px;\n width: 24px;\n}\n\n:host(:state(outline)) forge-ai-gradient-container {\n --forge-gradient-container-radius: 100%;\n}";
|
|
2
2
|
export {
|
|
3
3
|
styles as default
|
|
4
4
|
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { LitElement, TemplateResult, PropertyValues } from 'lit';
|
|
2
|
+
declare global {
|
|
3
|
+
interface HTMLElementTagNameMap {
|
|
4
|
+
'forge-ai-icon-button': AiIconButtonComponent;
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
export declare const AiIconButtonComponentTagName: keyof HTMLElementTagNameMap;
|
|
8
|
+
/**
|
|
9
|
+
* @tag forge-ai-icon-button
|
|
10
|
+
*/
|
|
11
|
+
export declare class AiIconButtonComponent extends LitElement {
|
|
12
|
+
#private;
|
|
13
|
+
static styles: import('lit').CSSResult;
|
|
14
|
+
/** Whether the button is disabled */
|
|
15
|
+
disabled: boolean;
|
|
16
|
+
constructor();
|
|
17
|
+
willUpdate(changedProperties: PropertyValues<this>): void;
|
|
18
|
+
render(): TemplateResult;
|
|
19
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { toggleState } from "../utils.mjs";
|
|
2
|
+
import { unsafeCSS, LitElement, html } from "lit";
|
|
3
|
+
import { property, customElement } from "lit/decorators.js";
|
|
4
|
+
import "../ai-icon/ai-icon.mjs";
|
|
5
|
+
import styles from "./ai-icon-button.scss.mjs";
|
|
6
|
+
var __defProp = Object.defineProperty;
|
|
7
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
8
|
+
var __typeError = (msg) => {
|
|
9
|
+
throw TypeError(msg);
|
|
10
|
+
};
|
|
11
|
+
var __decorateClass = (decorators, target, key, kind) => {
|
|
12
|
+
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
|
|
13
|
+
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
14
|
+
if (decorator = decorators[i])
|
|
15
|
+
result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
16
|
+
if (kind && result) __defProp(target, key, result);
|
|
17
|
+
return result;
|
|
18
|
+
};
|
|
19
|
+
var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
|
|
20
|
+
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
21
|
+
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);
|
|
22
|
+
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), member.set(obj, value), value);
|
|
23
|
+
var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
|
|
24
|
+
var _internals, _AiIconButtonComponent_instances, setCssState_fn;
|
|
25
|
+
const AiIconButtonComponentTagName = "forge-ai-icon-button";
|
|
26
|
+
let AiIconButtonComponent = class extends LitElement {
|
|
27
|
+
constructor() {
|
|
28
|
+
super();
|
|
29
|
+
__privateAdd(this, _AiIconButtonComponent_instances);
|
|
30
|
+
this.disabled = false;
|
|
31
|
+
__privateAdd(this, _internals);
|
|
32
|
+
__privateSet(this, _internals, this.attachInternals());
|
|
33
|
+
__privateMethod(this, _AiIconButtonComponent_instances, setCssState_fn).call(this);
|
|
34
|
+
}
|
|
35
|
+
willUpdate(changedProperties) {
|
|
36
|
+
if (changedProperties.has("disabled")) {
|
|
37
|
+
__privateMethod(this, _AiIconButtonComponent_instances, setCssState_fn).call(this);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
render() {
|
|
41
|
+
return html`
|
|
42
|
+
<button aria-label="AI Icon Button" class="forge-icon-button ai-icon-button" .disabled=${this.disabled}>
|
|
43
|
+
<forge-ai-icon></forge-ai-icon>
|
|
44
|
+
</button>
|
|
45
|
+
`;
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
_internals = /* @__PURE__ */ new WeakMap();
|
|
49
|
+
_AiIconButtonComponent_instances = /* @__PURE__ */ new WeakSet();
|
|
50
|
+
setCssState_fn = function() {
|
|
51
|
+
toggleState(__privateGet(this, _internals), "disabled", this.disabled);
|
|
52
|
+
};
|
|
53
|
+
AiIconButtonComponent.styles = unsafeCSS(styles);
|
|
54
|
+
__decorateClass([
|
|
55
|
+
property({ type: Boolean, reflect: true })
|
|
56
|
+
], AiIconButtonComponent.prototype, "disabled", 2);
|
|
57
|
+
AiIconButtonComponent = __decorateClass([
|
|
58
|
+
customElement(AiIconButtonComponentTagName)
|
|
59
|
+
], AiIconButtonComponent);
|
|
60
|
+
export {
|
|
61
|
+
AiIconButtonComponent,
|
|
62
|
+
AiIconButtonComponentTagName
|
|
63
|
+
};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
const styles = '/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/* prettier-ignore */\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: transparent;\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,\n.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,\n: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@keyframes fadein {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n:host {\n display: inline-block;\n}\n\nforge-ai-icon {\n --forge-ai-icon-fill-color: currentColor;\n}\n\n:host(:state(disabled)) forge-ai-icon {\n --forge-ai-icon-fill-color: var(--forge-theme-text-low);\n}';
|
|
2
|
+
export {
|
|
3
|
+
styles as default
|
|
4
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './ai-icon-button';
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { LitElement, TemplateResult, PropertyValues } from 'lit';
|
|
2
|
+
import { MessageItem, ToolDefinition } from '../ai-chatbot/types.js';
|
|
3
|
+
import { FeatureToggle } from '../ai-chatbot/ai-chatbot.js';
|
|
4
|
+
declare global {
|
|
5
|
+
interface HTMLElementTagNameMap {
|
|
6
|
+
'forge-ai-message-thread': AiMessageThreadComponent;
|
|
7
|
+
}
|
|
8
|
+
interface HTMLElementEventMap {
|
|
9
|
+
'forge-ai-message-thread-copy': CustomEvent<ForgeAiMessageThreadCopyEventData>;
|
|
10
|
+
'forge-ai-message-thread-refresh': CustomEvent<ForgeAiMessageThreadRefreshEventData>;
|
|
11
|
+
'forge-ai-message-thread-thumbs-up': CustomEvent<ForgeAiMessageThreadThumbsEventData>;
|
|
12
|
+
'forge-ai-message-thread-thumbs-down': CustomEvent<ForgeAiMessageThreadThumbsEventData>;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export interface ForgeAiMessageThreadCopyEventData {
|
|
16
|
+
messageId: string;
|
|
17
|
+
}
|
|
18
|
+
export interface ForgeAiMessageThreadRefreshEventData {
|
|
19
|
+
messageId: string;
|
|
20
|
+
}
|
|
21
|
+
export interface ForgeAiMessageThreadThumbsEventData {
|
|
22
|
+
messageId: string;
|
|
23
|
+
}
|
|
24
|
+
export declare const AiMessageThreadComponentTagName: keyof HTMLElementTagNameMap;
|
|
25
|
+
/**
|
|
26
|
+
* @tag forge-ai-message-thread
|
|
27
|
+
*
|
|
28
|
+
* @summary A primitive component for rendering a thread of chat messages, including user, assistant, system, and tool call messages.
|
|
29
|
+
*
|
|
30
|
+
* @description
|
|
31
|
+
* The AI Message Thread component displays a chronological list of messages with support for markdown rendering,
|
|
32
|
+
* tool calls, empty states, and thinking indicators. It handles its own scrolling behavior with auto-scroll support.
|
|
33
|
+
*
|
|
34
|
+
* @slot empty-state-heading - Slot for custom empty state heading content
|
|
35
|
+
* @slot empty-state-actions - Slot for custom empty state actions (e.g., suggestions)
|
|
36
|
+
*
|
|
37
|
+
* @event {CustomEvent<ForgeAiMessageThreadCopyEventData>} forge-ai-message-thread-copy - Fired when user clicks copy on a message
|
|
38
|
+
* @event {CustomEvent<ForgeAiMessageThreadRefreshEventData>} forge-ai-message-thread-refresh - Fired when user clicks refresh on a message
|
|
39
|
+
* @event {CustomEvent<ForgeAiMessageThreadThumbsEventData>} forge-ai-message-thread-thumbs-up - Fired when user gives thumbs up
|
|
40
|
+
* @event {CustomEvent<ForgeAiMessageThreadThumbsEventData>} forge-ai-message-thread-thumbs-down - Fired when user gives thumbs down
|
|
41
|
+
*/
|
|
42
|
+
export declare class AiMessageThreadComponent extends LitElement {
|
|
43
|
+
#private;
|
|
44
|
+
static styles: import('lit').CSSResult;
|
|
45
|
+
messageItems: MessageItem[];
|
|
46
|
+
tools?: Map<string, ToolDefinition>;
|
|
47
|
+
enableReactions: boolean;
|
|
48
|
+
showThinking: boolean;
|
|
49
|
+
autoScroll: FeatureToggle;
|
|
50
|
+
debugMode: boolean;
|
|
51
|
+
private _messageThreadContainer;
|
|
52
|
+
connectedCallback(): void;
|
|
53
|
+
updated(changedProperties: PropertyValues<this>): void;
|
|
54
|
+
scrollToBottom({ force, behavior }?: {
|
|
55
|
+
force?: boolean;
|
|
56
|
+
behavior?: ScrollBehavior;
|
|
57
|
+
}): void;
|
|
58
|
+
render(): TemplateResult;
|
|
59
|
+
}
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
import { unsafeCSS, LitElement, html, nothing } from "lit";
|
|
2
|
+
import { property, query, customElement } from "lit/decorators.js";
|
|
3
|
+
import { unsafeHTML } from "lit/directives/unsafe-html.js";
|
|
4
|
+
import { when } from "lit/directives/when.js";
|
|
5
|
+
import { MarkdownStreamController } from "../ai-chatbot/markdown-stream-controller.mjs";
|
|
6
|
+
import "../ai-empty-state/ai-empty-state.mjs";
|
|
7
|
+
import "../ai-error-message/ai-error-message.mjs";
|
|
8
|
+
import "../ai-response-message/ai-response-message.mjs";
|
|
9
|
+
import "../ai-thinking-indicator/ai-thinking-indicator.mjs";
|
|
10
|
+
import "../ai-user-message/ai-user-message.mjs";
|
|
11
|
+
import "../ai-chatbot/ai-chatbot-tool-call.mjs";
|
|
12
|
+
import styles from "./ai-message-thread.scss.mjs";
|
|
13
|
+
var __defProp = Object.defineProperty;
|
|
14
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
15
|
+
var __typeError = (msg) => {
|
|
16
|
+
throw TypeError(msg);
|
|
17
|
+
};
|
|
18
|
+
var __decorateClass = (decorators, target, key, kind) => {
|
|
19
|
+
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
|
|
20
|
+
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
21
|
+
if (decorator = decorators[i])
|
|
22
|
+
result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
23
|
+
if (kind && result) __defProp(target, key, result);
|
|
24
|
+
return result;
|
|
25
|
+
};
|
|
26
|
+
var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
|
|
27
|
+
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
28
|
+
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);
|
|
29
|
+
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), member.set(obj, value), value);
|
|
30
|
+
var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
|
|
31
|
+
var _markdownController, _canAutoScroll, _handleScroll, _AiMessageThreadComponent_instances, handleCopy_fn, handleRefresh_fn, handleThumbsUp_fn, handleThumbsDown_fn, renderToolCall_fn, emptyState_get, thinkingIndicator_get, messages_get, dispatchEvent_fn;
|
|
32
|
+
const AiMessageThreadComponentTagName = "forge-ai-message-thread";
|
|
33
|
+
const SCROLL_THRESHOLD = 100;
|
|
34
|
+
let AiMessageThreadComponent = class extends LitElement {
|
|
35
|
+
constructor() {
|
|
36
|
+
super(...arguments);
|
|
37
|
+
__privateAdd(this, _AiMessageThreadComponent_instances);
|
|
38
|
+
this.messageItems = [];
|
|
39
|
+
this.enableReactions = false;
|
|
40
|
+
this.showThinking = false;
|
|
41
|
+
this.autoScroll = "on";
|
|
42
|
+
this.debugMode = false;
|
|
43
|
+
__privateAdd(this, _markdownController);
|
|
44
|
+
__privateAdd(this, _canAutoScroll, true);
|
|
45
|
+
__privateAdd(this, _handleScroll, () => {
|
|
46
|
+
const { scrollTop, scrollHeight, clientHeight } = this._messageThreadContainer;
|
|
47
|
+
__privateSet(this, _canAutoScroll, scrollTop + clientHeight >= scrollHeight - SCROLL_THRESHOLD);
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
connectedCallback() {
|
|
51
|
+
super.connectedCallback();
|
|
52
|
+
__privateSet(this, _markdownController, new MarkdownStreamController(this));
|
|
53
|
+
}
|
|
54
|
+
updated(changedProperties) {
|
|
55
|
+
super.updated(changedProperties);
|
|
56
|
+
if (this.autoScroll === "on" && (changedProperties.has("messageItems") || changedProperties.has("showThinking"))) {
|
|
57
|
+
this.scrollToBottom();
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
scrollToBottom({
|
|
61
|
+
force = false,
|
|
62
|
+
behavior = "smooth"
|
|
63
|
+
} = {}) {
|
|
64
|
+
if (!force && !__privateGet(this, _canAutoScroll)) {
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
const container = this._messageThreadContainer;
|
|
68
|
+
container.scrollTo({
|
|
69
|
+
top: container.scrollHeight,
|
|
70
|
+
behavior
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
render() {
|
|
74
|
+
return html`
|
|
75
|
+
<div class="message-thread" @scroll=${this.autoScroll ? __privateGet(this, _handleScroll) : void 0}>
|
|
76
|
+
${__privateGet(this, _AiMessageThreadComponent_instances, emptyState_get)} ${__privateGet(this, _AiMessageThreadComponent_instances, messages_get)} ${__privateGet(this, _AiMessageThreadComponent_instances, thinkingIndicator_get)}
|
|
77
|
+
</div>
|
|
78
|
+
`;
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
_markdownController = /* @__PURE__ */ new WeakMap();
|
|
82
|
+
_canAutoScroll = /* @__PURE__ */ new WeakMap();
|
|
83
|
+
_handleScroll = /* @__PURE__ */ new WeakMap();
|
|
84
|
+
_AiMessageThreadComponent_instances = /* @__PURE__ */ new WeakSet();
|
|
85
|
+
handleCopy_fn = function(messageId) {
|
|
86
|
+
__privateMethod(this, _AiMessageThreadComponent_instances, dispatchEvent_fn).call(this, {
|
|
87
|
+
type: "forge-ai-message-thread-copy",
|
|
88
|
+
detail: { messageId }
|
|
89
|
+
});
|
|
90
|
+
};
|
|
91
|
+
handleRefresh_fn = function(messageId) {
|
|
92
|
+
__privateMethod(this, _AiMessageThreadComponent_instances, dispatchEvent_fn).call(this, {
|
|
93
|
+
type: "forge-ai-message-thread-refresh",
|
|
94
|
+
detail: { messageId }
|
|
95
|
+
});
|
|
96
|
+
};
|
|
97
|
+
handleThumbsUp_fn = function(messageId) {
|
|
98
|
+
__privateMethod(this, _AiMessageThreadComponent_instances, dispatchEvent_fn).call(this, {
|
|
99
|
+
type: "forge-ai-message-thread-thumbs-up",
|
|
100
|
+
detail: { messageId }
|
|
101
|
+
});
|
|
102
|
+
};
|
|
103
|
+
handleThumbsDown_fn = function(messageId) {
|
|
104
|
+
__privateMethod(this, _AiMessageThreadComponent_instances, dispatchEvent_fn).call(this, {
|
|
105
|
+
type: "forge-ai-message-thread-thumbs-down",
|
|
106
|
+
detail: { messageId }
|
|
107
|
+
});
|
|
108
|
+
};
|
|
109
|
+
renderToolCall_fn = function(toolCall) {
|
|
110
|
+
const toolDefinition = this.tools?.get(toolCall.name);
|
|
111
|
+
return html`<forge-ai-chatbot-tool-call
|
|
112
|
+
.toolCall=${toolCall}
|
|
113
|
+
.toolDefinition=${toolDefinition}
|
|
114
|
+
?debug-mode=${this.debugMode}></forge-ai-chatbot-tool-call>`;
|
|
115
|
+
};
|
|
116
|
+
emptyState_get = function() {
|
|
117
|
+
if (this.messageItems.length) {
|
|
118
|
+
return nothing;
|
|
119
|
+
}
|
|
120
|
+
return html`
|
|
121
|
+
<forge-ai-empty-state>
|
|
122
|
+
<slot name="empty-state-heading" slot="heading">
|
|
123
|
+
<span>How can I help you today?</span>
|
|
124
|
+
</slot>
|
|
125
|
+
<slot name="empty-state-message" slot="body">
|
|
126
|
+
Start a conversation by asking a question or describing what you'd like help with.
|
|
127
|
+
</slot>
|
|
128
|
+
<slot name="empty-state-actions" slot="actions"></slot>
|
|
129
|
+
</forge-ai-empty-state>
|
|
130
|
+
`;
|
|
131
|
+
};
|
|
132
|
+
thinkingIndicator_get = function() {
|
|
133
|
+
if (!this.showThinking) {
|
|
134
|
+
return nothing;
|
|
135
|
+
}
|
|
136
|
+
const lastItem = this.messageItems[this.messageItems.length - 1];
|
|
137
|
+
const hasAssistantContent = lastItem?.type !== "toolCall" && lastItem?.type === "message" && lastItem.data.role === "assistant" && lastItem.data.content.trim().length;
|
|
138
|
+
if (hasAssistantContent) {
|
|
139
|
+
return nothing;
|
|
140
|
+
}
|
|
141
|
+
const hasActiveToolCall = this.debugMode && lastItem?.type === "toolCall" && (lastItem.data.status === "parsing" || lastItem.data.status === "executing" || lastItem.data.status === "pending");
|
|
142
|
+
if (hasActiveToolCall) {
|
|
143
|
+
return nothing;
|
|
144
|
+
}
|
|
145
|
+
return html`<div class="thinking-indicator">
|
|
146
|
+
<forge-ai-thinking-indicator class="status-indicator" show-text></forge-ai-thinking-indicator>
|
|
147
|
+
</div>`;
|
|
148
|
+
};
|
|
149
|
+
messages_get = function() {
|
|
150
|
+
const itemsToRender = this.messageItems.filter((item) => {
|
|
151
|
+
if (item.type === "toolCall") {
|
|
152
|
+
if (this.debugMode) {
|
|
153
|
+
return true;
|
|
154
|
+
}
|
|
155
|
+
const toolDef = this.tools?.get(item.data.name);
|
|
156
|
+
return !!toolDef?.renderer;
|
|
157
|
+
}
|
|
158
|
+
if (item.type === "message") {
|
|
159
|
+
return item.data.role !== "tool";
|
|
160
|
+
}
|
|
161
|
+
return false;
|
|
162
|
+
});
|
|
163
|
+
return itemsToRender.map((item) => {
|
|
164
|
+
if (item.type === "toolCall") {
|
|
165
|
+
return __privateMethod(this, _AiMessageThreadComponent_instances, renderToolCall_fn).call(this, item.data);
|
|
166
|
+
}
|
|
167
|
+
const msg = item.data;
|
|
168
|
+
if (msg.role === "user") {
|
|
169
|
+
const renderedHtml = __privateGet(this, _markdownController).getCachedHtml(msg.id, msg.content);
|
|
170
|
+
return html`<forge-ai-user-message>${unsafeHTML(renderedHtml)}</forge-ai-user-message>`;
|
|
171
|
+
} else if (msg.role === "system") {
|
|
172
|
+
return html`<div class="system-message">${msg.content}</div>`;
|
|
173
|
+
} else if (msg.status === "error") {
|
|
174
|
+
const renderedHtml = __privateGet(this, _markdownController).getCachedHtml(msg.id, msg.content);
|
|
175
|
+
return html`
|
|
176
|
+
<forge-ai-error-message>
|
|
177
|
+
<span slot="title">Error</span>
|
|
178
|
+
${unsafeHTML(renderedHtml)}
|
|
179
|
+
</forge-ai-error-message>
|
|
180
|
+
`;
|
|
181
|
+
} else {
|
|
182
|
+
return when(msg.content?.trim().length, () => {
|
|
183
|
+
const renderedHtml = __privateGet(this, _markdownController).getCachedHtml(msg.id, msg.content);
|
|
184
|
+
return html`
|
|
185
|
+
<forge-ai-response-message
|
|
186
|
+
?complete=${msg.status === "complete"}
|
|
187
|
+
?enable-reactions=${this.enableReactions}
|
|
188
|
+
?has-debug-data=${this.debugMode && (msg.eventStream?.length ?? 0) > 0}
|
|
189
|
+
.eventStream=${msg.eventStream}
|
|
190
|
+
@forge-ai-response-message-copy=${() => __privateMethod(this, _AiMessageThreadComponent_instances, handleCopy_fn).call(this, msg.id)}
|
|
191
|
+
@forge-ai-response-message-refresh=${() => __privateMethod(this, _AiMessageThreadComponent_instances, handleRefresh_fn).call(this, msg.id)}
|
|
192
|
+
@forge-ai-response-message-thumbs-up=${() => __privateMethod(this, _AiMessageThreadComponent_instances, handleThumbsUp_fn).call(this, msg.id)}
|
|
193
|
+
@forge-ai-response-message-thumbs-down=${() => __privateMethod(this, _AiMessageThreadComponent_instances, handleThumbsDown_fn).call(this, msg.id)}>
|
|
194
|
+
${unsafeHTML(renderedHtml)}
|
|
195
|
+
</forge-ai-response-message>
|
|
196
|
+
`;
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
});
|
|
200
|
+
};
|
|
201
|
+
dispatchEvent_fn = function(config) {
|
|
202
|
+
const event = new CustomEvent(config.type, {
|
|
203
|
+
detail: config.detail,
|
|
204
|
+
bubbles: true,
|
|
205
|
+
composed: true
|
|
206
|
+
});
|
|
207
|
+
this.dispatchEvent(event);
|
|
208
|
+
return event;
|
|
209
|
+
};
|
|
210
|
+
AiMessageThreadComponent.styles = unsafeCSS(styles);
|
|
211
|
+
__decorateClass([
|
|
212
|
+
property({ attribute: false })
|
|
213
|
+
], AiMessageThreadComponent.prototype, "messageItems", 2);
|
|
214
|
+
__decorateClass([
|
|
215
|
+
property({ attribute: false })
|
|
216
|
+
], AiMessageThreadComponent.prototype, "tools", 2);
|
|
217
|
+
__decorateClass([
|
|
218
|
+
property({ type: Boolean, attribute: "enable-reactions" })
|
|
219
|
+
], AiMessageThreadComponent.prototype, "enableReactions", 2);
|
|
220
|
+
__decorateClass([
|
|
221
|
+
property({ type: Boolean, attribute: "show-thinking" })
|
|
222
|
+
], AiMessageThreadComponent.prototype, "showThinking", 2);
|
|
223
|
+
__decorateClass([
|
|
224
|
+
property({ attribute: "auto-scroll" })
|
|
225
|
+
], AiMessageThreadComponent.prototype, "autoScroll", 2);
|
|
226
|
+
__decorateClass([
|
|
227
|
+
property({ type: Boolean, attribute: "debug-mode" })
|
|
228
|
+
], AiMessageThreadComponent.prototype, "debugMode", 2);
|
|
229
|
+
__decorateClass([
|
|
230
|
+
query(".message-thread")
|
|
231
|
+
], AiMessageThreadComponent.prototype, "_messageThreadContainer", 2);
|
|
232
|
+
AiMessageThreadComponent = __decorateClass([
|
|
233
|
+
customElement(AiMessageThreadComponentTagName)
|
|
234
|
+
], AiMessageThreadComponent);
|
|
235
|
+
export {
|
|
236
|
+
AiMessageThreadComponent,
|
|
237
|
+
AiMessageThreadComponentTagName
|
|
238
|
+
};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
const styles = '/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/* prettier-ignore */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n:host {\n display: grid;\n height: 100%;\n}\n\n.message-thread::-webkit-scrollbar {\n height: var(--forge-scrollbar-height, 16px);\n width: var(--forge-scrollbar-width, 16px);\n}\n.message-thread::-webkit-scrollbar-track {\n background-color: var(--forge-scrollbar-track-container, var(--forge-theme-surface-container-low, #ebebeb));\n}\n.message-thread::-webkit-scrollbar-track:hover {\n background-color: var(--forge-scrollbar-track-container-hover, var(--forge-theme-surface-container-low, #ebebeb));\n}\n.message-thread::-webkit-scrollbar-corner {\n background-color: var(--forge-scrollbar-track-container, var(--forge-theme-surface-container-low, #ebebeb));\n}\n.message-thread::-webkit-scrollbar-thumb {\n height: var(--forge-scrollbar-thumb-min-height, 32px);\n width: var(--forge-scrollbar-thumb-min-width, 32px);\n border-radius: var(--forge-scrollbar-border-radius, calc(var(--forge-shape-full, 9999px) * var(--forge-shape-factor, 1)));\n border-width: var(--forge-scrollbar-border-width, 3px);\n border-style: solid;\n border-color: transparent;\n background-color: var(--forge-scrollbar-thumb-container, var(--forge-theme-surface-container-medium, #c2c2c2));\n background-clip: content-box;\n}\n.message-thread::-webkit-scrollbar-thumb:hover {\n background-color: var(--forge-scrollbar-thumb-container-hover, var(--forge-theme-surface-container-high, #9e9e9e));\n}\n.message-thread {\n display: flex;\n flex-direction: column;\n gap: var(--forge-spacing-medium, 16px);\n padding-block-end: var(--forge-spacing-large, 24px);\n overflow-y: auto;\n padding: var(--forge-spacing-medium, 16px) var(--forge-spacing-medium, 16px) var(--forge-spacing-xxlarge, 48px) var(--forge-spacing-medium, 16px);\n}\n@media not all and (min-resolution: 0.001dpcm) {\n @supports (-webkit-appearance: none) {\n .message-thread {\n overflow-y: scroll;\n }\n }\n}\n\n.thinking-indicator {\n margin-block-start: var(--forge-spacing-xsmall, 8px);\n}\n\n.system-message {\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 color: var(--forge-theme-text-medium, rgba(0, 0, 0, 0.6));\n padding-block: var(--forge-spacing-small, 12px);\n}';
|
|
2
|
+
export {
|
|
3
|
+
styles as default
|
|
4
|
+
};
|