@tylertech/forge-ai-react 0.7.1 → 0.8.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.
@@ -51,5 +51,6 @@ export interface ForgeAiChatInterfaceProps extends Pick<
51
51
  * - **suggestions** - Slot for AI suggestions component
52
52
  * - **attachments** - Slot for file attachments component
53
53
  * - **prompt** - Slot for AI prompt component
54
+ * - **confirmation** - Slot for confirmation prompt overlay
54
55
  */
55
56
  export const ForgeAiChatInterface: React.ForwardRefExoticComponent<ForgeAiChatInterfaceProps>;
@@ -150,7 +150,7 @@ export interface ForgeAiChatbotProps extends Pick<
150
150
  * - **abort(): _void_** - Aborts the current streaming response.
151
151
  * - **scrollToBottom({ behavior }: _{ behavior?: ScrollBehavior }_): _Promise<void>_** - Scrolls the chat interface to the bottom.
152
152
  * - **getThreadState(): __** - Gets the complete serializable thread state including threadId and messages.
153
- * - **setThreadState(state: _ThreadState_): _void_** - Restores thread state from a serialized ThreadState object.
153
+ * - **setThreadState(state: _ThreadState_): _Promise<void>_** - Restores thread state from a serialized ThreadState object.
154
154
  *
155
155
  * ### **Slots:**
156
156
  * - **header** - Slot for custom header content
@@ -116,6 +116,8 @@ export interface ForgeAiPromptProps extends Pick<
116
116
  * ### **Methods:**
117
117
  * - **addToHistory(message: _string_): _void_** - Adds a message to the input history for up/down arrow navigation.
118
118
  * Use this when sending messages externally (e.g., from suggestions).
119
+ * - **setHistory(messages: _string[]_): _void_** - Replaces the entire message history with the provided messages.
120
+ * Use this when restoring thread state from persistence.
119
121
  * - **closeSlashMenu(): _void_** - Closes the slash command menu
120
122
  * - **focus(): _void_** - Focuses the textarea element
121
123
  *
@@ -18,6 +18,12 @@ export interface ForgeAiUserMessageProps extends Pick<
18
18
  | "onFocus"
19
19
  | "onBlur"
20
20
  > {
21
+ /** undefined */
22
+ streaming?: boolean;
23
+
24
+ /** undefined */
25
+ messageId?: ForgeAiUserMessageElement["messageId"];
26
+
21
27
  /** A space-separated list of the classes of the element. Classes allows CSS and JavaScript to select and access specific elements via the class selectors or functions like the method `Document.getElementsByClassName()`. */
22
28
  className?: string;
23
29
 
@@ -38,11 +44,31 @@ export interface ForgeAiUserMessageProps extends Pick<
38
44
 
39
45
  /** Allows developers to make HTML elements focusable, allow or prevent them from being sequentially focusable (usually with the `Tab` key, hence the name) and determine their relative ordering for sequential focus navigation. */
40
46
  tabIndex?: number;
47
+
48
+ /** Fired when user clicks copy button */
49
+ onForgeAiUserMessageCopy?: (
50
+ event: CustomEvent<CustomEvent<ForgeAiUserMessageCopyEventData>>,
51
+ ) => void;
52
+
53
+ /** Fired when user clicks resend button */
54
+ onForgeAiUserMessageResend?: (
55
+ event: CustomEvent<CustomEvent<ForgeAiUserMessageResendEventData>>,
56
+ ) => void;
57
+
58
+ /** Fired when user saves edited message */
59
+ onForgeAiUserMessageEdit?: (
60
+ event: CustomEvent<CustomEvent<ForgeAiUserMessageEditEventData>>,
61
+ ) => void;
41
62
  }
42
63
 
43
64
  /**
44
65
  *
45
66
  * ---
46
67
  *
68
+ *
69
+ * ### **Events:**
70
+ * - **forge-ai-user-message-copy** - Fired when user clicks copy button
71
+ * - **forge-ai-user-message-resend** - Fired when user clicks resend button
72
+ * - **forge-ai-user-message-edit** - Fired when user saves edited message
47
73
  */
48
74
  export const ForgeAiUserMessage: React.ForwardRefExoticComponent<ForgeAiUserMessageProps>;
@@ -1,16 +1,47 @@
1
- import React, { forwardRef } from "react";
1
+ import React, { forwardRef, useRef, useEffect } from "react";
2
2
  import "@tylertech/forge-ai/ai-user-message";
3
+ import { useEventListener } from "./react-utils.js";
3
4
 
