@tylertech/forge-ai 0.2.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/custom-elements.json +400 -218
  2. package/dist/ai-actions-toolbar/ai-actions-toolbar.d.ts +3 -3
  3. package/dist/ai-chat-interface/ai-chat-interface.d.ts +2 -8
  4. package/dist/ai-chat-interface/ai-chat-interface.mjs +9 -92
  5. package/dist/ai-chat-interface/ai-chat-interface.scss.mjs +1 -1
  6. package/dist/ai-dialog/ai-dialog.d.ts +1 -0
  7. package/dist/ai-dialog/ai-dialog.mjs +30 -3
  8. package/dist/ai-dialog/ai-dialog.scss.mjs +1 -1
  9. package/dist/ai-dropdown-menu/ai-dropdown-menu.d.ts +0 -1
  10. package/dist/ai-dropdown-menu/ai-dropdown-menu.mjs +5 -7
  11. package/dist/ai-file-picker/ai-file-picker.d.ts +5 -5
  12. package/dist/ai-file-picker/ai-file-picker.mjs +16 -16
  13. package/dist/ai-file-picker/index.d.ts +1 -1
  14. package/dist/ai-file-picker/index.mjs +2 -2
  15. package/dist/ai-prompt/ai-prompt.d.ts +34 -6
  16. package/dist/ai-prompt/ai-prompt.mjs +109 -25
  17. package/dist/ai-prompt/ai-prompt.scss.mjs +1 -1
  18. package/dist/ai-response-message/ai-response-message.d.ts +3 -4
  19. package/dist/ai-response-message/ai-response-message.mjs +1 -6
  20. package/dist/ai-response-message/ai-response-message.scss.mjs +1 -1
  21. package/dist/ai-sidebar/ai-sidebar.d.ts +4 -0
  22. package/dist/ai-sidebar/ai-sidebar.mjs +32 -13
  23. package/dist/ai-sidebar/ai-sidebar.scss.mjs +1 -1
  24. package/dist/ai-suggestions/ai-suggestions.d.ts +3 -3
  25. package/dist/ai-suggestions/ai-suggestions.mjs +2 -2
  26. package/dist/ai-thinking-indicator/ai-thinking-indicator.d.ts +22 -0
  27. package/dist/ai-thinking-indicator/ai-thinking-indicator.mjs +41 -0
  28. package/dist/ai-thinking-indicator/ai-thinking-indicator.scss.mjs +4 -0
  29. package/dist/ai-thinking-indicator/index.d.ts +1 -0
  30. package/dist/ai-thinking-indicator/index.mjs +5 -0
  31. package/dist/ai-threads/ai-threads.d.ts +3 -3
  32. package/dist/ai-voice-input/ai-voice-input.d.ts +1 -1
  33. package/dist/core/overlay/overlay.scss.mjs +1 -1
  34. package/dist/core/popover/popover.mjs +1 -1
  35. package/dist/index.d.ts +1 -0
  36. package/dist/index.mjs +5 -2
  37. package/package.json +1 -1
@@ -18,7 +18,7 @@ var __decorateClass = (decorators, target, key, kind) => {
18
18
  var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
19
19
  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);
20
20
  var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
21
- var _AiSidebarComponent_instances, handleTransitionEnd_fn, dispatchEvent_fn;
21
+ var _AiSidebarComponent_instances, handleContainerTransitionEnd_fn, handleDrawerTransitionEnd_fn, dispatchEvent_fn;
22
22
  const AiSidebarComponentTagName = "forge-ai-sidebar";
