@tylertech/forge-ai 0.4.1 → 0.6.0

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