@assistant-ui/react 0.0.11 → 0.0.13
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.
- package/dist/index.d.mts +18 -8
- package/dist/index.d.ts +18 -8
- package/dist/index.js +117 -104
- package/dist/index.mjs +89 -74
- package/package.json +7 -3
package/dist/index.d.mts
CHANGED
|
@@ -55,8 +55,18 @@ declare const ThreadScrollToBottom: react.ForwardRefExoticComponent<Pick<Omit<re
|
|
|
55
55
|
asChild?: boolean;
|
|
56
56
|
}, "key" | "asChild" | keyof react.ButtonHTMLAttributes<HTMLButtonElement>> & react.RefAttributes<HTMLButtonElement>>;
|
|
57
57
|
|
|
58
|
+
declare const ThreadSuggestion: react.ForwardRefExoticComponent<Pick<Omit<react.DetailedHTMLProps<react.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "ref"> & {
|
|
59
|
+
ref?: ((instance: HTMLButtonElement | null) => void) | react.RefObject<HTMLButtonElement> | null | undefined;
|
|
60
|
+
} & {
|
|
61
|
+
asChild?: boolean;
|
|
62
|
+
}, "key" | "asChild" | keyof react.ButtonHTMLAttributes<HTMLButtonElement>> & {
|
|
63
|
+
prompt: string;
|
|
64
|
+
method: "replace";
|
|
65
|
+
autoSend?: boolean;
|
|
66
|
+
} & react.RefAttributes<HTMLButtonElement>>;
|
|
67
|
+
|
|
58
68
|
declare namespace index$4 {
|
|
59
|
-
export { ThreadEmpty as Empty, ThreadIf as If, ThreadMessages as Messages, ThreadRoot as Root, ThreadScrollToBottom as ScrollToBottom, ThreadViewport as Viewport };
|
|
69
|
+
export { ThreadEmpty as Empty, ThreadIf as If, ThreadMessages as Messages, ThreadRoot as Root, ThreadScrollToBottom as ScrollToBottom, ThreadSuggestion as Suggestion, ThreadViewport as Viewport };
|
|
60
70
|
}
|
|
61
71
|
|
|
62
72
|
declare const ComposerRoot: react.ForwardRefExoticComponent<Pick<Omit<react.DetailedHTMLProps<react.FormHTMLAttributes<HTMLFormElement>, HTMLFormElement>, "ref"> & {
|
|
@@ -256,24 +266,24 @@ declare namespace index {
|
|
|
256
266
|
export { ActionBarCopy as Copy, ActionBarEdit as Edit, ActionBarReload as Reload, ActionBarRoot as Root };
|
|
257
267
|
}
|
|
258
268
|
|
|
259
|
-
type VercelAIAssistantProviderProps
|
|
269
|
+
type VercelAIAssistantProviderProps = PropsWithChildren<{
|
|
260
270
|
chat: UseChatHelpers;
|
|
261
271
|
} | {
|
|
262
272
|
assistant: UseAssistantHelpers;
|
|
263
273
|
}>;
|
|
264
|
-
declare const VercelAIAssistantProvider: FC<VercelAIAssistantProviderProps
|
|
274
|
+
declare const VercelAIAssistantProvider: FC<VercelAIAssistantProviderProps>;
|
|
265
275
|
|
|
266
|
-
type
|
|
276
|
+
type VercelRSCMessage = {
|
|
267
277
|
id: string;
|
|
268
278
|
role: "user" | "assistant";
|
|
269
279
|
display: ReactNode;
|
|
270
280
|
createdAt?: Date;
|
|
271
281
|
};
|
|
272
|
-
type
|
|
273
|
-
messages:
|
|
282
|
+
type VercelRSCAssistantProviderProps = PropsWithChildren<{
|
|
283
|
+
messages: VercelRSCMessage[];
|
|
274
284
|
append: (message: CreateThreadMessage) => Promise<void>;
|
|
275
285
|
}>;
|
|
276
|
-
declare const VercelRSCAssistantProvider: FC<
|
|
286
|
+
declare const VercelRSCAssistantProvider: FC<VercelRSCAssistantProviderProps>;
|
|
277
287
|
|
|
278
288
|
type MessageState = {
|
|
279
289
|
message: ThreadMessage;
|
|
@@ -303,4 +313,4 @@ declare const useGoToNextBranch: () => (() => void) | null;
|
|
|
303
313
|
|
|
304
314
|
declare const useGoToPreviousBranch: () => (() => void) | null;
|
|
305
315
|
|
|
306
|
-
export { index as ActionBarPrimitive, index$1 as BranchPickerPrimitive, index$3 as ComposerPrimitive, index$2 as MessagePrimitive, index$4 as ThreadPrimitive, VercelAIAssistantProvider, VercelRSCAssistantProvider
|
|
316
|
+
export { index as ActionBarPrimitive, index$1 as BranchPickerPrimitive, index$3 as ComposerPrimitive, type CreateThreadMessage, type CreateThreadUserMessageContent, index$2 as MessagePrimitive, type VercelRSCMessage as RSCMessage, type ThreadMessageImagePart, type ThreadMessageTextPart, index$4 as ThreadPrimitive, VercelAIAssistantProvider, type VercelAIAssistantProviderProps, VercelRSCAssistantProvider, type VercelRSCAssistantProviderProps, useMessageContext as unstable_useMessageContext, useBeginMessageEdit, useCopyMessage, useGoToNextBranch, useGoToPreviousBranch, useReloadMessage };
|
package/dist/index.d.ts
CHANGED
|
@@ -55,8 +55,18 @@ declare const ThreadScrollToBottom: react.ForwardRefExoticComponent<Pick<Omit<re
|
|
|
55
55
|
asChild?: boolean;
|
|
56
56
|
}, "key" | "asChild" | keyof react.ButtonHTMLAttributes<HTMLButtonElement>> & react.RefAttributes<HTMLButtonElement>>;
|
|
57
57
|
|
|
58
|
+
declare const ThreadSuggestion: react.ForwardRefExoticComponent<Pick<Omit<react.DetailedHTMLProps<react.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "ref"> & {
|
|
59
|
+
ref?: ((instance: HTMLButtonElement | null) => void) | react.RefObject<HTMLButtonElement> | null | undefined;
|
|
60
|
+
} & {
|
|
61
|
+
asChild?: boolean;
|
|
62
|
+
}, "key" | "asChild" | keyof react.ButtonHTMLAttributes<HTMLButtonElement>> & {
|
|
63
|
+
prompt: string;
|
|
64
|
+
method: "replace";
|
|
65
|
+
autoSend?: boolean;
|
|
66
|
+
} & react.RefAttributes<HTMLButtonElement>>;
|
|
67
|
+
|
|
58
68
|
declare namespace index$4 {
|
|
59
|
-
export { ThreadEmpty as Empty, ThreadIf as If, ThreadMessages as Messages, ThreadRoot as Root, ThreadScrollToBottom as ScrollToBottom, ThreadViewport as Viewport };
|
|
69
|
+
export { ThreadEmpty as Empty, ThreadIf as If, ThreadMessages as Messages, ThreadRoot as Root, ThreadScrollToBottom as ScrollToBottom, ThreadSuggestion as Suggestion, ThreadViewport as Viewport };
|
|
60
70
|
}
|
|
61
71
|
|
|
62
72
|
declare const ComposerRoot: react.ForwardRefExoticComponent<Pick<Omit<react.DetailedHTMLProps<react.FormHTMLAttributes<HTMLFormElement>, HTMLFormElement>, "ref"> & {
|
|
@@ -256,24 +266,24 @@ declare namespace index {
|
|
|
256
266
|
export { ActionBarCopy as Copy, ActionBarEdit as Edit, ActionBarReload as Reload, ActionBarRoot as Root };
|
|
257
267
|
}
|
|
258
268
|
|
|
259
|
-
type VercelAIAssistantProviderProps
|
|
269
|
+
type VercelAIAssistantProviderProps = PropsWithChildren<{
|
|
260
270
|
chat: UseChatHelpers;
|
|
261
271
|
} | {
|
|
262
272
|
assistant: UseAssistantHelpers;
|
|
263
273
|
}>;
|
|
264
|
-
declare const VercelAIAssistantProvider: FC<VercelAIAssistantProviderProps
|
|
274
|
+
declare const VercelAIAssistantProvider: FC<VercelAIAssistantProviderProps>;
|
|
265
275
|
|
|
266
|
-
type
|
|
276
|
+
type VercelRSCMessage = {
|
|
267
277
|
id: string;
|
|
268
278
|
role: "user" | "assistant";
|
|
269
279
|
display: ReactNode;
|
|
270
280
|
createdAt?: Date;
|
|
271
281
|
};
|
|
272
|
-
type
|
|
273
|
-
messages:
|
|
282
|
+
type VercelRSCAssistantProviderProps = PropsWithChildren<{
|
|
283
|
+
messages: VercelRSCMessage[];
|
|
274
284
|
append: (message: CreateThreadMessage) => Promise<void>;
|
|
275
285
|
}>;
|
|
276
|
-
declare const VercelRSCAssistantProvider: FC<
|
|
286
|
+
declare const VercelRSCAssistantProvider: FC<VercelRSCAssistantProviderProps>;
|
|
277
287
|
|
|
278
288
|
type MessageState = {
|
|
279
289
|
message: ThreadMessage;
|
|
@@ -303,4 +313,4 @@ declare const useGoToNextBranch: () => (() => void) | null;
|
|
|
303
313
|
|
|
304
314
|
declare const useGoToPreviousBranch: () => (() => void) | null;
|
|
305
315
|
|
|
306
|
-
export { index as ActionBarPrimitive, index$1 as BranchPickerPrimitive, index$3 as ComposerPrimitive, index$2 as MessagePrimitive, index$4 as ThreadPrimitive, VercelAIAssistantProvider, VercelRSCAssistantProvider
|
|
316
|
+
export { index as ActionBarPrimitive, index$1 as BranchPickerPrimitive, index$3 as ComposerPrimitive, type CreateThreadMessage, type CreateThreadUserMessageContent, index$2 as MessagePrimitive, type VercelRSCMessage as RSCMessage, type ThreadMessageImagePart, type ThreadMessageTextPart, index$4 as ThreadPrimitive, VercelAIAssistantProvider, type VercelAIAssistantProviderProps, VercelRSCAssistantProvider, type VercelRSCAssistantProviderProps, useMessageContext as unstable_useMessageContext, useBeginMessageEdit, useCopyMessage, useGoToNextBranch, useGoToPreviousBranch, useReloadMessage };
|
package/dist/index.js
CHANGED
|
@@ -36,7 +36,7 @@ __export(src_exports, {
|
|
|
36
36
|
MessagePrimitive: () => message_exports,
|
|
37
37
|
ThreadPrimitive: () => thread_exports,
|
|
38
38
|
VercelAIAssistantProvider: () => VercelAIAssistantProvider,
|
|
39
|
-
|
|
39
|
+
VercelRSCAssistantProvider: () => VercelRSCAssistantProvider,
|
|
40
40
|
unstable_useMessageContext: () => useMessageContext,
|
|
41
41
|
useBeginMessageEdit: () => useBeginMessageEdit,
|
|
42
42
|
useCopyMessage: () => useCopyMessage,
|
|
@@ -54,6 +54,7 @@ __export(thread_exports, {
|
|
|
54
54
|
Messages: () => ThreadMessages,
|
|
55
55
|
Root: () => ThreadRoot,
|
|
56
56
|
ScrollToBottom: () => ThreadScrollToBottom,
|
|
57
|
+
Suggestion: () => ThreadSuggestion,
|
|
57
58
|
Viewport: () => ThreadViewport
|
|
58
59
|
});
|
|
59
60
|
|
|
@@ -528,6 +529,33 @@ var ThreadScrollToBottom = (0, import_react10.forwardRef)(({ onClick, ...rest },
|
|
|
528
529
|
);
|
|
529
530
|
});
|
|
530
531
|
|
|
532
|
+
// src/primitives/thread/ThreadSuggestion.tsx
|
|
533
|
+
var import_primitive4 = require("@radix-ui/primitive");
|
|
534
|
+
var import_react_primitive5 = require("@radix-ui/react-primitive");
|
|
535
|
+
var import_react11 = require("react");
|
|
536
|
+
var import_jsx_runtime9 = require("react/jsx-runtime");
|
|
537
|
+
var ThreadSuggestion = (0, import_react11.forwardRef)(({ onClick, prompt, method, autoSend: send, ...rest }, ref) => {
|
|
538
|
+
const { useThread, useComposer } = useAssistantContext();
|
|
539
|
+
const isDisabled = useThread((t) => t.isRunning);
|
|
540
|
+
const handleApplySuggestion = () => {
|
|
541
|
+
const thread = useThread.getState();
|
|
542
|
+
const composer = useComposer.getState();
|
|
543
|
+
composer.setValue(prompt);
|
|
544
|
+
if (send && !thread.isRunning) {
|
|
545
|
+
composer.send();
|
|
546
|
+
}
|
|
547
|
+
};
|
|
548
|
+
return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
549
|
+
import_react_primitive5.Primitive.button,
|
|
550
|
+
{
|
|
551
|
+
...rest,
|
|
552
|
+
disabled: isDisabled,
|
|
553
|
+
ref,
|
|
554
|
+
onClick: (0, import_primitive4.composeEventHandlers)(onClick, handleApplySuggestion)
|
|
555
|
+
}
|
|
556
|
+
);
|
|
557
|
+
});
|
|
558
|
+
|
|
531
559
|
// src/primitives/composer/index.ts
|
|
532
560
|
var composer_exports = {};
|
|
533
561
|
__export(composer_exports, {
|
|
@@ -539,16 +567,16 @@ __export(composer_exports, {
|
|
|
539
567
|
});
|
|
540
568
|
|
|
541
569
|
// src/primitives/composer/ComposerRoot.tsx
|
|
542
|
-
var
|
|
570
|
+
var import_primitive5 = require("@radix-ui/primitive");
|
|
543
571
|
var import_react_compose_refs2 = require("@radix-ui/react-compose-refs");
|
|
544
|
-
var
|
|
545
|
-
var
|
|
546
|
-
var
|
|
547
|
-
var ComposerRoot = (0,
|
|
572
|
+
var import_react_primitive6 = require("@radix-ui/react-primitive");
|
|
573
|
+
var import_react12 = require("react");
|
|
574
|
+
var import_jsx_runtime10 = require("react/jsx-runtime");
|
|
575
|
+
var ComposerRoot = (0, import_react12.forwardRef)(
|
|
548
576
|
({ onSubmit, ...rest }, forwardedRef) => {
|
|
549
577
|
const { useViewport } = useAssistantContext();
|
|
550
578
|
const { useComposer } = useComposerContext();
|
|
551
|
-
const formRef = (0,
|
|
579
|
+
const formRef = (0, import_react12.useRef)(null);
|
|
552
580
|
const ref = (0, import_react_compose_refs2.useComposedRefs)(forwardedRef, formRef);
|
|
553
581
|
const handleSubmit = (e) => {
|
|
554
582
|
const composerState = useComposer.getState();
|
|
@@ -558,25 +586,25 @@ var ComposerRoot = (0, import_react11.forwardRef)(
|
|
|
558
586
|
composerState.send();
|
|
559
587
|
useViewport.getState().scrollToBottom();
|
|
560
588
|
};
|
|
561
|
-
return /* @__PURE__ */ (0,
|
|
562
|
-
|
|
589
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
590
|
+
import_react_primitive6.Primitive.form,
|
|
563
591
|
{
|
|
564
592
|
...rest,
|
|
565
593
|
ref,
|
|
566
|
-
onSubmit: (0,
|
|
594
|
+
onSubmit: (0, import_primitive5.composeEventHandlers)(onSubmit, handleSubmit)
|
|
567
595
|
}
|
|
568
596
|
);
|
|
569
597
|
}
|
|
570
598
|
);
|
|
571
599
|
|
|
572
600
|
// src/primitives/composer/ComposerInput.tsx
|
|
573
|
-
var
|
|
601
|
+
var import_primitive6 = require("@radix-ui/primitive");
|
|
574
602
|
var import_react_compose_refs3 = require("@radix-ui/react-compose-refs");
|
|
575
603
|
var import_react_slot = require("@radix-ui/react-slot");
|
|
576
|
-
var
|
|
604
|
+
var import_react13 = require("react");
|
|
577
605
|
var import_react_textarea_autosize = __toESM(require("react-textarea-autosize"));
|
|
578
|
-
var
|
|
579
|
-
var ComposerInput = (0,
|
|
606
|
+
var import_jsx_runtime11 = require("react/jsx-runtime");
|
|
607
|
+
var ComposerInput = (0, import_react13.forwardRef)(
|
|
580
608
|
({ autoFocus, asChild, disabled, onChange, onKeyDown, ...rest }, forwardedRef) => {
|
|
581
609
|
const { useThread, useViewport } = useAssistantContext();
|
|
582
610
|
const { useComposer, type } = useComposerContext();
|
|
@@ -603,10 +631,10 @@ var ComposerInput = (0, import_react12.forwardRef)(
|
|
|
603
631
|
}
|
|
604
632
|
}
|
|
605
633
|
};
|
|
606
|
-
const textareaRef = (0,
|
|
634
|
+
const textareaRef = (0, import_react13.useRef)(null);
|
|
607
635
|
const ref = (0, import_react_compose_refs3.useComposedRefs)(forwardedRef, textareaRef);
|
|
608
636
|
const autoFocusEnabled = autoFocus !== false && !disabled;
|
|
609
|
-
const focus = (0,
|
|
637
|
+
const focus = (0, import_react13.useCallback)(() => {
|
|
610
638
|
const textarea = textareaRef.current;
|
|
611
639
|
if (!textarea || !autoFocusEnabled)
|
|
612
640
|
return;
|
|
@@ -616,41 +644,41 @@ var ComposerInput = (0, import_react12.forwardRef)(
|
|
|
616
644
|
textareaRef.current.value.length
|
|
617
645
|
);
|
|
618
646
|
}, [autoFocusEnabled]);
|
|
619
|
-
(0,
|
|
647
|
+
(0, import_react13.useEffect)(() => focus(), [focus]);
|
|
620
648
|
useOnScrollToBottom(() => {
|
|
621
649
|
if (type === "assistant") {
|
|
622
650
|
focus();
|
|
623
651
|
}
|
|
624
652
|
});
|
|
625
|
-
return /* @__PURE__ */ (0,
|
|
653
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
626
654
|
Component,
|
|
627
655
|
{
|
|
628
656
|
value,
|
|
629
657
|
...rest,
|
|
630
658
|
ref,
|
|
631
659
|
disabled,
|
|
632
|
-
onChange: (0,
|
|
660
|
+
onChange: (0, import_primitive6.composeEventHandlers)(onChange, (e) => {
|
|
633
661
|
const composerState = useComposer.getState();
|
|
634
662
|
if (!composerState.isEditing)
|
|
635
663
|
return;
|
|
636
664
|
return composerState.setValue(e.target.value);
|
|
637
665
|
}),
|
|
638
|
-
onKeyDown: (0,
|
|
666
|
+
onKeyDown: (0, import_primitive6.composeEventHandlers)(onKeyDown, handleKeyPress)
|
|
639
667
|
}
|
|
640
668
|
);
|
|
641
669
|
}
|
|
642
670
|
);
|
|
643
671
|
|
|
644
672
|
// src/primitives/composer/ComposerSend.tsx
|
|
645
|
-
var
|
|
646
|
-
var
|
|
647
|
-
var
|
|
648
|
-
var ComposerSend = (0,
|
|
673
|
+
var import_react_primitive7 = require("@radix-ui/react-primitive");
|
|
674
|
+
var import_react14 = require("react");
|
|
675
|
+
var import_jsx_runtime12 = require("react/jsx-runtime");
|
|
676
|
+
var ComposerSend = (0, import_react14.forwardRef)(
|
|
649
677
|
({ disabled, ...rest }, ref) => {
|
|
650
678
|
const { useComposer } = useComposerContext();
|
|
651
679
|
const hasValue = useComposer((c) => c.isEditing && c.value.length > 0);
|
|
652
|
-
return /* @__PURE__ */ (0,
|
|
653
|
-
|
|
680
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
681
|
+
import_react_primitive7.Primitive.button,
|
|
654
682
|
{
|
|
655
683
|
type: "submit",
|
|
656
684
|
...rest,
|
|
@@ -662,22 +690,22 @@ var ComposerSend = (0, import_react13.forwardRef)(
|
|
|
662
690
|
);
|
|
663
691
|
|
|
664
692
|
// src/primitives/composer/ComposerCancel.tsx
|
|
665
|
-
var
|
|
666
|
-
var
|
|
667
|
-
var
|
|
668
|
-
var
|
|
669
|
-
var ComposerCancel = (0,
|
|
693
|
+
var import_primitive7 = require("@radix-ui/primitive");
|
|
694
|
+
var import_react_primitive8 = require("@radix-ui/react-primitive");
|
|
695
|
+
var import_react15 = require("react");
|
|
696
|
+
var import_jsx_runtime13 = require("react/jsx-runtime");
|
|
697
|
+
var ComposerCancel = (0, import_react15.forwardRef)(({ onClick, ...rest }, ref) => {
|
|
670
698
|
const { useComposer } = useComposerContext();
|
|
671
699
|
const handleCancel = () => {
|
|
672
700
|
useComposer.getState().cancel();
|
|
673
701
|
};
|
|
674
|
-
return /* @__PURE__ */ (0,
|
|
675
|
-
|
|
702
|
+
return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
|
|
703
|
+
import_react_primitive8.Primitive.button,
|
|
676
704
|
{
|
|
677
705
|
type: "button",
|
|
678
706
|
...rest,
|
|
679
707
|
ref,
|
|
680
|
-
onClick: (0,
|
|
708
|
+
onClick: (0, import_primitive7.composeEventHandlers)(onClick, handleCancel)
|
|
681
709
|
}
|
|
682
710
|
);
|
|
683
711
|
});
|
|
@@ -693,10 +721,10 @@ __export(branchPicker_exports, {
|
|
|
693
721
|
});
|
|
694
722
|
|
|
695
723
|
// src/utils/context/combined/useCombinedStore.ts
|
|
696
|
-
var
|
|
724
|
+
var import_react17 = require("react");
|
|
697
725
|
|
|
698
726
|
// src/utils/context/combined/createCombinedStore.ts
|
|
699
|
-
var
|
|
727
|
+
var import_react16 = require("react");
|
|
700
728
|
var createCombinedStore = (stores) => {
|
|
701
729
|
const subscribe = (callback) => {
|
|
702
730
|
const unsubscribes = stores.map((store) => store.subscribe(callback));
|
|
@@ -708,13 +736,13 @@ var createCombinedStore = (stores) => {
|
|
|
708
736
|
};
|
|
709
737
|
return (selector) => {
|
|
710
738
|
const getSnapshot = () => selector(...stores.map((store) => store.getState()));
|
|
711
|
-
return (0,
|
|
739
|
+
return (0, import_react16.useSyncExternalStore)(subscribe, getSnapshot, getSnapshot);
|
|
712
740
|
};
|
|
713
741
|
};
|
|
714
742
|
|
|
715
743
|
// src/utils/context/combined/useCombinedStore.ts
|
|
716
744
|
var useCombinedStore = (stores, selector) => {
|
|
717
|
-
const useCombined = (0,
|
|
745
|
+
const useCombined = (0, import_react17.useMemo)(() => createCombinedStore(stores), stores);
|
|
718
746
|
return useCombined(selector);
|
|
719
747
|
};
|
|
720
748
|
|
|
@@ -735,22 +763,22 @@ var useGoToNextBranch = () => {
|
|
|
735
763
|
};
|
|
736
764
|
|
|
737
765
|
// src/utils/createActionButton.tsx
|
|
738
|
-
var
|
|
739
|
-
var
|
|
740
|
-
var
|
|
741
|
-
var
|
|
766
|
+
var import_primitive8 = require("@radix-ui/primitive");
|
|
767
|
+
var import_react_primitive9 = require("@radix-ui/react-primitive");
|
|
768
|
+
var import_react18 = require("react");
|
|
769
|
+
var import_jsx_runtime14 = require("react/jsx-runtime");
|
|
742
770
|
var createActionButton = (useActionButton) => {
|
|
743
|
-
return (0,
|
|
771
|
+
return (0, import_react18.forwardRef)(
|
|
744
772
|
(props, forwardedRef) => {
|
|
745
773
|
const onClick = useActionButton(props);
|
|
746
|
-
return /* @__PURE__ */ (0,
|
|
747
|
-
|
|
774
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
775
|
+
import_react_primitive9.Primitive.button,
|
|
748
776
|
{
|
|
749
777
|
type: "button",
|
|
750
778
|
disabled: !onClick,
|
|
751
779
|
...props,
|
|
752
780
|
ref: forwardedRef,
|
|
753
|
-
onClick: (0,
|
|
781
|
+
onClick: (0, import_primitive8.composeEventHandlers)(props.onClick, onClick ?? void 0)
|
|
754
782
|
}
|
|
755
783
|
);
|
|
756
784
|
}
|
|
@@ -783,27 +811,27 @@ var useGoToPreviousBranch = () => {
|
|
|
783
811
|
var BranchPickerPrevious = createActionButton(useGoToPreviousBranch);
|
|
784
812
|
|
|
785
813
|
// src/primitives/branchPicker/BranchPickerCount.tsx
|
|
786
|
-
var
|
|
814
|
+
var import_jsx_runtime15 = require("react/jsx-runtime");
|
|
787
815
|
var BranchPickerCount = () => {
|
|
788
816
|
const { useMessage } = useMessageContext();
|
|
789
817
|
const branchCount = useMessage((s) => s.branches.length);
|
|
790
|
-
return /* @__PURE__ */ (0,
|
|
818
|
+
return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_jsx_runtime15.Fragment, { children: branchCount });
|
|
791
819
|
};
|
|
792
820
|
|
|
793
821
|
// src/primitives/branchPicker/BranchPickerNumber.tsx
|
|
794
|
-
var
|
|
822
|
+
var import_jsx_runtime16 = require("react/jsx-runtime");
|
|
795
823
|
var BranchPickerNumber = () => {
|
|
796
824
|
const { useMessage } = useMessageContext();
|
|
797
825
|
const branchIdx = useMessage((s) => s.branches.indexOf(s.message.id));
|
|
798
|
-
return /* @__PURE__ */ (0,
|
|
826
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_jsx_runtime16.Fragment, { children: branchIdx + 1 });
|
|
799
827
|
};
|
|
800
828
|
|
|
801
829
|
// src/primitives/branchPicker/BranchPickerRoot.tsx
|
|
802
|
-
var
|
|
803
|
-
var
|
|
804
|
-
var
|
|
805
|
-
var BranchPickerRoot = (0,
|
|
806
|
-
return /* @__PURE__ */ (0,
|
|
830
|
+
var import_react_primitive10 = require("@radix-ui/react-primitive");
|
|
831
|
+
var import_react19 = require("react");
|
|
832
|
+
var import_jsx_runtime17 = require("react/jsx-runtime");
|
|
833
|
+
var BranchPickerRoot = (0, import_react19.forwardRef)(({ hideWhenSingleBranch, ...rest }, ref) => {
|
|
834
|
+
return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(MessageIf, { hasBranches: hideWhenSingleBranch ? true : void 0, children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_react_primitive10.Primitive.div, { ...rest, ref }) });
|
|
807
835
|
});
|
|
808
836
|
|
|
809
837
|
// src/primitives/actionBar/index.ts
|
|
@@ -816,10 +844,10 @@ __export(actionBar_exports, {
|
|
|
816
844
|
});
|
|
817
845
|
|
|
818
846
|
// src/primitives/actionBar/ActionBarRoot.tsx
|
|
819
|
-
var
|
|
820
|
-
var
|
|
821
|
-
var
|
|
822
|
-
var ActionBarRoot = (0,
|
|
847
|
+
var import_react_primitive11 = require("@radix-ui/react-primitive");
|
|
848
|
+
var import_react20 = require("react");
|
|
849
|
+
var import_jsx_runtime18 = require("react/jsx-runtime");
|
|
850
|
+
var ActionBarRoot = (0, import_react20.forwardRef)(({ hideWhenRunning, autohide, autohideFloat, ...rest }, ref) => {
|
|
823
851
|
const { useThread } = useAssistantContext();
|
|
824
852
|
const { useMessage } = useMessageContext();
|
|
825
853
|
const hideAndfloatStatus = useCombinedStore(
|
|
@@ -839,8 +867,8 @@ var ActionBarRoot = (0, import_react19.forwardRef)(({ hideWhenRunning, autohide,
|
|
|
839
867
|
);
|
|
840
868
|
if (hideAndfloatStatus === "hidden" /* Hidden */)
|
|
841
869
|
return null;
|
|
842
|
-
return /* @__PURE__ */ (0,
|
|
843
|
-
|
|
870
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
|
|
871
|
+
import_react_primitive11.Primitive.div,
|
|
844
872
|
{
|
|
845
873
|
"data-floating": hideAndfloatStatus === "floating" /* Floating */,
|
|
846
874
|
...rest,
|
|
@@ -909,10 +937,10 @@ var useBeginMessageEdit = () => {
|
|
|
909
937
|
var ActionBarEdit = createActionButton(useBeginMessageEdit);
|
|
910
938
|
|
|
911
939
|
// src/adapters/vercel/VercelAIAssistantProvider.tsx
|
|
912
|
-
var
|
|
940
|
+
var import_react23 = require("react");
|
|
913
941
|
|
|
914
942
|
// src/adapters/vercel/useDummyAIAssistantContext.tsx
|
|
915
|
-
var
|
|
943
|
+
var import_react21 = require("react");
|
|
916
944
|
var import_zustand4 = require("zustand");
|
|
917
945
|
|
|
918
946
|
// src/utils/context/stores/ViewportStore.tsx
|
|
@@ -958,7 +986,7 @@ var makeDummyThreadStore = () => {
|
|
|
958
986
|
}));
|
|
959
987
|
};
|
|
960
988
|
var useDummyAIAssistantContext = () => {
|
|
961
|
-
const [context] = (0,
|
|
989
|
+
const [context] = (0, import_react21.useState)(() => {
|
|
962
990
|
const useThread = makeDummyThreadStore();
|
|
963
991
|
const useViewport = makeViewportStore();
|
|
964
992
|
const useComposer = makeThreadComposerStore(useThread);
|
|
@@ -968,22 +996,11 @@ var useDummyAIAssistantContext = () => {
|
|
|
968
996
|
};
|
|
969
997
|
|
|
970
998
|
// src/adapters/vercel/useVercelAIBranches.tsx
|
|
971
|
-
var
|
|
972
|
-
|
|
973
|
-
// ../../node_modules/nanoid/non-secure/index.js
|
|
974
|
-
var customAlphabet = (alphabet, defaultSize = 21) => {
|
|
975
|
-
return (size = defaultSize) => {
|
|
976
|
-
let id = "";
|
|
977
|
-
let i = size;
|
|
978
|
-
while (i--) {
|
|
979
|
-
id += alphabet[Math.random() * alphabet.length | 0];
|
|
980
|
-
}
|
|
981
|
-
return id;
|
|
982
|
-
};
|
|
983
|
-
};
|
|
999
|
+
var import_react22 = require("react");
|
|
984
1000
|
|
|
985
1001
|
// src/adapters/MessageRepository.tsx
|
|
986
|
-
var
|
|
1002
|
+
var import_non_secure = require("nanoid/non-secure");
|
|
1003
|
+
var generateId = (0, import_non_secure.customAlphabet)(
|
|
987
1004
|
"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",
|
|
988
1005
|
7
|
|
989
1006
|
);
|
|
@@ -1139,10 +1156,10 @@ var hasUpcomingMessage = (isRunning, messages) => {
|
|
|
1139
1156
|
return isRunning && messages[messages.length - 1]?.role !== "assistant";
|
|
1140
1157
|
};
|
|
1141
1158
|
var useVercelAIBranches = (chat, messages) => {
|
|
1142
|
-
const [data] = (0,
|
|
1159
|
+
const [data] = (0, import_react22.useState)(() => new MessageRepository());
|
|
1143
1160
|
const isRunning = "isLoading" in chat ? chat.isLoading : chat.status === "in_progress";
|
|
1144
|
-
const assistantOptimisticIdRef = (0,
|
|
1145
|
-
const messagesEx = (0,
|
|
1161
|
+
const assistantOptimisticIdRef = (0, import_react22.useRef)(null);
|
|
1162
|
+
const messagesEx = (0, import_react22.useMemo)(() => {
|
|
1146
1163
|
for (const message of messages) {
|
|
1147
1164
|
data.addOrUpdateMessage(message);
|
|
1148
1165
|
}
|
|
@@ -1160,13 +1177,13 @@ var useVercelAIBranches = (chat, messages) => {
|
|
|
1160
1177
|
);
|
|
1161
1178
|
return data.getMessages();
|
|
1162
1179
|
}, [data, isRunning, messages]);
|
|
1163
|
-
const getBranches = (0,
|
|
1180
|
+
const getBranches = (0, import_react22.useCallback)(
|
|
1164
1181
|
(messageId) => {
|
|
1165
1182
|
return data.getBranches(messageId);
|
|
1166
1183
|
},
|
|
1167
1184
|
[data]
|
|
1168
1185
|
);
|
|
1169
|
-
const switchToBranch = (0,
|
|
1186
|
+
const switchToBranch = (0, import_react22.useCallback)(
|
|
1170
1187
|
(messageId) => {
|
|
1171
1188
|
data.switchToBranch(messageId);
|
|
1172
1189
|
chat.setMessages(
|
|
@@ -1176,7 +1193,7 @@ var useVercelAIBranches = (chat, messages) => {
|
|
|
1176
1193
|
[data, chat.setMessages]
|
|
1177
1194
|
);
|
|
1178
1195
|
const reloadMaybe = "reload" in chat ? chat.reload : void 0;
|
|
1179
|
-
const startRun = (0,
|
|
1196
|
+
const startRun = (0, import_react22.useCallback)(
|
|
1180
1197
|
async (parentId) => {
|
|
1181
1198
|
if (!reloadMaybe)
|
|
1182
1199
|
throw new Error("Reload not supported by Vercel AI SDK's useAssistant");
|
|
@@ -1186,7 +1203,7 @@ var useVercelAIBranches = (chat, messages) => {
|
|
|
1186
1203
|
},
|
|
1187
1204
|
[chat.messages, chat.setMessages, reloadMaybe]
|
|
1188
1205
|
);
|
|
1189
|
-
const append = (0,
|
|
1206
|
+
const append = (0, import_react22.useCallback)(
|
|
1190
1207
|
async (message) => {
|
|
1191
1208
|
if (message.content.length !== 1 || message.content[0]?.type !== "text")
|
|
1192
1209
|
throw new Error("Only text content is supported by Vercel AI SDK");
|
|
@@ -1199,7 +1216,7 @@ var useVercelAIBranches = (chat, messages) => {
|
|
|
1199
1216
|
},
|
|
1200
1217
|
[chat.messages, chat.setMessages, chat.append]
|
|
1201
1218
|
);
|
|
1202
|
-
return (0,
|
|
1219
|
+
return (0, import_react22.useMemo)(
|
|
1203
1220
|
() => ({
|
|
1204
1221
|
messages: messagesEx,
|
|
1205
1222
|
getBranches,
|
|
@@ -1212,7 +1229,7 @@ var useVercelAIBranches = (chat, messages) => {
|
|
|
1212
1229
|
};
|
|
1213
1230
|
|
|
1214
1231
|
// src/adapters/vercel/VercelAIAssistantProvider.tsx
|
|
1215
|
-
var
|
|
1232
|
+
var import_jsx_runtime19 = require("react/jsx-runtime");
|
|
1216
1233
|
var ThreadMessageCache = /* @__PURE__ */ new WeakMap();
|
|
1217
1234
|
var vercelToThreadMessage = (message, parentId) => {
|
|
1218
1235
|
if (message.role !== "user" && message.role !== "assistant")
|
|
@@ -1243,11 +1260,11 @@ var VercelAIAssistantProvider = ({
|
|
|
1243
1260
|
}) => {
|
|
1244
1261
|
const context = useDummyAIAssistantContext();
|
|
1245
1262
|
const vercel = "chat" in rest ? rest.chat : rest.assistant;
|
|
1246
|
-
const messages = (0,
|
|
1263
|
+
const messages = (0, import_react23.useMemo)(() => {
|
|
1247
1264
|
return vercelToCachedThreadMessages(vercel.messages);
|
|
1248
1265
|
}, [vercel.messages]);
|
|
1249
1266
|
const branches = useVercelAIBranches(vercel, messages);
|
|
1250
|
-
const cancelRun = (0,
|
|
1267
|
+
const cancelRun = (0, import_react23.useCallback)(() => {
|
|
1251
1268
|
const lastMessage = vercel.messages.at(-1);
|
|
1252
1269
|
vercel.stop();
|
|
1253
1270
|
if (lastMessage?.role === "user") {
|
|
@@ -1255,7 +1272,7 @@ var VercelAIAssistantProvider = ({
|
|
|
1255
1272
|
}
|
|
1256
1273
|
}, [vercel.messages, vercel.stop, vercel.setInput]);
|
|
1257
1274
|
const isRunning = "isLoading" in vercel ? vercel.isLoading : vercel.status === "in_progress";
|
|
1258
|
-
(0,
|
|
1275
|
+
(0, import_react23.useMemo)(() => {
|
|
1259
1276
|
context.useThread.setState(
|
|
1260
1277
|
{
|
|
1261
1278
|
messages: branches.messages,
|
|
@@ -1269,18 +1286,18 @@ var VercelAIAssistantProvider = ({
|
|
|
1269
1286
|
true
|
|
1270
1287
|
);
|
|
1271
1288
|
}, [context, isRunning, cancelRun, branches]);
|
|
1272
|
-
(0,
|
|
1289
|
+
(0, import_react23.useMemo)(() => {
|
|
1273
1290
|
context.useComposer.setState({
|
|
1274
1291
|
value: vercel.input,
|
|
1275
1292
|
setValue: vercel.setInput
|
|
1276
1293
|
});
|
|
1277
1294
|
}, [context, vercel.input, vercel.setInput]);
|
|
1278
|
-
return /* @__PURE__ */ (0,
|
|
1295
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(AssistantContext.Provider, { value: context, children });
|
|
1279
1296
|
};
|
|
1280
1297
|
|
|
1281
1298
|
// src/adapters/vercel/VercelRSCAssistantProvider.tsx
|
|
1282
|
-
var
|
|
1283
|
-
var
|
|
1299
|
+
var import_react24 = require("react");
|
|
1300
|
+
var import_jsx_runtime20 = require("react/jsx-runtime");
|
|
1284
1301
|
var ThreadMessageCache2 = /* @__PURE__ */ new WeakMap();
|
|
1285
1302
|
var vercelToThreadMessage2 = (parentId, message) => {
|
|
1286
1303
|
if (message.role !== "user" && message.role !== "assistant")
|
|
@@ -1304,16 +1321,12 @@ var vercelToCachedThreadMessages2 = (messages) => {
|
|
|
1304
1321
|
return newMessage;
|
|
1305
1322
|
});
|
|
1306
1323
|
};
|
|
1307
|
-
var VercelRSCAssistantProvider = ({
|
|
1308
|
-
children,
|
|
1309
|
-
messages: vercelMessages,
|
|
1310
|
-
append: vercelAppend
|
|
1311
|
-
}) => {
|
|
1324
|
+
var VercelRSCAssistantProvider = ({ children, messages: vercelMessages, append: vercelAppend }) => {
|
|
1312
1325
|
const context = useDummyAIAssistantContext();
|
|
1313
|
-
const messages = (0,
|
|
1326
|
+
const messages = (0, import_react24.useMemo)(() => {
|
|
1314
1327
|
return vercelToCachedThreadMessages2(vercelMessages);
|
|
1315
1328
|
}, [vercelMessages]);
|
|
1316
|
-
const append = (0,
|
|
1329
|
+
const append = (0, import_react24.useCallback)(
|
|
1317
1330
|
async (message) => {
|
|
1318
1331
|
if (message.parentId !== (context.useThread.getState().messages.at(-1)?.id ?? null))
|
|
1319
1332
|
throw new Error("Unexpected: Message editing is not supported");
|
|
@@ -1324,13 +1337,13 @@ var VercelRSCAssistantProvider = ({
|
|
|
1324
1337
|
},
|
|
1325
1338
|
[context, vercelAppend]
|
|
1326
1339
|
);
|
|
1327
|
-
(0,
|
|
1340
|
+
(0, import_react24.useMemo)(() => {
|
|
1328
1341
|
context.useThread.setState({
|
|
1329
1342
|
messages,
|
|
1330
1343
|
append
|
|
1331
1344
|
});
|
|
1332
1345
|
}, [context, messages, append]);
|
|
1333
|
-
return /* @__PURE__ */ (0,
|
|
1346
|
+
return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(AssistantContext.Provider, { value: context, children });
|
|
1334
1347
|
};
|
|
1335
1348
|
// Annotate the CommonJS export names for ESM import in node:
|
|
1336
1349
|
0 && (module.exports = {
|
|
@@ -1340,7 +1353,7 @@ var VercelRSCAssistantProvider = ({
|
|
|
1340
1353
|
MessagePrimitive,
|
|
1341
1354
|
ThreadPrimitive,
|
|
1342
1355
|
VercelAIAssistantProvider,
|
|
1343
|
-
|
|
1356
|
+
VercelRSCAssistantProvider,
|
|
1344
1357
|
unstable_useMessageContext,
|
|
1345
1358
|
useBeginMessageEdit,
|
|
1346
1359
|
useCopyMessage,
|
package/dist/index.mjs
CHANGED
|
@@ -12,6 +12,7 @@ __export(thread_exports, {
|
|
|
12
12
|
Messages: () => ThreadMessages,
|
|
13
13
|
Root: () => ThreadRoot,
|
|
14
14
|
ScrollToBottom: () => ThreadScrollToBottom,
|
|
15
|
+
Suggestion: () => ThreadSuggestion,
|
|
15
16
|
Viewport: () => ThreadViewport
|
|
16
17
|
});
|
|
17
18
|
|
|
@@ -496,6 +497,35 @@ var ThreadScrollToBottom = forwardRef4(({ onClick, ...rest }, ref) => {
|
|
|
496
497
|
);
|
|
497
498
|
});
|
|
498
499
|
|
|
500
|
+
// src/primitives/thread/ThreadSuggestion.tsx
|
|
501
|
+
import { composeEventHandlers as composeEventHandlers4 } from "@radix-ui/primitive";
|
|
502
|
+
import {
|
|
503
|
+
Primitive as Primitive5
|
|
504
|
+
} from "@radix-ui/react-primitive";
|
|
505
|
+
import { forwardRef as forwardRef5 } from "react";
|
|
506
|
+
import { jsx as jsx9 } from "react/jsx-runtime";
|
|
507
|
+
var ThreadSuggestion = forwardRef5(({ onClick, prompt, method, autoSend: send, ...rest }, ref) => {
|
|
508
|
+
const { useThread, useComposer } = useAssistantContext();
|
|
509
|
+
const isDisabled = useThread((t) => t.isRunning);
|
|
510
|
+
const handleApplySuggestion = () => {
|
|
511
|
+
const thread = useThread.getState();
|
|
512
|
+
const composer = useComposer.getState();
|
|
513
|
+
composer.setValue(prompt);
|
|
514
|
+
if (send && !thread.isRunning) {
|
|
515
|
+
composer.send();
|
|
516
|
+
}
|
|
517
|
+
};
|
|
518
|
+
return /* @__PURE__ */ jsx9(
|
|
519
|
+
Primitive5.button,
|
|
520
|
+
{
|
|
521
|
+
...rest,
|
|
522
|
+
disabled: isDisabled,
|
|
523
|
+
ref,
|
|
524
|
+
onClick: composeEventHandlers4(onClick, handleApplySuggestion)
|
|
525
|
+
}
|
|
526
|
+
);
|
|
527
|
+
});
|
|
528
|
+
|
|
499
529
|
// src/primitives/composer/index.ts
|
|
500
530
|
var composer_exports = {};
|
|
501
531
|
__export(composer_exports, {
|
|
@@ -507,14 +537,14 @@ __export(composer_exports, {
|
|
|
507
537
|
});
|
|
508
538
|
|
|
509
539
|
// src/primitives/composer/ComposerRoot.tsx
|
|
510
|
-
import { composeEventHandlers as
|
|
540
|
+
import { composeEventHandlers as composeEventHandlers5 } from "@radix-ui/primitive";
|
|
511
541
|
import { useComposedRefs as useComposedRefs2 } from "@radix-ui/react-compose-refs";
|
|
512
542
|
import {
|
|
513
|
-
Primitive as
|
|
543
|
+
Primitive as Primitive6
|
|
514
544
|
} from "@radix-ui/react-primitive";
|
|
515
|
-
import { forwardRef as
|
|
516
|
-
import { jsx as
|
|
517
|
-
var ComposerRoot =
|
|
545
|
+
import { forwardRef as forwardRef6, useRef as useRef4 } from "react";
|
|
546
|
+
import { jsx as jsx10 } from "react/jsx-runtime";
|
|
547
|
+
var ComposerRoot = forwardRef6(
|
|
518
548
|
({ onSubmit, ...rest }, forwardedRef) => {
|
|
519
549
|
const { useViewport } = useAssistantContext();
|
|
520
550
|
const { useComposer } = useComposerContext();
|
|
@@ -528,30 +558,30 @@ var ComposerRoot = forwardRef5(
|
|
|
528
558
|
composerState.send();
|
|
529
559
|
useViewport.getState().scrollToBottom();
|
|
530
560
|
};
|
|
531
|
-
return /* @__PURE__ */
|
|
532
|
-
|
|
561
|
+
return /* @__PURE__ */ jsx10(
|
|
562
|
+
Primitive6.form,
|
|
533
563
|
{
|
|
534
564
|
...rest,
|
|
535
565
|
ref,
|
|
536
|
-
onSubmit:
|
|
566
|
+
onSubmit: composeEventHandlers5(onSubmit, handleSubmit)
|
|
537
567
|
}
|
|
538
568
|
);
|
|
539
569
|
}
|
|
540
570
|
);
|
|
541
571
|
|
|
542
572
|
// src/primitives/composer/ComposerInput.tsx
|
|
543
|
-
import { composeEventHandlers as
|
|
573
|
+
import { composeEventHandlers as composeEventHandlers6 } from "@radix-ui/primitive";
|
|
544
574
|
import { useComposedRefs as useComposedRefs3 } from "@radix-ui/react-compose-refs";
|
|
545
575
|
import { Slot } from "@radix-ui/react-slot";
|
|
546
576
|
import {
|
|
547
|
-
forwardRef as
|
|
577
|
+
forwardRef as forwardRef7,
|
|
548
578
|
useCallback,
|
|
549
579
|
useEffect as useEffect2,
|
|
550
580
|
useRef as useRef5
|
|
551
581
|
} from "react";
|
|
552
582
|
import TextareaAutosize from "react-textarea-autosize";
|
|
553
|
-
import { jsx as
|
|
554
|
-
var ComposerInput =
|
|
583
|
+
import { jsx as jsx11 } from "react/jsx-runtime";
|
|
584
|
+
var ComposerInput = forwardRef7(
|
|
555
585
|
({ autoFocus, asChild, disabled, onChange, onKeyDown, ...rest }, forwardedRef) => {
|
|
556
586
|
const { useThread, useViewport } = useAssistantContext();
|
|
557
587
|
const { useComposer, type } = useComposerContext();
|
|
@@ -597,20 +627,20 @@ var ComposerInput = forwardRef6(
|
|
|
597
627
|
focus();
|
|
598
628
|
}
|
|
599
629
|
});
|
|
600
|
-
return /* @__PURE__ */
|
|
630
|
+
return /* @__PURE__ */ jsx11(
|
|
601
631
|
Component,
|
|
602
632
|
{
|
|
603
633
|
value,
|
|
604
634
|
...rest,
|
|
605
635
|
ref,
|
|
606
636
|
disabled,
|
|
607
|
-
onChange:
|
|
637
|
+
onChange: composeEventHandlers6(onChange, (e) => {
|
|
608
638
|
const composerState = useComposer.getState();
|
|
609
639
|
if (!composerState.isEditing)
|
|
610
640
|
return;
|
|
611
641
|
return composerState.setValue(e.target.value);
|
|
612
642
|
}),
|
|
613
|
-
onKeyDown:
|
|
643
|
+
onKeyDown: composeEventHandlers6(onKeyDown, handleKeyPress)
|
|
614
644
|
}
|
|
615
645
|
);
|
|
616
646
|
}
|
|
@@ -618,16 +648,16 @@ var ComposerInput = forwardRef6(
|
|
|
618
648
|
|
|
619
649
|
// src/primitives/composer/ComposerSend.tsx
|
|
620
650
|
import {
|
|
621
|
-
Primitive as
|
|
651
|
+
Primitive as Primitive7
|
|
622
652
|
} from "@radix-ui/react-primitive";
|
|
623
|
-
import { forwardRef as
|
|
624
|
-
import { jsx as
|
|
625
|
-
var ComposerSend =
|
|
653
|
+
import { forwardRef as forwardRef8 } from "react";
|
|
654
|
+
import { jsx as jsx12 } from "react/jsx-runtime";
|
|
655
|
+
var ComposerSend = forwardRef8(
|
|
626
656
|
({ disabled, ...rest }, ref) => {
|
|
627
657
|
const { useComposer } = useComposerContext();
|
|
628
658
|
const hasValue = useComposer((c) => c.isEditing && c.value.length > 0);
|
|
629
|
-
return /* @__PURE__ */
|
|
630
|
-
|
|
659
|
+
return /* @__PURE__ */ jsx12(
|
|
660
|
+
Primitive7.button,
|
|
631
661
|
{
|
|
632
662
|
type: "submit",
|
|
633
663
|
...rest,
|
|
@@ -639,24 +669,24 @@ var ComposerSend = forwardRef7(
|
|
|
639
669
|
);
|
|
640
670
|
|
|
641
671
|
// src/primitives/composer/ComposerCancel.tsx
|
|
642
|
-
import { composeEventHandlers as
|
|
672
|
+
import { composeEventHandlers as composeEventHandlers7 } from "@radix-ui/primitive";
|
|
643
673
|
import {
|
|
644
|
-
Primitive as
|
|
674
|
+
Primitive as Primitive8
|
|
645
675
|
} from "@radix-ui/react-primitive";
|
|
646
|
-
import { forwardRef as
|
|
647
|
-
import { jsx as
|
|
648
|
-
var ComposerCancel =
|
|
676
|
+
import { forwardRef as forwardRef9 } from "react";
|
|
677
|
+
import { jsx as jsx13 } from "react/jsx-runtime";
|
|
678
|
+
var ComposerCancel = forwardRef9(({ onClick, ...rest }, ref) => {
|
|
649
679
|
const { useComposer } = useComposerContext();
|
|
650
680
|
const handleCancel = () => {
|
|
651
681
|
useComposer.getState().cancel();
|
|
652
682
|
};
|
|
653
|
-
return /* @__PURE__ */
|
|
654
|
-
|
|
683
|
+
return /* @__PURE__ */ jsx13(
|
|
684
|
+
Primitive8.button,
|
|
655
685
|
{
|
|
656
686
|
type: "button",
|
|
657
687
|
...rest,
|
|
658
688
|
ref,
|
|
659
|
-
onClick:
|
|
689
|
+
onClick: composeEventHandlers7(onClick, handleCancel)
|
|
660
690
|
}
|
|
661
691
|
);
|
|
662
692
|
});
|
|
@@ -714,24 +744,24 @@ var useGoToNextBranch = () => {
|
|
|
714
744
|
};
|
|
715
745
|
|
|
716
746
|
// src/utils/createActionButton.tsx
|
|
717
|
-
import { composeEventHandlers as
|
|
747
|
+
import { composeEventHandlers as composeEventHandlers8 } from "@radix-ui/primitive";
|
|
718
748
|
import {
|
|
719
|
-
Primitive as
|
|
749
|
+
Primitive as Primitive9
|
|
720
750
|
} from "@radix-ui/react-primitive";
|
|
721
|
-
import { forwardRef as
|
|
722
|
-
import { jsx as
|
|
751
|
+
import { forwardRef as forwardRef10 } from "react";
|
|
752
|
+
import { jsx as jsx14 } from "react/jsx-runtime";
|
|
723
753
|
var createActionButton = (useActionButton) => {
|
|
724
|
-
return
|
|
754
|
+
return forwardRef10(
|
|
725
755
|
(props, forwardedRef) => {
|
|
726
756
|
const onClick = useActionButton(props);
|
|
727
|
-
return /* @__PURE__ */
|
|
728
|
-
|
|
757
|
+
return /* @__PURE__ */ jsx14(
|
|
758
|
+
Primitive9.button,
|
|
729
759
|
{
|
|
730
760
|
type: "button",
|
|
731
761
|
disabled: !onClick,
|
|
732
762
|
...props,
|
|
733
763
|
ref: forwardedRef,
|
|
734
|
-
onClick:
|
|
764
|
+
onClick: composeEventHandlers8(props.onClick, onClick ?? void 0)
|
|
735
765
|
}
|
|
736
766
|
);
|
|
737
767
|
}
|
|
@@ -764,29 +794,29 @@ var useGoToPreviousBranch = () => {
|
|
|
764
794
|
var BranchPickerPrevious = createActionButton(useGoToPreviousBranch);
|
|
765
795
|
|
|
766
796
|
// src/primitives/branchPicker/BranchPickerCount.tsx
|
|
767
|
-
import { Fragment as Fragment3, jsx as
|
|
797
|
+
import { Fragment as Fragment3, jsx as jsx15 } from "react/jsx-runtime";
|
|
768
798
|
var BranchPickerCount = () => {
|
|
769
799
|
const { useMessage } = useMessageContext();
|
|
770
800
|
const branchCount = useMessage((s) => s.branches.length);
|
|
771
|
-
return /* @__PURE__ */
|
|
801
|
+
return /* @__PURE__ */ jsx15(Fragment3, { children: branchCount });
|
|
772
802
|
};
|
|
773
803
|
|
|
774
804
|
// src/primitives/branchPicker/BranchPickerNumber.tsx
|
|
775
|
-
import { Fragment as Fragment4, jsx as
|
|
805
|
+
import { Fragment as Fragment4, jsx as jsx16 } from "react/jsx-runtime";
|
|
776
806
|
var BranchPickerNumber = () => {
|
|
777
807
|
const { useMessage } = useMessageContext();
|
|
778
808
|
const branchIdx = useMessage((s) => s.branches.indexOf(s.message.id));
|
|
779
|
-
return /* @__PURE__ */
|
|
809
|
+
return /* @__PURE__ */ jsx16(Fragment4, { children: branchIdx + 1 });
|
|
780
810
|
};
|
|
781
811
|
|
|
782
812
|
// src/primitives/branchPicker/BranchPickerRoot.tsx
|
|
783
813
|
import {
|
|
784
|
-
Primitive as
|
|
814
|
+
Primitive as Primitive10
|
|
785
815
|
} from "@radix-ui/react-primitive";
|
|
786
|
-
import { forwardRef as
|
|
787
|
-
import { jsx as
|
|
788
|
-
var BranchPickerRoot =
|
|
789
|
-
return /* @__PURE__ */
|
|
816
|
+
import { forwardRef as forwardRef11 } from "react";
|
|
817
|
+
import { jsx as jsx17 } from "react/jsx-runtime";
|
|
818
|
+
var BranchPickerRoot = forwardRef11(({ hideWhenSingleBranch, ...rest }, ref) => {
|
|
819
|
+
return /* @__PURE__ */ jsx17(MessageIf, { hasBranches: hideWhenSingleBranch ? true : void 0, children: /* @__PURE__ */ jsx17(Primitive10.div, { ...rest, ref }) });
|
|
790
820
|
});
|
|
791
821
|
|
|
792
822
|
// src/primitives/actionBar/index.ts
|
|
@@ -800,11 +830,11 @@ __export(actionBar_exports, {
|
|
|
800
830
|
|
|
801
831
|
// src/primitives/actionBar/ActionBarRoot.tsx
|
|
802
832
|
import {
|
|
803
|
-
Primitive as
|
|
833
|
+
Primitive as Primitive11
|
|
804
834
|
} from "@radix-ui/react-primitive";
|
|
805
|
-
import { forwardRef as
|
|
806
|
-
import { jsx as
|
|
807
|
-
var ActionBarRoot =
|
|
835
|
+
import { forwardRef as forwardRef12 } from "react";
|
|
836
|
+
import { jsx as jsx18 } from "react/jsx-runtime";
|
|
837
|
+
var ActionBarRoot = forwardRef12(({ hideWhenRunning, autohide, autohideFloat, ...rest }, ref) => {
|
|
808
838
|
const { useThread } = useAssistantContext();
|
|
809
839
|
const { useMessage } = useMessageContext();
|
|
810
840
|
const hideAndfloatStatus = useCombinedStore(
|
|
@@ -824,8 +854,8 @@ var ActionBarRoot = forwardRef11(({ hideWhenRunning, autohide, autohideFloat, ..
|
|
|
824
854
|
);
|
|
825
855
|
if (hideAndfloatStatus === "hidden" /* Hidden */)
|
|
826
856
|
return null;
|
|
827
|
-
return /* @__PURE__ */
|
|
828
|
-
|
|
857
|
+
return /* @__PURE__ */ jsx18(
|
|
858
|
+
Primitive11.div,
|
|
829
859
|
{
|
|
830
860
|
"data-floating": hideAndfloatStatus === "floating" /* Floating */,
|
|
831
861
|
...rest,
|
|
@@ -955,19 +985,8 @@ var useDummyAIAssistantContext = () => {
|
|
|
955
985
|
// src/adapters/vercel/useVercelAIBranches.tsx
|
|
956
986
|
import { useCallback as useCallback2, useMemo as useMemo3, useRef as useRef6, useState as useState3 } from "react";
|
|
957
987
|
|
|
958
|
-
// ../../node_modules/nanoid/non-secure/index.js
|
|
959
|
-
var customAlphabet = (alphabet, defaultSize = 21) => {
|
|
960
|
-
return (size = defaultSize) => {
|
|
961
|
-
let id = "";
|
|
962
|
-
let i = size;
|
|
963
|
-
while (i--) {
|
|
964
|
-
id += alphabet[Math.random() * alphabet.length | 0];
|
|
965
|
-
}
|
|
966
|
-
return id;
|
|
967
|
-
};
|
|
968
|
-
};
|
|
969
|
-
|
|
970
988
|
// src/adapters/MessageRepository.tsx
|
|
989
|
+
import { customAlphabet } from "nanoid/non-secure";
|
|
971
990
|
var generateId = customAlphabet(
|
|
972
991
|
"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",
|
|
973
992
|
7
|
|
@@ -1197,7 +1216,7 @@ var useVercelAIBranches = (chat, messages) => {
|
|
|
1197
1216
|
};
|
|
1198
1217
|
|
|
1199
1218
|
// src/adapters/vercel/VercelAIAssistantProvider.tsx
|
|
1200
|
-
import { jsx as
|
|
1219
|
+
import { jsx as jsx19 } from "react/jsx-runtime";
|
|
1201
1220
|
var ThreadMessageCache = /* @__PURE__ */ new WeakMap();
|
|
1202
1221
|
var vercelToThreadMessage = (message, parentId) => {
|
|
1203
1222
|
if (message.role !== "user" && message.role !== "assistant")
|
|
@@ -1260,7 +1279,7 @@ var VercelAIAssistantProvider = ({
|
|
|
1260
1279
|
setValue: vercel.setInput
|
|
1261
1280
|
});
|
|
1262
1281
|
}, [context, vercel.input, vercel.setInput]);
|
|
1263
|
-
return /* @__PURE__ */
|
|
1282
|
+
return /* @__PURE__ */ jsx19(AssistantContext.Provider, { value: context, children });
|
|
1264
1283
|
};
|
|
1265
1284
|
|
|
1266
1285
|
// src/adapters/vercel/VercelRSCAssistantProvider.tsx
|
|
@@ -1268,7 +1287,7 @@ import {
|
|
|
1268
1287
|
useCallback as useCallback4,
|
|
1269
1288
|
useMemo as useMemo5
|
|
1270
1289
|
} from "react";
|
|
1271
|
-
import { jsx as
|
|
1290
|
+
import { jsx as jsx20 } from "react/jsx-runtime";
|
|
1272
1291
|
var ThreadMessageCache2 = /* @__PURE__ */ new WeakMap();
|
|
1273
1292
|
var vercelToThreadMessage2 = (parentId, message) => {
|
|
1274
1293
|
if (message.role !== "user" && message.role !== "assistant")
|
|
@@ -1292,11 +1311,7 @@ var vercelToCachedThreadMessages2 = (messages) => {
|
|
|
1292
1311
|
return newMessage;
|
|
1293
1312
|
});
|
|
1294
1313
|
};
|
|
1295
|
-
var VercelRSCAssistantProvider = ({
|
|
1296
|
-
children,
|
|
1297
|
-
messages: vercelMessages,
|
|
1298
|
-
append: vercelAppend
|
|
1299
|
-
}) => {
|
|
1314
|
+
var VercelRSCAssistantProvider = ({ children, messages: vercelMessages, append: vercelAppend }) => {
|
|
1300
1315
|
const context = useDummyAIAssistantContext();
|
|
1301
1316
|
const messages = useMemo5(() => {
|
|
1302
1317
|
return vercelToCachedThreadMessages2(vercelMessages);
|
|
@@ -1318,7 +1333,7 @@ var VercelRSCAssistantProvider = ({
|
|
|
1318
1333
|
append
|
|
1319
1334
|
});
|
|
1320
1335
|
}, [context, messages, append]);
|
|
1321
|
-
return /* @__PURE__ */
|
|
1336
|
+
return /* @__PURE__ */ jsx20(AssistantContext.Provider, { value: context, children });
|
|
1322
1337
|
};
|
|
1323
1338
|
export {
|
|
1324
1339
|
actionBar_exports as ActionBarPrimitive,
|
|
@@ -1327,7 +1342,7 @@ export {
|
|
|
1327
1342
|
message_exports as MessagePrimitive,
|
|
1328
1343
|
thread_exports as ThreadPrimitive,
|
|
1329
1344
|
VercelAIAssistantProvider,
|
|
1330
|
-
VercelRSCAssistantProvider
|
|
1345
|
+
VercelRSCAssistantProvider,
|
|
1331
1346
|
useMessageContext as unstable_useMessageContext,
|
|
1332
1347
|
useBeginMessageEdit,
|
|
1333
1348
|
useCopyMessage,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@assistant-ui/react",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.13",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": {
|
|
@@ -18,7 +18,10 @@
|
|
|
18
18
|
"main": "./dist/index.js",
|
|
19
19
|
"module": "./dist/index.mjs",
|
|
20
20
|
"types": "./dist/index.d.ts",
|
|
21
|
-
"files": [
|
|
21
|
+
"files": [
|
|
22
|
+
"dist",
|
|
23
|
+
"README.md"
|
|
24
|
+
],
|
|
22
25
|
"sideEffects": false,
|
|
23
26
|
"scripts": {
|
|
24
27
|
"build": "tsup src/index.ts --format cjs,esm --dts"
|
|
@@ -28,7 +31,8 @@
|
|
|
28
31
|
"@radix-ui/react-compose-refs": "^1.0.1",
|
|
29
32
|
"@radix-ui/react-primitive": "^1.0.3",
|
|
30
33
|
"@radix-ui/react-slot": "^1.0.2",
|
|
31
|
-
"ai": "^3.1.
|
|
34
|
+
"ai": "^3.1.22",
|
|
35
|
+
"nanoid": "^5.0.7",
|
|
32
36
|
"react-textarea-autosize": "^8.5.3",
|
|
33
37
|
"zustand": "^4.5.2"
|
|
34
38
|
},
|