@anvia/react-ui 1.0.0-rc.9 → 1.0.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.
- package/README.md +44 -37
- package/dist/attachment/index.d.ts +2 -2
- package/dist/attachment/index.js +4 -4
- package/dist/chat/index.d.ts +4 -4
- package/dist/chat/index.js +10 -9
- package/dist/{chunk-OINUOCTO.js → chunk-647LAYRV.js} +90 -65
- package/dist/chunk-647LAYRV.js.map +1 -0
- package/dist/chunk-6XOJFLX4.js +22 -0
- package/dist/chunk-6XOJFLX4.js.map +1 -0
- package/dist/{chunk-JBKSJG5W.js → chunk-CRXNFZRW.js} +45 -80
- package/dist/chunk-CRXNFZRW.js.map +1 -0
- package/dist/{chunk-ULGJLLZE.js → chunk-F6AKBUO3.js} +12 -12
- package/dist/chunk-F6AKBUO3.js.map +1 -0
- package/dist/{chunk-XAQA3JIG.js → chunk-HWJIMLHC.js} +41 -70
- package/dist/chunk-HWJIMLHC.js.map +1 -0
- package/dist/{chunk-BU4ZPDHQ.js → chunk-MISX4WUT.js} +10 -15
- package/dist/chunk-MISX4WUT.js.map +1 -0
- package/dist/{chunk-PSU4V23X.js → chunk-OQE6SHZE.js} +16 -30
- package/dist/chunk-OQE6SHZE.js.map +1 -0
- package/dist/{chunk-E5UNQCGM.js → chunk-S4XLE2RN.js} +6 -12
- package/dist/chunk-S4XLE2RN.js.map +1 -0
- package/dist/{chunk-F76H3VMN.js → chunk-SOG2GVE4.js} +45 -15
- package/dist/chunk-SOG2GVE4.js.map +1 -0
- package/dist/{chunk-ZPNAX4SA.js → chunk-UCBAG42A.js} +9 -21
- package/dist/chunk-UCBAG42A.js.map +1 -0
- package/dist/{chunk-EWIHRMU6.js → chunk-XC7K4XYM.js} +21 -28
- package/dist/chunk-XC7K4XYM.js.map +1 -0
- package/dist/completion/index.d.ts +2 -2
- package/dist/completion/index.js +4 -4
- package/dist/human-input/index.d.ts +2 -2
- package/dist/human-input/index.js +4 -4
- package/dist/image/index.d.ts +2 -2
- package/dist/image/index.js +4 -4
- package/dist/index.d.ts +11 -11
- package/dist/index.js +58 -63
- package/dist/index.js.map +1 -1
- package/dist/message/index.d.ts +2 -2
- package/dist/message/index.js +7 -6
- package/dist/selection-toolbar/index.d.ts +2 -2
- package/dist/selection-toolbar/index.js +5 -4
- package/dist/shared.d.ts +1 -1
- package/dist/shared.js +1 -1
- package/dist/stream/index.d.ts +2 -0
- package/dist/stream/index.js +1 -1
- package/dist/{thread-uEm8hH0s.d.ts → thread-Bz6-1zaJ.d.ts} +1 -0
- package/dist/thread-list/index.d.ts +3 -3
- package/dist/thread-list/index.js +6 -6
- package/package.json +18 -20
- package/dist/chunk-BU4ZPDHQ.js.map +0 -1
- package/dist/chunk-E5UNQCGM.js.map +0 -1
- package/dist/chunk-EWIHRMU6.js.map +0 -1
- package/dist/chunk-F76H3VMN.js.map +0 -1
- package/dist/chunk-JBKSJG5W.js.map +0 -1
- package/dist/chunk-OINUOCTO.js.map +0 -1
- package/dist/chunk-PSU4V23X.js.map +0 -1
- package/dist/chunk-ULGJLLZE.js.map +0 -1
- package/dist/chunk-XAQA3JIG.js.map +0 -1
- package/dist/chunk-ZPNAX4SA.js.map +0 -1
- package/dist/stream/styles.css +0 -17
- package/dist/styles.css +0 -130
|
@@ -1,14 +1,18 @@
|
|
|
1
|
+
import {
|
|
2
|
+
registerMessageElement
|
|
3
|
+
} from "./chunk-6XOJFLX4.js";
|
|
1
4
|
import {
|
|
2
5
|
StreamMarkdown
|
|
3
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-F6AKBUO3.js";
|
|
4
7
|
import {
|
|
5
|
-
|
|
6
|
-
} from "./chunk-
|
|
8
|
+
AttachmentPrimitive
|
|
9
|
+
} from "./chunk-MISX4WUT.js";
|
|
7
10
|
import {
|
|
8
11
|
messageText,
|
|
9
12
|
stringifyValue
|
|
10
13
|
} from "./chunk-CKA4CE26.js";
|
|
11
14
|
import {
|
|
15
|
+
composeRefs,
|
|
12
16
|
renderPrimitive
|
|
13
17
|
} from "./chunk-T3ZFZ3NP.js";
|
|
14
18
|
import {
|
|
@@ -18,7 +22,7 @@ import {
|
|
|
18
22
|
useMessage,
|
|
19
23
|
useMessagePart,
|
|
20
24
|
useOptionalMessagePart
|
|
21
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-SOG2GVE4.js";
|
|
22
26
|
|
|
23
27
|
// src/message/actions.tsx
|
|
24
28
|
import { forwardRef, useCallback, useEffect, useRef, useState } from "react";
|
|
@@ -32,8 +36,7 @@ var MessageActions = forwardRef(
|
|
|
32
36
|
children: props.children ?? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
33
37
|
/* @__PURE__ */ jsx(MessageCopy, {}),
|
|
34
38
|
/* @__PURE__ */ jsx(MessageRegenerate, {})
|
|
35
|
-
] })
|
|
36
|
-
"data-anvia-message-actions": ""
|
|
39
|
+
] })
|
|
37
40
|
},
|
|
38
41
|
ref
|
|
39
42
|
);
|
|
@@ -79,7 +82,6 @@ var MessageCopy = forwardRef(function MessageCopy2({ onClick, ...props }, ref) {
|
|
|
79
82
|
disabled,
|
|
80
83
|
onClick: handleClick,
|
|
81
84
|
type: props.type ?? "button",
|
|
82
|
-
"data-anvia-copy": "",
|
|
83
85
|
"data-state": copyState
|
|
84
86
|
},
|
|
85
87
|
ref
|
|
@@ -109,7 +111,6 @@ var MessageRegenerate = forwardRef(
|
|
|
109
111
|
disabled,
|
|
110
112
|
onClick: handleClick,
|
|
111
113
|
type: props.type ?? "button",
|
|
112
|
-
"data-anvia-regenerate": "",
|
|
113
114
|
"data-state": disabled ? "disabled" : "idle"
|
|
114
115
|
},
|
|
115
116
|
ref
|
|
@@ -121,17 +122,7 @@ var MessageRegenerate = forwardRef(
|
|
|
121
122
|
import { forwardRef as forwardRef2 } from "react";
|
|
122
123
|
import { jsx as jsx2 } from "react/jsx-runtime";
|
|
123
124
|
var MessageEntity = forwardRef2(function MessageEntity2({ children, entity, ...props }, ref) {
|
|
124
|
-
return /* @__PURE__ */ jsx2(
|
|
125
|
-
"span",
|
|
126
|
-
{
|
|
127
|
-
...props,
|
|
128
|
-
"data-anvia-message-entity": "",
|
|
129
|
-
"data-entity-id": entity.id,
|
|
130
|
-
"data-trigger-id": entity.triggerId,
|
|
131
|
-
ref,
|
|
132
|
-
children: children ?? entity.text
|
|
133
|
-
}
|
|
134
|
-
);
|
|
125
|
+
return /* @__PURE__ */ jsx2("span", { ...props, "data-role": "entity", ref, children: children ?? entity.text });
|
|
135
126
|
});
|
|
136
127
|
|
|
137
128
|
// src/message/parts.tsx
|
|
@@ -340,8 +331,7 @@ function messageEntityRehypeOptions() {
|
|
|
340
331
|
type: "element",
|
|
341
332
|
tagName: "span",
|
|
342
333
|
properties: {
|
|
343
|
-
|
|
344
|
-
dataAnviaEntityIndex: entityIndex === void 0 ? "" : String(entityIndex)
|
|
334
|
+
dataEntityIndex: entityIndex === void 0 ? "" : String(entityIndex)
|
|
345
335
|
},
|
|
346
336
|
children: [{ type: "text", value: node.value ?? "" }]
|
|
347
337
|
};
|
|
@@ -568,7 +558,7 @@ var MessageParts = forwardRef3(function MessageParts2({ children, filter, stream
|
|
|
568
558
|
{
|
|
569
559
|
...props,
|
|
570
560
|
children: renderMessagePartNodes(parts, children),
|
|
571
|
-
"data-
|
|
561
|
+
"data-role": "parts"
|
|
572
562
|
},
|
|
573
563
|
ref
|
|
574
564
|
);
|
|
@@ -589,9 +579,8 @@ var SmoothedMessageParts = forwardRef3(
|
|
|
589
579
|
{
|
|
590
580
|
...props,
|
|
591
581
|
children: renderMessagePartNodes(smooth.items, children, smooth.liveItemKey),
|
|
592
|
-
"data-
|
|
593
|
-
"data-
|
|
594
|
-
"data-streaming": stream.isStreaming ? "" : void 0
|
|
582
|
+
"data-role": "parts",
|
|
583
|
+
"data-state": smooth.isDraining ? "draining" : stream.isStreaming ? "streaming" : "idle"
|
|
595
584
|
},
|
|
596
585
|
ref
|
|
597
586
|
);
|
|
@@ -617,8 +606,7 @@ var MessagePart = forwardRef3(function MessagePart2({ children, ...props }, ref)
|
|
|
617
606
|
{
|
|
618
607
|
...props,
|
|
619
608
|
children: renderedChildren,
|
|
620
|
-
"data-
|
|
621
|
-
"data-part": part.type
|
|
609
|
+
"data-role": part.type
|
|
622
610
|
},
|
|
623
611
|
ref
|
|
624
612
|
);
|
|
@@ -655,9 +643,8 @@ var MessageTextContent = forwardRef3(
|
|
|
655
643
|
{
|
|
656
644
|
...props,
|
|
657
645
|
children: props.children ?? (ownsStream ? smooth.text : content),
|
|
658
|
-
"data-
|
|
659
|
-
"data-
|
|
660
|
-
"data-streaming": ownsStream && stream.isStreaming ? "" : void 0
|
|
646
|
+
"data-role": "text",
|
|
647
|
+
"data-state": ownsStream ? smooth.isDraining ? "draining" : stream.isStreaming ? "streaming" : "idle" : void 0
|
|
661
648
|
},
|
|
662
649
|
ref
|
|
663
650
|
);
|
|
@@ -740,9 +727,7 @@ var MessageMarkdownContent = forwardRef3(
|
|
|
740
727
|
...props,
|
|
741
728
|
components: renderedComponents,
|
|
742
729
|
content: renderedMarkdown,
|
|
743
|
-
"data-
|
|
744
|
-
"data-draining": ownsStream && smooth.isDraining ? "" : void 0,
|
|
745
|
-
"data-streaming": ownsStream && stream.isStreaming ? "" : void 0,
|
|
730
|
+
"data-state": ownsStream && smooth.isDraining ? "draining" : ownsStream && stream.isStreaming ? "streaming" : "idle",
|
|
746
731
|
live,
|
|
747
732
|
ref,
|
|
748
733
|
remarkPlugins: renderedRemarkPlugins,
|
|
@@ -759,20 +744,18 @@ function markdownComponents(components, entities, renderEntity) {
|
|
|
759
744
|
...components,
|
|
760
745
|
span(spanProps) {
|
|
761
746
|
const internalProps = spanProps;
|
|
762
|
-
const entityIndexValue = internalProps["data-
|
|
747
|
+
const entityIndexValue = internalProps["data-entity-index"];
|
|
763
748
|
const entityIndex = typeof entityIndexValue === "string" && /^\d+$/.test(entityIndexValue) ? Number(entityIndexValue) : void 0;
|
|
764
749
|
const entity = entityIndex === void 0 ? void 0 : entities[entityIndex];
|
|
765
750
|
const consumerProps = { ...internalProps };
|
|
766
|
-
delete consumerProps["data-
|
|
751
|
+
delete consumerProps["data-entity-index"];
|
|
767
752
|
if (entity !== void 0) {
|
|
768
753
|
if (renderEntity !== void 0) {
|
|
769
754
|
return renderEntity(entity);
|
|
770
755
|
}
|
|
771
756
|
const entityProps = {
|
|
772
757
|
...consumerProps,
|
|
773
|
-
"data-
|
|
774
|
-
"data-entity-id": entity.id,
|
|
775
|
-
"data-trigger-id": entity.triggerId
|
|
758
|
+
"data-role": "entity"
|
|
776
759
|
};
|
|
777
760
|
if (consumerSpan !== void 0) {
|
|
778
761
|
return createElement(consumerSpan, entityProps);
|
|
@@ -794,9 +777,8 @@ var MessageCodeBlock = forwardRef3(
|
|
|
794
777
|
"pre",
|
|
795
778
|
{
|
|
796
779
|
...props,
|
|
797
|
-
|
|
798
|
-
"
|
|
799
|
-
"data-language": language
|
|
780
|
+
"data-role": "code-block",
|
|
781
|
+
children: children ?? /* @__PURE__ */ jsx3("code", { className: language === void 0 ? void 0 : `language-${language}`, children: code ?? "" })
|
|
800
782
|
},
|
|
801
783
|
ref
|
|
802
784
|
);
|
|
@@ -815,8 +797,7 @@ var MessageReasoning = forwardRef3(
|
|
|
815
797
|
children: props.children ?? /* @__PURE__ */ jsxs2(Fragment2, { children: [
|
|
816
798
|
/* @__PURE__ */ jsx3("summary", { children: "Reasoning" }),
|
|
817
799
|
/* @__PURE__ */ jsx3("pre", { children: part.text })
|
|
818
|
-
] })
|
|
819
|
-
"data-anvia-reasoning": ""
|
|
800
|
+
] })
|
|
820
801
|
},
|
|
821
802
|
ref
|
|
822
803
|
);
|
|
@@ -833,7 +814,7 @@ var MessageTool = forwardRef3(function MessageTool2({ children, renderWhen = "al
|
|
|
833
814
|
{
|
|
834
815
|
...props,
|
|
835
816
|
children: renderedChildren,
|
|
836
|
-
"data-
|
|
817
|
+
"data-role": "tool",
|
|
837
818
|
"data-state": part.state
|
|
838
819
|
},
|
|
839
820
|
ref
|
|
@@ -849,8 +830,7 @@ var MessageToolName = forwardRef3(
|
|
|
849
830
|
"span",
|
|
850
831
|
{
|
|
851
832
|
...props,
|
|
852
|
-
children: props.children ?? part.toolName
|
|
853
|
-
"data-anvia-tool-name": ""
|
|
833
|
+
children: props.children ?? part.toolName
|
|
854
834
|
},
|
|
855
835
|
ref
|
|
856
836
|
);
|
|
@@ -867,7 +847,6 @@ var MessageToolStatus = forwardRef3(
|
|
|
867
847
|
{
|
|
868
848
|
...props,
|
|
869
849
|
children: props.children ?? toolStateLabel(part.state),
|
|
870
|
-
"data-anvia-tool-status": "",
|
|
871
850
|
"data-state": part.state
|
|
872
851
|
},
|
|
873
852
|
ref
|
|
@@ -884,8 +863,7 @@ var MessageToolInput = forwardRef3(
|
|
|
884
863
|
"pre",
|
|
885
864
|
{
|
|
886
865
|
...props,
|
|
887
|
-
children: props.children ?? stringifyValue(part.input)
|
|
888
|
-
"data-anvia-tool-input": ""
|
|
866
|
+
children: props.children ?? stringifyValue(part.input)
|
|
889
867
|
},
|
|
890
868
|
ref
|
|
891
869
|
);
|
|
@@ -901,8 +879,7 @@ var MessageToolOutput = forwardRef3(
|
|
|
901
879
|
"pre",
|
|
902
880
|
{
|
|
903
881
|
...props,
|
|
904
|
-
children: props.children ?? stringifyValue(part.output)
|
|
905
|
-
"data-anvia-tool-output": ""
|
|
882
|
+
children: props.children ?? stringifyValue(part.output)
|
|
906
883
|
},
|
|
907
884
|
ref
|
|
908
885
|
);
|
|
@@ -919,7 +896,6 @@ var MessageToolError = forwardRef3(
|
|
|
919
896
|
{
|
|
920
897
|
...props,
|
|
921
898
|
children: props.children ?? part.error.message,
|
|
922
|
-
"data-anvia-tool-error": "",
|
|
923
899
|
role: props.role ?? "alert"
|
|
924
900
|
},
|
|
925
901
|
ref
|
|
@@ -932,13 +908,12 @@ var MessageAttachment = forwardRef3(
|
|
|
932
908
|
if (part.type !== "attachment") {
|
|
933
909
|
return null;
|
|
934
910
|
}
|
|
935
|
-
const renderedChildren = typeof children === "function" ? children(part.attachment) : children ?? /* @__PURE__ */ jsx3(
|
|
911
|
+
const renderedChildren = typeof children === "function" ? children(part.attachment) : children ?? /* @__PURE__ */ jsx3(AttachmentPrimitive.Root, {});
|
|
936
912
|
return /* @__PURE__ */ jsx3(InternalAttachmentProvider, { value: { attachment: part.attachment }, children: renderPrimitive(
|
|
937
913
|
"div",
|
|
938
914
|
{
|
|
939
915
|
...props,
|
|
940
|
-
children: renderedChildren
|
|
941
|
-
"data-anvia-message-attachment": ""
|
|
916
|
+
children: renderedChildren
|
|
942
917
|
},
|
|
943
918
|
ref
|
|
944
919
|
) });
|
|
@@ -954,9 +929,7 @@ var MessageData = forwardRef3(
|
|
|
954
929
|
"pre",
|
|
955
930
|
{
|
|
956
931
|
...props,
|
|
957
|
-
children: props.children ?? stringifyValue(part.data)
|
|
958
|
-
"data-anvia-data": "",
|
|
959
|
-
"data-name": part.name
|
|
932
|
+
children: props.children ?? stringifyValue(part.data)
|
|
960
933
|
},
|
|
961
934
|
ref
|
|
962
935
|
);
|
|
@@ -973,7 +946,6 @@ var MessageError = forwardRef3(
|
|
|
973
946
|
{
|
|
974
947
|
...props,
|
|
975
948
|
children: props.children ?? part.error.message,
|
|
976
|
-
"data-anvia-error": "",
|
|
977
949
|
role: props.role ?? "alert"
|
|
978
950
|
},
|
|
979
951
|
ref
|
|
@@ -1013,18 +985,7 @@ function defaultCodeComponent({
|
|
|
1013
985
|
node: _node,
|
|
1014
986
|
...props
|
|
1015
987
|
}) {
|
|
1016
|
-
|
|
1017
|
-
return /* @__PURE__ */ jsx3(
|
|
1018
|
-
"code",
|
|
1019
|
-
{
|
|
1020
|
-
className,
|
|
1021
|
-
"data-anvia-code": "",
|
|
1022
|
-
"data-anvia-inline-code": language === void 0 ? "" : void 0,
|
|
1023
|
-
"data-language": language,
|
|
1024
|
-
...props,
|
|
1025
|
-
children
|
|
1026
|
-
}
|
|
1027
|
-
);
|
|
988
|
+
return /* @__PURE__ */ jsx3("code", { className, ...props, children });
|
|
1028
989
|
}
|
|
1029
990
|
function defaultPreComponent({
|
|
1030
991
|
children,
|
|
@@ -1053,20 +1014,25 @@ function toolStateLabel(state) {
|
|
|
1053
1014
|
}
|
|
1054
1015
|
|
|
1055
1016
|
// src/message/root.tsx
|
|
1056
|
-
import { forwardRef as forwardRef4 } from "react";
|
|
1017
|
+
import { forwardRef as forwardRef4, useCallback as useCallback2, useMemo as useMemo2 } from "react";
|
|
1057
1018
|
var MessageRoot = forwardRef4(function MessageRoot2({ children, ...props }, ref) {
|
|
1058
1019
|
const { message } = useMessage();
|
|
1059
1020
|
const renderedChildren = typeof children === "function" ? children(message) : children;
|
|
1021
|
+
const registerElement = useCallback2(
|
|
1022
|
+
(element) => {
|
|
1023
|
+
if (element !== null) registerMessageElement(element, message.id);
|
|
1024
|
+
},
|
|
1025
|
+
[message.id]
|
|
1026
|
+
);
|
|
1027
|
+
const composedRef = useMemo2(() => composeRefs(ref, registerElement), [ref, registerElement]);
|
|
1060
1028
|
return renderPrimitive(
|
|
1061
1029
|
"article",
|
|
1062
1030
|
{
|
|
1063
1031
|
...props,
|
|
1064
1032
|
children: renderedChildren,
|
|
1065
|
-
"data-anvia-message": "",
|
|
1066
|
-
"data-anvia-message-id": message.id,
|
|
1067
1033
|
"data-role": message.role
|
|
1068
1034
|
},
|
|
1069
|
-
|
|
1035
|
+
composedRef
|
|
1070
1036
|
);
|
|
1071
1037
|
});
|
|
1072
1038
|
var MessageContent = forwardRef4(
|
|
@@ -1074,8 +1040,7 @@ var MessageContent = forwardRef4(
|
|
|
1074
1040
|
return renderPrimitive(
|
|
1075
1041
|
"div",
|
|
1076
1042
|
{
|
|
1077
|
-
...props
|
|
1078
|
-
"data-anvia-message-content": ""
|
|
1043
|
+
...props
|
|
1079
1044
|
},
|
|
1080
1045
|
ref
|
|
1081
1046
|
);
|
|
@@ -1083,7 +1048,7 @@ var MessageContent = forwardRef4(
|
|
|
1083
1048
|
);
|
|
1084
1049
|
|
|
1085
1050
|
// src/message/index.ts
|
|
1086
|
-
var
|
|
1051
|
+
var MessagePrimitive = {
|
|
1087
1052
|
Root: MessageRoot,
|
|
1088
1053
|
Content: MessageContent,
|
|
1089
1054
|
Parts: MessageParts,
|
|
@@ -1110,6 +1075,6 @@ var Message = {
|
|
|
1110
1075
|
export {
|
|
1111
1076
|
isComposerEntityData,
|
|
1112
1077
|
shiftComposerEntityRanges,
|
|
1113
|
-
|
|
1078
|
+
MessagePrimitive
|
|
1114
1079
|
};
|
|
1115
|
-
//# sourceMappingURL=chunk-
|
|
1080
|
+
//# sourceMappingURL=chunk-CRXNFZRW.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/message/actions.tsx","../src/message/entity.tsx","../src/message/parts.tsx","../src/strict-json.ts","../src/entities.ts","../src/message/markdown-entities.ts","../src/message/root.tsx","../src/message/index.ts"],"sourcesContent":["import { forwardRef, type MouseEvent, useCallback, useEffect, useRef, useState } from \"react\";\n\nimport { useChatContext, useMessage } from \"../contexts\";\nimport { messageText } from \"../format\";\nimport { type PrimitiveProps, renderPrimitive } from \"../primitives\";\n\nconst MessageActions = forwardRef<HTMLDivElement, PrimitiveProps<\"div\">>(\n function MessageActions(props, ref) {\n return renderPrimitive(\n \"div\",\n {\n ...props,\n children: props.children ?? (\n <>\n <MessageCopy />\n <MessageRegenerate />\n </>\n ),\n } as PrimitiveProps<\"div\">,\n ref,\n );\n },\n);\n\ntype MessageCopyState = \"idle\" | \"copied\" | \"error\";\n\nconst MessageCopy = forwardRef<HTMLButtonElement, PrimitiveProps<\"button\">>(function MessageCopy(\n { onClick, ...props },\n ref,\n) {\n const { message } = useMessage();\n const [copyState, setCopyState] = useState<MessageCopyState>(\"idle\");\n const text = messageText(message);\n const previousTextRef = useRef(text);\n const disabled = props.disabled ?? text.length === 0;\n\n useEffect(() => {\n if (previousTextRef.current !== text) {\n previousTextRef.current = text;\n setCopyState(\"idle\");\n }\n }, [text]);\n\n const handleClick = useCallback(\n async (event: MouseEvent<HTMLButtonElement>) => {\n onClick?.(event);\n if (event.defaultPrevented || disabled) {\n return;\n }\n const writeText = navigator.clipboard?.writeText;\n if (writeText === undefined) {\n setCopyState(\"error\");\n return;\n }\n try {\n await writeText.call(navigator.clipboard, text);\n setCopyState(\"copied\");\n } catch {\n setCopyState(\"error\");\n }\n },\n [disabled, onClick, text],\n );\n\n return renderPrimitive(\n \"button\",\n {\n ...props,\n children: props.children ?? \"Copy\",\n disabled,\n onClick: handleClick,\n type: props.type ?? \"button\",\n \"data-state\": copyState,\n } as PrimitiveProps<\"button\">,\n ref,\n );\n});\n\nconst MessageRegenerate = forwardRef<HTMLButtonElement, PrimitiveProps<\"button\">>(\n function MessageRegenerate({ onClick, ...props }, ref) {\n const chat = useChatContext();\n const { message } = useMessage();\n const latestAssistantMessage = [...chat.messages]\n .reverse()\n .find((item) => item.role === \"assistant\");\n const disabled =\n props.disabled ??\n (chat.status === \"submitted\" ||\n chat.status === \"streaming\" ||\n message.role !== \"assistant\" ||\n latestAssistantMessage?.id !== message.id);\n\n const handleClick = useCallback(\n (event: MouseEvent<HTMLButtonElement>) => {\n onClick?.(event);\n if (event.defaultPrevented || disabled) {\n return;\n }\n void chat.regenerate();\n },\n [chat, disabled, onClick],\n );\n\n return renderPrimitive(\n \"button\",\n {\n ...props,\n children: props.children ?? \"Regenerate\",\n disabled,\n onClick: handleClick,\n type: props.type ?? \"button\",\n \"data-state\": disabled ? \"disabled\" : \"idle\",\n } as PrimitiveProps<\"button\">,\n ref,\n );\n },\n);\n\nexport { MessageActions, MessageCopy, MessageRegenerate };\n","import { forwardRef, type HTMLAttributes } from \"react\";\nimport type { ComposerEntity } from \"../contexts\";\n\nexport type MessageEntityProps = HTMLAttributes<HTMLSpanElement> & {\n entity: ComposerEntity;\n};\n\nconst MessageEntity = forwardRef<HTMLSpanElement, MessageEntityProps>(function MessageEntity(\n { children, entity, ...props },\n ref,\n) {\n return (\n <span {...props} data-role=\"entity\" ref={ref}>\n {children ?? entity.text}\n </span>\n );\n});\n\nexport { MessageEntity };\n","import type { UIAttachment, UIMessagePart } from \"@anvia/client\";\nimport {\n type SmoothStreamItemAdapter,\n type StreamSmoothingLifecycle,\n useSmoothStreamItems,\n useSmoothStreamText,\n} from \"@anvia/react\";\nimport {\n type ComponentPropsWithoutRef,\n createElement,\n forwardRef,\n type ReactNode,\n useMemo,\n} from \"react\";\nimport type { Components, Options as ReactMarkdownOptions } from \"react-markdown\";\nimport remarkGfm from \"remark-gfm\";\n\nimport { AttachmentPrimitive } from \"../attachment/index\";\nimport type { ComposerEntity } from \"../contexts\";\nimport {\n InternalAttachmentProvider,\n InternalMessagePartProvider,\n useMessage,\n useMessagePart,\n useOptionalMessagePart,\n} from \"../contexts\";\nimport { entitiesForTextSegment, messageTextLayout, validComposerEntities } from \"../entities\";\nimport { stringifyValue } from \"../format\";\nimport { type PrimitiveProps, renderPrimitive } from \"../primitives\";\nimport { StreamMarkdown } from \"../stream\";\nimport { MessageEntity } from \"./entity\";\nimport { createMessageEntityRemarkPlugin, messageEntityRehypeOptions } from \"./markdown-entities\";\n\ntype MessagePartChildren = ReactNode | ((part: UIMessagePart) => ReactNode);\nexport type MessagePartsFilter = (part: UIMessagePart) => boolean;\nexport type MessageToolPart = Extract<UIMessagePart, { type: \"tool\" }>;\ntype MessageToolChildren = ReactNode | ((part: MessageToolPart) => ReactNode);\nexport type MessageToolRenderWhen = \"always\" | \"pending\" | \"settled\";\nexport type MessageAttachmentPart = Extract<UIMessagePart, { type: \"attachment\" }>;\ntype MessageAttachmentChildren = ReactNode | ((attachment: UIAttachment) => ReactNode);\n\nexport type MessageStreamOptions = StreamSmoothingLifecycle;\n\ntype MessageStreamProps = {\n stream?: MessageStreamOptions;\n};\n\nconst messagePartStreamAdapter: SmoothStreamItemAdapter<UIMessagePart> = {\n getKey: (part) => part.id,\n getText: (part) => (part.type === \"text\" || part.type === \"reasoning\" ? part.text : undefined),\n withText: (part, text) => {\n if (part.type === \"text\" || part.type === \"reasoning\") {\n return part.text === text ? part : { ...part, text };\n }\n return part;\n },\n};\n\ntype MessagePartsProps = Omit<PrimitiveProps<\"div\">, \"children\"> & {\n children?: MessagePartChildren;\n filter?: MessagePartsFilter;\n} & MessageStreamProps;\n\nconst MessageParts = forwardRef<HTMLDivElement, MessagePartsProps>(function MessageParts(\n { children, filter, stream, ...props },\n ref,\n) {\n const { message } = useMessage();\n const parts = filter === undefined ? message.parts : message.parts.filter(filter);\n if (stream !== undefined) {\n return (\n <SmoothedMessageParts {...props} parts={parts} ref={ref} stream={stream}>\n {children}\n </SmoothedMessageParts>\n );\n }\n\n return renderPrimitive(\n \"div\",\n {\n ...props,\n children: renderMessagePartNodes(parts, children),\n \"data-role\": \"parts\",\n } as PrimitiveProps<\"div\">,\n ref,\n );\n});\n\ntype SmoothedMessagePartsProps = Omit<PrimitiveProps<\"div\">, \"children\"> & {\n children?: MessagePartChildren;\n parts: readonly UIMessagePart[];\n stream: MessageStreamOptions;\n};\n\nconst SmoothedMessageParts = forwardRef<HTMLDivElement, SmoothedMessagePartsProps>(\n function SmoothedMessageParts({ children, parts, stream, ...props }, ref) {\n const streamOptions = {\n adapter: messagePartStreamAdapter,\n isStreaming: stream.isStreaming,\n resetKey: stream.resetKey,\n };\n if (stream.flushImmediately !== undefined) {\n Object.assign(streamOptions, { flushImmediately: stream.flushImmediately });\n }\n const smooth = useSmoothStreamItems(parts, streamOptions);\n\n return renderPrimitive(\n \"div\",\n {\n ...props,\n children: renderMessagePartNodes(smooth.items, children, smooth.liveItemKey),\n \"data-role\": \"parts\",\n \"data-state\": smooth.isDraining ? \"draining\" : stream.isStreaming ? \"streaming\" : \"idle\",\n } as PrimitiveProps<\"div\">,\n ref,\n );\n },\n);\n\nfunction renderMessagePartNodes(\n parts: readonly UIMessagePart[],\n children: MessagePartChildren | undefined,\n liveItemKey?: string | null,\n): ReactNode[] {\n return parts.map((part) => (\n <InternalMessagePartProvider\n isLive={liveItemKey === part.id}\n key={part.id}\n part={part}\n streamControlled={liveItemKey !== undefined}\n >\n {typeof children === \"function\" ? children(part) : (children ?? <MessagePart />)}\n </InternalMessagePartProvider>\n ));\n}\n\ntype MessagePartProps = Omit<PrimitiveProps<\"div\">, \"children\"> & {\n children?: MessagePartChildren;\n};\n\nconst MessagePart = forwardRef<HTMLDivElement, MessagePartProps>(function MessagePart(\n { children, ...props },\n ref,\n) {\n const { part } = useMessagePart();\n const renderedChildren =\n typeof children === \"function\" ? children(part) : (children ?? defaultPart(part));\n\n return renderPrimitive(\n \"div\",\n {\n ...props,\n children: renderedChildren,\n \"data-role\": part.type,\n } as PrimitiveProps<\"div\">,\n ref,\n );\n});\n\ntype MessageTextProps = PrimitiveProps<\"span\"> & MessageStreamProps;\n\nconst MessageText = forwardRef<HTMLSpanElement, MessageTextProps>(function MessageText(props, ref) {\n const { part, streamControlled } = useMessagePart();\n if (part.type !== \"text\") {\n return null;\n }\n\n return (\n <MessageTextContent\n {...props}\n content={part.text}\n partId={part.id}\n ref={ref}\n streamControlled={streamControlled}\n />\n );\n});\n\ntype MessageTextContentProps = MessageTextProps & {\n content: string;\n partId: string;\n streamControlled: boolean;\n};\n\nconst MessageTextContent = forwardRef<HTMLSpanElement, MessageTextContentProps>(\n function MessageTextContent({ content, partId, stream, streamControlled, ...props }, ref) {\n const ownsStream = stream !== undefined && !streamControlled && props.children === undefined;\n const streamOptions = {\n isStreaming: ownsStream ? stream.isStreaming : false,\n resetKey: ownsStream ? stream.resetKey : partId,\n };\n if (ownsStream && stream.flushImmediately !== undefined) {\n Object.assign(streamOptions, { flushImmediately: stream.flushImmediately });\n }\n const smooth = useSmoothStreamText(content, streamOptions);\n\n return renderPrimitive(\n \"span\",\n {\n ...props,\n children: props.children ?? (ownsStream ? smooth.text : content),\n \"data-role\": \"text\",\n \"data-state\": ownsStream\n ? smooth.isDraining\n ? \"draining\"\n : stream.isStreaming\n ? \"streaming\"\n : \"idle\"\n : undefined,\n } as PrimitiveProps<\"span\">,\n ref,\n );\n },\n);\n\ntype MessageMarkdownProps = Omit<PrimitiveProps<\"div\">, \"children\"> &\n MessageStreamProps & {\n children?: string;\n components?: Components;\n renderEntity?: ((entity: ComposerEntity) => ReactNode) | undefined;\n remarkPlugins?: ReactMarkdownOptions[\"remarkPlugins\"];\n };\n\nconst MessageMarkdown = forwardRef<HTMLDivElement, MessageMarkdownProps>(function MessageMarkdown(\n { children, ...props },\n ref,\n) {\n const { message } = useMessage();\n const partContext = useOptionalMessagePart();\n const part = partContext?.part;\n if (part !== undefined && part.type !== \"text\") {\n return null;\n }\n\n const layout = messageTextLayout(message.parts);\n const markdown = children ?? (part?.type === \"text\" ? part.text : layout.text);\n const expectedMarkdown = part?.type === \"text\" ? part.text : layout.text;\n const validEntities =\n children === undefined || children === expectedMarkdown\n ? validComposerEntities(layout.text, message.metadata)\n : [];\n const segment =\n part?.type === \"text\"\n ? layout.segments.find((candidate) => candidate.part.id === part.id)\n : undefined;\n const entities =\n segment === undefined ? validEntities : entitiesForTextSegment(validEntities, segment);\n const lastPart = message.parts.at(-1);\n const liveEligible = part?.type === \"text\" ? lastPart?.id === part.id : lastPart?.type === \"text\";\n\n return (\n <MessageMarkdownContent\n {...props}\n entities={entities}\n liveEligible={liveEligible}\n markdown={markdown}\n ref={ref}\n resetKey={message.id}\n streamControlled={partContext?.streamControlled ?? false}\n streamLive={partContext?.isLive ?? false}\n />\n );\n});\n\ntype MessageMarkdownContentProps = Omit<MessageMarkdownProps, \"children\"> & {\n entities: ComposerEntity[];\n liveEligible: boolean;\n markdown: string;\n resetKey: string;\n streamControlled: boolean;\n streamLive: boolean;\n};\n\nconst MessageMarkdownContent = forwardRef<HTMLDivElement, MessageMarkdownContentProps>(\n function MessageMarkdownContent(\n {\n components,\n renderEntity,\n remarkPlugins,\n entities,\n liveEligible,\n markdown,\n resetKey,\n stream,\n streamControlled,\n streamLive,\n ...props\n },\n ref,\n ) {\n const ownsStream = stream !== undefined && !streamControlled;\n const streamOptions = {\n isStreaming: ownsStream ? stream.isStreaming : false,\n resetKey: ownsStream ? stream.resetKey : resetKey,\n };\n if (ownsStream && stream.flushImmediately !== undefined) {\n Object.assign(streamOptions, { flushImmediately: stream.flushImmediately });\n }\n const smooth = useSmoothStreamText(markdown, streamOptions);\n const renderedMarkdown = ownsStream ? smooth.text : markdown;\n const renderedEntities = useMemo(\n () =>\n entities.length === 0\n ? entities\n : validComposerEntities(renderedMarkdown, {\n composer: { entities },\n }),\n [entities, renderedMarkdown],\n );\n const renderedComponents = useMemo(\n () => markdownComponents(components, renderedEntities, renderEntity),\n [components, renderEntity, renderedEntities],\n );\n const renderedRemarkPlugins = useMemo(\n () =>\n renderedEntities.length === 0\n ? remarkPlugins\n : [\n createMessageEntityRemarkPlugin(renderedMarkdown, renderedEntities),\n ...(remarkPlugins ?? [remarkGfm]),\n ],\n [remarkPlugins, renderedEntities, renderedMarkdown],\n );\n const live = streamControlled\n ? streamLive\n : ownsStream && liveEligible && (stream.isStreaming || smooth.isDraining);\n\n return (\n <StreamMarkdown\n {...props}\n components={renderedComponents}\n content={renderedMarkdown}\n data-state={\n ownsStream && smooth.isDraining\n ? \"draining\"\n : ownsStream && stream.isStreaming\n ? \"streaming\"\n : \"idle\"\n }\n live={live}\n ref={ref}\n remarkPlugins={renderedRemarkPlugins}\n remarkRehypeOptions={\n renderedEntities.length === 0 ? undefined : messageEntityRehypeOptions()\n }\n />\n );\n },\n);\n\nfunction markdownComponents(\n components: Components | undefined,\n entities: ComposerEntity[],\n renderEntity: ((entity: ComposerEntity) => ReactNode) | undefined,\n): Components {\n const consumerSpan = components?.span;\n return {\n code: defaultCodeComponent,\n pre: defaultPreComponent,\n ...components,\n span(spanProps) {\n const internalProps = spanProps as typeof spanProps & {\n \"data-entity-index\"?: string | undefined;\n };\n const entityIndexValue = internalProps[\"data-entity-index\"];\n const entityIndex =\n typeof entityIndexValue === \"string\" && /^\\d+$/.test(entityIndexValue)\n ? Number(entityIndexValue)\n : undefined;\n const entity = entityIndex === undefined ? undefined : entities[entityIndex];\n const consumerProps = { ...internalProps };\n delete consumerProps[\"data-entity-index\"];\n\n if (entity !== undefined) {\n if (renderEntity !== undefined) {\n return renderEntity(entity);\n }\n const entityProps = {\n ...consumerProps,\n \"data-role\": \"entity\",\n };\n if (consumerSpan !== undefined) {\n return createElement(consumerSpan, entityProps);\n }\n const { node: _node, ...elementProps } = entityProps;\n return <MessageEntity {...elementProps} entity={entity} />;\n }\n\n if (consumerSpan !== undefined) {\n return createElement(consumerSpan, consumerProps);\n }\n const { node: _node, ...elementProps } = consumerProps;\n return <span {...elementProps} />;\n },\n };\n}\n\ntype MessageCodeBlockProps = Omit<PrimitiveProps<\"pre\">, \"children\"> & {\n children?: ReactNode;\n code?: string;\n language?: string;\n};\n\nconst MessageCodeBlock = forwardRef<HTMLPreElement, MessageCodeBlockProps>(\n function MessageCodeBlock({ children, code, language, ...props }, ref) {\n return renderPrimitive(\n \"pre\",\n {\n ...props,\n \"data-role\": \"code-block\",\n children: children ?? (\n <code className={language === undefined ? undefined : `language-${language}`}>\n {code ?? \"\"}\n </code>\n ),\n } as PrimitiveProps<\"pre\">,\n ref,\n );\n },\n);\n\nconst MessageReasoning = forwardRef<HTMLDetailsElement, PrimitiveProps<\"details\">>(\n function MessageReasoning(props, ref) {\n const { part } = useMessagePart();\n if (part.type !== \"reasoning\") {\n return null;\n }\n\n return renderPrimitive(\n \"details\",\n {\n ...props,\n children: props.children ?? (\n <>\n <summary>Reasoning</summary>\n <pre>{part.text}</pre>\n </>\n ),\n } as PrimitiveProps<\"details\">,\n ref,\n );\n },\n);\n\ntype MessageToolProps = Omit<PrimitiveProps<\"div\">, \"children\"> & {\n children?: MessageToolChildren;\n renderWhen?: MessageToolRenderWhen;\n};\n\nconst MessageTool = forwardRef<HTMLDivElement, MessageToolProps>(function MessageTool(\n { children, renderWhen = \"always\", ...props },\n ref,\n) {\n const { part } = useMessagePart();\n if (part.type !== \"tool\" || !shouldRenderTool(part, renderWhen)) {\n return null;\n }\n const renderedChildren =\n typeof children === \"function\" ? children(part) : (children ?? defaultToolContent());\n\n return renderPrimitive(\n \"div\",\n {\n ...props,\n children: renderedChildren,\n \"data-role\": \"tool\",\n \"data-state\": part.state,\n } as PrimitiveProps<\"div\">,\n ref,\n );\n});\n\nconst MessageToolName = forwardRef<HTMLSpanElement, PrimitiveProps<\"span\">>(\n function MessageToolName(props, ref) {\n const { part } = useMessagePart();\n if (part.type !== \"tool\") {\n return null;\n }\n\n return renderPrimitive(\n \"span\",\n {\n ...props,\n children: props.children ?? part.toolName,\n } as PrimitiveProps<\"span\">,\n ref,\n );\n },\n);\n\nconst MessageToolStatus = forwardRef<HTMLSpanElement, PrimitiveProps<\"span\">>(\n function MessageToolStatus(props, ref) {\n const { part } = useMessagePart();\n if (part.type !== \"tool\") {\n return null;\n }\n\n return renderPrimitive(\n \"span\",\n {\n ...props,\n children: props.children ?? toolStateLabel(part.state),\n \"data-state\": part.state,\n } as PrimitiveProps<\"span\">,\n ref,\n );\n },\n);\n\nconst MessageToolInput = forwardRef<HTMLPreElement, PrimitiveProps<\"pre\">>(\n function MessageToolInput(props, ref) {\n const { part } = useMessagePart();\n if (part.type !== \"tool\") {\n return null;\n }\n\n return renderPrimitive(\n \"pre\",\n {\n ...props,\n children: props.children ?? stringifyValue(part.input),\n } as PrimitiveProps<\"pre\">,\n ref,\n );\n },\n);\n\nconst MessageToolOutput = forwardRef<HTMLPreElement, PrimitiveProps<\"pre\">>(\n function MessageToolOutput(props, ref) {\n const { part } = useMessagePart();\n if (part.type !== \"tool\" || part.state !== \"output-available\") {\n return null;\n }\n\n return renderPrimitive(\n \"pre\",\n {\n ...props,\n children: props.children ?? stringifyValue(part.output),\n } as PrimitiveProps<\"pre\">,\n ref,\n );\n },\n);\n\nconst MessageToolError = forwardRef<HTMLDivElement, PrimitiveProps<\"div\">>(\n function MessageToolError(props, ref) {\n const { part } = useMessagePart();\n if (part.type !== \"tool\" || part.state !== \"error\") {\n return null;\n }\n\n return renderPrimitive(\n \"div\",\n {\n ...props,\n children: props.children ?? part.error.message,\n role: props.role ?? \"alert\",\n } as PrimitiveProps<\"div\">,\n ref,\n );\n },\n);\n\ntype MessageAttachmentProps = Omit<PrimitiveProps<\"div\">, \"children\"> & {\n children?: MessageAttachmentChildren;\n};\n\nconst MessageAttachment = forwardRef<HTMLDivElement, MessageAttachmentProps>(\n function MessageAttachment({ children, ...props }, ref) {\n const { part } = useMessagePart();\n if (part.type !== \"attachment\") {\n return null;\n }\n const renderedChildren =\n typeof children === \"function\"\n ? children(part.attachment)\n : (children ?? <AttachmentPrimitive.Root />);\n\n return (\n <InternalAttachmentProvider value={{ attachment: part.attachment }}>\n {renderPrimitive(\n \"div\",\n {\n ...props,\n children: renderedChildren,\n } as PrimitiveProps<\"div\">,\n ref,\n )}\n </InternalAttachmentProvider>\n );\n },\n);\n\nconst MessageData = forwardRef<HTMLPreElement, PrimitiveProps<\"pre\">>(\n function MessageData(props, ref) {\n const { part } = useMessagePart();\n if (part.type !== \"data\") {\n return null;\n }\n\n return renderPrimitive(\n \"pre\",\n {\n ...props,\n children: props.children ?? stringifyValue(part.data),\n } as PrimitiveProps<\"pre\">,\n ref,\n );\n },\n);\n\nconst MessageError = forwardRef<HTMLDivElement, PrimitiveProps<\"div\">>(\n function MessageError(props, ref) {\n const { part } = useMessagePart();\n if (part.type !== \"error\") {\n return null;\n }\n\n return renderPrimitive(\n \"div\",\n {\n ...props,\n children: props.children ?? part.error.message,\n role: props.role ?? \"alert\",\n } as PrimitiveProps<\"div\">,\n ref,\n );\n },\n);\n\nfunction defaultPart(part: UIMessagePart): ReactNode {\n if (part.type === \"text\") {\n return <MessageText />;\n }\n if (part.type === \"reasoning\") {\n return <MessageReasoning />;\n }\n if (part.type === \"tool\") {\n return <MessageTool />;\n }\n if (part.type === \"attachment\") {\n return <MessageAttachment />;\n }\n if (part.type === \"data\") {\n return <MessageData />;\n }\n return <MessageError />;\n}\n\nfunction defaultToolContent(): ReactNode {\n return (\n <>\n <MessageToolName />\n <MessageToolStatus />\n <MessageToolInput />\n <MessageToolOutput />\n <MessageToolError />\n </>\n );\n}\n\nfunction defaultCodeComponent({\n children,\n className,\n node: _node,\n ...props\n}: ComponentPropsWithoutRef<\"code\"> & { node?: unknown }): ReactNode {\n return (\n <code className={className} {...props}>\n {children}\n </code>\n );\n}\n\nfunction defaultPreComponent({\n children,\n node: _node,\n ...props\n}: ComponentPropsWithoutRef<\"pre\"> & { node?: unknown }): ReactNode {\n return <MessageCodeBlock {...props}>{children}</MessageCodeBlock>;\n}\n\nfunction shouldRenderTool(part: MessageToolPart, renderWhen: MessageToolRenderWhen): boolean {\n if (renderWhen === \"always\") {\n return true;\n }\n if (renderWhen === \"pending\") {\n return part.state === \"input-streaming\" || part.state === \"input-available\";\n }\n return part.state === \"output-available\" || part.state === \"error\";\n}\n\nfunction toolStateLabel(state: MessageToolPart[\"state\"]): string {\n if (state === \"output-available\") {\n return \"Done\";\n }\n if (state === \"error\") {\n return \"Error\";\n }\n return \"Running\";\n}\n\nexport {\n MessageAttachment,\n MessageCodeBlock,\n MessageData,\n MessageError,\n MessageMarkdown,\n MessagePart,\n MessageParts,\n MessageReasoning,\n MessageText,\n MessageTool,\n MessageToolError,\n MessageToolInput,\n MessageToolName,\n MessageToolOutput,\n MessageToolStatus,\n};\n","import type { ComposerEntityData } from \"./contexts/composer\";\n\nexport function isComposerEntityData(value: unknown): value is ComposerEntityData {\n return isComposerEntityDataWithAncestors(value, new WeakSet<object>());\n}\n\nfunction isComposerEntityDataWithAncestors(\n value: unknown,\n ancestors: WeakSet<object>,\n): value is ComposerEntityData {\n if (value === null || typeof value === \"string\" || typeof value === \"boolean\") return true;\n if (typeof value === \"number\") return Number.isFinite(value);\n if (typeof value !== \"object\" || ancestors.has(value)) return false;\n\n ancestors.add(value);\n try {\n if (Array.isArray(value)) {\n if (Object.getPrototypeOf(value) !== Array.prototype || !hasOnlyDenseArrayProperties(value)) {\n return false;\n }\n for (let index = 0; index < value.length; index += 1) {\n if (!isComposerEntityDataWithAncestors(value[index], ancestors)) return false;\n }\n return true;\n }\n\n const prototype = Object.getPrototypeOf(value);\n if (prototype !== Object.prototype && prototype !== null) return false;\n for (const key of Reflect.ownKeys(value)) {\n if (typeof key !== \"string\") return false;\n const descriptor = Object.getOwnPropertyDescriptor(value, key);\n if (\n descriptor === undefined ||\n !descriptor.enumerable ||\n !(\"value\" in descriptor) ||\n !isComposerEntityDataWithAncestors(descriptor.value, ancestors)\n ) {\n return false;\n }\n }\n return true;\n } catch {\n return false;\n } finally {\n ancestors.delete(value);\n }\n}\n\nfunction hasOnlyDenseArrayProperties(value: unknown[]): boolean {\n const keys = Reflect.ownKeys(value);\n if (keys.length !== value.length + 1 || keys.at(-1) !== \"length\") return false;\n for (let index = 0; index < value.length; index += 1) {\n const key = String(index);\n if (keys[index] !== key) return false;\n const descriptor = Object.getOwnPropertyDescriptor(value, key);\n if (descriptor === undefined || !descriptor.enumerable || !(\"value\" in descriptor)) {\n return false;\n }\n }\n return true;\n}\n","import type { UIMessagePart } from \"@anvia/client\";\nimport type { ComposerEntity } from \"./contexts/composer\";\nimport { isComposerEntityData } from \"./strict-json\";\n\nexport type MessageTextSegment = {\n part: Extract<UIMessagePart, { type: \"text\" }>;\n from: number;\n to: number;\n};\n\nexport type MessageTextLayout = {\n text: string;\n segments: MessageTextSegment[];\n};\n\nexport function messageTextLayout(parts: readonly UIMessagePart[]): MessageTextLayout {\n const textParts = parts.filter(\n (part): part is Extract<UIMessagePart, { type: \"text\" }> => part.type === \"text\",\n );\n const segments: MessageTextSegment[] = [];\n let offset = 0;\n\n for (const [index, part] of textParts.entries()) {\n const from = offset;\n const to = from + part.text.length;\n segments.push({ part, from, to });\n offset = to + (index === textParts.length - 1 ? 0 : 2);\n }\n\n return {\n text: textParts.map((part) => part.text).join(\"\\n\\n\"),\n segments,\n };\n}\n\nexport function validComposerEntities(text: string, metadata: unknown): ComposerEntity[] {\n const candidates = composerEntityCandidates(metadata);\n const individuallyValid = candidates.flatMap((candidate, index) => {\n const entity = parseComposerEntity(candidate, text);\n return entity === undefined ? [] : [{ entity, index }];\n });\n individuallyValid.sort(\n (left, right) =>\n left.entity.range.from - right.entity.range.from ||\n left.entity.range.to - right.entity.range.to ||\n left.index - right.index,\n );\n\n const overlapping = new Set<number>();\n let groupStart = 0;\n let groupEnd = individuallyValid[0]?.entity.range.to ?? 0;\n let groupHasOverlap = false;\n for (let index = 1; index <= individuallyValid.length; index += 1) {\n const current = individuallyValid[index];\n if (current !== undefined && current.entity.range.from < groupEnd) {\n groupHasOverlap = true;\n groupEnd = Math.max(groupEnd, current.entity.range.to);\n continue;\n }\n if (groupHasOverlap) {\n for (let groupIndex = groupStart; groupIndex < index; groupIndex += 1) {\n const candidate = individuallyValid[groupIndex];\n if (candidate !== undefined) {\n overlapping.add(candidate.index);\n }\n }\n }\n groupStart = index;\n groupEnd = current?.entity.range.to ?? 0;\n groupHasOverlap = false;\n }\n\n return individuallyValid\n .filter((candidate) => !overlapping.has(candidate.index))\n .map((candidate) => candidate.entity);\n}\n\nexport function entitiesForTextSegment(\n entities: ComposerEntity[],\n segment: MessageTextSegment,\n): ComposerEntity[] {\n return entities.flatMap((entity) => {\n if (entity.range.from < segment.from || entity.range.to > segment.to) {\n return [];\n }\n return [\n {\n ...entity,\n range: {\n from: entity.range.from - segment.from,\n to: entity.range.to - segment.from,\n },\n },\n ];\n });\n}\n\nexport function shiftComposerEntityRanges(\n entities: ComposerEntity[],\n offset: number,\n): ComposerEntity[] {\n if (offset === 0) {\n return entities;\n }\n return entities.map((entity) => ({\n ...entity,\n range: {\n from: entity.range.from + offset,\n to: entity.range.to + offset,\n },\n }));\n}\n\nfunction composerEntityCandidates(metadata: unknown): unknown[] {\n if (!isRecord(metadata) || !isRecord(metadata.composer)) {\n return [];\n }\n return Array.isArray(metadata.composer.entities) ? metadata.composer.entities : [];\n}\n\nfunction parseComposerEntity(value: unknown, text: string): ComposerEntity | undefined {\n if (!isRecord(value) || !isRecord(value.range)) {\n return undefined;\n }\n if (\n !isNonEmptyString(value.id) ||\n !isNonEmptyString(value.triggerId) ||\n !isNonEmptyString(value.trigger) ||\n !isNonEmptyString(value.label) ||\n !isNonEmptyString(value.text)\n ) {\n return undefined;\n }\n const { from, to } = value.range;\n if (\n typeof from !== \"number\" ||\n typeof to !== \"number\" ||\n !Number.isInteger(from) ||\n !Number.isInteger(to) ||\n from < 0 ||\n to <= from ||\n to > text.length ||\n text.slice(from, to) !== value.text\n ) {\n return undefined;\n }\n if (value.data !== undefined && !isComposerEntityData(value.data)) return undefined;\n const entity: ComposerEntity = {\n id: value.id,\n triggerId: value.triggerId,\n trigger: value.trigger,\n label: value.label,\n text: value.text,\n range: { from, to },\n };\n if (value.data !== undefined) entity.data = value.data;\n return entity;\n}\n\nfunction isNonEmptyString(value: unknown): value is string {\n return typeof value === \"string\" && value.length > 0;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n","import type { Options as ReactMarkdownOptions } from \"react-markdown\";\nimport type { ComposerEntity } from \"../contexts\";\n\ntype MarkdownPoint = {\n offset?: number | undefined;\n};\n\ntype MarkdownPosition = {\n start: MarkdownPoint;\n end: MarkdownPoint;\n};\n\ntype MarkdownNode = {\n type: string;\n value?: string | undefined;\n children?: MarkdownNode[] | undefined;\n position?: MarkdownPosition | undefined;\n entityIndex?: number | undefined;\n};\n\nconst phrasingParentTypes = new Set([\n \"paragraph\",\n \"heading\",\n \"emphasis\",\n \"strong\",\n \"delete\",\n \"link\",\n \"linkReference\",\n \"tableCell\",\n]);\nconst literalNodeTypes = new Set([\"code\", \"inlineCode\", \"html\", \"yaml\"]);\n\nexport function createMessageEntityRemarkPlugin(markdown: string, entities: ComposerEntity[]) {\n return function messageEntityRemarkPlugin() {\n return (tree: MarkdownNode): void => {\n const rendered = new Set<number>();\n transformNode(tree, markdown, entities, rendered);\n };\n };\n}\n\nexport function messageEntityRehypeOptions(): ReactMarkdownOptions[\"remarkRehypeOptions\"] {\n return {\n handlers: {\n messageEntity(_state: unknown, node: MarkdownNode) {\n const entityIndex = node.entityIndex;\n return {\n type: \"element\",\n tagName: \"span\",\n properties: {\n dataEntityIndex: entityIndex === undefined ? \"\" : String(entityIndex),\n },\n children: [{ type: \"text\", value: node.value ?? \"\" }],\n };\n },\n } as never,\n };\n}\n\nfunction transformNode(\n node: MarkdownNode,\n markdown: string,\n entities: ComposerEntity[],\n rendered: Set<number>,\n): void {\n if (literalNodeTypes.has(node.type) || node.children === undefined) {\n return;\n }\n\n for (const child of node.children) {\n transformNode(child, markdown, entities, rendered);\n }\n if (!phrasingParentTypes.has(node.type)) {\n return;\n }\n\n for (let entityIndex = entities.length - 1; entityIndex >= 0; entityIndex -= 1) {\n if (rendered.has(entityIndex)) {\n continue;\n }\n const entity = entities[entityIndex];\n if (entity !== undefined && replaceEntity(node, markdown, entity, entityIndex)) {\n rendered.add(entityIndex);\n }\n }\n}\n\nfunction replaceEntity(\n parent: MarkdownNode,\n markdown: string,\n entity: ComposerEntity,\n entityIndex: number,\n): boolean {\n const children = parent.children;\n if (children === undefined) {\n return false;\n }\n const firstIndex = children.findIndex((child) => containsStart(child, entity.range.from));\n const lastIndex = findLastIndex(children, (child) => containsEnd(child, entity.range.to));\n if (firstIndex < 0 || lastIndex < firstIndex) {\n return false;\n }\n\n const first = children[firstIndex];\n const last = children[lastIndex];\n const firstPosition = offsets(first);\n const lastPosition = offsets(last);\n if (\n first === undefined ||\n last === undefined ||\n firstPosition === undefined ||\n lastPosition === undefined ||\n entity.range.from < firstPosition.from ||\n entity.range.to > lastPosition.to\n ) {\n return false;\n }\n\n if (firstIndex === lastIndex && literalNodeTypes.has(first.type)) {\n return false;\n }\n const before = contentBefore(first, markdown, entity);\n const after = contentAfter(last, markdown, entity);\n if (before === undefined || after === undefined) {\n return false;\n }\n\n const replacement: MarkdownNode[] = [];\n replacement.push(...before);\n replacement.push({\n type: \"messageEntity\",\n value: entity.text,\n entityIndex,\n position: {\n start: { offset: entity.range.from },\n end: { offset: entity.range.to },\n },\n });\n replacement.push(...after);\n children.splice(firstIndex, lastIndex - firstIndex + 1, ...replacement);\n return true;\n}\n\nfunction contentBefore(\n node: MarkdownNode,\n markdown: string,\n entity: ComposerEntity,\n): MarkdownNode[] | undefined {\n const position = offsets(node);\n if (position === undefined) {\n return undefined;\n }\n if (entity.range.from === position.from) {\n return [];\n }\n if (node.type !== \"text\" || node.value === undefined) {\n if (node.children === undefined || literalNodeTypes.has(node.type)) {\n return undefined;\n }\n const childIndex = node.children.findIndex((child) => containsStart(child, entity.range.from));\n const child = node.children[childIndex];\n if (child === undefined) {\n return undefined;\n }\n const childContent = contentBefore(child, markdown, entity);\n return childContent === undefined\n ? undefined\n : [...node.children.slice(0, childIndex), ...childContent];\n }\n const split = textValueRange(node, markdown, entity);\n if (split === undefined) {\n return undefined;\n }\n return [\n {\n ...node,\n value: node.value.slice(0, split.from),\n position: {\n start: node.position?.start ?? {},\n end: { offset: entity.range.from },\n },\n },\n ];\n}\n\nfunction contentAfter(\n node: MarkdownNode,\n markdown: string,\n entity: ComposerEntity,\n): MarkdownNode[] | undefined {\n const position = offsets(node);\n if (position === undefined) {\n return undefined;\n }\n if (entity.range.to === position.to) {\n return [];\n }\n if (node.type !== \"text\" || node.value === undefined) {\n if (node.children === undefined || literalNodeTypes.has(node.type)) {\n return undefined;\n }\n const childIndex = findLastIndex(node.children, (child) => containsEnd(child, entity.range.to));\n const child = node.children[childIndex];\n if (child === undefined) {\n return undefined;\n }\n const childContent = contentAfter(child, markdown, entity);\n return childContent === undefined\n ? undefined\n : [...childContent, ...node.children.slice(childIndex + 1)];\n }\n const split = textValueRange(node, markdown, entity);\n if (split === undefined) {\n return undefined;\n }\n return [\n {\n ...node,\n value: node.value.slice(split.to),\n position: {\n start: { offset: entity.range.to },\n end: node.position?.end ?? {},\n },\n },\n ];\n}\n\nfunction textValueRange(\n node: MarkdownNode,\n markdown: string,\n entity: ComposerEntity,\n): { from: number; to: number } | undefined {\n const position = offsets(node);\n const value = node.value;\n if (position === undefined || value === undefined) {\n return undefined;\n }\n const raw = markdown.slice(position.from, position.to);\n const relativeFrom = entity.range.from - position.from;\n const relativeTo = entity.range.to - position.from;\n if (raw === value) {\n return { from: relativeFrom, to: relativeTo };\n }\n\n const occurrence = countOccurrences(raw.slice(0, relativeFrom), entity.text);\n const valueFrom = occurrenceIndex(value, entity.text, occurrence);\n return valueFrom === undefined\n ? undefined\n : { from: valueFrom, to: valueFrom + entity.text.length };\n}\n\nfunction countOccurrences(value: string, search: string): number {\n let count = 0;\n let offset = 0;\n while (offset <= value.length - search.length) {\n const index = value.indexOf(search, offset);\n if (index < 0) {\n break;\n }\n count += 1;\n offset = index + search.length;\n }\n return count;\n}\n\nfunction occurrenceIndex(value: string, search: string, occurrence: number): number | undefined {\n let offset = 0;\n for (let index = 0; index <= occurrence; index += 1) {\n const found = value.indexOf(search, offset);\n if (found < 0) {\n return undefined;\n }\n if (index === occurrence) {\n return found;\n }\n offset = found + search.length;\n }\n return undefined;\n}\n\nfunction containsStart(node: MarkdownNode, offset: number): boolean {\n const position = offsets(node);\n return position !== undefined && offset >= position.from && offset < position.to;\n}\n\nfunction containsEnd(node: MarkdownNode, offset: number): boolean {\n const position = offsets(node);\n return position !== undefined && offset > position.from && offset <= position.to;\n}\n\nfunction offsets(node: MarkdownNode | undefined): { from: number; to: number } | undefined {\n const from = node?.position?.start.offset;\n const to = node?.position?.end.offset;\n return typeof from === \"number\" && typeof to === \"number\" ? { from, to } : undefined;\n}\n\nfunction findLastIndex<T>(items: T[], predicate: (item: T) => boolean): number {\n for (let index = items.length - 1; index >= 0; index -= 1) {\n const item = items[index];\n if (item !== undefined && predicate(item)) {\n return index;\n }\n }\n return -1;\n}\n","import type { UIMessage } from \"@anvia/client\";\nimport { forwardRef, type ReactNode, useCallback, useMemo } from \"react\";\n\nimport { useMessage } from \"../contexts\";\nimport { composeRefs, type PrimitiveProps, renderPrimitive } from \"../primitives\";\nimport { registerMessageElement } from \"./elements\";\n\ntype MessageChildren = ReactNode | ((message: UIMessage) => ReactNode);\n\ntype MessageRootProps = Omit<PrimitiveProps<\"article\">, \"children\"> & {\n children?: MessageChildren;\n};\n\nconst MessageRoot = forwardRef<HTMLElement, MessageRootProps>(function MessageRoot(\n { children, ...props },\n ref,\n) {\n const { message } = useMessage();\n const renderedChildren = typeof children === \"function\" ? children(message) : children;\n const registerElement = useCallback(\n (element: HTMLElement | null) => {\n if (element !== null) registerMessageElement(element, message.id);\n },\n [message.id],\n );\n const composedRef = useMemo(() => composeRefs(ref, registerElement), [ref, registerElement]);\n\n return renderPrimitive(\n \"article\",\n {\n ...props,\n children: renderedChildren,\n \"data-role\": message.role,\n } as PrimitiveProps<\"article\">,\n composedRef,\n );\n});\n\nconst MessageContent = forwardRef<HTMLDivElement, PrimitiveProps<\"div\">>(\n function MessageContent(props, ref) {\n return renderPrimitive(\n \"div\",\n {\n ...props,\n } as PrimitiveProps<\"div\">,\n ref,\n );\n },\n);\n\nexport { MessageContent, MessageRoot };\n","import { MessageActions, MessageCopy, MessageRegenerate } from \"./actions\";\nimport { MessageEntity } from \"./entity\";\nimport {\n MessageAttachment,\n MessageCodeBlock,\n MessageData,\n MessageError,\n MessageMarkdown,\n MessagePart,\n MessageParts,\n MessageReasoning,\n MessageText,\n MessageTool,\n MessageToolError,\n MessageToolInput,\n MessageToolName,\n MessageToolOutput,\n MessageToolStatus,\n} from \"./parts\";\nimport { MessageContent, MessageRoot } from \"./root\";\n\nexport const MessagePrimitive = {\n Root: MessageRoot,\n Content: MessageContent,\n Parts: MessageParts,\n Part: MessagePart,\n Text: MessageText,\n Markdown: MessageMarkdown,\n Entity: MessageEntity,\n CodeBlock: MessageCodeBlock,\n Reasoning: MessageReasoning,\n Tool: MessageTool,\n ToolName: MessageToolName,\n ToolInput: MessageToolInput,\n ToolOutput: MessageToolOutput,\n ToolError: MessageToolError,\n ToolStatus: MessageToolStatus,\n Attachment: MessageAttachment,\n Data: MessageData,\n Error: MessageError,\n Actions: MessageActions,\n Copy: MessageCopy,\n Regenerate: MessageRegenerate,\n} as const;\n\nexport type { MessageContextValue, MessagePartContextValue } from \"../contexts\";\nexport { useChatContext, useMessage, useMessagePart } from \"../contexts\";\nexport type { MessageEntityProps } from \"./entity\";\nexport type {\n MessageAttachmentPart,\n MessagePartsFilter,\n MessageStreamOptions,\n MessageToolPart,\n MessageToolRenderWhen,\n} from \"./parts\";\n"],"mappings":"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","names":["MessageActions","MessageCopy","MessageRegenerate","forwardRef","jsx","MessageEntity","forwardRef","child","Fragment","jsx","jsxs","forwardRef","MessageParts","SmoothedMessageParts","MessagePart","MessageText","MessageTextContent","MessageMarkdown","MessageMarkdownContent","_node","elementProps","MessageCodeBlock","MessageReasoning","MessageTool","MessageToolName","MessageToolStatus","MessageToolInput","MessageToolOutput","MessageToolError","MessageAttachment","MessageData","MessageError","forwardRef","useCallback","useMemo","forwardRef","MessageRoot","useCallback","useMemo","MessageContent"]}
|
|
@@ -165,10 +165,10 @@ function wrapStreamRevealGraphemes(targets, graphemes, lifecycleScope, lifecycle
|
|
|
165
165
|
type: "element",
|
|
166
166
|
tagName: "span",
|
|
167
167
|
properties: {
|
|
168
|
-
"data-
|
|
169
|
-
"data-
|
|
170
|
-
"data-
|
|
171
|
-
"data-
|
|
168
|
+
"data-reveal-duration-ms": String(remainingMs),
|
|
169
|
+
"data-reveal-opacity": String(opacity),
|
|
170
|
+
"data-reveal-id": revealId,
|
|
171
|
+
"data-state": "revealing"
|
|
172
172
|
},
|
|
173
173
|
children: [{ type: "text", value: text }]
|
|
174
174
|
});
|
|
@@ -293,8 +293,8 @@ var StreamMarkdown = forwardRef(
|
|
|
293
293
|
},
|
|
294
294
|
block.startOffset
|
|
295
295
|
)),
|
|
296
|
-
"data-
|
|
297
|
-
"data-
|
|
296
|
+
"data-role": "markdown",
|
|
297
|
+
"data-state": props["data-state"] ?? (live ? "streaming" : "idle")
|
|
298
298
|
},
|
|
299
299
|
ref
|
|
300
300
|
);
|
|
@@ -323,7 +323,7 @@ function withStreamRevealComponent(components, onRevealSettled) {
|
|
|
323
323
|
span(spanProps) {
|
|
324
324
|
const safeProps = componentPropsWithoutKey(spanProps);
|
|
325
325
|
const internalProps = safeProps;
|
|
326
|
-
if (internalProps["data-
|
|
326
|
+
if (internalProps["data-state"] === "revealing") {
|
|
327
327
|
return streamRevealSpan(internalProps, onRevealSettled);
|
|
328
328
|
}
|
|
329
329
|
if (consumerSpan !== void 0) {
|
|
@@ -347,9 +347,9 @@ function streamRevealSpan(props, onRevealSettled) {
|
|
|
347
347
|
const {
|
|
348
348
|
children,
|
|
349
349
|
node: _node,
|
|
350
|
-
"data-
|
|
351
|
-
"data-
|
|
352
|
-
"data-
|
|
350
|
+
"data-reveal-duration-ms": durationMs,
|
|
351
|
+
"data-reveal-opacity": opacity,
|
|
352
|
+
"data-reveal-id": revealId,
|
|
353
353
|
onAnimationEnd,
|
|
354
354
|
...elementProps
|
|
355
355
|
} = props;
|
|
@@ -359,7 +359,7 @@ function streamRevealSpan(props, onRevealSettled) {
|
|
|
359
359
|
"span",
|
|
360
360
|
{
|
|
361
361
|
...elementProps,
|
|
362
|
-
"data-
|
|
362
|
+
"data-state": "revealing",
|
|
363
363
|
key: revealId ?? "stream-reveal",
|
|
364
364
|
onAnimationEnd: (event) => {
|
|
365
365
|
onAnimationEnd?.(event);
|
|
@@ -377,4 +377,4 @@ function streamRevealSpan(props, onRevealSettled) {
|
|
|
377
377
|
export {
|
|
378
378
|
StreamMarkdown
|
|
379
379
|
};
|
|
380
|
-
//# sourceMappingURL=chunk-
|
|
380
|
+
//# sourceMappingURL=chunk-F6AKBUO3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/stream/markdown.tsx","../src/stream/markdown-blocks.ts","../src/stream/markdown-reveal.ts"],"sourcesContent":["import {\n type ComponentPropsWithoutRef,\n type CSSProperties,\n createElement,\n forwardRef,\n memo,\n type ReactNode,\n useCallback,\n useMemo,\n useRef,\n} from \"react\";\nimport ReactMarkdown, {\n type Components,\n type Options as ReactMarkdownOptions,\n} from \"react-markdown\";\nimport remarkGfm from \"remark-gfm\";\n\nimport { type PrimitiveProps, renderPrimitive } from \"../primitives\";\nimport { splitStreamMarkdownBlocks } from \"./markdown-blocks\";\nimport { createStreamGradientRevealPlugin, type StreamRevealLifecycle } from \"./markdown-reveal\";\n\nexport type StreamMarkdownProps = Omit<PrimitiveProps<\"div\">, \"children\"> & {\n \"data-state\"?: string | undefined;\n components?: Components;\n content: string;\n live?: boolean;\n remarkPlugins?: ReactMarkdownOptions[\"remarkPlugins\"];\n remarkRehypeOptions?: ReactMarkdownOptions[\"remarkRehypeOptions\"];\n};\n\nconst defaultRemarkPlugins: NonNullable<ReactMarkdownOptions[\"remarkPlugins\"]> = [remarkGfm];\n\nexport const StreamMarkdown = forwardRef<HTMLDivElement, StreamMarkdownProps>(\n function StreamMarkdown(\n { components, content, live = false, remarkPlugins, remarkRehypeOptions, ...props },\n ref,\n ) {\n const revealLifecycleRef = useRef({\n activeScope: null,\n content,\n id: 0,\n settledRevealIds: new Set<string>(),\n startedAtByRevealId: new Map<string, number>(),\n } satisfies StreamRevealLifecycle & { content: string; id: number });\n const revealLifecycle = revealLifecycleRef.current;\n if (revealLifecycle.content !== content) {\n if (!content.startsWith(revealLifecycle.content)) {\n revealLifecycle.id += 1;\n revealLifecycle.activeScope = null;\n revealLifecycle.settledRevealIds.clear();\n revealLifecycle.startedAtByRevealId.clear();\n }\n revealLifecycle.content = content;\n }\n if (!live && revealLifecycle.activeScope !== null) {\n for (const revealId of revealLifecycle.startedAtByRevealId.keys()) {\n revealLifecycle.settledRevealIds.add(revealId);\n }\n }\n const settleReveal = useCallback((revealId: string) => {\n revealLifecycleRef.current.settledRevealIds.add(revealId);\n }, []);\n\n const blocks = useMemo(\n () =>\n splitStreamMarkdownBlocks(content, {\n singleDocument: remarkPlugins !== undefined,\n }),\n [content, remarkPlugins],\n );\n const streamingComponents = useMemo(\n () => withStreamRevealComponent(components, settleReveal),\n [components, settleReveal],\n );\n\n return renderPrimitive(\n \"div\",\n {\n ...props,\n children: blocks.map((block, index) => (\n <StreamMarkdownBlock\n components={streamingComponents}\n content={block.content}\n live={live && index === blocks.length - 1}\n revealLifecycle={revealLifecycle}\n revealScope={`${revealLifecycle.id}:${block.startOffset}`}\n remarkPlugins={remarkPlugins ?? defaultRemarkPlugins}\n remarkRehypeOptions={remarkRehypeOptions}\n key={block.startOffset}\n />\n )),\n \"data-role\": \"markdown\",\n \"data-state\": props[\"data-state\"] ?? (live ? \"streaming\" : \"idle\"),\n } as PrimitiveProps<\"div\">,\n ref,\n );\n },\n);\n\nconst StreamMarkdownBlock = memo(function StreamMarkdownBlock(props: {\n components: Components;\n content: string;\n live: boolean;\n revealLifecycle: StreamRevealLifecycle;\n revealScope: string;\n remarkPlugins: ReactMarkdownOptions[\"remarkPlugins\"];\n remarkRehypeOptions: ReactMarkdownOptions[\"remarkRehypeOptions\"];\n}) {\n const revealPlugin = useMemo(\n () => createStreamGradientRevealPlugin(props.revealScope, props.revealLifecycle),\n [props.revealScope, props.revealLifecycle],\n );\n return (\n <ReactMarkdown\n components={props.components}\n rehypePlugins={props.live ? [revealPlugin] : undefined}\n remarkPlugins={props.remarkPlugins}\n remarkRehypeOptions={props.remarkRehypeOptions}\n >\n {props.content}\n </ReactMarkdown>\n );\n});\n\nfunction withStreamRevealComponent(\n components: Components | undefined,\n onRevealSettled: (revealId: string) => void,\n): Components {\n const consumerSpan = components?.span;\n return {\n ...components,\n span(spanProps) {\n const safeProps = componentPropsWithoutKey(spanProps);\n const internalProps = safeProps as typeof safeProps & {\n \"data-reveal-duration-ms\"?: string | undefined;\n \"data-reveal-opacity\"?: string | undefined;\n \"data-reveal-id\"?: string | undefined;\n \"data-state\"?: string | undefined;\n };\n if (internalProps[\"data-state\"] === \"revealing\") {\n return streamRevealSpan(internalProps, onRevealSettled);\n }\n if (consumerSpan !== undefined) {\n return createElement(consumerSpan, safeProps);\n }\n const { node: _node, ...elementProps } = safeProps;\n return <span {...elementProps} />;\n },\n };\n}\n\nfunction componentPropsWithoutKey<T extends object>(props: T): T {\n const result: Record<string, unknown> = {};\n for (const name of Object.keys(props)) {\n if (name !== \"key\") {\n result[name] = (props as Record<string, unknown>)[name];\n }\n }\n return result as T;\n}\n\nfunction streamRevealSpan(\n props: ComponentPropsWithoutRef<\"span\"> & {\n node?: unknown;\n \"data-reveal-duration-ms\"?: string | undefined;\n \"data-reveal-opacity\"?: string | undefined;\n \"data-reveal-id\"?: string | undefined;\n },\n onRevealSettled: (revealId: string) => void,\n): ReactNode {\n const {\n children,\n node: _node,\n \"data-reveal-duration-ms\": durationMs,\n \"data-reveal-opacity\": opacity,\n \"data-reveal-id\": revealId,\n onAnimationEnd,\n ...elementProps\n } = props;\n const parsedOpacity = Number(opacity);\n const parsedDurationMs = Number(durationMs);\n return (\n <span\n {...elementProps}\n data-state=\"revealing\"\n key={revealId ?? \"stream-reveal\"}\n onAnimationEnd={(event) => {\n onAnimationEnd?.(event);\n if (revealId !== undefined) onRevealSettled(revealId);\n }}\n style={\n {\n \"--anvia-stream-reveal-opacity\": Number.isFinite(parsedOpacity) ? parsedOpacity : 1,\n \"--anvia-stream-reveal-duration\": `${Number.isFinite(parsedDurationMs) ? parsedDurationMs : 180}ms`,\n } as CSSProperties\n }\n >\n {children}\n </span>\n );\n}\n","import { lexer } from \"marked\";\n\nexport type StreamMarkdownBlock = {\n content: string;\n startOffset: number;\n};\n\nexport function splitStreamMarkdownBlocks(\n content: string,\n options: { singleDocument?: boolean } = {},\n): StreamMarkdownBlock[] {\n if (content.length === 0) {\n return [];\n }\n if (options.singleDocument === true) {\n return [{ content, startOffset: 0 }];\n }\n\n try {\n const tokens = lexer(content, { gfm: false });\n if (tokens.some((token) => token.type === \"def\") || Object.keys(tokens.links).length > 0) {\n return [{ content, startOffset: 0 }];\n }\n\n const rawBlocks: string[] = [];\n for (const token of tokens) {\n if (token.type === \"space\" && rawBlocks.length > 0) {\n const lastIndex = rawBlocks.length - 1;\n rawBlocks[lastIndex] = `${rawBlocks[lastIndex] ?? \"\"}${token.raw}`;\n } else {\n rawBlocks.push(token.raw);\n }\n }\n\n if (rawBlocks.length === 0 || rawBlocks.join(\"\") !== content) {\n return [{ content, startOffset: 0 }];\n }\n\n let startOffset = 0;\n return rawBlocks.map((block) => {\n const result = { content: block, startOffset };\n startOffset += block.length;\n return result;\n });\n } catch {\n return [{ content, startOffset: 0 }];\n }\n}\n","export const streamRevealConfig = {\n bandGraphemes: 2,\n durationMs: 180,\n minimumOpacity: 0.12,\n tailGraphemes: 24,\n} as const;\n\nexport type StreamRevealLifecycle = {\n activeScope: string | null;\n settledRevealIds: Set<string>;\n startedAtByRevealId: Map<string, number>;\n};\n\ntype MarkdownNode = {\n type: string;\n tagName?: string;\n value?: string;\n properties?: Record<string, unknown>;\n children?: MarkdownNode[];\n};\n\ntype TextTarget = {\n endOffset: number;\n index: number;\n node: MarkdownNode;\n parent: MarkdownNode;\n startOffset: number;\n};\n\ntype RevealGrapheme = {\n endOffset: number;\n opacity: number;\n startOffset: number;\n};\n\nexport function createStreamGradientRevealPlugin(\n lifecycleScope: string,\n lifecycle: StreamRevealLifecycle,\n) {\n return function streamGradientRevealPlugin() {\n return (tree: MarkdownNode) => {\n if (lifecycle.activeScope !== lifecycleScope) {\n lifecycle.activeScope = lifecycleScope;\n lifecycle.settledRevealIds.clear();\n lifecycle.startedAtByRevealId.clear();\n }\n const targets = collectTextTargets(tree);\n const renderedText = targets.map((target) => target.node.value ?? \"\").join(\"\");\n const graphemes = createRevealGraphemes(renderedText);\n wrapStreamRevealGraphemes(targets, graphemes, lifecycleScope, lifecycle);\n };\n };\n}\n\nfunction collectTextTargets(tree: MarkdownNode): TextTarget[] {\n const targets: TextTarget[] = [];\n let offset = 0;\n\n function visit(node: MarkdownNode, parent: MarkdownNode | undefined, index: number): void {\n if (node.type === \"element\" && node.tagName === \"pre\") {\n return;\n }\n if (node.type === \"text\" && node.value !== undefined && parent !== undefined) {\n if (!/\\S/u.test(node.value)) {\n return;\n }\n const startOffset = offset;\n offset += node.value.length;\n targets.push({\n endOffset: offset,\n index,\n node,\n parent,\n startOffset,\n });\n return;\n }\n for (const [childIndex, child] of (node.children ?? []).entries()) {\n visit(child, node, childIndex);\n }\n }\n\n visit(tree, undefined, 0);\n return targets;\n}\n\nfunction createRevealGraphemes(content: string): RevealGrapheme[] {\n const tail = segmentTailGraphemeRanges(content, streamRevealConfig.tailGraphemes);\n const graphemes: RevealGrapheme[] = [];\n\n for (let index = 0; index < tail.length; index += 1) {\n const grapheme = tail[index];\n const bandStartIndex =\n Math.floor(index / streamRevealConfig.bandGraphemes) * streamRevealConfig.bandGraphemes;\n const bandEndIndex =\n Math.min(bandStartIndex + streamRevealConfig.bandGraphemes, tail.length) - 1;\n if (grapheme === undefined) {\n continue;\n }\n const progress = tail.length === 1 ? 1 : bandEndIndex / (tail.length - 1);\n graphemes.push({\n startOffset: grapheme.startOffset,\n endOffset: grapheme.endOffset,\n opacity: Math.max(\n streamRevealConfig.minimumOpacity,\n 1 - progress * (1 - streamRevealConfig.minimumOpacity),\n ),\n });\n }\n return graphemes;\n}\n\nfunction wrapStreamRevealGraphemes(\n targets: readonly TextTarget[],\n graphemes: readonly RevealGrapheme[],\n lifecycleScope: string,\n lifecycle: StreamRevealLifecycle,\n): void {\n const activeRevealIds = new Set<string>();\n const nowMs = Date.now();\n for (const target of [...targets].reverse()) {\n const value = target.node.value ?? \"\";\n const intersectingGraphemes = graphemes.filter(\n (grapheme) =>\n grapheme.endOffset > target.startOffset && grapheme.startOffset < target.endOffset,\n );\n if (intersectingGraphemes.length === 0) {\n continue;\n }\n\n const replacement: MarkdownNode[] = [];\n let cursor = 0;\n for (const grapheme of intersectingGraphemes) {\n const start = Math.max(0, grapheme.startOffset - target.startOffset);\n const end = Math.min(value.length, grapheme.endOffset - target.startOffset);\n if (start > cursor) {\n replacement.push({ type: \"text\", value: value.slice(cursor, start) });\n }\n if (end > start) {\n const text = value.slice(start, end);\n const absoluteStart = target.startOffset + start;\n const absoluteEnd = target.startOffset + end;\n const revealId = `${lifecycleScope}:${absoluteStart}:${absoluteEnd}:${hashText(text)}`;\n activeRevealIds.add(revealId);\n const startedAt = lifecycle.startedAtByRevealId.get(revealId) ?? nowMs;\n lifecycle.startedAtByRevealId.set(revealId, startedAt);\n const elapsedMs = Math.max(0, nowMs - startedAt);\n if (elapsedMs >= streamRevealConfig.durationMs) {\n lifecycle.settledRevealIds.add(revealId);\n }\n if (lifecycle.settledRevealIds.has(revealId)) {\n replacement.push({ type: \"text\", value: text });\n } else {\n const progress = Math.min(elapsedMs / streamRevealConfig.durationMs, 1);\n const opacity = grapheme.opacity + (1 - grapheme.opacity) * progress;\n const remainingMs = Math.max(1, streamRevealConfig.durationMs - elapsedMs);\n replacement.push({\n type: \"element\",\n tagName: \"span\",\n properties: {\n \"data-reveal-duration-ms\": String(remainingMs),\n \"data-reveal-opacity\": String(opacity),\n \"data-reveal-id\": revealId,\n \"data-state\": \"revealing\",\n },\n children: [{ type: \"text\", value: text }],\n });\n }\n }\n cursor = Math.max(cursor, end);\n }\n if (cursor < value.length) {\n replacement.push({ type: \"text\", value: value.slice(cursor) });\n }\n target.parent.children?.splice(target.index, 1, ...replacement);\n }\n\n pruneRevealLifecycle(lifecycle, activeRevealIds);\n}\n\nfunction pruneRevealLifecycle(\n lifecycle: StreamRevealLifecycle,\n activeRevealIds: ReadonlySet<string>,\n): void {\n for (const revealId of lifecycle.startedAtByRevealId.keys()) {\n if (!activeRevealIds.has(revealId)) lifecycle.startedAtByRevealId.delete(revealId);\n }\n for (const revealId of lifecycle.settledRevealIds) {\n if (!activeRevealIds.has(revealId)) lifecycle.settledRevealIds.delete(revealId);\n }\n}\n\nfunction hashText(text: string): string {\n let hash = 2_166_136_261;\n for (let index = 0; index < text.length; index += 1) {\n hash ^= text.charCodeAt(index);\n hash = Math.imul(hash, 16_777_619);\n }\n return (hash >>> 0).toString(36);\n}\n\nfunction segmentTailGraphemeRanges(\n content: string,\n limit: number,\n): Array<{\n endOffset: number;\n startOffset: number;\n}> {\n if (typeof Intl !== \"undefined\" && typeof Intl.Segmenter === \"function\") {\n const segmenter = new Intl.Segmenter(undefined, { granularity: \"grapheme\" });\n const segments = segmenter.segment(content);\n const ranges: Array<{ endOffset: number; startOffset: number }> = [];\n let cursor = content.length;\n while (cursor > 0 && ranges.length < limit) {\n const segment = segments.containing(cursor - 1);\n if (segment === undefined) {\n break;\n }\n ranges.unshift({\n startOffset: segment.index,\n endOffset: segment.index + segment.segment.length,\n });\n cursor = segment.index;\n }\n return ranges;\n }\n\n const ranges: Array<{ endOffset: number; startOffset: number }> = [];\n let cursor = content.length;\n while (cursor > 0 && ranges.length < limit) {\n let startOffset = cursor - 1;\n const code = content.charCodeAt(startOffset);\n if (code >= 0xdc00 && code <= 0xdfff && startOffset > 0) {\n const previousCode = content.charCodeAt(startOffset - 1);\n if (previousCode >= 0xd800 && previousCode <= 0xdbff) {\n startOffset -= 1;\n }\n }\n ranges.unshift({ startOffset, endOffset: cursor });\n cursor = startOffset;\n }\n return ranges;\n}\n"],"mappings":"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","names":["ranges","cursor","createElement","StreamMarkdown","StreamMarkdownBlock"]}
|