@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,11 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
2
|
+
MessagePrimitive,
|
|
3
3
|
isComposerEntityData,
|
|
4
4
|
shiftComposerEntityRanges
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-CRXNFZRW.js";
|
|
6
6
|
import {
|
|
7
|
-
|
|
8
|
-
} from "./chunk-
|
|
7
|
+
AttachmentPrimitive
|
|
8
|
+
} from "./chunk-MISX4WUT.js";
|
|
9
9
|
import {
|
|
10
10
|
composeRefs,
|
|
11
11
|
renderPrimitive
|
|
@@ -18,7 +18,7 @@ import {
|
|
|
18
18
|
useChatContext,
|
|
19
19
|
useComposer,
|
|
20
20
|
useThread
|
|
21
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-SOG2GVE4.js";
|
|
22
22
|
|
|
23
23
|
// src/chat/composer.tsx
|
|
24
24
|
import { mergeAttributes } from "@tiptap/core";
|
|
@@ -274,7 +274,6 @@ var ComposerRoot = forwardRef(function ComposerRoot2({
|
|
|
274
274
|
{
|
|
275
275
|
...props,
|
|
276
276
|
onSubmit: handleSubmit,
|
|
277
|
-
"data-anvia-composer": "",
|
|
278
277
|
"data-state": chat.status
|
|
279
278
|
},
|
|
280
279
|
ref
|
|
@@ -292,9 +291,7 @@ var ComposerQuotePreview = forwardRef(
|
|
|
292
291
|
"blockquote",
|
|
293
292
|
{
|
|
294
293
|
...props,
|
|
295
|
-
children: renderedChildren
|
|
296
|
-
"data-anvia-composer-quote": "",
|
|
297
|
-
"data-message-id": quote.messageId
|
|
294
|
+
children: renderedChildren
|
|
298
295
|
},
|
|
299
296
|
ref
|
|
300
297
|
);
|
|
@@ -322,7 +319,6 @@ var ComposerClearQuote = forwardRef(
|
|
|
322
319
|
disabled,
|
|
323
320
|
onClick: handleClick,
|
|
324
321
|
type: props.type ?? "button",
|
|
325
|
-
"data-anvia-clear-quote": "",
|
|
326
322
|
"data-state": disabled ? "disabled" : "enabled"
|
|
327
323
|
},
|
|
328
324
|
ref
|
|
@@ -364,7 +360,6 @@ var ComposerInput = forwardRef(function ComposerInput2({
|
|
|
364
360
|
attributes: {
|
|
365
361
|
"aria-label": props["aria-label"] ?? "Message",
|
|
366
362
|
"aria-multiline": "true",
|
|
367
|
-
"data-anvia-composer-editor": "",
|
|
368
363
|
role: "textbox"
|
|
369
364
|
},
|
|
370
365
|
handleKeyDown: (_view, event) => submitComposerFromEditorKeyDown(event, composerRef)
|
|
@@ -448,9 +443,8 @@ var ComposerInput = forwardRef(function ComposerInput2({
|
|
|
448
443
|
...props,
|
|
449
444
|
children: /* @__PURE__ */ jsx(EditorContent, { editor }),
|
|
450
445
|
"aria-disabled": composerDisabled ? true : props["aria-disabled"],
|
|
451
|
-
"data-
|
|
446
|
+
"data-role": "editor",
|
|
452
447
|
"data-state": composerDisabled ? "disabled" : "enabled",
|
|
453
|
-
"data-auto-resize": autoResize ? "" : void 0,
|
|
454
448
|
onKeyDown: handleKeyDown,
|
|
455
449
|
style: inputStyle
|
|
456
450
|
},
|
|
@@ -517,9 +511,7 @@ var ComposerTextareaInput = forwardRef(
|
|
|
517
511
|
onChange: handleChange,
|
|
518
512
|
onKeyDown: handleKeyDown,
|
|
519
513
|
rows: autoResize ? minRows : rows,
|
|
520
|
-
value: composer.input
|
|
521
|
-
"data-anvia-composer-input": "",
|
|
522
|
-
"data-anvia-composer-textarea-input": ""
|
|
514
|
+
value: composer.input
|
|
523
515
|
},
|
|
524
516
|
composedInputRef
|
|
525
517
|
);
|
|
@@ -584,16 +576,12 @@ function composerInputExtensions({
|
|
|
584
576
|
HardBreak,
|
|
585
577
|
Placeholder.configure(placeholder === void 0 ? {} : { placeholder }),
|
|
586
578
|
ComposerEntityExtension.configure({
|
|
587
|
-
HTMLAttributes: {
|
|
588
|
-
"data-anvia-composer-entity": ""
|
|
589
|
-
},
|
|
579
|
+
HTMLAttributes: {},
|
|
590
580
|
deleteTriggerWithBackspace: true,
|
|
591
581
|
renderText: ({ node }) => composerEntityText(node.attrs),
|
|
592
582
|
renderHTML: ({ node, options }) => [
|
|
593
583
|
"span",
|
|
594
|
-
mergeAttributes(options.HTMLAttributes, {
|
|
595
|
-
"data-anvia-composer-entity": ""
|
|
596
|
-
}),
|
|
584
|
+
mergeAttributes(options.HTMLAttributes, {}),
|
|
597
585
|
composerEntityText(node.attrs)
|
|
598
586
|
],
|
|
599
587
|
suggestions: triggers.map((trigger) => composerSuggestion(trigger, composerRef))
|
|
@@ -980,7 +968,6 @@ var ComposerSubmit = forwardRef(
|
|
|
980
968
|
children: props.children ?? "Send",
|
|
981
969
|
disabled,
|
|
982
970
|
type: props.type ?? "submit",
|
|
983
|
-
"data-anvia-submit": "",
|
|
984
971
|
"data-state": disabled ? "disabled" : "enabled"
|
|
985
972
|
},
|
|
986
973
|
ref
|
|
@@ -1008,7 +995,6 @@ var ComposerStop = forwardRef(function ComposerStop2({ onClick, ...props }, ref)
|
|
|
1008
995
|
disabled,
|
|
1009
996
|
onClick: handleClick,
|
|
1010
997
|
type: props.type ?? "button",
|
|
1011
|
-
"data-anvia-stop": "",
|
|
1012
998
|
"data-state": disabled ? "disabled" : "enabled"
|
|
1013
999
|
},
|
|
1014
1000
|
ref
|
|
@@ -1036,11 +1022,7 @@ var ComposerTriggerMenu = forwardRef(
|
|
|
1036
1022
|
children: renderedChildren,
|
|
1037
1023
|
role: props.role ?? "listbox",
|
|
1038
1024
|
style: menuStyle,
|
|
1039
|
-
"data-
|
|
1040
|
-
"data-empty": empty ? "" : void 0,
|
|
1041
|
-
"data-loading": activeTrigger?.loading ? "" : void 0,
|
|
1042
|
-
"data-trigger": activeTrigger?.trigger.char,
|
|
1043
|
-
"data-trigger-id": activeTrigger?.trigger.id
|
|
1025
|
+
"data-state": activeTrigger === void 0 ? "closed" : activeTrigger.loading ? "loading" : empty ? "empty" : "open"
|
|
1044
1026
|
},
|
|
1045
1027
|
ref
|
|
1046
1028
|
);
|
|
@@ -1081,12 +1063,7 @@ var ComposerTriggerItem = forwardRef(
|
|
|
1081
1063
|
role: props.role ?? "option",
|
|
1082
1064
|
type: props.type ?? "button",
|
|
1083
1065
|
"aria-selected": selected,
|
|
1084
|
-
"data-
|
|
1085
|
-
"data-disabled": disabled ? "" : void 0,
|
|
1086
|
-
"data-item-id": item.id,
|
|
1087
|
-
"data-selected": selected ? "" : void 0,
|
|
1088
|
-
"data-trigger": activeTrigger.trigger.char,
|
|
1089
|
-
"data-trigger-id": activeTrigger.trigger.id
|
|
1066
|
+
"data-state": disabled ? "disabled" : selected ? "selected" : "idle"
|
|
1090
1067
|
},
|
|
1091
1068
|
ref
|
|
1092
1069
|
);
|
|
@@ -1112,12 +1089,12 @@ var ComposerAttachments = forwardRef(
|
|
|
1112
1089
|
composer.removeAttachment(attachment.id);
|
|
1113
1090
|
}
|
|
1114
1091
|
},
|
|
1115
|
-
children: typeof children === "function" ? children(attachment) : children ?? /* @__PURE__ */ jsx(
|
|
1092
|
+
children: typeof children === "function" ? children(attachment) : children ?? /* @__PURE__ */ jsx(AttachmentPrimitive.Root, {})
|
|
1116
1093
|
},
|
|
1117
1094
|
attachment.id
|
|
1118
1095
|
)),
|
|
1119
|
-
"data-
|
|
1120
|
-
"data-
|
|
1096
|
+
"data-role": "attachments",
|
|
1097
|
+
"data-state": empty ? "empty" : "populated"
|
|
1121
1098
|
},
|
|
1122
1099
|
ref
|
|
1123
1100
|
);
|
|
@@ -1150,7 +1127,6 @@ var ComposerAttachmentInput = forwardRef(
|
|
|
1150
1127
|
void handleChange(event);
|
|
1151
1128
|
},
|
|
1152
1129
|
type: "file",
|
|
1153
|
-
"data-anvia-attachment-input": "",
|
|
1154
1130
|
"data-state": disabled ? "disabled" : "enabled"
|
|
1155
1131
|
},
|
|
1156
1132
|
ref
|
|
@@ -1181,7 +1157,6 @@ var ComposerAddAttachment = forwardRef(
|
|
|
1181
1157
|
disabled,
|
|
1182
1158
|
onClick: handleClick,
|
|
1183
1159
|
type: props.type ?? "button",
|
|
1184
|
-
"data-anvia-add-attachment": "",
|
|
1185
1160
|
"data-state": disabled ? "disabled" : "enabled"
|
|
1186
1161
|
},
|
|
1187
1162
|
ref
|
|
@@ -1245,9 +1220,7 @@ var ComposerAttachmentDropzone = forwardRef(
|
|
|
1245
1220
|
onDragLeave: handleDragLeave,
|
|
1246
1221
|
onDragOver: handleDragOver,
|
|
1247
1222
|
onDrop: handleDrop,
|
|
1248
|
-
"data-
|
|
1249
|
-
"data-dragging": dragging ? "" : void 0,
|
|
1250
|
-
"data-state": disabled ? "disabled" : "enabled"
|
|
1223
|
+
"data-state": disabled ? "disabled" : dragging ? "dragging" : "enabled"
|
|
1251
1224
|
},
|
|
1252
1225
|
ref
|
|
1253
1226
|
);
|
|
@@ -1293,7 +1266,7 @@ function createAttachmentId() {
|
|
|
1293
1266
|
nextAttachmentId += 1;
|
|
1294
1267
|
return `attachment_${nextAttachmentId.toString(36)}`;
|
|
1295
1268
|
}
|
|
1296
|
-
var
|
|
1269
|
+
var ComposerPrimitive = {
|
|
1297
1270
|
Root: ComposerRoot,
|
|
1298
1271
|
Quote: ComposerQuotePreview,
|
|
1299
1272
|
ClearQuote: ComposerClearQuote,
|
|
@@ -1324,6 +1297,7 @@ var ThreadRoot = forwardRef2(
|
|
|
1324
1297
|
function ThreadRoot2(props, ref) {
|
|
1325
1298
|
const chat = useChatContext();
|
|
1326
1299
|
const viewportRef = useRef2(null);
|
|
1300
|
+
const messagesRef = useRef2(null);
|
|
1327
1301
|
const [atBottom, setAtBottom] = useState2(true);
|
|
1328
1302
|
const scrollToBottom = useCallback2((behavior = "smooth") => {
|
|
1329
1303
|
const viewport = viewportRef.current;
|
|
@@ -1333,14 +1307,13 @@ var ThreadRoot = forwardRef2(
|
|
|
1333
1307
|
viewport.scrollTo({ top: viewport.scrollHeight, behavior });
|
|
1334
1308
|
}, []);
|
|
1335
1309
|
const thread = useMemo2(
|
|
1336
|
-
() => ({ viewportRef, atBottom, setAtBottom, scrollToBottom }),
|
|
1310
|
+
() => ({ viewportRef, messagesRef, atBottom, setAtBottom, scrollToBottom }),
|
|
1337
1311
|
[atBottom, scrollToBottom]
|
|
1338
1312
|
);
|
|
1339
1313
|
return /* @__PURE__ */ jsx2(InternalThreadProvider, { value: thread, children: renderPrimitive(
|
|
1340
1314
|
"div",
|
|
1341
1315
|
{
|
|
1342
1316
|
...props,
|
|
1343
|
-
"data-anvia-thread": "",
|
|
1344
1317
|
"data-state": chat.status
|
|
1345
1318
|
},
|
|
1346
1319
|
ref
|
|
@@ -1368,7 +1341,7 @@ var ThreadViewport = forwardRef2(function ThreadViewport2({ autoScroll = true, o
|
|
|
1368
1341
|
if (viewport === null || !autoScroll || typeof ResizeObserver !== "function") {
|
|
1369
1342
|
return;
|
|
1370
1343
|
}
|
|
1371
|
-
const content =
|
|
1344
|
+
const content = thread.messagesRef.current;
|
|
1372
1345
|
if (content === null) {
|
|
1373
1346
|
return;
|
|
1374
1347
|
}
|
|
@@ -1395,7 +1368,6 @@ var ThreadViewport = forwardRef2(function ThreadViewport2({ autoScroll = true, o
|
|
|
1395
1368
|
{
|
|
1396
1369
|
...props,
|
|
1397
1370
|
onScroll: handleScroll,
|
|
1398
|
-
"data-anvia-thread-viewport": "",
|
|
1399
1371
|
"data-state": thread.atBottom ? "bottom" : "away"
|
|
1400
1372
|
},
|
|
1401
1373
|
composedRef
|
|
@@ -1406,8 +1378,7 @@ var ThreadViewportFooter = forwardRef2(
|
|
|
1406
1378
|
return renderPrimitive(
|
|
1407
1379
|
"div",
|
|
1408
1380
|
{
|
|
1409
|
-
...props
|
|
1410
|
-
"data-anvia-thread-viewport-footer": ""
|
|
1381
|
+
...props
|
|
1411
1382
|
},
|
|
1412
1383
|
ref
|
|
1413
1384
|
);
|
|
@@ -1422,8 +1393,7 @@ var ThreadEmpty = forwardRef2(
|
|
|
1422
1393
|
return renderPrimitive(
|
|
1423
1394
|
"div",
|
|
1424
1395
|
{
|
|
1425
|
-
...props
|
|
1426
|
-
"data-anvia-thread-empty": ""
|
|
1396
|
+
...props
|
|
1427
1397
|
},
|
|
1428
1398
|
ref
|
|
1429
1399
|
);
|
|
@@ -1437,7 +1407,6 @@ var ThreadStatus = forwardRef2(function ThreadStatus2({ children, ...props }, re
|
|
|
1437
1407
|
{
|
|
1438
1408
|
...props,
|
|
1439
1409
|
children: renderedChildren ?? chat.status,
|
|
1440
|
-
"data-anvia-thread-status": "",
|
|
1441
1410
|
"data-state": chat.status
|
|
1442
1411
|
},
|
|
1443
1412
|
ref
|
|
@@ -1453,8 +1422,7 @@ var ThreadLoading = forwardRef2(
|
|
|
1453
1422
|
"div",
|
|
1454
1423
|
{
|
|
1455
1424
|
...props,
|
|
1456
|
-
children: props.children ?? "Loading"
|
|
1457
|
-
"data-anvia-thread-loading": ""
|
|
1425
|
+
children: props.children ?? "Loading"
|
|
1458
1426
|
},
|
|
1459
1427
|
ref
|
|
1460
1428
|
);
|
|
@@ -1471,7 +1439,6 @@ var ThreadError = forwardRef2(function ThreadError2({ children, ...props }, ref)
|
|
|
1471
1439
|
{
|
|
1472
1440
|
...props,
|
|
1473
1441
|
children: renderedChildren ?? errorMessage(chat.error),
|
|
1474
|
-
"data-anvia-thread-error": "",
|
|
1475
1442
|
role: props.role ?? "alert"
|
|
1476
1443
|
},
|
|
1477
1444
|
ref
|
|
@@ -1479,6 +1446,13 @@ var ThreadError = forwardRef2(function ThreadError2({ children, ...props }, ref)
|
|
|
1479
1446
|
});
|
|
1480
1447
|
var ThreadMessages = forwardRef2(function ThreadMessages2({ children, keepMounted = true, ...props }, ref) {
|
|
1481
1448
|
const chat = useChatContext();
|
|
1449
|
+
const thread = useThread();
|
|
1450
|
+
const composedRef = useMemo2(
|
|
1451
|
+
() => composeRefs(ref, (node) => {
|
|
1452
|
+
thread.messagesRef.current = node;
|
|
1453
|
+
}),
|
|
1454
|
+
[ref, thread.messagesRef]
|
|
1455
|
+
);
|
|
1482
1456
|
const empty = chat.messages.length === 0;
|
|
1483
1457
|
if (empty && !keepMounted) {
|
|
1484
1458
|
return null;
|
|
@@ -1488,10 +1462,9 @@ var ThreadMessages = forwardRef2(function ThreadMessages2({ children, keepMounte
|
|
|
1488
1462
|
{
|
|
1489
1463
|
...props,
|
|
1490
1464
|
children: chat.messages.map((message) => /* @__PURE__ */ jsx2(InternalMessageProvider, { message, children: typeof children === "function" ? children(message) : children ?? defaultMessage() }, message.id)),
|
|
1491
|
-
"data-
|
|
1492
|
-
"data-empty": empty ? "" : void 0
|
|
1465
|
+
"data-state": empty ? "empty" : "populated"
|
|
1493
1466
|
},
|
|
1494
|
-
|
|
1467
|
+
composedRef
|
|
1495
1468
|
);
|
|
1496
1469
|
});
|
|
1497
1470
|
var ThreadSuggestions = forwardRef2(
|
|
@@ -1509,8 +1482,8 @@ var ThreadSuggestions = forwardRef2(
|
|
|
1509
1482
|
children: suggestions.map(
|
|
1510
1483
|
(suggestion) => typeof children === "function" ? /* @__PURE__ */ jsx2(Fragment2, { children: children(suggestion) }, suggestion.id) : /* @__PURE__ */ jsx2(ThreadSuggestion, { suggestion, children }, suggestion.id)
|
|
1511
1484
|
),
|
|
1512
|
-
"data-
|
|
1513
|
-
"data-
|
|
1485
|
+
"data-role": "suggestions",
|
|
1486
|
+
"data-state": empty ? "empty" : "populated"
|
|
1514
1487
|
},
|
|
1515
1488
|
ref
|
|
1516
1489
|
);
|
|
@@ -1539,7 +1512,6 @@ var ThreadSuggestion = forwardRef2(
|
|
|
1539
1512
|
disabled,
|
|
1540
1513
|
onClick: handleClick,
|
|
1541
1514
|
type: props.type ?? "button",
|
|
1542
|
-
"data-anvia-thread-suggestion": "",
|
|
1543
1515
|
"data-state": disabled ? "disabled" : "enabled"
|
|
1544
1516
|
},
|
|
1545
1517
|
ref
|
|
@@ -1568,7 +1540,6 @@ var ThreadScrollToBottom = forwardRef2(
|
|
|
1568
1540
|
disabled,
|
|
1569
1541
|
onClick: handleClick,
|
|
1570
1542
|
type: props.type ?? "button",
|
|
1571
|
-
"data-anvia-scroll-to-bottom": "",
|
|
1572
1543
|
"data-state": thread.atBottom ? "bottom" : "away"
|
|
1573
1544
|
},
|
|
1574
1545
|
ref
|
|
@@ -1576,9 +1547,9 @@ var ThreadScrollToBottom = forwardRef2(
|
|
|
1576
1547
|
}
|
|
1577
1548
|
);
|
|
1578
1549
|
function defaultMessage() {
|
|
1579
|
-
return /* @__PURE__ */ jsxs2(
|
|
1580
|
-
/* @__PURE__ */ jsx2(
|
|
1581
|
-
/* @__PURE__ */ jsx2(
|
|
1550
|
+
return /* @__PURE__ */ jsxs2(MessagePrimitive.Root, { children: [
|
|
1551
|
+
/* @__PURE__ */ jsx2(MessagePrimitive.Content, { children: /* @__PURE__ */ jsx2(MessagePrimitive.Parts, {}) }),
|
|
1552
|
+
/* @__PURE__ */ jsx2(MessagePrimitive.Actions, {})
|
|
1582
1553
|
] });
|
|
1583
1554
|
}
|
|
1584
1555
|
function errorMessage(error) {
|
|
@@ -1590,7 +1561,7 @@ function errorMessage(error) {
|
|
|
1590
1561
|
}
|
|
1591
1562
|
return "Something went wrong.";
|
|
1592
1563
|
}
|
|
1593
|
-
var
|
|
1564
|
+
var ThreadPrimitive = {
|
|
1594
1565
|
Root: ThreadRoot,
|
|
1595
1566
|
Viewport: ThreadViewport,
|
|
1596
1567
|
ViewportFooter: ThreadViewportFooter,
|
|
@@ -1605,7 +1576,7 @@ var Thread = {
|
|
|
1605
1576
|
};
|
|
1606
1577
|
|
|
1607
1578
|
export {
|
|
1608
|
-
|
|
1609
|
-
|
|
1579
|
+
ComposerPrimitive,
|
|
1580
|
+
ThreadPrimitive
|
|
1610
1581
|
};
|
|
1611
|
-
//# sourceMappingURL=chunk-
|
|
1582
|
+
//# sourceMappingURL=chunk-HWJIMLHC.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/chat/composer.tsx","../src/chat/thread.tsx"],"sourcesContent":["import type {\n ClientDataMap,\n ClientMetadata,\n CreateUIAttachment,\n UIAttachment,\n} from \"@anvia/client\";\nimport type { Editor, Extensions, JSONContent } from \"@tiptap/core\";\nimport { mergeAttributes } from \"@tiptap/core\";\nimport Document from \"@tiptap/extension-document\";\nimport HardBreak from \"@tiptap/extension-hard-break\";\nimport Mention, { type MentionOptions } from \"@tiptap/extension-mention\";\nimport Paragraph from \"@tiptap/extension-paragraph\";\nimport Placeholder from \"@tiptap/extension-placeholder\";\nimport Text from \"@tiptap/extension-text\";\nimport { PluginKey } from \"@tiptap/pm/state\";\nimport { EditorContent, useEditor } from \"@tiptap/react\";\nimport type {\n SuggestionKeyDownProps,\n SuggestionOptions,\n SuggestionProps,\n} from \"@tiptap/suggestion\";\nimport {\n type ChangeEvent,\n type CSSProperties,\n type DragEvent,\n type FormEvent,\n forwardRef,\n type MouseEvent,\n type KeyboardEvent as ReactKeyboardEvent,\n type ReactNode,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { AttachmentPrimitive } from \"../attachment/index\";\nimport {\n type ChatController,\n type ComposerAttachmentInput as ComposerAttachmentInputValue,\n type ComposerAttachmentsUpdate,\n type ComposerContextValue,\n type ComposerEntitiesUpdate,\n type ComposerEntity,\n type ComposerEntityData,\n type ComposerQuote,\n type ComposerTriggerDefinition,\n type ComposerTriggerItem as ComposerTriggerItemValue,\n type ComposerTriggerState,\n InternalAttachmentProvider,\n InternalComposerProvider,\n useChatContext,\n useComposer,\n} from \"../contexts\";\nimport { shiftComposerEntityRanges } from \"../entities\";\nimport { composeRefs, type PrimitiveProps, renderPrimitive } from \"../primitives\";\nimport { isComposerEntityData } from \"../strict-json\";\n\ntype ComposerRootProps = PrimitiveProps<\"form\"> & {\n attachments?: UIAttachment[];\n defaultAttachments?: UIAttachment[];\n defaultEntities?: ComposerEntity[];\n defaultInput?: string;\n defaultQuote?: ComposerQuote | undefined;\n entities?: ComposerEntity[];\n input?: string;\n onAttachmentsChange?: (attachments: UIAttachment[]) => void;\n onEntitiesChange?: (entities: ComposerEntity[]) => void;\n onInputChange?: (input: string) => void;\n onQuoteChange?: (quote: ComposerQuote | undefined) => void;\n quote?: ComposerQuote | undefined;\n submitMessage?: ComposerSubmitMessage;\n triggers?: ComposerTriggerDefinition[];\n};\n\nexport type ComposerSubmitMessageArgs<TData extends ClientDataMap = ClientDataMap> = {\n input: string;\n attachments: UIAttachment[];\n entities: ComposerEntity[];\n chat: ChatController<ClientMetadata, TData>;\n quote?: ComposerQuote | undefined;\n clear(): void;\n};\n\nexport type ComposerSubmitMessage<TData extends ClientDataMap = ClientDataMap> = (\n args: ComposerSubmitMessageArgs<TData>,\n) => Promise<void> | void;\n\nconst ComposerRoot = forwardRef<HTMLFormElement, ComposerRootProps>(function ComposerRoot(\n {\n attachments: attachmentsProp,\n defaultAttachments,\n defaultEntities,\n defaultInput = \"\",\n defaultQuote,\n entities: entitiesProp,\n input: inputProp,\n onAttachmentsChange,\n onEntitiesChange,\n onInputChange,\n onQuoteChange,\n quote: quoteProp,\n submitMessage,\n triggers: triggersProp,\n onSubmit,\n ...props\n },\n ref,\n) {\n const chat = useChatContext();\n const [uncontrolledInput, setUncontrolledInput] = useState(defaultInput);\n const [uncontrolledAttachments, setUncontrolledAttachments] = useState<UIAttachment[]>(() => [\n ...(defaultAttachments ?? []),\n ]);\n const [uncontrolledEntities, setUncontrolledEntities] = useState<ComposerEntity[]>(() => [\n ...(defaultEntities ?? []),\n ]);\n const [uncontrolledQuote, setUncontrolledQuote] = useState<ComposerQuote | undefined>(\n defaultQuote,\n );\n const [activeTrigger, setActiveTriggerState] = useState<ComposerTriggerState | undefined>();\n const input = inputProp ?? uncontrolledInput;\n const attachments = attachmentsProp ?? uncontrolledAttachments;\n const entities = entitiesProp ?? uncontrolledEntities;\n const triggers = triggersProp ?? EMPTY_COMPOSER_TRIGGERS;\n const rawQuote = quoteProp ?? uncontrolledQuote;\n const rawQuoteMessageId = rawQuote?.messageId;\n const rawQuoteText = rawQuote?.text;\n const quote = useMemo(\n () =>\n rawQuoteMessageId === undefined || rawQuoteText === undefined\n ? undefined\n : { messageId: rawQuoteMessageId, text: rawQuoteText },\n [rawQuoteMessageId, rawQuoteText],\n );\n const attachmentsRef = useRef(attachments);\n attachmentsRef.current = attachments;\n const entitiesRef = useRef(entities);\n entitiesRef.current = entities;\n const defaultSubmissionInFlightRef = useRef(false);\n const inputControlled = inputProp !== undefined;\n const attachmentsControlled = attachmentsProp !== undefined;\n const entitiesControlled = entitiesProp !== undefined;\n const quoteControlled = quoteProp !== undefined;\n const hasMessageContent =\n input.trim().length > 0 || attachments.length > 0 || entities.length > 0 || quote !== undefined;\n const active = chat.status === \"submitted\" || chat.status === \"streaming\";\n const canSubmit = hasMessageContent && !active;\n const canStop = active;\n\n const setInput = useCallback(\n (nextInput: string) => {\n if (!inputControlled) {\n setUncontrolledInput(nextInput);\n }\n onInputChange?.(nextInput);\n },\n [inputControlled, onInputChange],\n );\n\n const setAttachments = useCallback(\n (update: ComposerAttachmentsUpdate) => {\n const nextAttachments =\n typeof update === \"function\" ? update(attachmentsRef.current) : update;\n attachmentsRef.current = nextAttachments;\n if (!attachmentsControlled) {\n setUncontrolledAttachments(nextAttachments);\n }\n onAttachmentsChange?.(nextAttachments);\n },\n [attachmentsControlled, onAttachmentsChange],\n );\n\n const setEntities = useCallback(\n (update: ComposerEntitiesUpdate) => {\n const nextEntities = typeof update === \"function\" ? update(entitiesRef.current) : update;\n entitiesRef.current = nextEntities;\n if (!entitiesControlled) {\n setUncontrolledEntities(nextEntities);\n }\n onEntitiesChange?.(nextEntities);\n },\n [entitiesControlled, onEntitiesChange],\n );\n\n const setQuote = useCallback(\n (nextQuote: ComposerQuote | undefined) => {\n const normalizedQuote = normalizeQuote(nextQuote);\n if (!quoteControlled) {\n setUncontrolledQuote(normalizedQuote);\n }\n onQuoteChange?.(normalizedQuote);\n },\n [onQuoteChange, quoteControlled],\n );\n\n const addAttachment = useCallback(\n async (attachment: ComposerAttachmentInputValue) => {\n const normalized = isFileAttachmentInput(attachment)\n ? await attachmentFromFile(attachment)\n : createAttachment(attachment);\n setAttachments((current) => [...current, normalized]);\n },\n [setAttachments],\n );\n\n const removeAttachment = useCallback(\n (id: string) => {\n setAttachments((current) => current.filter((attachment) => attachment.id !== id));\n },\n [setAttachments],\n );\n\n const clearAttachments = useCallback(() => {\n setAttachments([]);\n }, [setAttachments]);\n\n const clearQuote = useCallback(() => {\n setQuote(undefined);\n }, [setQuote]);\n\n const clear = useCallback(() => {\n setInput(\"\");\n setAttachments([]);\n setEntities([]);\n setActiveTriggerState(undefined);\n clearQuote();\n }, [clearQuote, setAttachments, setEntities, setInput]);\n\n const submit = useCallback(async () => {\n const prompt = input;\n if (\n (prompt.trim().length === 0 &&\n attachments.length === 0 &&\n entities.length === 0 &&\n quote === undefined) ||\n chat.status === \"submitted\" ||\n chat.status === \"streaming\"\n ) {\n return;\n }\n assertComposerEntitiesData(entities);\n if (submitMessage !== undefined) {\n await submitMessage({\n input: prompt,\n attachments,\n entities,\n chat,\n quote,\n clear,\n });\n return;\n }\n if (defaultSubmissionInFlightRef.current) {\n return;\n }\n\n const submittedAttachments = [...attachments];\n const submittedQuote = quote === undefined ? undefined : { ...quote };\n const formattedPrompt =\n submittedQuote === undefined\n ? { text: prompt, prefixLength: 0 }\n : promptWithQuote(prompt, submittedQuote);\n const submittedEntities = shiftComposerEntityRanges(\n [...entities],\n formattedPrompt.prefixLength,\n );\n const submittedText = formattedPrompt.text;\n const metadata = composerSubmitMetadata(submittedQuote, submittedEntities);\n let payload: Parameters<typeof chat.sendMessage>[0];\n if (submittedAttachments.length === 0) {\n payload =\n metadata === undefined ? { text: submittedText } : { text: submittedText, metadata };\n } else {\n const attachmentPayload: {\n text: string;\n attachments: UIAttachment[];\n metadata?: NonNullable<ReturnType<typeof composerSubmitMetadata>>;\n } = {\n text: submittedText,\n attachments: submittedAttachments,\n };\n if (metadata !== undefined) attachmentPayload.metadata = metadata;\n payload = attachmentPayload;\n }\n\n defaultSubmissionInFlightRef.current = true;\n try {\n const submission = chat.sendMessage(payload);\n clear();\n await submission;\n } finally {\n defaultSubmissionInFlightRef.current = false;\n }\n }, [attachments, chat, clear, entities, input, quote, submitMessage]);\n\n const setActiveTrigger = useCallback((update: Parameters<typeof setActiveTriggerState>[0]) => {\n setActiveTriggerState(update);\n }, []);\n\n const value = useMemo<ComposerContextValue>(\n () => ({\n input,\n setInput,\n attachments,\n setAttachments,\n addAttachment,\n removeAttachment,\n clearAttachments,\n entities,\n setEntities,\n quote,\n setQuote,\n clearQuote,\n triggers,\n activeTrigger,\n setActiveTrigger,\n submit,\n stop: chat.stop,\n status: chat.status,\n canSubmit,\n canStop,\n }),\n [\n addAttachment,\n attachments,\n activeTrigger,\n canStop,\n canSubmit,\n chat.status,\n chat.stop,\n clearAttachments,\n clearQuote,\n entities,\n input,\n quote,\n removeAttachment,\n setAttachments,\n setActiveTrigger,\n setEntities,\n setInput,\n setQuote,\n submit,\n triggers,\n ],\n );\n\n const handleSubmit = useCallback(\n (event: FormEvent<HTMLFormElement>) => {\n (onSubmit as ((event: FormEvent<HTMLFormElement>) => void) | undefined)?.(event);\n if (event.defaultPrevented) {\n return;\n }\n event.preventDefault();\n void submit();\n },\n [onSubmit, submit],\n );\n\n return (\n <InternalComposerProvider value={value}>\n {renderPrimitive(\n \"form\",\n {\n ...props,\n onSubmit: handleSubmit,\n \"data-state\": chat.status,\n } as PrimitiveProps<\"form\">,\n ref,\n )}\n </InternalComposerProvider>\n );\n});\n\ntype ComposerQuoteProps = Omit<PrimitiveProps<\"blockquote\">, \"children\"> & {\n children?: ReactNode | ((quote: ComposerQuote) => ReactNode);\n};\n\nconst ComposerQuotePreview = forwardRef<HTMLQuoteElement, ComposerQuoteProps>(\n function ComposerQuotePreview({ children, ...props }, ref) {\n const composer = useComposer();\n const quote = composer.quote;\n if (quote === undefined) {\n return null;\n }\n const renderedChildren =\n typeof children === \"function\" ? children(quote) : (children ?? quote.text);\n\n return renderPrimitive(\n \"blockquote\",\n {\n ...props,\n children: renderedChildren,\n } as PrimitiveProps<\"blockquote\">,\n ref,\n );\n },\n);\n\nconst ComposerClearQuote = forwardRef<HTMLButtonElement, PrimitiveProps<\"button\">>(\n function ComposerClearQuote({ onClick, ...props }, ref) {\n const composer = useComposer();\n const disabled = props.disabled ?? composer.quote === undefined;\n\n const handleClick = useCallback(\n (event: MouseEvent<HTMLButtonElement>) => {\n onClick?.(event);\n if (event.defaultPrevented || disabled) {\n return;\n }\n composer.clearQuote();\n },\n [composer, disabled, onClick],\n );\n\n return renderPrimitive(\n \"button\",\n {\n ...props,\n children: props.children ?? \"Clear quote\",\n disabled,\n onClick: handleClick,\n type: props.type ?? \"button\",\n \"data-state\": disabled ? \"disabled\" : \"enabled\",\n } as PrimitiveProps<\"button\">,\n ref,\n );\n },\n);\n\ntype ComposerInputProps = PrimitiveProps<\"div\"> & {\n autoResize?: boolean;\n disabled?: boolean | undefined;\n maxRows?: number;\n minRows?: number;\n placeholder?: string | undefined;\n};\n\nconst ComposerInput = forwardRef<HTMLDivElement, ComposerInputProps>(function ComposerInput(\n {\n autoResize = true,\n disabled,\n maxRows: maxRowsProp,\n minRows: minRowsProp,\n onKeyDown,\n placeholder,\n style,\n ...props\n },\n ref,\n) {\n const composer = useComposer();\n const composerRef = useRef(composer);\n composerRef.current = composer;\n const editorReadyRef = useRef(false);\n const syncingFromEditorRef = useRef(false);\n const triggers = composer.triggers;\n const minRows = normalizeRows(minRowsProp ?? 1, 1);\n const maxRows = normalizeRows(maxRowsProp ?? 6, minRows);\n const extensions = useMemo(\n () =>\n composerInputExtensions({\n composerRef,\n placeholder,\n triggers,\n }),\n [placeholder, triggers],\n );\n const editor = useEditor(\n {\n extensions,\n content: plainTextToComposerContent(composer.input),\n editable: composer.status !== \"submitted\" && composer.status !== \"streaming\",\n editorProps: {\n attributes: {\n \"aria-label\": props[\"aria-label\"] ?? \"Message\",\n \"aria-multiline\": \"true\",\n role: \"textbox\",\n },\n handleKeyDown: (_view, event) => submitComposerFromEditorKeyDown(event, composerRef),\n },\n onUpdate: ({ editor: updatedEditor }) => {\n if (!editorReadyRef.current) {\n return;\n }\n const snapshot = composerSnapshotFromEditor(\n updatedEditor,\n composerRef.current.entities,\n composerRef.current.triggers,\n );\n syncingFromEditorRef.current = true;\n composerRef.current.setInput(snapshot.input);\n composerRef.current.setEntities(snapshot.entities);\n },\n },\n [extensions],\n );\n const ariaDisabled = props[\"aria-disabled\"] === true || props[\"aria-disabled\"] === \"true\";\n const composerDisabled =\n disabled === true ||\n ariaDisabled ||\n composer.status === \"submitted\" ||\n composer.status === \"streaming\";\n const inputStyle = useMemo<CSSProperties | undefined>(() => {\n if (!autoResize) {\n return style;\n }\n const rowsStyle: CSSProperties = {\n [\"--anvia-composer-min-rows\" as string]: minRows,\n [\"--anvia-composer-max-rows\" as string]: maxRows,\n };\n return style === undefined ? rowsStyle : { ...rowsStyle, ...style };\n }, [autoResize, maxRows, minRows, style]);\n const handleKeyDown = useCallback(\n (event: ReactKeyboardEvent<HTMLDivElement>) => {\n onKeyDown?.(event);\n if (\n event.defaultPrevented ||\n event.key !== \"Enter\" ||\n event.shiftKey ||\n event.nativeEvent.isComposing\n ) {\n return;\n }\n event.preventDefault();\n void composerRef.current.submit();\n },\n [onKeyDown],\n );\n\n useEffect(() => {\n if (editor === null) {\n return;\n }\n editor.setEditable(!composerDisabled, false);\n }, [composerDisabled, editor]);\n\n useEffect(() => {\n if (editor === null) {\n return;\n }\n editor.commands.setContent(plainTextToComposerContent(composerRef.current.input), {\n emitUpdate: false,\n });\n editorReadyRef.current = true;\n return () => {\n editorReadyRef.current = false;\n };\n }, [editor]);\n\n useEffect(() => {\n if (editor === null || !editorReadyRef.current) {\n return;\n }\n if (syncingFromEditorRef.current) {\n syncingFromEditorRef.current = false;\n return;\n }\n const snapshot = composerSnapshotFromEditor(editor, composer.entities, composer.triggers);\n if (snapshot.input === composer.input) {\n return;\n }\n editor.commands.setContent(plainTextToComposerContent(composer.input), {\n emitUpdate: false,\n });\n }, [composer, editor]);\n\n return renderPrimitive(\n \"div\",\n {\n ...props,\n children: <EditorContent editor={editor} />,\n \"aria-disabled\": composerDisabled ? true : props[\"aria-disabled\"],\n \"data-role\": \"editor\",\n \"data-state\": composerDisabled ? \"disabled\" : \"enabled\",\n onKeyDown: handleKeyDown,\n style: inputStyle,\n } as PrimitiveProps<\"div\">,\n ref,\n );\n});\n\ntype ComposerTextareaInputProps = PrimitiveProps<\"textarea\"> & {\n autoResize?: boolean;\n maxRows?: number;\n minRows?: number;\n};\n\nconst ComposerTextareaInput = forwardRef<HTMLTextAreaElement, ComposerTextareaInputProps>(\n function ComposerTextareaInput(\n {\n autoResize = true,\n maxRows: maxRowsProp,\n minRows: minRowsProp,\n onChange,\n onKeyDown,\n rows,\n ...props\n },\n ref,\n ) {\n const composer = useComposer();\n const inputRef = useRef<HTMLTextAreaElement | null>(null);\n const wasAutoResizeRef = useRef(autoResize);\n const composedInputRef = useMemo(() => composeRefs(inputRef, ref), [ref]);\n const minRows = normalizeRows(minRowsProp ?? rows ?? 1, 1);\n const maxRows = normalizeRows(maxRowsProp ?? 6, minRows);\n\n useEffect(() => {\n const wasAutoResize = wasAutoResizeRef.current;\n wasAutoResizeRef.current = autoResize;\n if (!autoResize) {\n if (wasAutoResize) {\n resetComposerInputSize(inputRef.current);\n }\n return;\n }\n resizeComposerInput(inputRef.current, { maxRows, minRows });\n });\n\n const handleChange = useCallback(\n (event: ChangeEvent<HTMLTextAreaElement>) => {\n onChange?.(event);\n if (!event.defaultPrevented) {\n composer.setInput(event.currentTarget.value);\n composer.setEntities([]);\n if (autoResize) {\n resizeComposerInput(event.currentTarget, { maxRows, minRows });\n }\n }\n },\n [autoResize, composer, maxRows, minRows, onChange],\n );\n\n const handleKeyDown = useCallback(\n (event: ReactKeyboardEvent<HTMLTextAreaElement>) => {\n onKeyDown?.(event);\n if (\n event.defaultPrevented ||\n event.key !== \"Enter\" ||\n event.shiftKey ||\n event.nativeEvent.isComposing\n ) {\n return;\n }\n event.preventDefault();\n void composer.submit();\n },\n [composer, onKeyDown],\n );\n\n return renderPrimitive(\n \"textarea\",\n {\n ...props,\n \"aria-label\": props[\"aria-label\"] ?? \"Message\",\n disabled:\n props.disabled ?? (composer.status === \"submitted\" || composer.status === \"streaming\"),\n onChange: handleChange,\n onKeyDown: handleKeyDown,\n rows: autoResize ? minRows : rows,\n value: composer.input,\n } as PrimitiveProps<\"textarea\">,\n composedInputRef,\n );\n },\n);\n\nconst COMPOSER_ENTITY_NODE = \"composerEntity\";\nconst EMPTY_COMPOSER_TRIGGERS: ComposerTriggerDefinition[] = [];\n\ntype ComposerRef = {\n current: ComposerContextValue;\n};\n\ntype ComposerEntityAttrs = {\n id?: string | null | undefined;\n label?: string | null | undefined;\n mentionSuggestionChar?: string | null | undefined;\n triggerId?: string | null | undefined;\n text?: string | null | undefined;\n data?: ComposerEntityData | undefined;\n};\n\ntype ComposerInputExtensionsOptions = {\n composerRef: ComposerRef;\n placeholder?: string | undefined;\n triggers: ComposerTriggerDefinition[];\n};\n\ntype ComposerDocumentSnapshot = {\n input: string;\n entities: ComposerEntity[];\n};\n\nconst ComposerEntityExtension = Mention.extend<\n MentionOptions<ComposerTriggerItemValue, ComposerEntityAttrs>\n>({\n name: COMPOSER_ENTITY_NODE,\n\n addAttributes() {\n return {\n id: {\n default: null,\n parseHTML: (element) => element.getAttribute(\"data-id\"),\n renderHTML: (attributes) =>\n attributes.id === undefined || attributes.id === null\n ? {}\n : { \"data-id\": String(attributes.id) },\n },\n label: {\n default: null,\n parseHTML: (element) => element.getAttribute(\"data-label\"),\n renderHTML: (attributes) =>\n attributes.label === undefined || attributes.label === null\n ? {}\n : { \"data-label\": String(attributes.label) },\n },\n mentionSuggestionChar: {\n default: \"@\",\n parseHTML: (element) => element.getAttribute(\"data-mention-suggestion-char\"),\n renderHTML: (attributes) => ({\n \"data-mention-suggestion-char\": attributes.mentionSuggestionChar,\n }),\n },\n triggerId: {\n default: null,\n parseHTML: (element) => element.getAttribute(\"data-trigger-id\"),\n renderHTML: (attributes) =>\n attributes.triggerId === undefined || attributes.triggerId === null\n ? {}\n : { \"data-trigger-id\": String(attributes.triggerId) },\n },\n text: {\n default: null,\n parseHTML: (element) => element.getAttribute(\"data-text\"),\n renderHTML: (attributes) =>\n attributes.text === undefined || attributes.text === null\n ? {}\n : { \"data-text\": String(attributes.text) },\n },\n data: {\n default: undefined,\n parseHTML: (element) => dataFromAttribute(element.getAttribute(\"data-entity-data\")),\n renderHTML: (attributes) => {\n if (attributes.data === undefined) return {};\n if (!isComposerEntityData(attributes.data)) {\n throw new TypeError(\"Composer entity data must be a JSON value.\");\n }\n return { \"data-entity-data\": JSON.stringify(attributes.data) };\n },\n },\n };\n },\n});\n\nfunction composerInputExtensions({\n composerRef,\n placeholder,\n triggers,\n}: ComposerInputExtensionsOptions): Extensions {\n return [\n Document,\n Paragraph,\n Text,\n HardBreak,\n Placeholder.configure(placeholder === undefined ? {} : { placeholder }),\n ComposerEntityExtension.configure({\n HTMLAttributes: {},\n deleteTriggerWithBackspace: true,\n renderText: ({ node }) => composerEntityText(node.attrs as ComposerEntityAttrs),\n renderHTML: ({ node, options }) => [\n \"span\",\n mergeAttributes(options.HTMLAttributes, {}),\n composerEntityText(node.attrs as ComposerEntityAttrs),\n ],\n suggestions: triggers.map((trigger) => composerSuggestion(trigger, composerRef)),\n }),\n ];\n}\n\nfunction submitComposerFromEditorKeyDown(event: KeyboardEvent, composerRef: ComposerRef): boolean {\n if (\n event.defaultPrevented ||\n event.key !== \"Enter\" ||\n event.shiftKey ||\n event.isComposing ||\n composerRef.current.activeTrigger !== undefined\n ) {\n return false;\n }\n event.preventDefault();\n void composerRef.current.submit();\n return true;\n}\n\ntype ComposerSuggestionOptions = Omit<\n SuggestionOptions<ComposerTriggerItemValue, ComposerEntityAttrs>,\n \"editor\"\n>;\n\nfunction composerSuggestion(\n trigger: ComposerTriggerDefinition,\n composerRef: ComposerRef,\n): ComposerSuggestionOptions {\n const pluginKey = new PluginKey(`anvia-composer-trigger-${trigger.id}`);\n\n const suggestion: ComposerSuggestionOptions = {\n pluginKey,\n char: trigger.char,\n items: ({ query, signal }: { query: string; signal: AbortSignal }) =>\n resolveTriggerItems(trigger, query, composerRef.current, signal),\n command: ({\n editor,\n range,\n props,\n }: {\n editor: Editor;\n range: { from: number; to: number };\n props: ComposerEntityAttrs;\n }) => {\n const nodeAfter = editor.state.selection.$to.nodeAfter;\n const overrideSpace = nodeAfter?.text?.startsWith(\" \");\n const insertRange = {\n from: range.from,\n to: overrideSpace ? range.to + 1 : range.to,\n };\n editor\n .chain()\n .focus()\n .insertContentAt(insertRange, [\n {\n type: COMPOSER_ENTITY_NODE,\n attrs: props,\n },\n {\n type: \"text\",\n text: \" \",\n },\n ])\n .run();\n composerEditorOwnerDocument(editor)?.defaultView?.getSelection()?.collapseToEnd();\n composerRef.current.setActiveTrigger(undefined);\n },\n render: () => ({\n onStart: (props: SuggestionProps<ComposerTriggerItemValue, ComposerEntityAttrs>) => {\n updateComposerTriggerState(trigger, props, composerRef);\n },\n onUpdate: (props: SuggestionProps<ComposerTriggerItemValue, ComposerEntityAttrs>) => {\n updateComposerTriggerState(trigger, props, composerRef);\n },\n onExit: () => {\n composerRef.current.setActiveTrigger((current) =>\n current?.trigger.id === trigger.id ? undefined : current,\n );\n },\n onKeyDown: (props: SuggestionKeyDownProps) =>\n handleComposerTriggerKeyDown(trigger, props, composerRef),\n }),\n };\n if (trigger.allowSpaces !== undefined) suggestion.allowSpaces = trigger.allowSpaces;\n if (trigger.allowedPrefixes !== undefined) {\n suggestion.allowedPrefixes = trigger.allowedPrefixes;\n }\n if (trigger.startOfLine !== undefined) suggestion.startOfLine = trigger.startOfLine;\n if (trigger.minQueryLength !== undefined) {\n suggestion.minQueryLength = trigger.minQueryLength;\n }\n return suggestion;\n}\n\nfunction resolveTriggerItems(\n trigger: ComposerTriggerDefinition,\n query: string,\n composer: ComposerContextValue,\n signal: AbortSignal,\n): ComposerTriggerItemValue[] | Promise<ComposerTriggerItemValue[]> {\n if (Array.isArray(trigger.items)) {\n const normalizedQuery = query.toLowerCase();\n return trigger.items.filter((item) => item.label.toLowerCase().includes(normalizedQuery));\n }\n return trigger.items({\n trigger,\n query,\n input: composer.input,\n entities: composer.entities,\n signal,\n });\n}\n\nfunction composerEditorOwnerDocument(editor: Editor): Document | undefined {\n const element = editor.options.element;\n if (element === null || typeof element === \"function\") {\n return undefined;\n }\n return \"mount\" in element ? element.mount.ownerDocument : element.ownerDocument;\n}\n\nfunction updateComposerTriggerState(\n trigger: ComposerTriggerDefinition,\n props: SuggestionProps<ComposerTriggerItemValue, ComposerEntityAttrs>,\n composerRef: ComposerRef,\n): void {\n const current = composerRef.current.activeTrigger;\n const selectedIndex =\n current?.trigger.id === trigger.id ? clampIndex(current.selectedIndex, props.items.length) : 0;\n const rect = rectFromSuggestion(props);\n const state: ComposerTriggerState = {\n trigger,\n query: props.query,\n items: props.items,\n loading: props.loading,\n selectedIndex,\n selectItem: (item) => {\n if (item.disabled) {\n return;\n }\n props.command(triggerItemToEntityAttrs(trigger, item));\n },\n setSelectedIndex: (index) => {\n composerRef.current.setActiveTrigger((active) =>\n active?.trigger.id === trigger.id\n ? { ...active, selectedIndex: clampIndex(index, active.items.length) }\n : active,\n );\n },\n };\n if (rect !== undefined) state.rect = rect;\n composerRef.current.setActiveTrigger(state);\n}\n\nfunction handleComposerTriggerKeyDown(\n trigger: ComposerTriggerDefinition,\n { event }: SuggestionKeyDownProps,\n composerRef: ComposerRef,\n): boolean {\n const activeTrigger = composerRef.current.activeTrigger;\n if (activeTrigger?.trigger.id !== trigger.id) {\n return false;\n }\n\n if (event.key === \"ArrowDown\") {\n event.preventDefault();\n activeTrigger.setSelectedIndex(activeTrigger.selectedIndex + 1);\n return true;\n }\n\n if (event.key === \"ArrowUp\") {\n event.preventDefault();\n activeTrigger.setSelectedIndex(activeTrigger.selectedIndex - 1);\n return true;\n }\n\n if (event.key === \"Enter\" || event.key === \"Tab\") {\n event.preventDefault();\n const item = activeTrigger.items[activeTrigger.selectedIndex];\n if (item !== undefined) {\n activeTrigger.selectItem(item);\n }\n return true;\n }\n\n if (event.key === \"Escape\") {\n composerRef.current.setActiveTrigger(undefined);\n return false;\n }\n\n return false;\n}\n\nfunction triggerItemToEntityAttrs(\n trigger: ComposerTriggerDefinition,\n item: ComposerTriggerItemValue,\n): ComposerEntityAttrs {\n if (item.data !== undefined && !isComposerEntityData(item.data)) {\n throw new TypeError(\"Composer trigger item data must be a JSON value.\");\n }\n return {\n id: item.id,\n label: item.label,\n mentionSuggestionChar: trigger.char,\n triggerId: trigger.id,\n text: triggerItemText(trigger, item),\n data: item.data,\n };\n}\n\nfunction triggerItemText(\n trigger: ComposerTriggerDefinition,\n item: ComposerTriggerItemValue,\n): string {\n return item.text ?? `${trigger.char}${item.label}`;\n}\n\nfunction rectFromSuggestion(\n props: SuggestionProps<ComposerTriggerItemValue, ComposerEntityAttrs>,\n): ComposerTriggerState[\"rect\"] {\n const rect = props.clientRect?.();\n if (rect === undefined || rect === null) {\n return undefined;\n }\n return {\n top: rect.top,\n right: rect.right,\n bottom: rect.bottom,\n left: rect.left,\n width: rect.width,\n height: rect.height,\n };\n}\n\nfunction clampIndex(index: number, length: number): number {\n if (length <= 0) {\n return 0;\n }\n return (index + length) % length;\n}\n\nfunction plainTextToComposerContent(input: string): JSONContent {\n const lines = input.length === 0 ? [\"\"] : input.split(/\\r?\\n/);\n return {\n type: \"doc\",\n content: lines.map((line) => {\n const paragraph: JSONContent = { type: \"paragraph\" };\n if (line.length > 0) {\n paragraph.content = [{ type: \"text\", text: line }];\n }\n return paragraph;\n }),\n };\n}\n\nfunction composerSnapshotFromEditor(\n editor: Editor,\n previousEntities: ComposerEntity[],\n triggers: ComposerTriggerDefinition[],\n): ComposerDocumentSnapshot {\n return composerSnapshotFromContent(editor.getJSON(), previousEntities, triggers);\n}\n\nfunction composerSnapshotFromContent(\n content: JSONContent,\n previousEntities: ComposerEntity[],\n triggers: ComposerTriggerDefinition[],\n): ComposerDocumentSnapshot {\n const entities: ComposerEntity[] = [];\n let input = \"\";\n let blockIndex = 0;\n\n const appendNode = (node: JSONContent): void => {\n if (node.type === \"doc\") {\n for (const child of node.content ?? []) {\n appendNode(child);\n }\n return;\n }\n\n if (node.type === \"paragraph\") {\n if (blockIndex > 0) {\n input += \"\\n\";\n }\n blockIndex += 1;\n for (const child of node.content ?? []) {\n appendNode(child);\n }\n return;\n }\n\n if (node.type === \"text\") {\n input += node.text ?? \"\";\n return;\n }\n\n if (node.type === \"hardBreak\") {\n input += \"\\n\";\n return;\n }\n\n if (node.type === COMPOSER_ENTITY_NODE) {\n const attrs = node.attrs as ComposerEntityAttrs | undefined;\n const entity = composerEntityFromAttrs(attrs, input.length, previousEntities, triggers);\n input += entity.text;\n entities.push(entity);\n return;\n }\n\n for (const child of node.content ?? []) {\n appendNode(child);\n }\n };\n\n appendNode(content);\n return { input, entities };\n}\n\nfunction composerEntityFromAttrs(\n attrs: ComposerEntityAttrs | undefined,\n from: number,\n previousEntities: ComposerEntity[],\n triggers: ComposerTriggerDefinition[],\n): ComposerEntity {\n const id = stringAttr(attrs?.id) ?? \"\";\n const trigger = stringAttr(attrs?.mentionSuggestionChar) ?? \"@\";\n const triggerId =\n stringAttr(attrs?.triggerId) ??\n triggers.find((candidate) => candidate.char === trigger)?.id ??\n trigger;\n const label = stringAttr(attrs?.label) ?? id;\n const text = composerEntityText(attrs);\n const previous = previousEntities.find(\n (entity) => entity.id === id && entity.triggerId === triggerId && entity.trigger === trigger,\n );\n const data = attrs?.data === undefined ? previous?.data : attrs.data;\n const entity: ComposerEntity = {\n id,\n triggerId,\n trigger,\n label,\n text,\n range: {\n from,\n to: from + text.length,\n },\n };\n if (data !== undefined) entity.data = data;\n return entity;\n}\n\nfunction composerEntityText(attrs: ComposerEntityAttrs | undefined): string {\n const text = stringAttr(attrs?.text);\n if (text !== undefined) {\n return text;\n }\n const trigger = stringAttr(attrs?.mentionSuggestionChar) ?? \"@\";\n return `${trigger}${stringAttr(attrs?.label) ?? stringAttr(attrs?.id) ?? \"\"}`;\n}\n\nfunction stringAttr(value: unknown): string | undefined {\n return typeof value === \"string\" ? value : undefined;\n}\n\nfunction dataFromAttribute(value: string | null): ComposerEntityData | undefined {\n if (value === null) {\n return undefined;\n }\n try {\n const parsed: unknown = JSON.parse(value);\n return isComposerEntityData(parsed) ? parsed : undefined;\n } catch {\n return undefined;\n }\n}\n\ntype ComposerInputResizeOptions = {\n maxRows: number;\n minRows: number;\n};\n\nfunction resizeComposerInput(\n input: HTMLTextAreaElement | null,\n { maxRows, minRows }: ComposerInputResizeOptions,\n): void {\n if (input === null) {\n return;\n }\n\n const style = getComputedStyle(input);\n const lineHeight = lineHeightFromStyle(style);\n const paddingHeight = pixelValue(style.paddingTop) + pixelValue(style.paddingBottom);\n const borderHeight = pixelValue(style.borderTopWidth) + pixelValue(style.borderBottomWidth);\n const minContentHeight = lineHeight * minRows;\n const maxContentHeight = Math.max(minContentHeight, lineHeight * maxRows);\n\n input.style.height = \"auto\";\n const scrollContentHeight = Math.max(input.scrollHeight - paddingHeight, 0);\n const contentHeight = clamp(scrollContentHeight, minContentHeight, maxContentHeight);\n const nextHeight =\n style.boxSizing === \"border-box\" ? contentHeight + paddingHeight + borderHeight : contentHeight;\n\n input.style.height = `${Math.ceil(nextHeight)}px`;\n input.style.overflowY = scrollContentHeight > maxContentHeight ? \"auto\" : \"hidden\";\n}\n\nfunction resetComposerInputSize(input: HTMLTextAreaElement | null): void {\n if (input === null) {\n return;\n }\n input.style.height = \"\";\n input.style.overflowY = \"\";\n}\n\nfunction normalizeRows(value: number, min: number): number {\n if (!Number.isFinite(value)) {\n return min;\n }\n return Math.max(min, Math.floor(value));\n}\n\nfunction lineHeightFromStyle(style: CSSStyleDeclaration): number {\n return pixelValue(style.lineHeight) || (pixelValue(style.fontSize) || 16) * 1.2;\n}\n\nfunction pixelValue(value: string): number {\n const parsed = Number.parseFloat(value);\n return Number.isFinite(parsed) ? parsed : 0;\n}\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.min(Math.max(value, min), max);\n}\n\nfunction promptWithQuote(\n prompt: string,\n quote: ComposerQuote,\n): { text: string; prefixLength: number } {\n const quotedText = quote.text\n .split(/\\r?\\n/)\n .map((line) => `> ${line}`)\n .join(\"\\n\");\n if (prompt.trim().length === 0) {\n return { text: quotedText, prefixLength: 0 };\n }\n const prefix = `${quotedText}\\n\\n`;\n return { text: `${prefix}${prompt}`, prefixLength: prefix.length };\n}\n\nfunction normalizeQuote(quote: ComposerQuote | undefined): ComposerQuote | undefined {\n if (quote === undefined) {\n return undefined;\n }\n return {\n text: quote.text,\n messageId: quote.messageId,\n };\n}\n\ntype ComposerSubmitMetadata = ClientMetadata & {\n quote?: ComposerQuote;\n composer?: ClientMetadata & {\n entities: readonly ClientMetadata[];\n };\n};\n\nfunction composerSubmitMetadata(\n quote: ComposerQuote | undefined,\n entities: ComposerEntity[],\n): ComposerSubmitMetadata | undefined {\n if (quote === undefined && entities.length === 0) {\n return undefined;\n }\n const metadata: ComposerSubmitMetadata = {};\n if (quote !== undefined) metadata.quote = quote;\n if (entities.length > 0) {\n metadata.composer = { entities: entities.map(composerEntityMetadata) };\n }\n return metadata;\n}\n\nfunction assertComposerEntitiesData(entities: readonly ComposerEntity[]): void {\n for (const entity of entities) {\n if (entity.data !== undefined && !isComposerEntityData(entity.data)) {\n throw new TypeError(\"Composer entity data must be a JSON value.\");\n }\n }\n}\n\nfunction composerEntityMetadata(entity: ComposerEntity): ClientMetadata {\n const metadata: ClientMetadata = {\n id: entity.id,\n triggerId: entity.triggerId,\n trigger: entity.trigger,\n label: entity.label,\n text: entity.text,\n range: { from: entity.range.from, to: entity.range.to },\n };\n if (entity.data !== undefined) {\n metadata.data = entity.data;\n }\n return metadata;\n}\n\nconst ComposerSubmit = forwardRef<HTMLButtonElement, PrimitiveProps<\"button\">>(\n function ComposerSubmit(props, ref) {\n const composer = useComposer();\n const disabled = props.disabled ?? !composer.canSubmit;\n\n return renderPrimitive(\n \"button\",\n {\n ...props,\n children: props.children ?? \"Send\",\n disabled,\n type: props.type ?? \"submit\",\n \"data-state\": disabled ? \"disabled\" : \"enabled\",\n } as PrimitiveProps<\"button\">,\n ref,\n );\n },\n);\n\nconst ComposerStop = forwardRef<HTMLButtonElement, PrimitiveProps<\"button\">>(function ComposerStop(\n { onClick, ...props },\n ref,\n) {\n const composer = useComposer();\n const disabled = props.disabled ?? !composer.canStop;\n\n const handleClick = useCallback(\n (event: MouseEvent<HTMLButtonElement>) => {\n onClick?.(event);\n if (event.defaultPrevented || disabled) {\n return;\n }\n composer.stop();\n },\n [composer, disabled, onClick],\n );\n\n return renderPrimitive(\n \"button\",\n {\n ...props,\n children: props.children ?? \"Stop\",\n disabled,\n onClick: handleClick,\n type: props.type ?? \"button\",\n \"data-state\": disabled ? \"disabled\" : \"enabled\",\n } as PrimitiveProps<\"button\">,\n ref,\n );\n});\n\ntype ComposerTriggerMenuChildren = ReactNode | ((trigger: ComposerTriggerState) => ReactNode);\n\ntype ComposerTriggerMenuProps = Omit<PrimitiveProps<\"div\">, \"children\"> & {\n children?: ComposerTriggerMenuChildren;\n keepMounted?: boolean;\n};\n\nconst ComposerTriggerMenu = forwardRef<HTMLDivElement, ComposerTriggerMenuProps>(\n function ComposerTriggerMenu({ children, keepMounted = false, style, ...props }, ref) {\n const composer = useComposer();\n const activeTrigger = composer.activeTrigger;\n const empty = activeTrigger === undefined;\n if (empty && !keepMounted) {\n return null;\n }\n\n const menuStyle =\n activeTrigger?.rect === undefined\n ? style\n : ({\n position: \"fixed\",\n top: activeTrigger.rect.bottom,\n left: activeTrigger.rect.left,\n ...style,\n } satisfies CSSProperties);\n const renderedChildren =\n activeTrigger === undefined\n ? typeof children === \"function\"\n ? null\n : children\n : typeof children === \"function\"\n ? children(activeTrigger)\n : (children ??\n activeTrigger.items.map((item, index) => (\n <ComposerTriggerItem key={`${item.id}:${index.toString()}`} index={index} />\n )));\n\n return renderPrimitive(\n \"div\",\n {\n ...props,\n children: renderedChildren,\n role: props.role ?? \"listbox\",\n style: menuStyle,\n \"data-state\":\n activeTrigger === undefined\n ? \"closed\"\n : activeTrigger.loading\n ? \"loading\"\n : empty\n ? \"empty\"\n : \"open\",\n } as PrimitiveProps<\"div\">,\n ref,\n );\n },\n);\n\ntype ComposerTriggerItemChildren =\n | ReactNode\n | ((item: ComposerTriggerItemValue, trigger: ComposerTriggerState) => ReactNode);\n\ntype ComposerTriggerItemProps = Omit<PrimitiveProps<\"button\">, \"children\"> & {\n children?: ComposerTriggerItemChildren;\n index?: number | undefined;\n item?: ComposerTriggerItemValue | undefined;\n};\n\nconst ComposerTriggerItem = forwardRef<HTMLButtonElement, ComposerTriggerItemProps>(\n function ComposerTriggerItem(\n { children, index, item: itemProp, onClick, onMouseEnter, ...props },\n ref,\n ) {\n const composer = useComposer();\n const activeTrigger = composer.activeTrigger;\n const itemIndex = index ?? 0;\n const item = itemProp ?? activeTrigger?.items[itemIndex];\n if (activeTrigger === undefined || item === undefined) {\n return null;\n }\n\n const selected = activeTrigger.selectedIndex === itemIndex;\n const disabled = props.disabled ?? item.disabled ?? false;\n const renderedChildren =\n typeof children === \"function\" ? children(item, activeTrigger) : (children ?? item.label);\n\n const handleMouseEnter = (event: MouseEvent<HTMLButtonElement>) => {\n onMouseEnter?.(event);\n if (!event.defaultPrevented && !disabled) {\n activeTrigger.setSelectedIndex(itemIndex);\n }\n };\n const handleClick = (event: MouseEvent<HTMLButtonElement>) => {\n onClick?.(event);\n if (!event.defaultPrevented && !disabled) {\n activeTrigger.selectItem(item);\n }\n };\n\n return renderPrimitive(\n \"button\",\n {\n ...props,\n children: renderedChildren,\n disabled,\n onClick: handleClick,\n onMouseEnter: handleMouseEnter,\n role: props.role ?? \"option\",\n type: props.type ?? \"button\",\n \"aria-selected\": selected,\n \"data-state\": disabled ? \"disabled\" : selected ? \"selected\" : \"idle\",\n } as PrimitiveProps<\"button\">,\n ref,\n );\n },\n);\n\ntype ComposerAttachmentsChildren = ReactNode | ((attachment: UIAttachment) => ReactNode);\n\ntype ComposerAttachmentsProps = Omit<PrimitiveProps<\"div\">, \"children\"> & {\n children?: ComposerAttachmentsChildren;\n keepMounted?: boolean;\n};\n\nconst ComposerAttachments = forwardRef<HTMLDivElement, ComposerAttachmentsProps>(\n function ComposerAttachments({ children, keepMounted = false, ...props }, ref) {\n const composer = useComposer();\n const empty = composer.attachments.length === 0;\n if (empty && !keepMounted) {\n return null;\n }\n\n return renderPrimitive(\n \"div\",\n {\n ...props,\n children: composer.attachments.map((attachment) => (\n <InternalAttachmentProvider\n key={attachment.id}\n value={{\n attachment,\n remove: () => {\n composer.removeAttachment(attachment.id);\n },\n }}\n >\n {typeof children === \"function\"\n ? children(attachment)\n : (children ?? <AttachmentPrimitive.Root />)}\n </InternalAttachmentProvider>\n )),\n \"data-role\": \"attachments\",\n \"data-state\": empty ? \"empty\" : \"populated\",\n } as PrimitiveProps<\"div\">,\n ref,\n );\n },\n);\n\ntype ComposerAddAttachmentProps = PrimitiveProps<\"button\"> & {\n accept?: string;\n multiple?: boolean;\n};\n\ntype ComposerAttachmentInputProps = PrimitiveProps<\"input\">;\n\nconst ComposerAttachmentInput = forwardRef<HTMLInputElement, ComposerAttachmentInputProps>(\n function ComposerAttachmentInput({ onChange, ...props }, ref) {\n const composer = useComposer();\n const disabled =\n props.disabled ?? (composer.status === \"submitted\" || composer.status === \"streaming\");\n\n const handleChange = useCallback(\n async (event: ChangeEvent<HTMLInputElement>) => {\n onChange?.(event);\n if (event.defaultPrevented) {\n return;\n }\n const files = Array.from(event.currentTarget.files ?? []);\n event.currentTarget.value = \"\";\n for (const file of files) {\n await composer.addAttachment(file);\n }\n },\n [composer, onChange],\n );\n\n return renderPrimitive(\n \"input\",\n {\n ...props,\n disabled,\n onChange: (event) => {\n void handleChange(event);\n },\n type: \"file\",\n \"data-state\": disabled ? \"disabled\" : \"enabled\",\n } as PrimitiveProps<\"input\">,\n ref,\n );\n },\n);\n\nconst ComposerAddAttachment = forwardRef<HTMLButtonElement, ComposerAddAttachmentProps>(\n function ComposerAddAttachment({ accept, multiple = false, onClick, ...props }, ref) {\n const composer = useComposer();\n const inputRef = useRef<HTMLInputElement | null>(null);\n const disabled =\n props.disabled ?? (composer.status === \"submitted\" || composer.status === \"streaming\");\n\n const handleClick = useCallback(\n (event: MouseEvent<HTMLButtonElement>) => {\n onClick?.(event);\n if (event.defaultPrevented || disabled) {\n return;\n }\n inputRef.current?.click();\n },\n [disabled, onClick],\n );\n\n return (\n <>\n {renderPrimitive(\n \"button\",\n {\n ...props,\n children: props.children ?? \"Attach\",\n disabled,\n onClick: handleClick,\n type: props.type ?? \"button\",\n \"data-state\": disabled ? \"disabled\" : \"enabled\",\n } as PrimitiveProps<\"button\">,\n ref,\n )}\n <ComposerAttachmentInput\n accept={accept}\n aria-hidden=\"true\"\n hidden\n multiple={multiple}\n ref={inputRef}\n tabIndex={-1}\n />\n </>\n );\n },\n);\n\ntype ComposerAttachmentDropzoneProps = PrimitiveProps<\"div\"> & {\n disabled?: boolean;\n};\n\nconst ComposerAttachmentDropzone = forwardRef<HTMLDivElement, ComposerAttachmentDropzoneProps>(\n function ComposerAttachmentDropzone(\n { disabled: disabledProp = false, onDragLeave, onDragOver, onDrop, ...props },\n ref,\n ) {\n const composer = useComposer();\n const [dragging, setDragging] = useState(false);\n const disabled =\n disabledProp || composer.status === \"submitted\" || composer.status === \"streaming\";\n\n const handleDragOver = useCallback(\n (event: DragEvent<HTMLDivElement>) => {\n onDragOver?.(event);\n if (event.defaultPrevented || disabled) {\n return;\n }\n event.preventDefault();\n setDragging(true);\n },\n [disabled, onDragOver],\n );\n\n const handleDragLeave = useCallback(\n (event: DragEvent<HTMLDivElement>) => {\n onDragLeave?.(event);\n if (!event.defaultPrevented) {\n setDragging(false);\n }\n },\n [onDragLeave],\n );\n\n const handleDrop = useCallback(\n (event: DragEvent<HTMLDivElement>) => {\n onDrop?.(event);\n if (event.defaultPrevented || disabled) {\n return;\n }\n event.preventDefault();\n setDragging(false);\n const files = Array.from(event.dataTransfer.files);\n void Promise.all(files.map((file) => composer.addAttachment(file)));\n },\n [composer, disabled, onDrop],\n );\n\n return renderPrimitive(\n \"div\",\n {\n ...props,\n onDragLeave: handleDragLeave,\n onDragOver: handleDragOver,\n onDrop: handleDrop,\n \"data-state\": disabled ? \"disabled\" : dragging ? \"dragging\" : \"enabled\",\n } as PrimitiveProps<\"div\">,\n ref,\n );\n },\n);\n\nfunction createAttachment(attachment: CreateUIAttachment): UIAttachment {\n return {\n ...attachment,\n id: attachment.id ?? createAttachmentId(),\n };\n}\n\nfunction isFileAttachmentInput(attachment: File | CreateUIAttachment): attachment is File {\n return typeof File !== \"undefined\" && attachment instanceof File;\n}\n\nasync function attachmentFromFile(file: File): Promise<UIAttachment> {\n return {\n id: createAttachmentId(),\n type: file.type.startsWith(\"image/\") ? \"image\" : \"document\",\n name: file.name,\n mediaType: file.type.length > 0 ? file.type : \"application/octet-stream\",\n data: await readFileData(file),\n };\n}\n\nasync function readFileData(file: File): Promise<string> {\n const dataUrl = await new Promise<string>((resolve, reject) => {\n const reader = new FileReader();\n reader.addEventListener(\"load\", () => {\n resolve(String(reader.result ?? \"\"));\n });\n reader.addEventListener(\"error\", () => {\n reject(reader.error ?? new Error(\"Failed to read attachment.\"));\n });\n reader.readAsDataURL(file);\n });\n return dataUrl.includes(\",\") ? dataUrl.slice(dataUrl.indexOf(\",\") + 1) : dataUrl;\n}\n\nlet nextAttachmentId = 0;\n\nfunction createAttachmentId(): string {\n const random = globalThis.crypto?.randomUUID?.();\n if (random !== undefined) {\n return `attachment_${random}`;\n }\n nextAttachmentId += 1;\n return `attachment_${nextAttachmentId.toString(36)}`;\n}\n\nexport const ComposerPrimitive = {\n Root: ComposerRoot,\n Quote: ComposerQuotePreview,\n ClearQuote: ComposerClearQuote,\n Input: ComposerInput,\n TextareaInput: ComposerTextareaInput,\n TriggerMenu: ComposerTriggerMenu,\n TriggerItem: ComposerTriggerItem,\n Attachments: ComposerAttachments,\n AddAttachment: ComposerAddAttachment,\n AttachmentInput: ComposerAttachmentInput,\n AttachmentDropzone: ComposerAttachmentDropzone,\n Submit: ComposerSubmit,\n Stop: ComposerStop,\n} as const;\n","import type { UIMessage } from \"@anvia/client\";\nimport type { ChatSuggestion, UseChatStatus } from \"@anvia/react\";\nimport {\n Fragment,\n forwardRef,\n type MouseEvent,\n type ReactNode,\n type UIEvent,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\n\nimport {\n InternalMessageProvider,\n InternalThreadProvider,\n type ThreadContextValue,\n useChatContext,\n useThread,\n} from \"../contexts\";\nimport { MessagePrimitive } from \"../message/index\";\nimport { composeRefs, type PrimitiveProps, renderPrimitive } from \"../primitives\";\n\ntype ThreadMessagesChildren = ReactNode | ((message: UIMessage) => ReactNode);\ntype ThreadSuggestionChildren = ReactNode | ((suggestion: ChatSuggestion) => ReactNode);\n\nconst ThreadRoot = forwardRef<HTMLDivElement, PrimitiveProps<\"div\">>(\n function ThreadRoot(props, ref) {\n const chat = useChatContext();\n const viewportRef = useRef<HTMLElement | null>(null);\n const messagesRef = useRef<HTMLElement | null>(null);\n const [atBottom, setAtBottom] = useState(true);\n const scrollToBottom = useCallback((behavior: ScrollBehavior = \"smooth\") => {\n const viewport = viewportRef.current;\n if (viewport === null) {\n return;\n }\n viewport.scrollTo({ top: viewport.scrollHeight, behavior });\n }, []);\n const thread = useMemo<ThreadContextValue>(\n () => ({ viewportRef, messagesRef, atBottom, setAtBottom, scrollToBottom }),\n [atBottom, scrollToBottom],\n );\n\n return (\n <InternalThreadProvider value={thread}>\n {renderPrimitive(\n \"div\",\n {\n ...props,\n \"data-state\": chat.status,\n } as PrimitiveProps<\"div\">,\n ref,\n )}\n </InternalThreadProvider>\n );\n },\n);\n\ntype ThreadViewportProps = PrimitiveProps<\"div\"> & {\n autoScroll?: boolean;\n};\n\nconst ThreadViewport = forwardRef<HTMLDivElement, ThreadViewportProps>(function ThreadViewport(\n { autoScroll = true, onScroll, ...props },\n ref,\n) {\n const chat = useChatContext();\n const thread = useThread();\n const messages = chat.messages;\n const composedRef = useMemo(\n () =>\n composeRefs<HTMLDivElement>(ref, (node) => {\n thread.viewportRef.current = node;\n }),\n [ref, thread.viewportRef],\n );\n\n useEffect(() => {\n const hasMessages = messages.length > 0;\n if (autoScroll && (thread.atBottom || !hasMessages)) {\n thread.scrollToBottom(\"auto\");\n }\n }, [autoScroll, messages, thread]);\n\n useEffect(() => {\n const viewport = thread.viewportRef.current;\n if (viewport === null || !autoScroll || typeof ResizeObserver !== \"function\") {\n return;\n }\n const content = thread.messagesRef.current;\n if (content === null) {\n return;\n }\n const observer = new ResizeObserver(() => {\n if (thread.atBottom) {\n thread.scrollToBottom(\"auto\");\n }\n });\n observer.observe(viewport);\n observer.observe(content);\n return () => observer.disconnect();\n }, [autoScroll, thread]);\n\n const handleScroll = useCallback(\n (event: UIEvent<HTMLDivElement>) => {\n onScroll?.(event);\n const node = event.currentTarget;\n const distanceFromBottom = node.scrollHeight - node.scrollTop - node.clientHeight;\n thread.setAtBottom(distanceFromBottom < 80);\n },\n [onScroll, thread],\n );\n\n return renderPrimitive(\n \"div\",\n {\n ...props,\n onScroll: handleScroll,\n \"data-state\": thread.atBottom ? \"bottom\" : \"away\",\n } as PrimitiveProps<\"div\">,\n composedRef,\n );\n});\n\nconst ThreadViewportFooter = forwardRef<HTMLDivElement, PrimitiveProps<\"div\">>(\n function ThreadViewportFooter(props, ref) {\n return renderPrimitive(\n \"div\",\n {\n ...props,\n } as PrimitiveProps<\"div\">,\n ref,\n );\n },\n);\n\nconst ThreadEmpty = forwardRef<HTMLDivElement, PrimitiveProps<\"div\">>(\n function ThreadEmpty(props, ref) {\n const chat = useChatContext();\n if (chat.messages.length > 0) {\n return null;\n }\n\n return renderPrimitive(\n \"div\",\n {\n ...props,\n } as PrimitiveProps<\"div\">,\n ref,\n );\n },\n);\n\ntype ThreadStatusProps = Omit<PrimitiveProps<\"div\">, \"children\"> & {\n children?: ReactNode | ((status: UseChatStatus) => ReactNode);\n};\n\nconst ThreadStatus = forwardRef<HTMLDivElement, ThreadStatusProps>(function ThreadStatus(\n { children, ...props },\n ref,\n) {\n const chat = useChatContext();\n const renderedChildren = typeof children === \"function\" ? children(chat.status) : children;\n\n return renderPrimitive(\n \"div\",\n {\n ...props,\n children: renderedChildren ?? chat.status,\n \"data-state\": chat.status,\n } as PrimitiveProps<\"div\">,\n ref,\n );\n});\n\nconst ThreadLoading = forwardRef<HTMLDivElement, PrimitiveProps<\"div\">>(\n function ThreadLoading(props, ref) {\n const chat = useChatContext();\n if (chat.status !== \"submitted\" && chat.status !== \"streaming\") {\n return null;\n }\n\n return renderPrimitive(\n \"div\",\n {\n ...props,\n children: props.children ?? \"Loading\",\n } as PrimitiveProps<\"div\">,\n ref,\n );\n },\n);\n\ntype ThreadErrorProps = Omit<PrimitiveProps<\"div\">, \"children\"> & {\n children?: ReactNode | ((error: unknown) => ReactNode);\n};\n\nconst ThreadError = forwardRef<HTMLDivElement, ThreadErrorProps>(function ThreadError(\n { children, ...props },\n ref,\n) {\n const chat = useChatContext();\n if (chat.status !== \"error\" && chat.error === undefined) {\n return null;\n }\n const renderedChildren = typeof children === \"function\" ? children(chat.error) : children;\n\n return renderPrimitive(\n \"div\",\n {\n ...props,\n children: renderedChildren ?? errorMessage(chat.error),\n role: props.role ?? \"alert\",\n } as PrimitiveProps<\"div\">,\n ref,\n );\n});\n\ntype ThreadMessagesProps = Omit<PrimitiveProps<\"div\">, \"children\"> & {\n children?: ThreadMessagesChildren;\n keepMounted?: boolean;\n};\n\nconst ThreadMessages = forwardRef<HTMLDivElement, ThreadMessagesProps>(function ThreadMessages(\n { children, keepMounted = true, ...props },\n ref,\n) {\n const chat = useChatContext();\n const thread = useThread();\n const composedRef = useMemo(\n () =>\n composeRefs<HTMLDivElement>(ref, (node) => {\n thread.messagesRef.current = node;\n }),\n [ref, thread.messagesRef],\n );\n const empty = chat.messages.length === 0;\n if (empty && !keepMounted) {\n return null;\n }\n\n return renderPrimitive(\n \"div\",\n {\n ...props,\n children: chat.messages.map((message) => (\n <InternalMessageProvider key={message.id} message={message}>\n {typeof children === \"function\" ? children(message) : (children ?? defaultMessage())}\n </InternalMessageProvider>\n )),\n \"data-state\": empty ? \"empty\" : \"populated\",\n } as PrimitiveProps<\"div\">,\n composedRef,\n );\n});\n\ntype ThreadSuggestionsProps = Omit<PrimitiveProps<\"div\">, \"children\"> & {\n children?: ThreadSuggestionChildren;\n keepMounted?: boolean;\n};\n\nconst ThreadSuggestions = forwardRef<HTMLDivElement, ThreadSuggestionsProps>(\n function ThreadSuggestions({ children, keepMounted = false, ...props }, ref) {\n const chat = useChatContext();\n const suggestions = chat.suggestions ?? [];\n const empty = suggestions.length === 0;\n if (empty && !keepMounted) {\n return null;\n }\n\n return renderPrimitive(\n \"div\",\n {\n ...props,\n children: suggestions.map((suggestion) =>\n typeof children === \"function\" ? (\n <Fragment key={suggestion.id}>{children(suggestion)}</Fragment>\n ) : (\n <ThreadSuggestion key={suggestion.id} suggestion={suggestion}>\n {children}\n </ThreadSuggestion>\n ),\n ),\n \"data-role\": \"suggestions\",\n \"data-state\": empty ? \"empty\" : \"populated\",\n } as PrimitiveProps<\"div\">,\n ref,\n );\n },\n);\n\ntype ThreadSuggestionProps = Omit<PrimitiveProps<\"button\">, \"children\"> & {\n children?: ReactNode;\n prompt?: string;\n suggestion?: ChatSuggestion;\n};\n\nconst ThreadSuggestion = forwardRef<HTMLButtonElement, ThreadSuggestionProps>(\n function ThreadSuggestion({ onClick, prompt, suggestion, ...props }, ref) {\n const chat = useChatContext();\n const suggestionPrompt = prompt ?? suggestion?.prompt ?? \"\";\n const disabled =\n props.disabled ??\n (suggestionPrompt.length === 0 || chat.status === \"submitted\" || chat.status === \"streaming\");\n\n const handleClick = useCallback(\n (event: MouseEvent<HTMLButtonElement>) => {\n onClick?.(event);\n if (event.defaultPrevented || disabled) {\n return;\n }\n void chat.sendMessage({ text: suggestionPrompt });\n },\n [chat, disabled, onClick, suggestionPrompt],\n );\n\n return renderPrimitive(\n \"button\",\n {\n ...props,\n children: props.children ?? suggestion?.label ?? suggestionPrompt,\n disabled,\n onClick: handleClick,\n type: props.type ?? \"button\",\n \"data-state\": disabled ? \"disabled\" : \"enabled\",\n } as PrimitiveProps<\"button\">,\n ref,\n );\n },\n);\n\nconst ThreadScrollToBottom = forwardRef<HTMLButtonElement, PrimitiveProps<\"button\">>(\n function ThreadScrollToBottom({ onClick, ...props }, ref) {\n const thread = useThread();\n const disabled = props.disabled ?? thread.atBottom;\n\n const handleClick = useCallback(\n (event: MouseEvent<HTMLButtonElement>) => {\n onClick?.(event);\n if (event.defaultPrevented || disabled) {\n return;\n }\n thread.scrollToBottom();\n },\n [disabled, onClick, thread],\n );\n\n return renderPrimitive(\n \"button\",\n {\n ...props,\n children: props.children ?? \"Scroll to bottom\",\n disabled,\n onClick: handleClick,\n type: props.type ?? \"button\",\n \"data-state\": thread.atBottom ? \"bottom\" : \"away\",\n } as PrimitiveProps<\"button\">,\n ref,\n );\n },\n);\n\nfunction defaultMessage(): ReactNode {\n return (\n <MessagePrimitive.Root>\n <MessagePrimitive.Content>\n <MessagePrimitive.Parts />\n </MessagePrimitive.Content>\n <MessagePrimitive.Actions />\n </MessagePrimitive.Root>\n );\n}\n\nfunction errorMessage(error: unknown): string {\n if (error instanceof Error) {\n return error.message;\n }\n if (typeof error === \"string\") {\n return error;\n }\n return \"Something went wrong.\";\n}\n\nexport const ThreadPrimitive = {\n Root: ThreadRoot,\n Viewport: ThreadViewport,\n ViewportFooter: ThreadViewportFooter,\n Messages: ThreadMessages,\n Empty: ThreadEmpty,\n Status: ThreadStatus,\n Loading: ThreadLoading,\n Error: ThreadError,\n Suggestions: ThreadSuggestions,\n Suggestion: ThreadSuggestion,\n ScrollToBottom: ThreadScrollToBottom,\n} as const;\n"],"mappings":"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","names":["ComposerRoot","ComposerQuotePreview","ComposerClearQuote","ComposerInput","ComposerTextareaInput","entity","ComposerSubmit","ComposerStop","ComposerTriggerMenu","ComposerTriggerItem","ComposerAttachments","ComposerAttachmentInput","ComposerAddAttachment","ComposerAttachmentDropzone","Fragment","forwardRef","useCallback","useEffect","useMemo","useRef","useState","jsx","jsxs","forwardRef","ThreadRoot","useRef","useState","useCallback","useMemo","ThreadViewport","useEffect","ThreadViewportFooter","ThreadEmpty","ThreadStatus","ThreadLoading","ThreadError","ThreadMessages","ThreadSuggestions","Fragment","ThreadSuggestion","ThreadScrollToBottom"]}
|