@tylertech/forge-ai 0.13.0 → 0.13.1

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.
@@ -40,6 +40,7 @@ export interface AgentInfo {
40
40
  * @tag forge-ai-chat-header
41
41
  *
42
42
  * @slot icon - Slot for custom icon (default: forge-ai-icon)
43
+ * @slot header-actions - Slot for custom header action buttons (rendered before built-in header actions)
43
44
  *
44
45
  * @property {HeadingLevel} headingLevel - Controls the heading level for the title content (default: 2)
45
46
  * @property {string} titleText - The title text to display in the header (default: 'AI Assistant')
@@ -59,6 +59,7 @@ let AiChatHeaderComponent = class extends LitElement {
59
59
  <div class="header">
60
60
  <div class="start" id="title-container">${__privateGet(this, _AiChatHeaderComponent_instances, titleElement_get)}</div>
61
61
  <div class="end">
62
+ <slot name="header-actions"></slot>
62
63
  ${when(
63
64
  this.showMinimizeButton,
64
65
  () => html`
@@ -77,6 +77,7 @@ export declare const AiChatbotComponentTagName: keyof HTMLElementTagNameMap;
77
77
  *
78
78
  * @slot header - Slot for custom header content
79
79
  * @slot icon - Slot for custom header icon (default: forge-ai-icon)
80
+ * @slot header-actions - Slot for custom header action buttons (rendered before built-in header actions)
80
81
  * @slot empty-state-icon - Slot for custom empty state icon
81
82
  * @slot empty-state - Slot for custom empty state content (overrides default suggestions)
82
83
  *
@@ -345,6 +345,7 @@ let AiChatbotComponent = class extends AiChatbotBase {
345
345
  <slot name="icon" slot="icon">
346
346
  <forge-ai-icon></forge-ai-icon>
347
347
  </slot>
348
+ <slot name="header-actions" slot="header-actions"></slot>
348
349
  </forge-ai-chat-header>
349
350
  ${__privateGet(this, _AiChatbotComponent_instances, sessionFilesTemplate_get)} ${__privateGet(this, _AiChatbotComponent_instances, messageThread_get)} ${__privateGet(this, _AiChatbotComponent_instances, promptSlot_get)}
350
351
  ${when(this.disclaimerText, () => html`<div class="disclaimer" slot="disclaimer">${this.disclaimerText}</div>`)}
@@ -26,8 +26,9 @@ export declare const AiChatbotLauncherComponentTagName: keyof HTMLElementTagName
26
26
  * In conversation mode, a header is displayed with options for clear, export, and agent selection.
27
27
  *
28
28
  * @slot icon - Slot for custom icon (used in both welcome view and conversation header)
29
- * @slot heading - Slot for custom heading content
30
- * @slot description - Slot for custom description/welcome message below the title
29
+ * @slot heading - Slot for custom heading content (welcome view only)
30
+ * @slot description - Slot for custom description/welcome message below the title (welcome view only)
31
+ * @slot header-actions - Slot for custom header action buttons in conversation mode (rendered before built-in header actions)
31
32
  *
32
33
  * @property {string} titleText - The title text to display in the welcome view and header (default: 'AI Assistant')
33
34
  * @property {string} descriptionText - The description text displayed below the title in the welcome view.
@@ -261,6 +261,7 @@ conversationContentTemplate_get = function() {
261
261
  <slot name="icon" slot="icon">
262
262
  <forge-ai-icon></forge-ai-icon>
263
263
  </slot>
264
+ <slot name="header-actions" slot="header-actions"></slot>
264
265
  </forge-ai-chat-header>
265
266
  <forge-ai-message-thread
266
267
  ${ref(this._messageThreadRef)}
@@ -191,15 +191,15 @@ let ForgeAiDropdownMenuComponent = class extends LitElement {
191
191
  }
192
192
  }
193
193
  }
194
- async _onFocusOut(_event) {
194
+ _onFocusOut(event) {
195
195
  if (!this.open) {
196
196
  return;
197
197
  }
198
- window.setTimeout(() => {
199
- if (!this.matches(":focus-within")) {
200
- this.open = false;
201
- }
202
- });
198
+ const relatedTarget = event.relatedTarget;
199
+ if (relatedTarget && this.contains(relatedTarget)) {
200
+ return;
201
+ }
202
+ this.open = false;
203
203
  }
204
204
  _onDefaultSlotChange() {
205
205
  if (this._selectionManager) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tylertech/forge-ai",
3
- "version": "0.13.0",
3
+ "version": "0.13.1",
4
4
  "description": "A library of Tyler Forge™ AI chat interface web components.",
5
5
  "license": "Apache-2.0",
6
6
  "author": "Tyler Technologies, Inc.",
@@ -58,6 +58,7 @@
58
58
  "@storybook/addon-links": "9.1.20",
59
59
  "@storybook/addon-themes": "9.1.20",
60
60
  "@storybook/web-components-vite": "9.1.20",
61
+ "@tylertech-eslint/eslint-plugin": "3.0.0",
61
62
  "@tylertech/forge": "3.14.1",
62
63
  "@tylertech/stylelint-rules": "5.1.2",
63
64
  "@tylertech/tyler-icons": "2.1.0",