@tylertech/forge-ai 0.4.0 → 0.5.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.
Files changed (129) hide show
  1. package/custom-elements.json +4691 -637
  2. package/dist/ai-actions-toolbar/ai-actions-toolbar.d.ts +24 -1
  3. package/dist/ai-actions-toolbar/ai-actions-toolbar.mjs +171 -42
  4. package/dist/ai-actions-toolbar/ai-actions-toolbar.scss.mjs +1 -1
  5. package/dist/ai-agent-info/ai-agent-info.d.ts +29 -0
  6. package/dist/ai-agent-info/ai-agent-info.mjs +123 -0
  7. package/dist/ai-agent-info/ai-agent-info.scss.mjs +4 -0
  8. package/dist/ai-agent-info/index.d.ts +1 -0
  9. package/dist/ai-agent-info/index.mjs +5 -0
  10. package/dist/ai-artifact/ai-artifact.scss.mjs +1 -1
  11. package/dist/ai-attachment/ai-attachment.d.ts +39 -0
  12. package/dist/ai-attachment/ai-attachment.mjs +130 -0
  13. package/dist/ai-attachment/ai-attachment.scss.mjs +4 -0
  14. package/dist/ai-attachment/index.d.ts +1 -0
  15. package/dist/ai-attachment/index.mjs +5 -0
  16. package/dist/ai-button/ai-button.mjs +1 -0
  17. package/dist/ai-button/ai-button.scss.mjs +1 -1
  18. package/dist/ai-chain-of-thought/thought-base/thought-base.scss.mjs +1 -1
  19. package/dist/ai-chat-header/ai-chat-header.d.ts +35 -17
  20. package/dist/ai-chat-header/ai-chat-header.mjs +130 -30
  21. package/dist/ai-chat-header/ai-chat-header.scss.mjs +1 -1
  22. package/dist/ai-chat-header/index.d.ts +1 -0
  23. package/dist/ai-chat-interface/ai-chat-interface.d.ts +2 -4
  24. package/dist/ai-chat-interface/ai-chat-interface.mjs +24 -28
  25. package/dist/ai-chat-interface/ai-chat-interface.scss.mjs +1 -1
  26. package/dist/ai-chatbot/ag-ui-adapter.d.ts +22 -0
  27. package/dist/ai-chatbot/ag-ui-adapter.mjs +331 -0
  28. package/dist/ai-chatbot/agent-adapter.d.ts +125 -0
  29. package/dist/ai-chatbot/agent-adapter.mjs +136 -0
  30. package/dist/ai-chatbot/agent-runner.d.ts +41 -0
  31. package/dist/ai-chatbot/agent-runner.mjs +264 -0
  32. package/dist/ai-chatbot/ai-chatbot-tool-call.d.ts +21 -0
  33. package/dist/ai-chatbot/ai-chatbot-tool-call.mjs +189 -0
  34. package/dist/ai-chatbot/ai-chatbot-tool-call.scss.mjs +4 -0
  35. package/dist/ai-chatbot/ai-chatbot.d.ts +133 -0
  36. package/dist/ai-chatbot/ai-chatbot.mjs +755 -0
  37. package/dist/ai-chatbot/ai-chatbot.scss.mjs +4 -0
  38. package/dist/ai-chatbot/create-tool-renderer.d.ts +12 -0
  39. package/dist/ai-chatbot/create-tool-renderer.mjs +28 -0
  40. package/dist/ai-chatbot/event-emitter.d.ts +43 -0
  41. package/dist/ai-chatbot/event-emitter.mjs +81 -0
  42. package/dist/ai-chatbot/file-upload-manager.d.ts +27 -0
  43. package/dist/ai-chatbot/file-upload-manager.mjs +106 -0
  44. package/dist/ai-chatbot/http-agent-with-credentials.d.ts +8 -0
  45. package/dist/ai-chatbot/http-agent-with-credentials.mjs +14 -0
  46. package/dist/ai-chatbot/index.d.ts +15 -0
  47. package/dist/ai-chatbot/index.mjs +30 -0
  48. package/dist/ai-chatbot/markdown-stream-controller.d.ts +13 -0
  49. package/dist/ai-chatbot/markdown-stream-controller.mjs +49 -0
  50. package/dist/ai-chatbot/message-state-controller.d.ts +45 -0
  51. package/dist/ai-chatbot/message-state-controller.mjs +168 -0
  52. package/dist/ai-chatbot/types.d.ts +120 -0
  53. package/dist/ai-chatbot/utils.d.ts +12 -0
  54. package/dist/ai-chatbot/utils.mjs +31 -0
  55. package/dist/ai-confirmation-prompt/ai-confirmation-prompt.d.ts +28 -0
  56. package/dist/ai-confirmation-prompt/ai-confirmation-prompt.mjs +89 -0
  57. package/dist/ai-confirmation-prompt/ai-confirmation-prompt.scss.mjs +4 -0
  58. package/dist/ai-confirmation-prompt/index.d.ts +1 -0
  59. package/dist/ai-confirmation-prompt/index.mjs +5 -0
  60. package/dist/ai-dialog/ai-dialog.scss.mjs +1 -1
  61. package/dist/ai-dropdown-menu/ai-dropdown-menu-item.d.ts +0 -6
  62. package/dist/ai-dropdown-menu/ai-dropdown-menu-item.mjs +3 -16
  63. package/dist/ai-dropdown-menu/ai-dropdown-menu-item.scss.mjs +1 -1
  64. package/dist/ai-dropdown-menu/ai-dropdown-menu.d.ts +6 -0
  65. package/dist/ai-dropdown-menu/ai-dropdown-menu.mjs +6 -2
  66. package/dist/ai-dropdown-menu/ai-dropdown-menu.scss.mjs +1 -1
  67. package/dist/ai-embedded-chat/ai-embedded-chat.d.ts +18 -5
  68. package/dist/ai-embedded-chat/ai-embedded-chat.mjs +43 -18
  69. package/dist/ai-empty-state/ai-empty-state.d.ts +4 -2
  70. package/dist/ai-empty-state/ai-empty-state.mjs +237 -57
  71. package/dist/ai-empty-state/ai-empty-state.scss.mjs +1 -1
  72. package/dist/ai-error-message/ai-error-message.d.ts +19 -0
  73. package/dist/ai-error-message/ai-error-message.mjs +44 -0
  74. package/dist/ai-error-message/ai-error-message.scss.mjs +4 -0
  75. package/dist/ai-error-message/index.d.ts +1 -0
  76. package/dist/ai-error-message/index.mjs +5 -0
  77. package/dist/ai-fab/ai-fab.scss.mjs +1 -1
  78. package/dist/ai-file-picker/ai-file-picker.d.ts +20 -1
  79. package/dist/ai-file-picker/ai-file-picker.mjs +67 -20
  80. package/dist/ai-file-picker/ai-file-picker.scss.mjs +1 -1
  81. package/dist/ai-file-picker/index.d.ts +1 -1
  82. package/dist/ai-floating-chat/ai-floating-chat.d.ts +5 -30
  83. package/dist/ai-floating-chat/ai-floating-chat.mjs +19 -42
  84. package/dist/ai-message-thread/ai-message-thread.d.ts +58 -0
  85. package/dist/ai-message-thread/ai-message-thread.mjs +224 -0
  86. package/dist/ai-message-thread/ai-message-thread.scss.mjs +4 -0
  87. package/dist/ai-message-thread/index.d.ts +2 -0
  88. package/dist/ai-message-thread/index.mjs +5 -0
  89. package/dist/ai-modal/ai-modal.d.ts +6 -0
  90. package/dist/ai-modal/ai-modal.mjs +31 -14
  91. package/dist/ai-modal/ai-modal.scss.mjs +1 -1
  92. package/dist/ai-prompt/ai-prompt.mjs +3 -6
  93. package/dist/ai-prompt/ai-prompt.scss.mjs +1 -1
  94. package/dist/ai-prompt/prompt-button/prompt-button.scss.mjs +1 -1
  95. package/dist/ai-response-message/ai-response-message.d.ts +12 -21
  96. package/dist/ai-response-message/ai-response-message.mjs +32 -89
  97. package/dist/ai-response-message/ai-response-message.scss.mjs +1 -1
  98. package/dist/ai-sidebar/ai-sidebar.mjs +1 -1
  99. package/dist/ai-sidebar-chat/ai-sidebar-chat.d.ts +5 -29
  100. package/dist/ai-sidebar-chat/ai-sidebar-chat.mjs +23 -43
  101. package/dist/ai-spinner/ai-spinner.d.ts +24 -0
  102. package/dist/ai-spinner/ai-spinner.mjs +41 -0
  103. package/dist/ai-spinner/ai-spinner.scss.mjs +4 -0
  104. package/dist/ai-spinner/index.d.ts +1 -0
  105. package/dist/ai-spinner/index.mjs +5 -0
  106. package/dist/ai-suggestions/ai-suggestions.d.ts +2 -0
  107. package/dist/ai-suggestions/ai-suggestions.mjs +66 -7
  108. package/dist/ai-suggestions/ai-suggestions.scss.mjs +1 -1
  109. package/dist/ai-suggestions/index.d.ts +2 -1
  110. package/dist/ai-thinking-indicator/ai-thinking-indicator.d.ts +3 -1
  111. package/dist/ai-thinking-indicator/ai-thinking-indicator.mjs +83 -3
  112. package/dist/ai-thinking-indicator/ai-thinking-indicator.scss.mjs +317 -1
  113. package/dist/ai-threads/ai-threads.d.ts +9 -4
  114. package/dist/ai-threads/ai-threads.mjs +21 -41
  115. package/dist/ai-threads/ai-threads.scss.mjs +1 -1
  116. package/dist/ai-user-message/ai-user-message.scss.mjs +1 -1
  117. package/dist/ai-voice-input/ai-voice-input.scss.mjs +1 -1
  118. package/dist/core/drag-controller.mjs +3 -0
  119. package/dist/core/overlay/overlay.d.ts +10 -0
  120. package/dist/core/overlay/overlay.mjs +24 -4
  121. package/dist/core/popover/popover.d.ts +17 -7
  122. package/dist/core/popover/popover.mjs +17 -3
  123. package/dist/core/popover/popover.scss.mjs +1 -1
  124. package/dist/core/tooltip/tooltip.d.ts +8 -7
  125. package/dist/core/tooltip/tooltip.mjs +45 -16
  126. package/dist/core/tooltip/tooltip.scss.mjs +1 -1
  127. package/dist/index.d.ts +10 -4
  128. package/dist/index.mjs +52 -9
  129. package/package.json +64 -60