4
5
  export const ForgeAiUserMessage = forwardRef((props, forwardedRef) => {
6
+ const ref = useRef(null);
7
+ const { streaming, messageId, ...filteredProps } = props;
8
+
9
+ /** Event listeners - run once */
10
+ useEventListener(
11
+ ref,
12
+ "forge-ai-user-message-copy",
13
+ props.onForgeAiUserMessageCopy,
14
+ );
15
+ useEventListener(
16
+ ref,
17
+ "forge-ai-user-message-resend",
18
+ props.onForgeAiUserMessageResend,
19
+ );
20
+ useEventListener(
21
+ ref,
22
+ "forge-ai-user-message-edit",
23
+ props.onForgeAiUserMessageEdit,
24
+ );
25
+
5
26
  return React.createElement(
6
27
  "forge-ai-user-message",
7
28
  {
8
- ...props,
29
+ ref: (node) => {
30
+ ref.current = node;
31
+ if (typeof forwardedRef === "function") {
32
+ forwardedRef(node);
33
+ } else if (forwardedRef) {
34
+ forwardedRef.current = node;
35
+ }
36
+ },
37
+ ...filteredProps,
38
+ "message-id": props.messageId || props["message-id"],
9
39
  class: props.className,
10
40
  exportparts: props.exportparts,
11
41
  for: props.htmlFor,
12
42
  part: props.part,
13
43
  tabindex: props.tabIndex,
44
+ streaming: props.streaming ? true : undefined,
14
45
  style: { ...props.style },
15
46
  },
16
47
  props.children,
package/dist/index.d.ts CHANGED
@@ -1,15 +1,15 @@
1
1
  export * from "./ForgeAiActionsToolbar.js";
2
2
  export * from "./ForgeAiAgentInfo.js";
3
- export * from "./ForgeAiArtifact.js";
4
3
  export * from "./ForgeAiAssistantResponse.js";
5
- export * from "./ForgeAiAttachment.js";
4
+ export * from "./ForgeAiArtifact.js";
6
5
  export * from "./ForgeAiButton.js";
7
- export * from "./ForgeAiChainOfThought.js";
6
+ export * from "./ForgeAiAttachment.js";
8
7
  export * from "./ForgeAiChatHeader.js";
8
+ export * from "./ForgeAiChainOfThought.js";
9
9
  export * from "./ForgeAiChatInterface.js";
10
- export * from "./ForgeAiConfirmationPrompt.js";
11
10
  export * from "./ForgeAiChatbotToolCall.js";
12
11
  export * from "./ForgeAiChatbot.js";
12
+ export * from "./ForgeAiConfirmationPrompt.js";
13
13
  export * from "./ForgeAiDialog.js";
14
14
  export * from "./ForgeAiDropdownMenuItemGroup.js";
15
15
  export * from "./ForgeAiDropdownMenuItem.js";
@@ -17,8 +17,8 @@ export * from "./ForgeAiDropdownMenuSeparator.js";
17
17
  export * from "./ForgeAiDropdownMenu.js";
18
18
  export * from "./ForgeAiEmbeddedChat.js";
19
19
  export * from "./ForgeAiEmptyState.js";
20
- export * from "./ForgeAiEventStreamViewer.js";
21
20
  export * from "./ForgeAiErrorMessage.js";
21
+ export * from "./ForgeAiEventStreamViewer.js";
22
22
  export * from "./ForgeAiFab.js";
23
23
  export * from "./ForgeAiFilePicker.js";
24
24
  export * from "./ForgeAiFloatingChat.js";
@@ -27,27 +27,27 @@ export * from "./ForgeAiIcon.js";
27
27
  export * from "./ForgeAiIconButton.js";
28
28
  export * from "./ForgeAiMessageThread.js";
29
29
  export * from "./ForgeAiModal.js";
30
- export * from "./ForgeAiReasoning.js";
31
30
  export * from "./ForgeAiPrompt.js";
31
+ export * from "./ForgeAiReasoning.js";
32
32
  export * from "./ForgeAiReasoningHeader.js";
33
33
  export * from "./ForgeAiResponseMessage.js";
34
34
  export * from "./ForgeAiSidebar.js";
35
35
  export * from "./ForgeAiSidebarChat.js";
36
- export * from "./ForgeAiSuggestions.js";
37
36
  export * from "./ForgeAiSpinner.js";
38
37
  export * from "./ForgeAiSlashCommandMenu.js";
39
38
  export * from "./ForgeAiThinkingIndicator.js";
40
- export * from "./ForgeAiUserMessage.js";
41
39
  export * from "./ForgeAiThreads.js";
40
+ export * from "./ForgeAiSuggestions.js";
41
+ export * from "./ForgeAiUserMessage.js";
42
42
  export * from "./ForgeAiVoiceInput.js";
43
43
  export * from "./ForgeAiThoughtBase.js";
44
44
  export * from "./ForgeAiThoughtDetail.js";
45
45
  export * from "./ForgeAiThoughtImage.js";
46
- export * from "./ForgeAiReasoningContent.js";
47
46
  export * from "./ForgeAiThoughtSearchResult.js";
48
47
  export * from "./ForgePromptButton.js";
48
+ export * from "./ForgeAiReasoningContent.js";
49
49
  export * from "./ForgeAiOverlay.js";
50
- export * from "./ForgeAiPopover.js";
51
50
  export * from "./ForgeAiToolDataTable.js";
51
+ export * from "./ForgeAiPopover.js";
52
52
  export * from "./ForgeAiTooltip.js";
53
53
  export * from "./ForgeAiPaginator.js";
package/dist/index.js CHANGED
@@ -1,15 +1,15 @@
1
1
  export * from "./ForgeAiActionsToolbar.js";
2
2
  export * from "./ForgeAiAgentInfo.js";
3
- export * from "./ForgeAiArtifact.js";
4
3
  export * from "./ForgeAiAssistantResponse.js";
5
- export * from "./ForgeAiAttachment.js";
4
+ export * from "./ForgeAiArtifact.js";
6
5
  export * from "./ForgeAiButton.js";
7
- export * from "./ForgeAiChainOfThought.js";
6
+ export * from "./ForgeAiAttachment.js";
8
7
  export * from "./ForgeAiChatHeader.js";
8
+ export * from "./ForgeAiChainOfThought.js";
9
9
  export * from "./ForgeAiChatInterface.js";
10
- export * from "./ForgeAiConfirmationPrompt.js";
11
10
  export * from "./ForgeAiChatbotToolCall.js";
12
11
  export * from "./ForgeAiChatbot.js";
12
+ export * from "./ForgeAiConfirmationPrompt.js";
13
13
  export * from "./ForgeAiDialog.js";
14
14
  export * from "./ForgeAiDropdownMenuItemGroup.js";
15
15
  export * from "./ForgeAiDropdownMenuItem.js";
@@ -17,8 +17,8 @@ export * from "./ForgeAiDropdownMenuSeparator.js";
17
17
  export * from "./ForgeAiDropdownMenu.js";
18
18
  export * from "./ForgeAiEmbeddedChat.js";
19
19
  export * from "./ForgeAiEmptyState.js";
20
- export * from "./ForgeAiEventStreamViewer.js";
21
20
  export * from "./ForgeAiErrorMessage.js";
21
+ export * from "./ForgeAiEventStreamViewer.js";
22
22
  export * from "./ForgeAiFab.js";
23
23
  export * from "./ForgeAiFilePicker.js";
24
24
  export * from "./ForgeAiFloatingChat.js";
@@ -27,27 +27,27 @@ export * from "./ForgeAiIcon.js";
27
27
  export * from "./ForgeAiIconButton.js";
28
28
  export * from "./ForgeAiMessageThread.js";
29
29
  export * from "./ForgeAiModal.js";
30
- export * from "./ForgeAiReasoning.js";
31
30
  export * from "./ForgeAiPrompt.js";
31
+ export * from "./ForgeAiReasoning.js";
32
32
  export * from "./ForgeAiReasoningHeader.js";
33
33
  export * from "./ForgeAiResponseMessage.js";
34
34
  export * from "./ForgeAiSidebar.js";
35
35
  export * from "./ForgeAiSidebarChat.js";
36
- export * from "./ForgeAiSuggestions.js";
37
36
  export * from "./ForgeAiSpinner.js";
38
37
  export * from "./ForgeAiSlashCommandMenu.js";
39
38
  export * from "./ForgeAiThinkingIndicator.js";
40
- export * from "./ForgeAiUserMessage.js";
41
39
  export * from "./ForgeAiThreads.js";
40
+ export * from "./ForgeAiSuggestions.js";
41
+ export * from "./ForgeAiUserMessage.js";
42
42
  export * from "./ForgeAiVoiceInput.js";
43
43
  export * from "./ForgeAiThoughtBase.js";
44
44
  export * from "./ForgeAiThoughtDetail.js";
45
45
  export * from "./ForgeAiThoughtImage.js";
46
- export * from "./ForgeAiReasoningContent.js";
47
46
  export * from "./ForgeAiThoughtSearchResult.js";
48
47
  export * from "./ForgePromptButton.js";
48
+ export * from "./ForgeAiReasoningContent.js";
49
49
  export * from "./ForgeAiOverlay.js";
50
- export * from "./ForgeAiPopover.js";
51
50
  export * from "./ForgeAiToolDataTable.js";
51
+ export * from "./ForgeAiPopover.js";
52
52
  export * from "./ForgeAiTooltip.js";
53
53
  export * from "./ForgeAiPaginator.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tylertech/forge-ai-react",
3
- "version": "0.7.1",
3
+ "version": "0.8.0",
4
4
  "description": "A React adapter for Tyler Forge™ AI Web Components.",
5
5
  "repository": "tyler-technologies-oss/forge-ai",
6
6
  "author": "Tyler Technologies, Inc.",
@@ -16,7 +16,7 @@
16
16
  },
17
17
  "peerDependencies": {
18
18
  "react": ">=17.0.0",
19
- "@tylertech/forge-ai": "^0.7.2"
19
+ "@tylertech/forge-ai": "^0.8.0"
20
20
  },
21
21
  "devDependencies": {
22
22
  "@repo/prettier-config": "",
@@ -44,7 +44,7 @@
44
44
  "typescript": "~5.8.3",
45
45
  "vite": "7.3.0",
46
46
  "vite-tsconfig-paths": "6.0.3",
47
- "@tylertech/forge-ai": "^0.7.2"
47
+ "@tylertech/forge-ai": "^0.8.0"
48
48
  },
49
49
  "scripts": {
50
50
  "predev": "pnpm run build",