@tylertech/forge-ai 0.13.0 → 0.13.2
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 +5083 -3159
- package/dist/ai-agent-info/ai-agent-info.d.ts +1 -1
- package/dist/ai-agent-info/ai-agent-info.mjs +17 -62
- package/dist/ai-agent-info/ai-agent-info.scss.mjs +1 -1
- package/dist/ai-assistant-response/ai-assistant-response.scss.mjs +1 -1
- package/dist/ai-chat-header/ai-chat-header.d.ts +7 -0
- package/dist/ai-chat-header/ai-chat-header.mjs +52 -7
- package/dist/ai-chat-header/ai-chat-header.scss.mjs +1 -1
- package/dist/ai-chatbot/ai-chatbot-base.d.ts +37 -3
- package/dist/ai-chatbot/ai-chatbot-base.mjs +83 -24
- package/dist/ai-chatbot/ai-chatbot.d.ts +41 -1
- package/dist/ai-chatbot/ai-chatbot.mjs +242 -43
- package/dist/ai-chatbot/ai-chatbot.scss.mjs +1 -1
- package/dist/ai-chatbot/index.d.ts +1 -1
- package/dist/ai-chatbot/types.d.ts +39 -0
- package/dist/ai-chatbot/utils.d.ts +5 -0
- package/dist/ai-chatbot/utils.mjs +28 -0
- package/dist/ai-chatbot-launcher/ai-chatbot-launcher.d.ts +29 -2
- package/dist/ai-chatbot-launcher/ai-chatbot-launcher.mjs +156 -10
- package/dist/ai-chatbot-launcher/ai-chatbot-launcher.scss.mjs +1 -1
- package/dist/ai-confirmation-prompt/ai-confirmation-prompt.d.ts +6 -0
- package/dist/ai-confirmation-prompt/ai-confirmation-prompt.mjs +64 -19
- package/dist/ai-confirmation-prompt/ai-confirmation-prompt.scss.mjs +1 -1
- package/dist/ai-context-chip/ai-context-chip.d.ts +45 -0
- package/dist/ai-context-chip/ai-context-chip.mjs +169 -0
- package/dist/ai-context-chip/ai-context-chip.scss.mjs +4 -0
- package/dist/ai-context-chip/index.d.ts +2 -0
- package/dist/ai-context-chip/index.mjs +5 -0
- package/dist/ai-context-items/ai-context-items.d.ts +20 -0
- package/dist/ai-context-items/ai-context-items.mjs +78 -0
- package/dist/ai-context-items/ai-context-items.scss.mjs +4 -0
- package/dist/ai-context-items/index.d.ts +1 -0
- package/dist/ai-context-items/index.mjs +5 -0
- package/dist/ai-conversations-panel/ai-conversations-panel.d.ts +86 -0
- package/dist/ai-conversations-panel/ai-conversations-panel.mjs +558 -0
- package/dist/ai-conversations-panel/ai-conversations-panel.scss.mjs +4 -0
- package/dist/ai-conversations-panel/index.d.ts +2 -0
- package/dist/ai-conversations-panel/index.mjs +5 -0
- package/dist/ai-copy-button/ai-copy-button.d.ts +32 -0
- package/dist/ai-copy-button/ai-copy-button.mjs +116 -0
- package/dist/ai-copy-button/ai-copy-button.scss.mjs +4 -0
- package/dist/ai-copy-button/index.d.ts +1 -0
- package/dist/ai-copy-button/index.mjs +5 -0
- package/dist/ai-dialog/ai-dialog.scss.mjs +1 -1
- package/dist/ai-dropdown-menu/ai-dropdown-menu-item.scss.mjs +1 -1
- package/dist/ai-dropdown-menu/ai-dropdown-menu.d.ts +6 -1
- package/dist/ai-dropdown-menu/ai-dropdown-menu.mjs +20 -8
- package/dist/ai-dropdown-menu/ai-dropdown-menu.scss.mjs +1 -1
- package/dist/ai-edit-thread/ai-edit-thread.d.ts +34 -0
- package/dist/ai-edit-thread/ai-edit-thread.mjs +130 -0
- package/dist/ai-edit-thread/ai-edit-thread.scss.mjs +4 -0
- package/dist/ai-edit-thread/index.d.ts +1 -0
- package/dist/ai-edit-thread/index.mjs +5 -0
- package/dist/ai-message-thread/ai-message-thread.scss.mjs +1 -1
- package/dist/ai-modal/ai-modal.d.ts +11 -2
- package/dist/ai-modal/ai-modal.mjs +31 -6
- package/dist/ai-prompt/ai-prompt.d.ts +7 -1
- package/dist/ai-prompt/ai-prompt.mjs +29 -2
- package/dist/ai-sidebar/ai-sidebar.d.ts +11 -0
- package/dist/ai-sidebar/ai-sidebar.mjs +94 -4
- package/dist/ai-sidebar/ai-sidebar.scss.mjs +1 -1
- package/dist/ai-sidebar-chat/ai-sidebar-chat.d.ts +1 -0
- package/dist/ai-sidebar-chat/ai-sidebar-chat.mjs +5 -0
- package/dist/ai-spinner/ai-spinner.d.ts +1 -1
- package/dist/ai-spinner/ai-spinner.scss.mjs +1 -1
- package/dist/ai-thread-actions-menu/ai-thread-actions-menu.d.ts +44 -0
- package/dist/ai-thread-actions-menu/ai-thread-actions-menu.mjs +136 -0
- package/dist/ai-thread-actions-menu/ai-thread-actions-menu.scss.mjs +4 -0
- package/dist/ai-thread-actions-menu/index.d.ts +1 -0
- package/dist/ai-thread-actions-menu/index.mjs +5 -0
- package/dist/ai-threads/ai-threads.d.ts +45 -16
- package/dist/ai-threads/ai-threads.mjs +256 -98
- package/dist/ai-threads/ai-threads.scss.mjs +1 -1
- package/dist/ai-threads-search/ai-threads-search.d.ts +81 -0
- package/dist/ai-threads-search/ai-threads-search.mjs +414 -0
- package/dist/ai-threads-search/ai-threads-search.scss.mjs +4 -0
- package/dist/ai-threads-search/index.d.ts +1 -0
- package/dist/ai-threads-search/index.mjs +5 -0
- package/dist/core/index.d.ts +1 -0
- package/dist/core/index.mjs +3 -1
- package/dist/core/resize-controller.d.ts +25 -0
- package/dist/core/resize-controller.mjs +144 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.mjs +21 -0
- package/dist/utils/delete-thread-controller.d.ts +14 -0
- package/dist/utils/delete-thread-controller.mjs +80 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.mjs +8 -0
- package/dist/utils/infinite-scroll-controller.d.ts +33 -0
- package/dist/utils/infinite-scroll-controller.mjs +95 -0
- package/package.json +15 -14
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { LitElement, PropertyValues, TemplateResult, CSSResult } from 'lit';
|
|
2
|
+
import { ContextItem } from '../ai-chatbot/types.js';
|
|
3
|
+
declare global {
|
|
4
|
+
interface HTMLElementTagNameMap {
|
|
5
|
+
'forge-ai-context-chip': AiContextChipComponent;
|
|
6
|
+
}
|
|
7
|
+
interface HTMLElementEventMap {
|
|
8
|
+
'forge-ai-context-chip-remove': CustomEvent<ForgeAiContextChipRemoveEventData>;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
export interface ForgeAiContextChipRemoveEventData {
|
|
12
|
+
id: string;
|
|
13
|
+
item: ContextItem;
|
|
14
|
+
}
|
|
15
|
+
export declare const AiContextChipComponentTagName: keyof HTMLElementTagNameMap;
|
|
16
|
+
/**
|
|
17
|
+
* @tag forge-ai-context-chip
|
|
18
|
+
*
|
|
19
|
+
* @summary Displays context information as a removable chip.
|
|
20
|
+
*
|
|
21
|
+
* @description
|
|
22
|
+
* A component for displaying context metadata in AI chat interfaces. Shows context information
|
|
23
|
+
* with optional icon, label text, and tooltip on overflow.
|
|
24
|
+
*
|
|
25
|
+
* @event {CustomEvent<ForgeAiContextChipRemoveEventData>} forge-ai-context-chip-remove - Fired when the remove button is clicked
|
|
26
|
+
*
|
|
27
|
+
* @cssproperty --forge-ai-context-chip-background - Background color of the chip
|
|
28
|
+
* @cssproperty --forge-ai-context-chip-border-color - Border color of the chip
|
|
29
|
+
* @cssproperty --forge-ai-context-chip-padding - Padding inside the chip
|
|
30
|
+
* @cssproperty --forge-ai-context-chip-gap - Gap between elements
|
|
31
|
+
*/
|
|
32
|
+
export declare class AiContextChipComponent extends LitElement {
|
|
33
|
+
#private;
|
|
34
|
+
static styles: CSSResult;
|
|
35
|
+
id: string;
|
|
36
|
+
label: string;
|
|
37
|
+
removable: boolean;
|
|
38
|
+
sublabel?: string;
|
|
39
|
+
loading: boolean;
|
|
40
|
+
type?: 'file' | 'context';
|
|
41
|
+
private _isLabelOverflowing;
|
|
42
|
+
protected firstUpdated(): void;
|
|
43
|
+
protected updated(changedProperties: PropertyValues): void;
|
|
44
|
+
render(): TemplateResult;
|
|
45
|
+
}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import { unsafeCSS, LitElement, html, nothing } from "lit";
|
|
2
|
+
import { property, state, customElement } from "lit/decorators.js";
|
|
3
|
+
import { when } from "lit/directives/when.js";
|
|
4
|
+
import "../core/tooltip/tooltip.mjs";
|
|
5
|
+
import "../ai-spinner/ai-spinner.mjs";
|
|
6
|
+
import styles from "./ai-context-chip.scss.mjs";
|
|
7
|
+
var __defProp = Object.defineProperty;
|
|
8
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
9
|
+
var __typeError = (msg) => {
|
|
10
|
+
throw TypeError(msg);
|
|
11
|
+
};
|
|
12
|
+
var __decorateClass = (decorators, target, key, kind) => {
|
|
13
|
+
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
|
|
14
|
+
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
15
|
+
if (decorator = decorators[i])
|
|
16
|
+
result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
17
|
+
if (kind && result) __defProp(target, key, result);
|
|
18
|
+
return result;
|
|
19
|
+
};
|
|
20
|
+
var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
|
|
21
|
+
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
22
|
+
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);
|
|
23
|
+
var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
|
|
24
|
+
var _AiContextChipComponent_instances, chipId_get, checkLabelOverflow_fn, handleRemove_fn, _contextIcon, _fileIcon, iconContent_get, removeButton_get, _loadingIndicator;
|
|
25
|
+
const AiContextChipComponentTagName = "forge-ai-context-chip";
|
|
26
|
+
let AiContextChipComponent = class extends LitElement {
|
|
27
|
+
constructor() {
|
|
28
|
+
super(...arguments);
|
|
29
|
+
__privateAdd(this, _AiContextChipComponent_instances);
|
|
30
|
+
this.id = "";
|
|
31
|
+
this.label = "";
|
|
32
|
+
this.removable = true;
|
|
33
|
+
this.loading = false;
|
|
34
|
+
this._isLabelOverflowing = false;
|
|
35
|
+
__privateAdd(this, _contextIcon, html`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" aria-hidden="true">
|
|
36
|
+
<path
|
|
37
|
+
d="M11 2v2.07A8 8 0 0 0 4.07 11H2v2h2.07A8 8 0 0 0 11 19.93V22h2v-2.07A8 8 0 0 0 19.93 13H22v-2h-2.07A8 8 0 0 0 13 4.07V2m-2 4.08V8h2V6.09c2.5.41 4.5 2.41 4.92 4.91H16v2h1.91c-.41 2.5-2.41 4.5-4.91 4.92V16h-2v1.91C8.5 17.5 6.5 15.5 6.08 13H8v-2H6.09C6.5 8.5 8.5 6.5 11 6.08M12 11a1 1 0 0 0-1 1 1 1 0 0 0 1 1 1 1 0 0 0 1-1 1 1 0 0 0-1-1" />
|
|
38
|
+
</svg>`);
|
|
39
|
+
__privateAdd(this, _fileIcon, html`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" aria-hidden="true">
|
|
40
|
+
<path d="M13 9h5.5L13 3.5zM6 2h8l6 6v12a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4c0-1.11.89-2 2-2m9 16v-2H6v2zm3-4v-2H6v2z" />
|
|
41
|
+
</svg>`);
|
|
42
|
+
__privateAdd(this, _loadingIndicator, html`
|
|
43
|
+
<div class="loading-indicator" role="status" aria-label="Loading">
|
|
44
|
+
<forge-ai-spinner size="extra-small"></forge-ai-spinner>
|
|
45
|
+
</div>
|
|
46
|
+
`);
|
|
47
|
+
}
|
|
48
|
+
// eslint-disable-next-line @tylertech-eslint/require-private-modifier
|
|
49
|
+
firstUpdated() {
|
|
50
|
+
__privateMethod(this, _AiContextChipComponent_instances, checkLabelOverflow_fn).call(this);
|
|
51
|
+
}
|
|
52
|
+
// eslint-disable-next-line @tylertech-eslint/require-private-modifier
|
|
53
|
+
updated(changedProperties) {
|
|
54
|
+
super.updated(changedProperties);
|
|
55
|
+
if (changedProperties.has("label")) {
|
|
56
|
+
__privateMethod(this, _AiContextChipComponent_instances, checkLabelOverflow_fn).call(this);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
render() {
|
|
60
|
+
return html`
|
|
61
|
+
<div
|
|
62
|
+
id=${__privateGet(this, _AiContextChipComponent_instances, chipId_get)}
|
|
63
|
+
class="context-chip ${this.loading ? "loading" : ""}"
|
|
64
|
+
role="group"
|
|
65
|
+
aria-label="Context: ${this.label}"
|
|
66
|
+
aria-busy=${this.loading}>
|
|
67
|
+
<div class="context-icon">${__privateGet(this, _AiContextChipComponent_instances, iconContent_get)}</div>
|
|
68
|
+
<div class="context-content">${this.label}</div>
|
|
69
|
+
${when(
|
|
70
|
+
this.loading,
|
|
71
|
+
() => __privateGet(this, _loadingIndicator),
|
|
72
|
+
() => when(this.sublabel, () => html`<span class="context-sublabel">${this.sublabel}</span>`)
|
|
73
|
+
)}
|
|
74
|
+
${__privateGet(this, _AiContextChipComponent_instances, removeButton_get)}
|
|
75
|
+
</div>
|
|
76
|
+
${when(
|
|
77
|
+
this._isLabelOverflowing,
|
|
78
|
+
() => html`<forge-ai-tooltip for=${__privateGet(this, _AiContextChipComponent_instances, chipId_get)} placement="top">${this.label}</forge-ai-tooltip>`
|
|
79
|
+
)}
|
|
80
|
+
`;
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
_AiContextChipComponent_instances = /* @__PURE__ */ new WeakSet();
|
|
84
|
+
chipId_get = function() {
|
|
85
|
+
return `context-chip-${this.id}`;
|
|
86
|
+
};
|
|
87
|
+
checkLabelOverflow_fn = function() {
|
|
88
|
+
requestAnimationFrame(() => {
|
|
89
|
+
const labelElement = this.shadowRoot?.querySelector(".context-content");
|
|
90
|
+
if (labelElement) {
|
|
91
|
+
const isOverflowing = labelElement.scrollWidth > labelElement.offsetWidth;
|
|
92
|
+
if (this._isLabelOverflowing !== isOverflowing) {
|
|
93
|
+
this._isLabelOverflowing = isOverflowing;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
};
|
|
98
|
+
handleRemove_fn = function() {
|
|
99
|
+
this.dispatchEvent(
|
|
100
|
+
new CustomEvent("forge-ai-context-chip-remove", {
|
|
101
|
+
detail: {
|
|
102
|
+
id: this.id,
|
|
103
|
+
item: {
|
|
104
|
+
id: this.id,
|
|
105
|
+
label: this.label,
|
|
106
|
+
removable: this.removable,
|
|
107
|
+
sublabel: this.sublabel,
|
|
108
|
+
loading: this.loading,
|
|
109
|
+
type: this.type
|
|
110
|
+
}
|
|
111
|
+
},
|
|
112
|
+
bubbles: true,
|
|
113
|
+
composed: true
|
|
114
|
+
})
|
|
115
|
+
);
|
|
116
|
+
};
|
|
117
|
+
_contextIcon = /* @__PURE__ */ new WeakMap();
|
|
118
|
+
_fileIcon = /* @__PURE__ */ new WeakMap();
|
|
119
|
+
iconContent_get = function() {
|
|
120
|
+
return this.type === "file" ? __privateGet(this, _fileIcon) : __privateGet(this, _contextIcon);
|
|
121
|
+
};
|
|
122
|
+
removeButton_get = function() {
|
|
123
|
+
if (!this.removable) {
|
|
124
|
+
return nothing;
|
|
125
|
+
}
|
|
126
|
+
return html`
|
|
127
|
+
<button
|
|
128
|
+
type="button"
|
|
129
|
+
class="remove-button forge-icon-button forge-icon-button--small forge-icon-button--squared"
|
|
130
|
+
@click=${__privateMethod(this, _AiContextChipComponent_instances, handleRemove_fn)}
|
|
131
|
+
aria-label="Remove ${this.label}">
|
|
132
|
+
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true">
|
|
133
|
+
<path
|
|
134
|
+
d="M12.854 3.146a.5.5 0 0 1 0 .708L8.707 8l4.147 4.146a.5.5 0 0 1-.708.708L8 8.707l-4.146 4.147a.5.5 0 0 1-.708-.708L7.293 8 3.146 3.854a.5.5 0 1 1 .708-.708L8 7.293l4.146-4.147a.5.5 0 0 1 .708 0z"
|
|
135
|
+
fill="currentColor" />
|
|
136
|
+
</svg>
|
|
137
|
+
</button>
|
|
138
|
+
`;
|
|
139
|
+
};
|
|
140
|
+
_loadingIndicator = /* @__PURE__ */ new WeakMap();
|
|
141
|
+
AiContextChipComponent.styles = unsafeCSS(styles);
|
|
142
|
+
__decorateClass([
|
|
143
|
+
property()
|
|
144
|
+
], AiContextChipComponent.prototype, "id", 2);
|
|
145
|
+
__decorateClass([
|
|
146
|
+
property()
|
|
147
|
+
], AiContextChipComponent.prototype, "label", 2);
|
|
148
|
+
__decorateClass([
|
|
149
|
+
property({ type: Boolean })
|
|
150
|
+
], AiContextChipComponent.prototype, "removable", 2);
|
|
151
|
+
__decorateClass([
|
|
152
|
+
property()
|
|
153
|
+
], AiContextChipComponent.prototype, "sublabel", 2);
|
|
154
|
+
__decorateClass([
|
|
155
|
+
property({ type: Boolean })
|
|
156
|
+
], AiContextChipComponent.prototype, "loading", 2);
|
|
157
|
+
__decorateClass([
|
|
158
|
+
property()
|
|
159
|
+
], AiContextChipComponent.prototype, "type", 2);
|
|
160
|
+
__decorateClass([
|
|
161
|
+
state()
|
|
162
|
+
], AiContextChipComponent.prototype, "_isLabelOverflowing", 2);
|
|
163
|
+
AiContextChipComponent = __decorateClass([
|
|
164
|
+
customElement(AiContextChipComponentTagName)
|
|
165
|
+
], AiContextChipComponent);
|
|
166
|
+
export {
|
|
167
|
+
AiContextChipComponent,
|
|
168
|
+
AiContextChipComponentTagName
|
|
169
|
+
};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
const styles = '/* prettier-ignore */\n/**\n * @license\n * Copyright Tyler Technologies, Inc.\n * License: Apache-2.0\n */\n.forge-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: inline-flex;\n}\n\n.context-chip {\n position: relative;\n display: inline-flex;\n align-items: center;\n gap: var(--forge-spacing-xsmall, 8px);\n padding: var(--forge-spacing-xxxsmall, 2px) var(--forge-spacing-xxsmall, 4px);\n background: var(--forge-theme-primary-container-minimum, #f7f8fc);\n max-width: 160px;\n border: 1px solid var(--forge-theme-primary-container-low, #e8eaf6);\n border-radius: calc(var(--forge-shape-large, 8px) * var(--forge-shape-factor, 1));\n color: var(--forge-theme-on-primary-container-minimum, #222c62);\n}\n\n.context-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: 16px;\n height: 16px;\n fill: currentColor;\n opacity: 0.5;\n}\n\n.context-content {\n -moz-osx-font-smoothing: grayscale;\n -webkit-font-smoothing: antialiased;\n font-family: var(--forge-typography-label1-font-family, var(--forge-typography-font-family, "Roboto", sans-serif));\n font-size: var(--forge-typography-label1-font-size, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-label-font-size-scale, 0.75)));\n font-weight: var(--forge-typography-label1-font-weight, 400);\n line-height: var(--forge-typography-label1-line-height, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-label-line-height-scale, 1.25)));\n letter-spacing: var(--forge-typography-label1-letter-spacing, 0.0357142857em);\n text-transform: var(--forge-typography-label1-text-transform, inherit);\n text-decoration: var(--forge-typography-label1-text-decoration, inherit);\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.context-sublabel {\n -moz-osx-font-smoothing: grayscale;\n -webkit-font-smoothing: antialiased;\n font-family: var(--forge-typography-label1-font-family, var(--forge-typography-font-family, "Roboto", sans-serif));\n font-size: var(--forge-typography-label1-font-size, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-label-font-size-scale, 0.75)));\n font-weight: var(--forge-typography-label1-font-weight, 400);\n line-height: var(--forge-typography-label1-line-height, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-label-line-height-scale, 1.25)));\n letter-spacing: var(--forge-typography-label1-letter-spacing, 0.0357142857em);\n text-transform: var(--forge-typography-label1-text-transform, inherit);\n text-decoration: var(--forge-typography-label1-text-decoration, inherit);\n color: var(--forge-theme-text-medium, rgba(0, 0, 0, 0.6));\n flex-shrink: 0;\n}\n\n.context-chip.loading {\n opacity: 0.7;\n}\n\n.loading-indicator {\n display: flex;\n align-items: center;\n gap: var(--forge-spacing-xxsmall, 4px);\n}\n\n.remove-button {\n flex-shrink: 0;\n color: var(--forge-theme-text-high, rgba(0, 0, 0, 0.87));\n height: 18px;\n width: 18px;\n}\n.remove-button svg {\n height: 14px;\n width: 14px;\n}';
|
|
2
|
+
export {
|
|
3
|
+
styles as default
|
|
4
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { LitElement, TemplateResult, nothing, CSSResult } from 'lit';
|
|
2
|
+
import { ContextItem } from '../ai-chatbot/types.js';
|
|
3
|
+
declare global {
|
|
4
|
+
interface HTMLElementTagNameMap {
|
|
5
|
+
'forge-ai-context-items': AiContextItemsComponent;
|
|
6
|
+
}
|
|
7
|
+
interface HTMLElementEventMap {
|
|
8
|
+
'forge-ai-context-items-remove': CustomEvent<{
|
|
9
|
+
id: string;
|
|
10
|
+
item: ContextItem;
|
|
11
|
+
}>;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
export declare const AiContextItemsComponentTagName: keyof HTMLElementTagNameMap;
|
|
15
|
+
export declare class AiContextItemsComponent extends LitElement {
|
|
16
|
+
#private;
|
|
17
|
+
static styles: CSSResult;
|
|
18
|
+
items: ContextItem[];
|
|
19
|
+
render(): TemplateResult | typeof nothing;
|
|
20
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { unsafeCSS, LitElement, nothing, html } from "lit";
|
|
2
|
+
import { property, customElement } from "lit/decorators.js";
|
|
3
|
+
import "../ai-context-chip/ai-context-chip.mjs";
|
|
4
|
+
import styles from "./ai-context-items.scss.mjs";
|
|
5
|
+
var __defProp = Object.defineProperty;
|
|
6
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
7
|
+
var __typeError = (msg) => {
|
|
8
|
+
throw TypeError(msg);
|
|
9
|
+
};
|
|
10
|
+
var __decorateClass = (decorators, target, key, kind) => {
|
|
11
|
+
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
|
|
12
|
+
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
13
|
+
if (decorator = decorators[i])
|
|
14
|
+
result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
15
|
+
if (kind && result) __defProp(target, key, result);
|
|
16
|
+
return result;
|
|
17
|
+
};
|
|
18
|
+
var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
|
|
19
|
+
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
20
|
+
var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
21
|
+
var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
|
|
22
|
+
var _AiContextItemsComponent_instances, handleChipRemove_fn, contextChips_get;
|
|
23
|
+
const AiContextItemsComponentTagName = "forge-ai-context-items";
|
|
24
|
+
let AiContextItemsComponent = class extends LitElement {
|
|
25
|
+
constructor() {
|
|
26
|
+
super(...arguments);
|
|
27
|
+
__privateAdd(this, _AiContextItemsComponent_instances);
|
|
28
|
+
this.items = [];
|
|
29
|
+
}
|
|
30
|
+
render() {
|
|
31
|
+
if (this.items.length === 0) {
|
|
32
|
+
return nothing;
|
|
33
|
+
}
|
|
34
|
+
return html`
|
|
35
|
+
<div class="context-items">
|
|
36
|
+
<div class="context-list">${__privateGet(this, _AiContextItemsComponent_instances, contextChips_get)}</div>
|
|
37
|
+
</div>
|
|
38
|
+
`;
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
_AiContextItemsComponent_instances = /* @__PURE__ */ new WeakSet();
|
|
42
|
+
handleChipRemove_fn = function(evt) {
|
|
43
|
+
this.dispatchEvent(
|
|
44
|
+
new CustomEvent("forge-ai-context-items-remove", {
|
|
45
|
+
detail: { id: evt.detail.id, item: evt.detail.item },
|
|
46
|
+
bubbles: true,
|
|
47
|
+
composed: true
|
|
48
|
+
})
|
|
49
|
+
);
|
|
50
|
+
};
|
|
51
|
+
contextChips_get = function() {
|
|
52
|
+
return html`
|
|
53
|
+
${this.items.map(
|
|
54
|
+
(item) => html`
|
|
55
|
+
<forge-ai-context-chip
|
|
56
|
+
.id=${item.id}
|
|
57
|
+
.label=${item.label}
|
|
58
|
+
.sublabel=${item.sublabel}
|
|
59
|
+
.type=${item.type}
|
|
60
|
+
?loading=${item.loading ?? false}
|
|
61
|
+
?removable=${item.removable ?? true}
|
|
62
|
+
@forge-ai-context-chip-remove=${__privateMethod(this, _AiContextItemsComponent_instances, handleChipRemove_fn)}>
|
|
63
|
+
</forge-ai-context-chip>
|
|
64
|
+
`
|
|
65
|
+
)}
|
|
66
|
+
`;
|
|
67
|
+
};
|
|
68
|
+
AiContextItemsComponent.styles = unsafeCSS(styles);
|
|
69
|
+
__decorateClass([
|
|
70
|
+
property({ attribute: false })
|
|
71
|
+
], AiContextItemsComponent.prototype, "items", 2);
|
|
72
|
+
AiContextItemsComponent = __decorateClass([
|
|
73
|
+
customElement(AiContextItemsComponentTagName)
|
|
74
|
+
], AiContextItemsComponent);
|
|
75
|
+
export {
|
|
76
|
+
AiContextItemsComponent,
|
|
77
|
+
AiContextItemsComponentTagName
|
|
78
|
+
};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
const styles = "/* prettier-ignore */\n:host {\n display: block;\n min-width: 0;\n}\n\n.context-items {\n display: grid;\n gap: var(--forge-spacing-xxsmall, 4px);\n min-width: 0;\n padding: var(--forge-spacing-xsmall, 8px);\n padding-block-end: 0;\n}\n\n.context-list::-webkit-scrollbar {\n height: var(--forge-scrollbar-height, 16px);\n width: var(--forge-scrollbar-width, 16px);\n}\n.context-list::-webkit-scrollbar-track {\n background-color: var(--forge-scrollbar-track-container, var(--forge-theme-surface-container-low, #ebebeb));\n}\n.context-list::-webkit-scrollbar-track:hover {\n background-color: var(--forge-scrollbar-track-container-hover, var(--forge-theme-surface-container-low, #ebebeb));\n}\n.context-list::-webkit-scrollbar-corner {\n background-color: var(--forge-scrollbar-track-container, var(--forge-theme-surface-container-low, #ebebeb));\n}\n.context-list::-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.context-list::-webkit-scrollbar-thumb:hover {\n background-color: var(--forge-scrollbar-thumb-container-hover, var(--forge-theme-surface-container-high, #9e9e9e));\n}\n.context-list {\n display: flex;\n flex-wrap: wrap;\n gap: var(--forge-spacing-xsmall, 8px);\n padding-block-end: var(--forge-spacing-xxsmall, 4px);\n overflow-y: auto;\n max-height: 75px;\n}";
|
|
2
|
+
export {
|
|
3
|
+
styles as default
|
|
4
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { AiContextItemsComponent, AiContextItemsComponentTagName } from './ai-context-items.js';
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { LitElement, TemplateResult, CSSResult } from 'lit';
|
|
2
|
+
import { Thread } from '../ai-threads';
|
|
3
|
+
declare global {
|
|
4
|
+
interface HTMLElementTagNameMap {
|
|
5
|
+
'forge-ai-conversations-panel': AiConversationsPanelComponent;
|
|
6
|
+
}
|
|
7
|
+
interface HTMLElementEventMap {
|
|
8
|
+
'forge-ai-conversations-panel-select': CustomEvent<ForgeAiConversationsPanelSelectEventData>;
|
|
9
|
+
'forge-ai-conversations-panel-new-chat': CustomEvent<void>;
|
|
10
|
+
'forge-ai-conversations-panel-close': CustomEvent<void>;
|
|
11
|
+
'forge-ai-conversations-panel-search': CustomEvent<ForgeAiConversationsPanelSearchEventData>;
|
|
12
|
+
'forge-ai-conversations-panel-load-more': CustomEvent<ForgeAiConversationsPanelLoadMoreEventData>;
|
|
13
|
+
'forge-ai-conversations-panel-rename': CustomEvent<ForgeAiConversationsPanelRenameEventData>;
|
|
14
|
+
'forge-ai-conversations-panel-delete': CustomEvent<ForgeAiConversationsPanelDeleteEventData>;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export interface ForgeAiConversationsPanelSelectEventData {
|
|
18
|
+
id: string;
|
|
19
|
+
title: string;
|
|
20
|
+
}
|
|
21
|
+
export interface ForgeAiConversationsPanelSearchEventData {
|
|
22
|
+
query: string;
|
|
23
|
+
setResults: (results: Thread[]) => void;
|
|
24
|
+
}
|
|
25
|
+
export interface ForgeAiConversationsPanelLoadMoreEventData {
|
|
26
|
+
query: string;
|
|
27
|
+
appendResults: (results: Thread[]) => void;
|
|
28
|
+
}
|
|
29
|
+
export interface ForgeAiConversationsPanelRenameEventData {
|
|
30
|
+
id: string;
|
|
31
|
+
oldTitle: string;
|
|
32
|
+
newTitle: string;
|
|
33
|
+
onSuccess: () => void;
|
|
34
|
+
onError: (error?: string) => void;
|
|
35
|
+
}
|
|
36
|
+
export interface ForgeAiConversationsPanelDeleteEventData {
|
|
37
|
+
id: string;
|
|
38
|
+
thread: Thread;
|
|
39
|
+
onSuccess: () => void;
|
|
40
|
+
onError: (error?: string) => void;
|
|
41
|
+
}
|
|
42
|
+
export declare const AiConversationsPanelComponentTagName: keyof HTMLElementTagNameMap;
|
|
43
|
+
/**
|
|
44
|
+
* @tag forge-ai-conversations-panel
|
|
45
|
+
*
|
|
46
|
+
* @event {CustomEvent<ForgeAiConversationsPanelSelectEventData>} forge-ai-conversations-panel-select - Fired when a conversation thread is selected.
|
|
47
|
+
* @event {CustomEvent<void>} forge-ai-conversations-panel-new-chat - Fired when the new chat list item is clicked.
|
|
48
|
+
* @event {CustomEvent<void>} forge-ai-conversations-panel-close - Fired when the close button is clicked.
|
|
49
|
+
* @event {CustomEvent<ForgeAiConversationsPanelSearchEventData>} forge-ai-conversations-panel-search - Fired when search query changes (debounced). Cancelable - if prevented, shows loading and waits for setResults callback.
|
|
50
|
+
* @event {CustomEvent<ForgeAiConversationsPanelLoadMoreEventData>} forge-ai-conversations-panel-load-more - Fired when scrolling near bottom in recent chats or search chats. Query field differentiates contexts. Always shows loading - call appendResults([]) to signal end.
|
|
51
|
+
* @event {CustomEvent<ForgeAiConversationsPanelRenameEventData>} forge-ai-conversations-panel-rename - Fired when thread renamed. Cancelable - if prevented, call onSuccess() to commit or onError() to revert. Otherwise optimistically updated.
|
|
52
|
+
* @event {CustomEvent<ForgeAiConversationsPanelDeleteEventData>} forge-ai-conversations-panel-delete - Fired when thread delete confirmed. Cancelable - if prevented, call onSuccess() to commit deletion or onError() to revert. Otherwise optimistically removed.
|
|
53
|
+
*
|
|
54
|
+
* @description Standalone conversations list panel with header, new chat action, search, and thread list.
|
|
55
|
+
* Used within chatbot components for conversation history navigation.
|
|
56
|
+
*/
|
|
57
|
+
export declare class AiConversationsPanelComponent extends LitElement {
|
|
58
|
+
#private;
|
|
59
|
+
static styles: CSSResult;
|
|
60
|
+
recentThreads: Thread[];
|
|
61
|
+
/**
|
|
62
|
+
* Total number of threads available. When set to a positive number and fewer threads
|
|
63
|
+
* are loaded than the total, infinite scroll is enabled. Leave at 0 (default) to disable
|
|
64
|
+
* infinite scroll entirely. Useful when all data is loaded upfront.
|
|
65
|
+
*/
|
|
66
|
+
totalChats: number;
|
|
67
|
+
selectedThreadId: string | null;
|
|
68
|
+
showConversationRename: boolean;
|
|
69
|
+
showConversationDelete: boolean;
|
|
70
|
+
private _viewState;
|
|
71
|
+
private _isSearching;
|
|
72
|
+
private _searchResults;
|
|
73
|
+
private _searchQuery;
|
|
74
|
+
private _editingThreadId;
|
|
75
|
+
private _hiddenThreadIds;
|
|
76
|
+
private _openMenuThreadId;
|
|
77
|
+
private _searchInputMain;
|
|
78
|
+
private _searchInputSearch;
|
|
79
|
+
private _threadListContainer;
|
|
80
|
+
connectedCallback(): void;
|
|
81
|
+
disconnectedCallback(): void;
|
|
82
|
+
firstUpdated(): void;
|
|
83
|
+
updated(changedProperties: Map<string, unknown>): void;
|
|
84
|
+
resetToMainView(): void;
|
|
85
|
+
render(): TemplateResult;
|
|
86
|
+
}
|