23
23
  let AiSidebarComponent = class extends LitElement {
24
24
  constructor() {
@@ -26,23 +26,32 @@ let AiSidebarComponent = class extends LitElement {
26
26
  __privateAdd(this, _AiSidebarComponent_instances);
27
27
  this.open = true;
28
28
  this._closing = false;
29
+ this._containerClosing = false;
29
30
  }
30
31
  render() {
31
- const classes = {
32
+ const containerClasses = {
33
+ "animation-container": true,
34
+ "animation-container--open": this.open && !this._containerClosing,
35
+ "animation-container--closing": this._containerClosing,
36
+ "animation-container--closed": !this.open && !this._containerClosing
37
+ };
38
+ const drawerClasses = {
32
39
  "forge-drawer": true,
33
40
  "forge-drawer--right": true,
34
41
  "forge-drawer--closing": this._closing,
35
42
  "forge-drawer--closed": !this.open && !this._closing
36
43
  };
37
44
  return html`
38
- <aside
39
- class=${classMap(classes)}
40
- ?open=${this.open}
41
- role="complementary"
42
- aria-hidden=${!this.open}
43
- @transitionend=${__privateMethod(this, _AiSidebarComponent_instances, handleTransitionEnd_fn)}>
44
- <slot></slot>
45
- </aside>
45
+ <div class=${classMap(containerClasses)} @transitionend=${__privateMethod(this, _AiSidebarComponent_instances, handleContainerTransitionEnd_fn)}>
46
+ <aside
47
+ class=${classMap(drawerClasses)}
48
+ ?open=${this.open}
49
+ role="complementary"
50
+ aria-hidden=${!this.open}
51
+ @transitionend=${__privateMethod(this, _AiSidebarComponent_instances, handleDrawerTransitionEnd_fn)}>
52
+ <slot></slot>
53
+ </aside>
54
+ </div>
46
55
  `;
47
56
  }
48
57
  /**
@@ -51,6 +60,7 @@ let AiSidebarComponent = class extends LitElement {
51
60
  show() {
52
61
  if (!this.open) {
53
62
  this._closing = false;
63
+ this._containerClosing = false;
54
64
  this.open = true;
55
65
  __privateMethod(this, _AiSidebarComponent_instances, dispatchEvent_fn).call(this, "forge-ai-sidebar-open");
56
66
  }
@@ -59,8 +69,9 @@ let AiSidebarComponent = class extends LitElement {
59
69
  * Closes the sidebar.
60
70
  */
61
71
  close() {
62
- if (this.open && !this._closing) {
72
+ if (this.open && !this._closing && !this._containerClosing) {
63
73
  this._closing = true;
74
+ this._containerClosing = true;
64
75
  }
65
76
  }
66
77
  /**
@@ -75,8 +86,13 @@ let AiSidebarComponent = class extends LitElement {
75
86
  }
76
87
  };
77
88
  _AiSidebarComponent_instances = /* @__PURE__ */ new WeakSet();
78
- handleTransitionEnd_fn = function() {
79
- if (this._closing) {
89
+ handleContainerTransitionEnd_fn = function(evt) {
90
+ if (evt.target === evt.currentTarget && this._containerClosing) {
91
+ this._containerClosing = false;
92
+ }
93
+ };
94
+ handleDrawerTransitionEnd_fn = function(evt) {
95
+ if (evt.target === evt.currentTarget && this._closing) {
80
96
  this.open = false;
81
97
  this._closing = false;
82
98
  __privateMethod(this, _AiSidebarComponent_instances, dispatchEvent_fn).call(this, "forge-ai-sidebar-close");
@@ -96,6 +112,9 @@ __decorateClass([
96
112
  __decorateClass([
97
113
  state()
98
114
  ], AiSidebarComponent.prototype, "_closing", 2);
115
+ __decorateClass([
116
+ state()
117
+ ], AiSidebarComponent.prototype, "_containerClosing", 2);
99
118
  AiSidebarComponent = __decorateClass([
100
119
  customElement(AiSidebarComponentTagName)
101
120
  ], AiSidebarComponent);
@@ -1,4 +1,4 @@
1
- const styles = "/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n.forge-drawer {\n --_drawer-background: var(--forge-drawer-background, var(--forge-theme-surface, #ffffff));\n --_drawer-border-color: var(--forge-drawer-border-color, var(--forge-theme-outline, #e0e0e0));\n --_drawer-width: var(--forge-drawer-width, 256px);\n --_drawer-border-width: var(--forge-drawer-border-width, var(--forge-border-thin, 1px));\n --_drawer-transition-duration: var(--forge-drawer-transition-duration, var(--forge-animation-duration-medium1, 250ms));\n --_drawer-transition-easing: var(--forge-drawer-transition-easing, var(--forge-animation-easing-standard, cubic-bezier(0.2, 0, 0, 1)));\n --_drawer-transition-duration-close: var(--forge-drawer-transition-duration-close, var(--forge-animation-duration-short4, 200ms));\n}\n\n.forge-drawer {\n width: var(--_drawer-width);\n height: 100%;\n box-sizing: border-box;\n overflow: hidden;\n display: grid;\n grid-template-columns: 1fr;\n grid-template-rows: auto 1fr auto;\n background-color: var(--_drawer-background);\n border-color: var(--_drawer-border-color);\n transition-property: transform;\n transition-duration: var(--_drawer-transition-duration);\n transition-timing-function: var(--_drawer-transition-easing);\n border-right-width: var(--_drawer-border-width);\n border-right-style: solid;\n}\n\n.forge-drawer--closing {\n transform: translateX(-100%);\n left: 0;\n z-index: var(--forge-z-index-surface, 1);\n position: absolute;\n top: 0;\n right: 0;\n transition-duration: var(--_drawer-transition-duration-close);\n}\n\n.forge-drawer--closed {\n transform: translateX(-100%);\n left: 0;\n width: 0;\n border: none;\n}\n\n.forge-drawer--right {\n border-left-width: var(--_drawer-border-width);\n border-left-style: solid;\n border-right: none;\n}\n\n.forge-drawer--right.forge-drawer--closing {\n transform: translateX(100%);\n right: 0;\n left: auto;\n z-index: var(--forge-z-index-surface, 1);\n position: absolute;\n top: 0;\n right: 0;\n transition-duration: var(--_drawer-transition-duration-close);\n}\n\n.forge-drawer--right.forge-drawer--closed {\n transform: translateX(100%);\n right: 0;\n left: auto;\n width: 0;\n border: none;\n}\n\n.forge-drawer--mini {\n width: var(--_mini-drawer-width);\n z-index: var(--forge-z-index-surface, 1);\n transition: width var(--_mini-drawer-transition-duration) var(--_mini-drawer-transition-easing);\n}\n\n:host {\n display: block;\n width: auto;\n height: 100%;\n overflow: hidden;\n}\n\n.forge-drawer {\n --forge-drawer-width: 420px;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}";
1
+ const styles = "/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n.forge-drawer {\n --_drawer-background: var(--forge-drawer-background, var(--forge-theme-surface, #ffffff));\n --_drawer-border-color: var(--forge-drawer-border-color, var(--forge-theme-outline, #e0e0e0));\n --_drawer-width: var(--forge-drawer-width, 256px);\n --_drawer-border-width: var(--forge-drawer-border-width, var(--forge-border-thin, 1px));\n --_drawer-transition-duration: var(--forge-drawer-transition-duration, var(--forge-animation-duration-medium1, 250ms));\n --_drawer-transition-easing: var(--forge-drawer-transition-easing, var(--forge-animation-easing-standard, cubic-bezier(0.2, 0, 0, 1)));\n --_drawer-transition-duration-close: var(--forge-drawer-transition-duration-close, var(--forge-animation-duration-short4, 200ms));\n}\n\n.forge-drawer {\n width: var(--_drawer-width);\n height: 100%;\n box-sizing: border-box;\n overflow: hidden;\n display: grid;\n grid-template-columns: 1fr;\n grid-template-rows: auto 1fr auto;\n background-color: var(--_drawer-background);\n border-color: var(--_drawer-border-color);\n transition-property: transform;\n transition-duration: var(--_drawer-transition-duration);\n transition-timing-function: var(--_drawer-transition-easing);\n border-right-width: var(--_drawer-border-width);\n border-right-style: solid;\n}\n\n.forge-drawer--closing {\n transform: translateX(-100%);\n left: 0;\n z-index: var(--forge-z-index-surface, 1);\n position: absolute;\n top: 0;\n right: 0;\n transition-duration: var(--_drawer-transition-duration-close);\n}\n\n.forge-drawer--closed {\n transform: translateX(-100%);\n left: 0;\n width: 0;\n border: none;\n}\n\n.forge-drawer--right {\n border-left-width: var(--_drawer-border-width);\n border-left-style: solid;\n border-right: none;\n}\n\n.forge-drawer--right.forge-drawer--closing {\n transform: translateX(100%);\n right: 0;\n left: auto;\n z-index: var(--forge-z-index-surface, 1);\n position: absolute;\n top: 0;\n right: 0;\n transition-duration: var(--_drawer-transition-duration-close);\n}\n\n.forge-drawer--right.forge-drawer--closed {\n transform: translateX(100%);\n right: 0;\n left: auto;\n width: 0;\n border: none;\n}\n\n.forge-drawer--mini {\n width: var(--_mini-drawer-width);\n z-index: var(--forge-z-index-surface, 1);\n transition: width var(--_mini-drawer-transition-duration) var(--_mini-drawer-transition-easing);\n}\n\n:host {\n display: block;\n width: auto;\n height: 100%;\n overflow: hidden;\n}\n\n.animation-container {\n --forge-drawer-width: 420px; /* Default value, can be overridden */\n width: var(--forge-drawer-width);\n height: 100%;\n position: relative;\n transition: width 250ms cubic-bezier(0.2, 0, 0, 1);\n overflow: hidden;\n}\n.animation-container--closed {\n width: 0;\n}\n.animation-container--closing {\n width: 0;\n}\n.animation-container--open {\n width: var(--forge-drawer-width);\n}\n\n.forge-drawer {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n width: var(--forge-drawer-width);\n height: 100%;\n position: absolute;\n top: 0;\n right: 0;\n}";
2
2
  export {
3
3
  styles as default
4
4
  };
@@ -4,14 +4,14 @@ declare global {
4
4
  'forge-ai-suggestions': AiSuggestionsComponent;
5
5
  }
6
6
  interface HTMLElementEventMap {
7
- 'forge-ai-suggestions-select': CustomEvent<AiSuggestionsEventData>;
7
+ 'forge-ai-suggestions-select': CustomEvent<ForgeAiSuggestionsEventData>;
8
8
  }
9
9
  }
10
10
  export interface Suggestion {
11
11
  text: string;
12
12
  value: string;
13
13
  }
14
- export interface AiSuggestionsEventData {
14
+ export interface ForgeAiSuggestionsEventData {
15
15
  text: string;
16
16
  value: string;
17
17
  }
@@ -23,7 +23,7 @@ export declare const AiSuggestionsComponentTagName: keyof HTMLElementTagNameMap;
23
23
  * @state inline - The suggestions are displayed inline.
24
24
  * @state block - The suggestions are displayed as blocks.
25
25
  *
26
- * @event {CustomEvent<AiSuggestionsEventData>} forge-ai-suggestions-select - Fired when a suggestion is selected.
26
+ * @event {CustomEvent<ForgeAiSuggestionsEventData>} forge-ai-suggestions-select - Fired when a suggestion is selected.
27
27
  */
28
28
  export declare class AiSuggestionsComponent extends LitElement {
29
29
  #private;
@@ -60,7 +60,7 @@ setCssState_fn = function() {
60
60
  toggleState(__privateGet(this, _internals), "block", this.variant === "block");
61
61
  };
62
62
  suggestionButtons_get = function() {
63
- return this.suggestions.map(
63
+ return this.suggestions?.map(
64
64
  (suggestion) => html`<button
65
65
  class="forge-button forge-button--tonal suggestion"
66
66
  @click=${() => this._handleSuggestionClick(suggestion)}>
@@ -82,7 +82,7 @@ blockLayout_get = function() {
82
82
  };
83
83
  AiSuggestionsComponent.styles = unsafeCSS(styles);
84
84
  __decorateClass([
85
- property({ type: Array })
85
+ property({ type: Array, attribute: false })
86
86
  ], AiSuggestionsComponent.prototype, "suggestions", 2);
87
87
  __decorateClass([
88
88
  property({ type: String, attribute: "variant" })
@@ -0,0 +1,22 @@
1
+ import { LitElement, TemplateResult } from 'lit';
2
+ declare global {
3
+ interface HTMLElementTagNameMap {
4
+ 'forge-ai-thinking-indicator': AiThinkingIndicatorComponent;
5
+ }
6
+ }
7
+ export declare const AiThinkingIndicatorComponentTagName: keyof HTMLElementTagNameMap;
8
+ /**
9
+ * @tag forge-ai-thinking-indicator
10
+ *
11
+ * @summary A thinking indicator component that displays three animated dots to show that the system is processing or awaiting a response.
12
+ *
13
+ * @description
14
+ * The AI Thinking Indicator component provides a visual cue that the system is working on a response.
15
+ * It displays three dots that animate in sequence from left to right, then bounce in a wave pattern,
16
+ * creating an engaging loading animation perfect for chat interfaces.
17
+ */
18
+ export declare class AiThinkingIndicatorComponent extends LitElement {
19
+ #private;
20
+ static styles: import('lit').CSSResult;
21
+ render(): TemplateResult;
22
+ }
@@ -0,0 +1,41 @@
1
+ import { unsafeCSS, LitElement, html } from "lit";
2
+ import { customElement } from "lit/decorators.js";
3
+ import styles from "./ai-thinking-indicator.scss.mjs";
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __typeError = (msg) => {
6
+ throw TypeError(msg);
7
+ };
8
+ var __decorateClass = (decorators, target, key, kind) => {
9
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
10
+ for (var i = decorators.length - 1, decorator; i >= 0; i--)
11
+ if (decorator = decorators[i])
12
+ result = decorator(result) || result;
13
+ return result;
14
+ };
15
+ var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
16
+ var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
17
+ 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);
18
+ var _dotsTemplate;
19
+ const AiThinkingIndicatorComponentTagName = "forge-ai-thinking-indicator";
20
+ let AiThinkingIndicatorComponent = class extends LitElement {
21
+ constructor() {
22
+ super(...arguments);
23
+ __privateAdd(this, _dotsTemplate, html`
24
+ <div class="dot dot-1"></div>
25
+ <div class="dot dot-2"></div>
26
+ <div class="dot dot-3"></div>
27
+ `);
28
+ }
29
+ render() {
30
+ return html`<div class="thinking-indicator">${__privateGet(this, _dotsTemplate)}</div>`;
31
+ }
32
+ };
33
+ _dotsTemplate = /* @__PURE__ */ new WeakMap();
34
+ AiThinkingIndicatorComponent.styles = unsafeCSS(styles);
35
+ AiThinkingIndicatorComponent = __decorateClass([
36
+ customElement(AiThinkingIndicatorComponentTagName)
37
+ ], AiThinkingIndicatorComponent);
38
+ export {
39
+ AiThinkingIndicatorComponent,
40
+ AiThinkingIndicatorComponentTagName
41
+ };
@@ -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:host {\n --forge-ai-thinking-indicator-dot-color: var(--forge-theme-text-medium, rgba(0, 0, 0, 0.6));\n --forge-ai-thinking-indicator-dot-size: 6px;\n --forge-ai-thinking-indicator-gap: var(--forge-spacing-xxsmall, 4px);\n --forge-ai-thinking-indicator-animation-duration: 2s;\n display: inline-block;\n box-sizing: border-box;\n}\n\n.thinking-indicator {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--forge-ai-thinking-indicator-gap);\n height: calc(var(--forge-ai-thinking-indicator-dot-size) * 2);\n}\n\n.dot {\n width: var(--forge-ai-thinking-indicator-dot-size);\n height: var(--forge-ai-thinking-indicator-dot-size);\n background-color: var(--forge-ai-thinking-indicator-dot-color);\n border-radius: 50%;\n opacity: 0;\n transform: scale(0.8) translateY(0);\n animation: thinking-animation var(--forge-ai-thinking-indicator-animation-duration) ease-in-out infinite;\n}\n\n.dot-1 {\n animation-delay: 0s;\n}\n\n.dot-2 {\n animation-delay: 0.15s;\n}\n\n.dot-3 {\n animation-delay: 0.3s;\n}\n\n@keyframes thinking-animation {\n 0% {\n opacity: 0;\n transform: scale(0.8) translateY(0);\n }\n 10% {\n opacity: 1;\n transform: scale(1) translateY(0);\n }\n 20% {\n opacity: 1;\n transform: scale(1) translateY(0);\n }\n 30% {\n opacity: 1;\n transform: scale(1.2) translateY(-4px);\n }\n 40% {\n opacity: 1;\n transform: scale(1) translateY(0);\n }\n 50% {\n opacity: 1;\n transform: scale(1.1) translateY(-2px);\n }\n 60% {\n opacity: 1;\n transform: scale(1) translateY(0);\n }\n 70% {\n opacity: 1;\n transform: scale(1) translateY(0);\n }\n 80% {\n opacity: 0.7;\n transform: scale(0.9) translateY(0);\n }\n 100% {\n opacity: 0;\n transform: scale(0.8) translateY(0);\n }\n}\n/* Respect user's reduced motion preference */\n@media (prefers-reduced-motion: reduce) {\n .dot {\n animation: thinking-animation-reduced var(--forge-ai-thinking-indicator-animation-duration) ease-in-out infinite;\n }\n @keyframes thinking-animation-reduced {\n 0%, 100% {\n opacity: 0.3;\n }\n 50% {\n opacity: 1;\n }\n }\n}";
2
+ export {
3
+ styles as default
4
+ };
@@ -0,0 +1 @@
1
+ export * from './ai-thinking-indicator';
@@ -0,0 +1,5 @@
1
+ import { AiThinkingIndicatorComponent, AiThinkingIndicatorComponentTagName } from "./ai-thinking-indicator.mjs";
2
+ export {
3
+ AiThinkingIndicatorComponent,
4
+ AiThinkingIndicatorComponentTagName
5
+ };
@@ -4,7 +4,7 @@ declare global {
4
4
  'forge-ai-threads': AiThreadsComponent;
5
5
  }
6
6
  interface HTMLElementEventMap {
7
- 'forge-ai-threads-select': CustomEvent<AiThreadsSelectEventData>;
7
+ 'forge-ai-threads-select': CustomEvent<ForgeAiThreadsSelectEventData>;
8
8
  'forge-ai-threads-new-chat': CustomEvent;
9
9
  'forge-ai-threads-clear-history': CustomEvent;
10
10
  }
@@ -15,7 +15,7 @@ export interface Thread {
15
15
  time: string;
16
16
  date: Date;
17
17
  }
18
- export interface AiThreadsSelectEventData {
18
+ export interface ForgeAiThreadsSelectEventData {
19
19
  id: string;
20
20
  title: string;
21
21
  }
@@ -23,7 +23,7 @@ export declare const AiThreadsComponentTagName: keyof HTMLElementTagNameMap;
23
23
  /**
24
24
  * @tag forge-ai-threads
25
25
  *
26
- * @event {CustomEvent<AiThreadsSelectEventData>} forge-ai-threads-select - Fired when a thread is selected.
26
+ * @event {CustomEvent<ForgeAiThreadsSelectEventData>} forge-ai-threads-select - Fired when a thread is selected.
27
27
  * @event {CustomEvent} forge-ai-threads-new-chat - Fired when the new chat button is clicked.
28
28
  * @event {CustomEvent} forge-ai-threads-clear-history - Fired when the clear history button is clicked.
29
29
  */
@@ -44,7 +44,7 @@ export declare const AiVoiceInputComponentTagName: keyof HTMLElementTagNameMap;
44
44
  /**
45
45
  * Event detail interface for the speech recognition result event.
46
46
  */
47
- export interface AiVoiceInputResultEvent {
47
+ export interface ForgeAiVoiceInputResultEvent {
48
48
  /** The recognized speech text */
49
49
  transcript: string;
50
50
  /** Confidence score of the recognition result (0-1) */
@@ -1,4 +1,4 @@
1
- const styles = ":host {\n display: contents;\n}\n\n.ai-overlay {\n position: relative;\n box-sizing: border-box;\n padding: 0;\n margin: 0;\n border: none;\n background: inherit;\n color: inherit;\n border-radius: inherit;\n overflow: visible;\n}\n.ai-overlay[popover] {\n inset: unset;\n}";
1
+ const styles = ":host {\n display: contents;\n}\n\n.ai-overlay {\n position: fixed;\n box-sizing: border-box;\n padding: 0;\n margin: 0;\n border: none;\n background: inherit;\n color: inherit;\n border-radius: inherit;\n overflow: visible;\n}\n.ai-overlay[popover] {\n inset: unset;\n}";
2
2
  export {
3
3
  styles as default
4
4
  };
@@ -17,7 +17,7 @@ let ForgeAiPopoverComponent = class extends LitElement {
17
17
  super(...arguments);
18
18
  this.anchor = null;
19
19
  this.placement = "bottom-start";
20
- this.flip = true;
20
+ this.flip = false;
21
21
  this.shift = false;
22
22
  this.open = false;
23
23
  this._onOverlayToggle = (event) => {
package/dist/index.d.ts CHANGED
@@ -22,6 +22,7 @@ export * from './ai-response-message';
22
22
  export * from './ai-sidebar';
23
23
  export * from './ai-sidebar-chat';
24
24
  export * from './ai-suggestions';
25
+ export * from './ai-thinking-indicator';
25
26
  export * from './ai-threads';
26
27
  export * from './ai-user-message';
27
28
  export * from './ai-voice-input';
package/dist/index.mjs CHANGED
@@ -17,7 +17,7 @@ import { AiDialogComponent, AiDialogComponentTagName } from "./ai-dialog/ai-dial
17
17
  import { AiEmbeddedChatComponent, AiEmbeddedChatComponentTagName } from "./ai-embedded-chat/ai-embedded-chat.mjs";
18
18
  import { AiEmptyStateComponent, AiEmptyStateComponentTagName } from "./ai-empty-state/ai-empty-state.mjs";
19
19
  import { AiFabComponent, AiFabComponentTagName } from "./ai-fab/ai-fab.mjs";
20
- import { ForgeAiFilePickerComponent } from "./ai-file-picker/ai-file-picker.mjs";
20
+ import { AiFilePickerComponent } from "./ai-file-picker/ai-file-picker.mjs";
21
21
  import { AiFloatingChatComponent, AiFloatingChatComponentTagName } from "./ai-floating-chat/ai-floating-chat.mjs";
22
22
  import { AiGradientContainerComponent, AiGradientContainerComponentTagName } from "./ai-gradient-container/ai-gradient-container.mjs";
23
23
  import { AiIconComponent, AiIconComponentTagName } from "./ai-icon/ai-icon.mjs";
@@ -29,6 +29,7 @@ import { AiReasoningHeaderComponent, AiReasoningHeaderComponentTagName } from ".
29
29
  import { AiResponseMessageComponent, AiResponseMessageComponentTagName } from "./ai-response-message/ai-response-message.mjs";
30
30
  import { AiSidebarComponent, AiSidebarComponentTagName } from "./ai-sidebar/ai-sidebar.mjs";
31
31
  import { AiSidebarChatComponent, AiSidebarChatComponentTagName } from "./ai-sidebar-chat/ai-sidebar-chat.mjs";
32
+ import { AiThinkingIndicatorComponent, AiThinkingIndicatorComponentTagName } from "./ai-thinking-indicator/ai-thinking-indicator.mjs";
32
33
  import { AiThreadsComponent, AiThreadsComponentTagName } from "./ai-threads/ai-threads.mjs";
33
34
  import { AiUserMessageComponent, AiUserMessageComponentTagName } from "./ai-user-message/ai-user-message.mjs";
34
35
  import { AiVoiceInputComponent, AiVoiceInputComponentTagName } from "./ai-voice-input/ai-voice-input.mjs";
@@ -53,6 +54,7 @@ export {
53
54
  AiEmptyStateComponentTagName,
54
55
  AiFabComponent,
55
56
  AiFabComponentTagName,
57
+ AiFilePickerComponent,
56
58
  AiFloatingChatComponent,
57
59
  AiFloatingChatComponentTagName,
58
60
  AiGradientContainerComponent,
@@ -74,6 +76,8 @@ export {
74
76
  AiSidebarComponentTagName,
75
77
  AiSuggestionsComponent,
76
78
  AiSuggestionsComponentTagName,
79
+ AiThinkingIndicatorComponent,
80
+ AiThinkingIndicatorComponentTagName,
77
81
  AiThreadsComponent,
78
82
  AiThreadsComponentTagName,
79
83
  AiUserMessageComponent,
@@ -84,7 +88,6 @@ export {
84
88
  ForgeAiDropdownMenuItemComponent,
85
89
  ForgeAiDropdownMenuItemGroupComponent,
86
90
  ForgeAiDropdownMenuSeparatorComponent,
87
- ForgeAiFilePickerComponent,
88
91
  ReasoningContentComponent,
89
92
  ReasoningContentComponentTagName,
90
93
  ThoughtBaseComponent,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tylertech/forge-ai",
3
- "version": "0.2.0",
3
+ "version": "0.3.1",
4
4
  "description": "A library of Tyler Forge™ AI chat interface web components.",
5
5
  "license": "Apache-2.0",
6
6
  "author": "Tyler Technologies, Inc.",