@@ -45,6 +45,16 @@ export declare class ForgeAiOverlayComponent extends LitElement {
45
45
  * Whether the overlay is open.
46
46
  */
47
47
  open: boolean;
48
+ /**
49
+ * The arrow element to position relative to the overlay.
50
+ */
51
+ arrowElement: HTMLElement | null;
52
+ /**
53
+ * The dismiss mode for the overlay.
54
+ * - 'auto': Automatically closes on outside clicks and Escape key
55
+ * - 'manual': Requires manual control to close
56
+ */
57
+ dismissMode: 'auto' | 'manual';
48
58
  private _overlayElement;
49
59
  private _cleanupAutoUpdate;
50
60
  disconnectedCallback(): void;
@@ -1,4 +1,4 @@
1
- import { flip, shift, autoUpdate, computePosition } from "@floating-ui/dom";
1
+ import { flip, shift, arrow, autoUpdate, computePosition } from "@floating-ui/dom";
2
2
  import { unsafeCSS, LitElement, html } from "lit";
3
3
  import { property, customElement } from "lit/decorators.js";
4
4
  import styles from "./overlay.scss.mjs";
@@ -20,6 +20,8 @@ let ForgeAiOverlayComponent = class extends LitElement {
20
20
  this.flip = true;
21
21
  this.shift = false;
22
22
  this.open = false;
23
+ this.arrowElement = null;
24
+ this.dismissMode = "auto";
23
25
  this._overlayElement = null;
24
26
  this._cleanupAutoUpdate = null;
25
27
  this._onToggle = (event) => {
@@ -45,7 +47,7 @@ let ForgeAiOverlayComponent = class extends LitElement {
45
47
  if (changedProperties.has("open")) {
46
48
  this._handleOpenChange();
47
49
  }
48
- if (changedProperties.has("anchor") || changedProperties.has("placement") || changedProperties.has("flip") || changedProperties.has("shift")) {
50
+ if (changedProperties.has("anchor") || changedProperties.has("placement") || changedProperties.has("flip") || changedProperties.has("shift") || changedProperties.has("arrowElement")) {
49
51
  if (this.open && this._overlayElement && this.anchor) {
50
52
  this._updatePosition();
51
53
  }
@@ -79,7 +81,11 @@ let ForgeAiOverlayComponent = class extends LitElement {
79
81
  return;
80
82
  }
81
83
  this._cleanup();
82
- const middleware = [...this.flip ? [flip()] : [], ...this.shift ? [shift({ padding: 8 })] : []];
84
+ const middleware = [
85
+ ...this.flip ? [flip()] : [],
86
+ ...this.shift ? [shift({ padding: 8 })] : [],
87
+ ...this.arrowElement ? [arrow({ element: this.arrowElement, padding: 8 })] : []
88
+ ];
83
89
  this._cleanupAutoUpdate = autoUpdate(this.anchor, this._overlayElement, () => this._computePosition(middleware));
84
90
  }
85
91
  async _computePosition(middleware) {
@@ -89,6 +95,7 @@ let ForgeAiOverlayComponent = class extends LitElement {
89
95
  try {
90
96
  const result = await computePosition(this.anchor, this._overlayElement, {
91
97
  placement: this.placement,
98
+ strategy: "fixed",
92
99
  middleware
93
100
  });
94
101
  Object.assign(this._overlayElement.style, {
@@ -97,6 +104,13 @@ let ForgeAiOverlayComponent = class extends LitElement {
97
104
  translate: `${this._roundByDPR(result.x)}px ${this._roundByDPR(result.y)}px`
98
105
  });
99
106
  this.setAttribute("data-position-placement", result.placement);
107
+ if (this.arrowElement && result.middlewareData.arrow) {
108
+ const { x, y } = result.middlewareData.arrow;
109
+ Object.assign(this.arrowElement.style, {
110
+ left: x != null ? `${x}px` : "",
111
+ top: y != null ? `${y}px` : ""
112
+ });
113
+ }
100
114
  } catch (error) {
101
115
  console.error("Failed to compute overlay position:", error);
102
116
  }
@@ -112,7 +126,7 @@ let ForgeAiOverlayComponent = class extends LitElement {
112
126
  }
113
127
  render() {
114
128
  return html`
115
- <div class="ai-overlay" popover="manual" @toggle=${this._onToggle}>
129
+ <div class="ai-overlay" popover=${this.dismissMode} @toggle=${this._onToggle}>
116
130
  <slot></slot>
117
131
  </div>
118
132
  `;
@@ -134,6 +148,12 @@ __decorateClass([
134
148
  __decorateClass([
135
149
  property({ type: Boolean, reflect: true })
136
150
  ], ForgeAiOverlayComponent.prototype, "open", 2);
151
+ __decorateClass([
152
+ property({ type: Object })
153
+ ], ForgeAiOverlayComponent.prototype, "arrowElement", 2);
154
+ __decorateClass([
155
+ property({ attribute: "dismiss-mode" })
156
+ ], ForgeAiOverlayComponent.prototype, "dismissMode", 2);
137
157
  ForgeAiOverlayComponent = __decorateClass([
138
158
  customElement("forge-ai-overlay")
139
159
  ], ForgeAiOverlayComponent);
@@ -5,13 +5,14 @@ declare global {
5
5
  'forge-ai-popover': ForgeAiPopoverComponent;
6
6
  }
7
7
  interface HTMLElementEventMap {
8
- 'ai-popover-toggle': CustomEvent<{
9
- open: boolean;
10
- newState: string;
11
- oldState: string;
12
- }>;
8
+ 'forge-ai-popover-toggle': CustomEvent<PopoverToggleEventData>;
13
9
  }
14
10
  }
11
+ export interface PopoverToggleEventData {
12
+ open: boolean;
13
+ newState: string;
14
+ oldState: string;
15
+ }
15
16
  export type PopoverPlacement = OverlayPlacement;
16
17
  /**
17
18
  * @summary A popover component that provides styled overlay functionality.
@@ -20,8 +21,6 @@ export type PopoverPlacement = OverlayPlacement;
20
21
  * This component wraps the base overlay component with popover-specific styling
21
22
  * including animations, shadows, and rounded corners.
22
23
  *
23
- * @since 1.2.0
24
- *
25
24
  * @cssprop --ai-popover-max-width - The maximum width of the popover.
26
25
  * @cssprop --ai-popover-max-height - The maximum height of the popover.
27
26
  * @cssprop --ai-popover-min-width - The minimum width of the popover.
@@ -51,6 +50,17 @@ export declare class ForgeAiPopoverComponent extends LitElement {
51
50
  * Whether the popover is open.
52
51
  */
53
52
  open: boolean;
53
+ /**
54
+ * Whether to show an arrow pointing to the anchor element.
55
+ */
56
+ arrow: boolean;
57
+ /**
58
+ * The dismiss mode for the popover.
59
+ * - 'auto': Automatically closes on outside clicks and Escape key
60
+ * - 'manual': Requires manual control to close
61
+ */
62
+ dismissMode: 'auto' | 'manual';
63
+ private _arrowElement?;
54
64
  private _onOverlayToggle;
55
65
  render(): TemplateResult;
56
66
  }
@@ -1,5 +1,5 @@
1
1
  import { unsafeCSS, LitElement, html } from "lit";
2
- import { property, customElement } from "lit/decorators.js";
2
+ import { property, query, customElement } from "lit/decorators.js";
3
3
  import "../overlay/overlay.mjs";
4
4
  import styles from "./popover.scss.mjs";
5
5
  var __defProp = Object.defineProperty;
@@ -20,10 +20,12 @@ let ForgeAiPopoverComponent = class extends LitElement {
20
20
  this.flip = false;
21
21
  this.shift = false;
22
22
  this.open = false;
23
+ this.arrow = false;
24
+ this.dismissMode = "auto";
23
25
  this._onOverlayToggle = (event) => {
24
26
  this.open = event.detail.open;
25
27
  this.dispatchEvent(
26
- new CustomEvent("ai-popover-toggle", {
28
+ new CustomEvent("forge-ai-popover-toggle", {
27
29
  detail: event.detail,
28
30
  bubbles: true,
29
31
  composed: true
@@ -39,8 +41,11 @@ let ForgeAiPopoverComponent = class extends LitElement {
39
41
  .flip=${this.flip}
40
42
  .shift=${this.shift}
41
43
  .open=${this.open}
42
- @ai-overlay-toggle=${this._onOverlayToggle}>
44
+ .arrowElement=${this.arrow ? this._arrowElement : null}
45
+ .dismissMode=${this.dismissMode}
46
+ @forge-ai-overlay-toggle=${this._onOverlayToggle}>
43
47
  <div class="ai-popover">
48
+ ${this.arrow ? html`<div class="ai-popover__arrow"></div>` : null}
44
49
  <slot></slot>
45
50
  </div>
46
51
  </forge-ai-overlay>
@@ -63,6 +68,15 @@ __decorateClass([
63
68
  __decorateClass([
64
69
  property({ type: Boolean, reflect: true })
65
70
  ], ForgeAiPopoverComponent.prototype, "open", 2);
71
+ __decorateClass([
72
+ property({ type: Boolean })
73
+ ], ForgeAiPopoverComponent.prototype, "arrow", 2);
74
+ __decorateClass([
75
+ property({ attribute: "dismiss-mode" })
76
+ ], ForgeAiPopoverComponent.prototype, "dismissMode", 2);
77
+ __decorateClass([
78
+ query(".ai-popover__arrow")
79
+ ], ForgeAiPopoverComponent.prototype, "_arrowElement", 2);
66
80
  ForgeAiPopoverComponent = __decorateClass([
67
81
  customElement("forge-ai-popover")
68
82
  ], ForgeAiPopoverComponent);
@@ -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/**\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: contents;\n overflow: visible;\n}\n\n.ai-popover {\n background: var(--forge-theme-surface-bright, #ffffff);\n border-radius: calc(var(--forge-shape-medium, 4px) * var(--forge-shape-factor, 1));\n box-shadow: var(--forge-theme-surface-bright-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 box-sizing: border-box;\n animation-duration: 150ms;\n animation-timing-function: cubic-bezier(0, 0, 0, 1);\n animation-name: fadein, scalein;\n transform-origin: center center;\n}\n\nforge-ai-overlay[data-position-placement^=top]:not([data-position-placement*="-"]) .ai-popover {\n transform-origin: bottom center;\n}\nforge-ai-overlay[data-position-placement^=top][data-position-placement$=-start] .ai-popover {\n transform-origin: bottom left;\n}\nforge-ai-overlay[data-position-placement^=top][data-position-placement$=-end] .ai-popover {\n transform-origin: bottom right;\n}\n\nforge-ai-overlay[data-position-placement^=right]:not([data-position-placement*="-"]) .ai-popover {\n transform-origin: left center;\n}\nforge-ai-overlay[data-position-placement^=right][data-position-placement$=-start] .ai-popover {\n transform-origin: left top;\n}\nforge-ai-overlay[data-position-placement^=right][data-position-placement$=-end] .ai-popover {\n transform-origin: left bottom;\n}\n\nforge-ai-overlay[data-position-placement^=bottom]:not([data-position-placement*="-"]) .ai-popover {\n transform-origin: top center;\n}\nforge-ai-overlay[data-position-placement^=bottom][data-position-placement$=-start] .ai-popover {\n transform-origin: top left;\n}\nforge-ai-overlay[data-position-placement^=bottom][data-position-placement$=-end] .ai-popover {\n transform-origin: top right;\n}\n\nforge-ai-overlay[data-position-placement^=left]:not([data-position-placement*="-"]) .ai-popover {\n transform-origin: right center;\n}\nforge-ai-overlay[data-position-placement^=left][data-position-placement$=-start] .ai-popover {\n transform-origin: right top;\n}\nforge-ai-overlay[data-position-placement^=left][data-position-placement$=-end] .ai-popover {\n transform-origin: right bottom;\n}\n\n@keyframes fadein {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n@keyframes scalein {\n from {\n transform: scale(0.8);\n }\n to {\n transform: scale(1);\n }\n}';
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:host {\n display: contents;\n overflow: visible;\n}\n\n.ai-popover {\n position: relative;\n background: var(--forge-theme-surface-bright, #ffffff);\n border-radius: calc(var(--forge-shape-medium, 4px) * var(--forge-shape-factor, 1));\n box-shadow: var(--forge-theme-surface-bright-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 box-sizing: border-box;\n animation-duration: 150ms;\n animation-timing-function: cubic-bezier(0, 0, 0, 1);\n animation-name: fadein, scalein;\n transform-origin: center center;\n overflow: visible;\n}\n.ai-popover__arrow {\n position: absolute;\n width: 10px;\n height: 10px;\n background: var(--forge-theme-surface-bright, #ffffff);\n transform: rotate(45deg);\n border: 1px solid var(--forge-theme-surface-container, #e0e0e0);\n}\n\nforge-ai-overlay[data-position-placement^=top] .ai-popover:has(.ai-popover__arrow) {\n margin-block-end: var(--forge-spacing-small, 12px);\n}\n\nforge-ai-overlay[data-position-placement^=bottom] .ai-popover:has(.ai-popover__arrow) {\n margin-block-start: var(--forge-spacing-small, 12px);\n}\n\nforge-ai-overlay[data-position-placement^=left] .ai-popover:has(.ai-popover__arrow) {\n margin-inline-end: var(--forge-spacing-small, 12px);\n}\n\nforge-ai-overlay[data-position-placement^=right] .ai-popover:has(.ai-popover__arrow) {\n margin-inline-start: var(--forge-spacing-small, 12px);\n}\n\nforge-ai-overlay[data-position-placement^=top]:not([data-position-placement*="-"]) .ai-popover {\n transform-origin: bottom center;\n}\nforge-ai-overlay[data-position-placement^=top][data-position-placement$=-start] .ai-popover {\n transform-origin: bottom left;\n}\nforge-ai-overlay[data-position-placement^=top][data-position-placement$=-end] .ai-popover {\n transform-origin: bottom right;\n}\nforge-ai-overlay[data-position-placement^=top] .ai-popover__arrow {\n bottom: -6px;\n clip-path: polygon(0 100%, 100% 0, 100% 100%);\n}\n\nforge-ai-overlay[data-position-placement^=right]:not([data-position-placement*="-"]) .ai-popover {\n transform-origin: left center;\n}\nforge-ai-overlay[data-position-placement^=right][data-position-placement$=-start] .ai-popover {\n transform-origin: left top;\n}\nforge-ai-overlay[data-position-placement^=right][data-position-placement$=-end] .ai-popover {\n transform-origin: left bottom;\n}\nforge-ai-overlay[data-position-placement^=right] .ai-popover__arrow {\n left: -6px;\n clip-path: polygon(0 0, 0 100%, 100% 100%);\n}\n\nforge-ai-overlay[data-position-placement^=bottom]:not([data-position-placement*="-"]) .ai-popover {\n transform-origin: top center;\n}\nforge-ai-overlay[data-position-placement^=bottom][data-position-placement$=-start] .ai-popover {\n transform-origin: top left;\n}\nforge-ai-overlay[data-position-placement^=bottom][data-position-placement$=-end] .ai-popover {\n transform-origin: top right;\n}\nforge-ai-overlay[data-position-placement^=bottom] .ai-popover__arrow {\n top: -6px;\n clip-path: polygon(0 0, 0 100%, 100% 0);\n}\n\nforge-ai-overlay[data-position-placement^=left]:not([data-position-placement*="-"]) .ai-popover {\n transform-origin: right center;\n}\nforge-ai-overlay[data-position-placement^=left][data-position-placement$=-start] .ai-popover {\n transform-origin: right top;\n}\nforge-ai-overlay[data-position-placement^=left][data-position-placement$=-end] .ai-popover {\n transform-origin: right bottom;\n}\nforge-ai-overlay[data-position-placement^=left] .ai-popover__arrow {\n right: -6px;\n clip-path: polygon(0 0, 100% 0, 100% 100%);\n}\n\n@keyframes fadein {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n@keyframes scalein {\n from {\n transform: scale(0.8);\n }\n to {\n transform: scale(1);\n }\n}';
2
2
  export {
3
3
  styles as default
4
4
  };
@@ -5,13 +5,14 @@ declare global {
5
5
  'forge-ai-tooltip': ForgeAiTooltipComponent;
6
6
  }
7
7
  interface HTMLElementEventMap {
8
- 'ai-tooltip-toggle': CustomEvent<{
9
- open: boolean;
10
- newState: string;
11
- oldState: string;
12
- }>;
8
+ 'forge-ai-tooltip-toggle': CustomEvent<TooltipToggleEventDetail>;
13
9
  }
14
10
  }
11
+ export interface TooltipToggleEventDetail {
12
+ open: boolean;
13
+ newState: string;
14
+ oldState: string;
15
+ }
15
16
  export type TooltipPlacement = OverlayPlacement;
16
17
  export type TooltipTrigger = 'hover' | 'focus' | 'click' | 'manual';
17
18
  /**
@@ -61,8 +62,7 @@ export declare class ForgeAiTooltipComponent extends LitElement {
61
62
  */
62
63
  hideDelay: number;
63
64
  private _anchorElement;
64
- private _showTimeout;
65
- private _hideTimeout;
65
+ private _arrowElement?;
66
66
  connectedCallback(): void;
67
67
  disconnectedCallback(): void;
68
68
  updated(changedProperties: Map<string | number | symbol, unknown>): void;
@@ -73,6 +73,7 @@ export declare class ForgeAiTooltipComponent extends LitElement {
73
73
  private _handleShow;
74
74
  private _handleHide;
75
75
  private _handleToggle;
76
+ private _handleKeyDown;
76
77
  private _clearTimeouts;
77
78
  private _onOverlayToggle;
78
79
  /**
@@ -1,5 +1,5 @@
1
1
  import { unsafeCSS, LitElement, html } from "lit";
2
- import { property, state, customElement } from "lit/decorators.js";
2
+ import { property, state, query, customElement } from "lit/decorators.js";
3
3
  import { classMap } from "lit/directives/class-map.js";
4
4
  import "../overlay/overlay.mjs";
5
5
  import styles from "./tooltip.scss.mjs";
@@ -20,7 +20,8 @@ var __decorateClass = (decorators, target, key, kind) => {
20
20
  var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
21
21
  var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
22
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 _ForgeAiTooltipComponent_instances, tooltipContent_get;
23
+ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), member.set(obj, value), value);
24
+ var _showTimeout, _hideTimeout, _ForgeAiTooltipComponent_instances, tooltipContent_get;
24
25
  let ForgeAiTooltipComponent = class extends LitElement {
25
26
  constructor() {
26
27
  super(...arguments);
@@ -33,14 +34,14 @@ let ForgeAiTooltipComponent = class extends LitElement {
33
34
  this.delay = 500;
34
35
  this.hideDelay = 0;
35
36
  this._anchorElement = null;
36
- this._showTimeout = null;
37
- this._hideTimeout = null;
37
+ __privateAdd(this, _showTimeout, null);
38
+ __privateAdd(this, _hideTimeout, null);
38
39
  this._handleShow = () => {
39
40
  this._clearTimeouts();
40
41
  if (this.delay > 0) {
41
- this._showTimeout = window.setTimeout(() => {
42
+ __privateSet(this, _showTimeout, window.setTimeout(() => {
42
43
  this.open = true;
43
- }, this.delay);
44
+ }, this.delay));
44
45
  } else {
45
46
  this.open = true;
46
47
  }
@@ -48,9 +49,9 @@ let ForgeAiTooltipComponent = class extends LitElement {
48
49
  this._handleHide = () => {
49
50
  this._clearTimeouts();
50
51
  if (this.hideDelay > 0) {
51
- this._hideTimeout = window.setTimeout(() => {
52
+ __privateSet(this, _hideTimeout, window.setTimeout(() => {
52
53
  this.open = false;
53
- }, this.hideDelay);
54
+ }, this.hideDelay));
54
55
  } else {
55
56
  this.open = false;
56
57
  }
@@ -58,10 +59,15 @@ let ForgeAiTooltipComponent = class extends LitElement {
58
59
  this._handleToggle = () => {
59
60
  this.open = !this.open;
60
61
  };
62
+ this._handleKeyDown = (event) => {
63
+ if (event.key === "Escape" && this.open) {
64
+ this.open = false;
65
+ }
66
+ };
61
67
  this._onOverlayToggle = (event) => {
62
68
  this.open = event.detail.open;
63
69
  this.dispatchEvent(
64
- new CustomEvent("ai-tooltip-toggle", {
70
+ new CustomEvent("forge-ai-tooltip-toggle", {
65
71
  detail: event.detail,
66
72
  bubbles: true,
67
73
  composed: true
@@ -85,8 +91,10 @@ let ForgeAiTooltipComponent = class extends LitElement {
85
91
  super.disconnectedCallback();
86
92
  this._detachEventListeners();
87
93
  this._clearTimeouts();
94
+ document.removeEventListener("keydown", this._handleKeyDown);
88
95
  }
89
96
  updated(changedProperties) {
97
+ super.updated(changedProperties);
90
98
  if (changedProperties.has("for")) {
91
99
  this._detachEventListeners();
92
100
  this._findAnchorElement();
@@ -94,6 +102,17 @@ let ForgeAiTooltipComponent = class extends LitElement {
94
102
  }
95
103
  if (changedProperties.has("open")) {
96
104
  this._updateHostAttributes();
105
+ if (this.open) {
106
+ document.addEventListener("keydown", this._handleKeyDown);
107
+ this.updateComplete.then(() => {
108
+ const overlay = this.shadowRoot?.querySelector("forge-ai-overlay");
109
+ if (overlay && this._arrowElement) {
110
+ overlay.arrowElement = this._arrowElement;
111
+ }
112
+ });
113
+ } else {
114
+ document.removeEventListener("keydown", this._handleKeyDown);
115
+ }
97
116
  }
98
117
  }
99
118
  _findAnchorElement() {
@@ -129,6 +148,8 @@ let ForgeAiTooltipComponent = class extends LitElement {
129
148
  case "hover":
130
149
  this._anchorElement.addEventListener("mouseenter", this._handleShow);
131
150
  this._anchorElement.addEventListener("mouseleave", this._handleHide);
151
+ this._anchorElement.addEventListener("focusin", this._handleShow);
152
+ this._anchorElement.addEventListener("focusout", this._handleHide);
132
153
  break;
133
154
  case "focus":
134
155
  this._anchorElement.addEventListener("focusin", this._handleShow);
@@ -150,13 +171,13 @@ let ForgeAiTooltipComponent = class extends LitElement {
150
171
  this._anchorElement.removeEventListener("click", this._handleToggle);
151
172
  }
152
173
  _clearTimeouts() {
153
- if (this._showTimeout) {
154
- clearTimeout(this._showTimeout);
155
- this._showTimeout = null;
174
+ if (__privateGet(this, _showTimeout)) {
175
+ clearTimeout(__privateGet(this, _showTimeout));
176
+ __privateSet(this, _showTimeout, null);
156
177
  }
157
- if (this._hideTimeout) {
158
- clearTimeout(this._hideTimeout);
159
- this._hideTimeout = null;
178
+ if (__privateGet(this, _hideTimeout)) {
179
+ clearTimeout(__privateGet(this, _hideTimeout));
180
+ __privateSet(this, _hideTimeout, null);
160
181
  }
161
182
  }
162
183
  /**
@@ -193,7 +214,10 @@ let ForgeAiTooltipComponent = class extends LitElement {
193
214
  shift
194
215
  .open=${this.open}
195
216
  @ai-overlay-toggle=${this._onOverlayToggle}>
196
- <div class="ai-tooltip">${__privateGet(this, _ForgeAiTooltipComponent_instances, tooltipContent_get)}</div>
217
+ <div class="ai-tooltip">
218
+ <div class="ai-tooltip__arrow"></div>
219
+ ${__privateGet(this, _ForgeAiTooltipComponent_instances, tooltipContent_get)}
220
+ </div>
197
221
  </forge-ai-overlay>`,
198
222
  () => html`
199
223
  <!-- Content shown when closed for accessibility -->
@@ -203,6 +227,8 @@ let ForgeAiTooltipComponent = class extends LitElement {
203
227
  `;
204
228
  }
205
229
  };
230
+ _showTimeout = /* @__PURE__ */ new WeakMap();
231
+ _hideTimeout = /* @__PURE__ */ new WeakMap();
206
232
  _ForgeAiTooltipComponent_instances = /* @__PURE__ */ new WeakSet();
207
233
  tooltipContent_get = function() {
208
234
  const hasText = this.text.trim().length > 0;
@@ -236,6 +262,9 @@ __decorateClass([
236
262
  __decorateClass([
237
263
  state()
238
264
  ], ForgeAiTooltipComponent.prototype, "_anchorElement", 2);
265
+ __decorateClass([
266
+ query(".ai-tooltip__arrow")
267
+ ], ForgeAiTooltipComponent.prototype, "_arrowElement", 2);
239
268
  ForgeAiTooltipComponent = __decorateClass([
240
269
  customElement("forge-ai-tooltip")
241
270
  ], ForgeAiTooltipComponent);
@@ -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/**\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/**\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 slidein {\n from {\n opacity: 0;\n transform: translateX(var(--_tooltip-slidein-x)) translateY(var(--_tooltip-slidein-y));\n }\n to {\n opacity: 1;\n transform: translateX(0) translateY(0);\n }\n}\n:host {\n display: inline-block;\n position: relative;\n}\n\n.ai-tooltip {\n --_tooltip-background: var(--forge-tooltip-background, var(--forge-theme-surface-inverse, #333333));\n --_tooltip-color: var(--forge-tooltip-color, var(--forge-theme-on-surface-inverse, #ffffff));\n --_tooltip-shape: var(--forge-tooltip-shape, calc(var(--forge-shape-medium, 4px) * var(--forge-shape-factor, 1)));\n --_tooltip-padding: var(--forge-tooltip-padding, var(--forge-spacing-xsmall, 8px));\n --_tooltip-padding-block: var(--forge-tooltip-padding-block, var(--_tooltip-padding));\n --_tooltip-padding-inline: var(--forge-tooltip-padding-inline, var(--_tooltip-padding));\n --_tooltip-width: var(--forge-tooltip-width, max-content);\n --_tooltip-max-width: var(--forge-tooltip-max-width, 320px);\n --_tooltip-elevation: var(--forge-tooltip-elevation, var(--forge-theme-surface-bright-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 --_tooltip-content-align: var(--forge-tooltip-content-align, center);\n --_tooltip-border-width: var(--forge-tooltip-border-width, 0);\n --_tooltip-border-style: var(--forge-tooltip-border-style, solid);\n --_tooltip-border-color: var(--forge-tooltip-border-color, var(--forge-theme-outline, #e0e0e0));\n --_tooltip-animation-timing: var(--forge-tooltip-animation-timing, var(--forge-animation-easing-decelerate, cubic-bezier(0, 0, 0, 1)));\n --_tooltip-animation-duration: var(--forge-tooltip-animation-duration, var(--forge-animation-duration-short3, 150ms));\n --_tooltip-animation-offset: var(--forge-tooltip-animation-offset, 24px);\n --_tooltip-arrow-size: var(--forge-tooltip-arrow-size, 8px);\n --_tooltip-arrow-height: var(--forge-tooltip-arrow-height, var(--_tooltip-arrow-size));\n --_tooltip-arrow-width: var(--forge-tooltip-arrow-width, var(--_tooltip-arrow-size));\n --_tooltip-arrow-shape: var(--forge-tooltip-arrow-shape, calc(var(--forge-shape-small, 2px) * var(--forge-shape-factor, 1)));\n --_tooltip-arrow-rotation: var(--forge-tooltip-arrow-rotation, 0deg);\n --_tooltip-arrow-top-rotation: var(--forge-tooltip-arrow-top-rotation, 315deg);\n --_tooltip-arrow-right-rotation: var(--forge-tooltip-arrow-right-rotation, 45deg);\n --_tooltip-arrow-bottom-rotation: var(--forge-tooltip-arrow-bottom-rotation, 135deg);\n --_tooltip-arrow-left-rotation: var(--forge-tooltip-arrow-left-rotation, 225deg);\n -moz-osx-font-smoothing: grayscale;\n -webkit-font-smoothing: antialiased;\n font-family: var(--forge-typography-body1-font-family, var(--forge-typography-font-family, "Roboto", sans-serif));\n font-size: var(--forge-typography-body1-font-size, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-body-font-size-scale, 0.875)));\n font-weight: var(--forge-typography-body1-font-weight, 400);\n line-height: var(--forge-typography-body1-line-height, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-body-line-height-scale, 1.125)));\n letter-spacing: var(--forge-typography-body1-letter-spacing, 0.0357142857em);\n text-transform: var(--forge-typography-body1-text-transform, inherit);\n text-decoration: var(--forge-typography-body1-text-decoration, inherit);\n position: relative;\n background: var(--_tooltip-background);\n color: var(--_tooltip-color);\n border-radius: var(--_tooltip-shape);\n border-width: var(--_tooltip-border-width);\n border-style: var(--_tooltip-border-style);\n border-color: var(--_tooltip-border-color);\n padding-block: var(--_tooltip-padding-block);\n padding-inline: var(--_tooltip-padding-inline);\n box-shadow: var(--_tooltip-elevation);\n width: var(--_tooltip-width);\n max-width: var(--_tooltip-max-width);\n text-align: var(--_tooltip-content-align);\n line-height: normal;\n white-space: normal;\n animation-duration: var(--_tooltip-animation-duration);\n animation-timing-function: var(--_tooltip-animation-timing);\n animation-name: slidein;\n animation-fill-mode: forwards;\n animation-duration: 150ms;\n animation-timing-function: cubic-bezier(0, 0, 0, 1);\n animation-name: tooltip-fadein, tooltip-scalein;\n transform-origin: center center;\n}\n\nforge-ai-overlay[data-position-placement^=top]:not([data-position-placement*="-"]) .ai-tooltip {\n transform-origin: bottom center;\n}\nforge-ai-overlay[data-position-placement^=top][data-position-placement$=-start] .ai-tooltip {\n transform-origin: bottom left;\n}\nforge-ai-overlay[data-position-placement^=top][data-position-placement$=-end] .ai-tooltip {\n transform-origin: bottom right;\n}\n\nforge-ai-overlay[data-position-placement^=right]:not([data-position-placement*="-"]) .ai-tooltip {\n transform-origin: left center;\n}\nforge-ai-overlay[data-position-placement^=right][data-position-placement$=-start] .ai-tooltip {\n transform-origin: left top;\n}\nforge-ai-overlay[data-position-placement^=right][data-position-placement$=-end] .ai-tooltip {\n transform-origin: left bottom;\n}\n\nforge-ai-overlay[data-position-placement^=bottom]:not([data-position-placement*="-"]) .ai-tooltip {\n transform-origin: top center;\n}\nforge-ai-overlay[data-position-placement^=bottom][data-position-placement$=-start] .ai-tooltip {\n transform-origin: top left;\n}\nforge-ai-overlay[data-position-placement^=bottom][data-position-placement$=-end] .ai-tooltip {\n transform-origin: top right;\n}\n\nforge-ai-overlay[data-position-placement^=left]:not([data-position-placement*="-"]) .ai-tooltip {\n transform-origin: right center;\n}\nforge-ai-overlay[data-position-placement^=left][data-position-placement$=-start] .ai-tooltip {\n transform-origin: right top;\n}\nforge-ai-overlay[data-position-placement^=left][data-position-placement$=-end] .ai-tooltip {\n transform-origin: right bottom;\n}\n\n.tooltip-content--hidden {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n clip-path: inset(50%);\n white-space: nowrap;\n border: 0;\n}\n\n@keyframes tooltip-fadein {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n@keyframes tooltip-scalein {\n from {\n transform: scale(0.8);\n }\n to {\n transform: scale(1);\n }\n}';
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/**\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/**\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 slidein {\n from {\n opacity: 0;\n transform: translateX(var(--_tooltip-slidein-x)) translateY(var(--_tooltip-slidein-y));\n }\n to {\n opacity: 1;\n transform: translateX(0) translateY(0);\n }\n}\n:host {\n display: inline-block;\n position: relative;\n}\n\n.ai-tooltip {\n --_tooltip-background: var(--forge-tooltip-background, var(--forge-theme-surface-inverse, #333333));\n --_tooltip-color: var(--forge-tooltip-color, var(--forge-theme-on-surface-inverse, #ffffff));\n --_tooltip-shape: var(--forge-tooltip-shape, calc(var(--forge-shape-medium, 4px) * var(--forge-shape-factor, 1)));\n --_tooltip-padding: var(--forge-tooltip-padding, var(--forge-spacing-xsmall, 8px));\n --_tooltip-padding-block: var(--forge-tooltip-padding-block, var(--_tooltip-padding));\n --_tooltip-padding-inline: var(--forge-tooltip-padding-inline, var(--_tooltip-padding));\n --_tooltip-width: var(--forge-tooltip-width, max-content);\n --_tooltip-max-width: var(--forge-tooltip-max-width, 320px);\n --_tooltip-elevation: var(--forge-tooltip-elevation, var(--forge-theme-surface-bright-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 --_tooltip-content-align: var(--forge-tooltip-content-align, center);\n --_tooltip-border-width: var(--forge-tooltip-border-width, 0);\n --_tooltip-border-style: var(--forge-tooltip-border-style, solid);\n --_tooltip-border-color: var(--forge-tooltip-border-color, var(--forge-theme-outline, #e0e0e0));\n --_tooltip-animation-timing: var(--forge-tooltip-animation-timing, var(--forge-animation-easing-decelerate, cubic-bezier(0, 0, 0, 1)));\n --_tooltip-animation-duration: var(--forge-tooltip-animation-duration, var(--forge-animation-duration-short3, 150ms));\n --_tooltip-animation-offset: var(--forge-tooltip-animation-offset, 24px);\n --_tooltip-arrow-size: var(--forge-tooltip-arrow-size, 8px);\n --_tooltip-arrow-height: var(--forge-tooltip-arrow-height, var(--_tooltip-arrow-size));\n --_tooltip-arrow-width: var(--forge-tooltip-arrow-width, var(--_tooltip-arrow-size));\n --_tooltip-arrow-shape: var(--forge-tooltip-arrow-shape, calc(var(--forge-shape-small, 2px) * var(--forge-shape-factor, 1)));\n --_tooltip-arrow-rotation: var(--forge-tooltip-arrow-rotation, 0deg);\n --_tooltip-arrow-top-rotation: var(--forge-tooltip-arrow-top-rotation, 315deg);\n --_tooltip-arrow-right-rotation: var(--forge-tooltip-arrow-right-rotation, 45deg);\n --_tooltip-arrow-bottom-rotation: var(--forge-tooltip-arrow-bottom-rotation, 135deg);\n --_tooltip-arrow-left-rotation: var(--forge-tooltip-arrow-left-rotation, 225deg);\n -moz-osx-font-smoothing: grayscale;\n -webkit-font-smoothing: antialiased;\n font-family: var(--forge-typography-body1-font-family, var(--forge-typography-font-family, "Roboto", sans-serif));\n font-size: var(--forge-typography-body1-font-size, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-body-font-size-scale, 0.875)));\n font-weight: var(--forge-typography-body1-font-weight, 400);\n line-height: var(--forge-typography-body1-line-height, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-body-line-height-scale, 1.125)));\n letter-spacing: var(--forge-typography-body1-letter-spacing, 0.0357142857em);\n text-transform: var(--forge-typography-body1-text-transform, inherit);\n text-decoration: var(--forge-typography-body1-text-decoration, inherit);\n position: relative;\n background: var(--_tooltip-background);\n color: var(--_tooltip-color);\n border-radius: var(--_tooltip-shape);\n border-width: var(--_tooltip-border-width);\n border-style: var(--_tooltip-border-style);\n border-color: var(--_tooltip-border-color);\n padding-block: var(--_tooltip-padding-block);\n padding-inline: var(--_tooltip-padding-inline);\n box-shadow: var(--_tooltip-elevation);\n width: var(--_tooltip-width);\n max-width: var(--_tooltip-max-width);\n text-align: var(--_tooltip-content-align);\n line-height: normal;\n white-space: normal;\n animation-duration: var(--_tooltip-animation-duration);\n animation-timing-function: var(--_tooltip-animation-timing);\n animation-name: slidein;\n animation-fill-mode: forwards;\n position: relative;\n animation-duration: 150ms;\n animation-timing-function: cubic-bezier(0, 0, 0, 1);\n animation-name: tooltip-fadein, tooltip-scalein;\n transform-origin: center center;\n}\n.ai-tooltip__arrow {\n position: absolute;\n width: 10px;\n height: 10px;\n background: var(--forge-theme-text-high, rgba(0, 0, 0, 0.87));\n transform: rotate(45deg);\n z-index: -1;\n filter: drop-shadow(0 2px 4px rgba(0, 0, 0, 0.2));\n}\n\nforge-ai-overlay[data-position-placement^=top] .ai-tooltip {\n margin-block-end: var(--forge-spacing-small, 12px);\n}\n\nforge-ai-overlay[data-position-placement^=bottom] .ai-tooltip {\n margin-block-start: var(--forge-spacing-small, 12px);\n}\n\nforge-ai-overlay[data-position-placement^=left] .ai-tooltip {\n margin-inline-end: var(--forge-spacing-small, 12px);\n}\n\nforge-ai-overlay[data-position-placement^=right] .ai-tooltip {\n margin-inline-start: var(--forge-spacing-small, 12px);\n}\n\nforge-ai-overlay[data-position-placement^=top]:not([data-position-placement*="-"]) .ai-tooltip {\n transform-origin: bottom center;\n}\nforge-ai-overlay[data-position-placement^=top][data-position-placement$=-start] .ai-tooltip {\n transform-origin: bottom left;\n}\nforge-ai-overlay[data-position-placement^=top][data-position-placement$=-end] .ai-tooltip {\n transform-origin: bottom right;\n}\nforge-ai-overlay[data-position-placement^=top] .ai-tooltip__arrow {\n bottom: -5px;\n clip-path: polygon(0 100%, 100% 0, 100% 100%);\n}\n\nforge-ai-overlay[data-position-placement^=right]:not([data-position-placement*="-"]) .ai-tooltip {\n transform-origin: left center;\n}\nforge-ai-overlay[data-position-placement^=right][data-position-placement$=-start] .ai-tooltip {\n transform-origin: left top;\n}\nforge-ai-overlay[data-position-placement^=right][data-position-placement$=-end] .ai-tooltip {\n transform-origin: left bottom;\n}\nforge-ai-overlay[data-position-placement^=right] .ai-tooltip__arrow {\n left: -5px;\n clip-path: polygon(0 0, 0 100%, 100% 100%);\n}\n\nforge-ai-overlay[data-position-placement^=bottom]:not([data-position-placement*="-"]) .ai-tooltip {\n transform-origin: top center;\n}\nforge-ai-overlay[data-position-placement^=bottom][data-position-placement$=-start] .ai-tooltip {\n transform-origin: top left;\n}\nforge-ai-overlay[data-position-placement^=bottom][data-position-placement$=-end] .ai-tooltip {\n transform-origin: top right;\n}\nforge-ai-overlay[data-position-placement^=bottom] .ai-tooltip__arrow {\n top: -5px;\n clip-path: polygon(0 0, 0 100%, 100% 0);\n}\n\nforge-ai-overlay[data-position-placement^=left]:not([data-position-placement*="-"]) .ai-tooltip {\n transform-origin: right center;\n}\nforge-ai-overlay[data-position-placement^=left][data-position-placement$=-start] .ai-tooltip {\n transform-origin: right top;\n}\nforge-ai-overlay[data-position-placement^=left][data-position-placement$=-end] .ai-tooltip {\n transform-origin: right bottom;\n}\nforge-ai-overlay[data-position-placement^=left] .ai-tooltip__arrow {\n right: -5px;\n clip-path: polygon(0 0, 100% 0, 100% 100%);\n}\n\n.tooltip-content--hidden {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n clip-path: inset(50%);\n white-space: nowrap;\n border: 0;\n}\n\n@keyframes tooltip-fadein {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n@keyframes tooltip-scalein {\n from {\n transform: scale(0.8);\n }\n to {\n transform: scale(1);\n }\n}';
2
2
  export {
3
3
  styles as default
4
4
  };
package/dist/index.d.ts CHANGED
@@ -1,19 +1,24 @@
1
- export * from './ai-artifact';
2
- export * from './ai-suggestions';
3
1
  export * from './ai-actions-toolbar';
2
+ export * from './ai-agent-info';
3
+ export * from './ai-artifact';
4
+ export * from './ai-attachment';
4
5
  export * from './ai-button';
6
+ export * from './ai-chain-of-thought';
5
7
  export * from './ai-chat-header';
6
8
  export * from './ai-chat-interface';
7
- export * from './ai-dropdown-menu';
8
- export * from './ai-chain-of-thought';
9
+ export * from './ai-chatbot';
10
+ export * from './ai-confirmation-prompt';
9
11
  export * from './ai-dialog';
12
+ export * from './ai-dropdown-menu';
10
13
  export * from './ai-embedded-chat';
11
14
  export * from './ai-empty-state';
15
+ export * from './ai-error-message';
12
16
  export * from './ai-fab';
13
17
  export * from './ai-file-picker';
14
18
  export * from './ai-floating-chat';
15
19
  export * from './ai-gradient-container';
16
20
  export * from './ai-icon';
21
+ export * from './ai-message-thread';
17
22
  export * from './ai-modal';
18
23
  export * from './ai-prompt';
19
24
  export * from './ai-reasoning';
@@ -22,6 +27,7 @@ export * from './ai-response-message';
22
27
  export * from './ai-sidebar';
23
28
  export * from './ai-sidebar-chat';
24
29
  export * from './ai-suggestions';
30
+ export * from './ai-suggestions';
25
31
  export * from './ai-thinking-indicator';
26
32
  export * from './ai-threads';
27
33
  export * from './ai-user-message';
package/dist/index.mjs CHANGED
@@ -1,26 +1,42 @@
1
- import { AiArtifactComponent, AiArtifactComponentTagName } from "./ai-artifact/ai-artifact.mjs";
2
- import { AiSuggestionsComponent, AiSuggestionsComponentTagName } from "./ai-suggestions/ai-suggestions.mjs";
3
1
  import { AiActionsToolbarComponent, AiActionsToolbarComponentTagName } from "./ai-actions-toolbar/ai-actions-toolbar.mjs";
2
+ import { AiAgentInfoComponent, AiAgentInfoComponentTagName } from "./ai-agent-info/ai-agent-info.mjs";
3
+ import { AiArtifactComponent, AiArtifactComponentTagName } from "./ai-artifact/ai-artifact.mjs";
4
+ import { AiAttachmentComponent, AiAttachmentComponentTagName } from "./ai-attachment/ai-attachment.mjs";
4
5
  import { AiButtonComponent, AiButtonComponentTagName } from "./ai-button/ai-button.mjs";
5
- import { AiChatHeaderComponent, AiChatHeaderComponentTagName } from "./ai-chat-header/ai-chat-header.mjs";
6
- import { AiChatInterfaceComponent, AiChatInterfaceComponentTagName } from "./ai-chat-interface/ai-chat-interface.mjs";
7
- import { ForgeAiDropdownMenuComponent } from "./ai-dropdown-menu/ai-dropdown-menu.mjs";
8
- import { ForgeAiDropdownMenuItemComponent } from "./ai-dropdown-menu/ai-dropdown-menu-item.mjs";
9
- import { ForgeAiDropdownMenuItemGroupComponent } from "./ai-dropdown-menu/ai-dropdown-menu-item-group.mjs";
10
- import { ForgeAiDropdownMenuSeparatorComponent } from "./ai-dropdown-menu/ai-dropdown-menu-separator.mjs";
11
6
  import { AiChainOfThoughtComponent, AiChainOfThoughtComponentTagName } from "./ai-chain-of-thought/ai-chain-of-thought.mjs";
12
7
  import { ThoughtBaseComponent, ThoughtBaseComponentTagName } from "./ai-chain-of-thought/thought-base/thought-base.mjs";
13
8
  import { ThoughtSearchResultComponent, ThoughtSearchResultComponentTagName } from "./ai-chain-of-thought/thought-search-result/thought-search-result.mjs";
14
9
  import { ThoughtImageComponent, ThoughtImageComponentTagName } from "./ai-chain-of-thought/thought-image/thought-image.mjs";
15
10
  import { ThoughtDetailComponent, ThoughtDetailComponentTagName } from "./ai-chain-of-thought/thought-detail/thought-detail.mjs";
11
+ import { AiChatHeaderComponent, AiChatHeaderComponentTagName } from "./ai-chat-header/ai-chat-header.mjs";
12
+ import { AiChatInterfaceComponent, AiChatInterfaceComponentTagName } from "./ai-chat-interface/ai-chat-interface.mjs";
13
+ import { AiChatbotComponent, AiChatbotComponentTagName } from "./ai-chatbot/ai-chatbot.mjs";
14
+ import { AiChatbotToolCallComponent, AiChatbotToolCallComponentTagName } from "./ai-chatbot/ai-chatbot-tool-call.mjs";
15
+ import { AgentAdapter } from "./ai-chatbot/agent-adapter.mjs";
16
+ import { AgUiAdapter } from "./ai-chatbot/ag-ui-adapter.mjs";
17
+ import { HttpAgentWithCredentials } from "./ai-chatbot/http-agent-with-credentials.mjs";
18
+ import { EventEmitter, SubscriptionManager } from "./ai-chatbot/event-emitter.mjs";
19
+ import { AgentRunner } from "./ai-chatbot/agent-runner.mjs";
20
+ import { createToolRenderer } from "./ai-chatbot/create-tool-renderer.mjs";
21
+ import { MessageStateController } from "./ai-chatbot/message-state-controller.mjs";
22
+ import { FileUploadManager } from "./ai-chatbot/file-upload-manager.mjs";
23
+ import { MarkdownStreamController } from "./ai-chatbot/markdown-stream-controller.mjs";
24
+ import { generateId, renderMarkdown } from "./ai-chatbot/utils.mjs";
25
+ import { AiConfirmationPromptComponent, AiConfirmationPromptComponentTagName } from "./ai-confirmation-prompt/ai-confirmation-prompt.mjs";
16
26
  import { AiDialogComponent, AiDialogComponentTagName } from "./ai-dialog/ai-dialog.mjs";
27
+ import { ForgeAiDropdownMenuComponent } from "./ai-dropdown-menu/ai-dropdown-menu.mjs";
28
+ import { ForgeAiDropdownMenuItemComponent } from "./ai-dropdown-menu/ai-dropdown-menu-item.mjs";
29
+ import { ForgeAiDropdownMenuItemGroupComponent } from "./ai-dropdown-menu/ai-dropdown-menu-item-group.mjs";
30
+ import { ForgeAiDropdownMenuSeparatorComponent } from "./ai-dropdown-menu/ai-dropdown-menu-separator.mjs";
17
31
  import { AiEmbeddedChatComponent, AiEmbeddedChatComponentTagName } from "./ai-embedded-chat/ai-embedded-chat.mjs";
18
32
  import { AiEmptyStateComponent, AiEmptyStateComponentTagName } from "./ai-empty-state/ai-empty-state.mjs";
33
+ import { AiErrorMessageComponent, AiErrorMessageComponentTagName } from "./ai-error-message/ai-error-message.mjs";
19
34
  import { AiFabComponent, AiFabComponentTagName } from "./ai-fab/ai-fab.mjs";
20
35
  import { AiFilePickerComponent } from "./ai-file-picker/ai-file-picker.mjs";
21
36
  import { AiFloatingChatComponent, AiFloatingChatComponentTagName } from "./ai-floating-chat/ai-floating-chat.mjs";
22
37
  import { AiGradientContainerComponent, AiGradientContainerComponentTagName } from "./ai-gradient-container/ai-gradient-container.mjs";
23
38
  import { AiIconComponent, AiIconComponentTagName } from "./ai-icon/ai-icon.mjs";
39
+ import { AiMessageThreadComponent, AiMessageThreadComponentTagName } from "./ai-message-thread/ai-message-thread.mjs";
24
40
  import { AiModalComponent } from "./ai-modal/ai-modal.mjs";
25
41
  import { AiPromptComponent, AiPromptComponentTagName } from "./ai-prompt/ai-prompt.mjs";
26
42
  import { AiReasoningComponent, AiReasoningComponentTagName } from "./ai-reasoning/ai-reasoning.mjs";
@@ -29,15 +45,23 @@ import { AiReasoningHeaderComponent, AiReasoningHeaderComponentTagName } from ".
29
45
  import { AiResponseMessageComponent, AiResponseMessageComponentTagName } from "./ai-response-message/ai-response-message.mjs";
30
46
  import { AiSidebarComponent, AiSidebarComponentTagName } from "./ai-sidebar/ai-sidebar.mjs";
31
47
  import { AiSidebarChatComponent, AiSidebarChatComponentTagName } from "./ai-sidebar-chat/ai-sidebar-chat.mjs";
48
+ import { AiSuggestionsComponent, AiSuggestionsComponentTagName } from "./ai-suggestions/ai-suggestions.mjs";
32
49
  import { AiThinkingIndicatorComponent, AiThinkingIndicatorComponentTagName } from "./ai-thinking-indicator/ai-thinking-indicator.mjs";
33
50
  import { AiThreadsComponent, AiThreadsComponentTagName } from "./ai-threads/ai-threads.mjs";
34
51
  import { AiUserMessageComponent, AiUserMessageComponentTagName } from "./ai-user-message/ai-user-message.mjs";
35
52
  import { AiVoiceInputComponent, AiVoiceInputComponentTagName } from "./ai-voice-input/ai-voice-input.mjs";
36
53
  export {
54
+ AgUiAdapter,
55
+ AgentAdapter,
56
+ AgentRunner,
37
57
  AiActionsToolbarComponent,
38
58
  AiActionsToolbarComponentTagName,
59
+ AiAgentInfoComponent,
60
+ AiAgentInfoComponentTagName,
39
61
  AiArtifactComponent,
40
62
  AiArtifactComponentTagName,
63
+ AiAttachmentComponent,
64
+ AiAttachmentComponentTagName,
41
65
  AiButtonComponent,
42
66
  AiButtonComponentTagName,
43
67
  AiChainOfThoughtComponent,
@@ -46,12 +70,20 @@ export {
46
70
  AiChatHeaderComponentTagName,
47
71
  AiChatInterfaceComponent,
48
72
  AiChatInterfaceComponentTagName,
73
+ AiChatbotComponent,
74
+ AiChatbotComponentTagName,
75
+ AiChatbotToolCallComponent,
76
+ AiChatbotToolCallComponentTagName,
77
+ AiConfirmationPromptComponent,
78
+ AiConfirmationPromptComponentTagName,
49
79
  AiDialogComponent,
50
80
  AiDialogComponentTagName,
51
81
  AiEmbeddedChatComponent,
52
82
  AiEmbeddedChatComponentTagName,
53
83
  AiEmptyStateComponent,
54
84
  AiEmptyStateComponentTagName,
85
+ AiErrorMessageComponent,
86
+ AiErrorMessageComponentTagName,
55
87
  AiFabComponent,
56
88
  AiFabComponentTagName,
57
89
  AiFilePickerComponent,
@@ -61,6 +93,8 @@ export {
61
93
  AiGradientContainerComponentTagName,
62
94
  AiIconComponent,
63
95
  AiIconComponentTagName,
96
+ AiMessageThreadComponent,
97
+ AiMessageThreadComponentTagName,
64
98
  AiModalComponent,
65
99
  AiPromptComponent,
66
100
  AiPromptComponentTagName,
@@ -84,12 +118,18 @@ export {
84
118
  AiUserMessageComponentTagName,
85
119
  AiVoiceInputComponent,
86
120
  AiVoiceInputComponentTagName,
121
+ EventEmitter,
122
+ FileUploadManager,
87
123
  ForgeAiDropdownMenuComponent,
88
124
  ForgeAiDropdownMenuItemComponent,
89
125
  ForgeAiDropdownMenuItemGroupComponent,
90
126
  ForgeAiDropdownMenuSeparatorComponent,
127
+ HttpAgentWithCredentials,
128
+ MarkdownStreamController,
129
+ MessageStateController,
91
130
  ReasoningContentComponent,
92
131
  ReasoningContentComponentTagName,
132
+ SubscriptionManager,
93
133
  ThoughtBaseComponent,
94
134
  ThoughtBaseComponentTagName,
95
135
  ThoughtDetailComponent,
@@ -97,5 +137,8 @@ export {
97
137
  ThoughtImageComponent,
98
138
  ThoughtImageComponentTagName,
99
139
  ThoughtSearchResultComponent,
100
- ThoughtSearchResultComponentTagName
140
+ ThoughtSearchResultComponentTagName,
141
+ createToolRenderer,
142
+ generateId,
143
+ renderMarkdown
101
144
  };