@mieweb/ui 0.9.0-dev.6 → 0.9.0-dev.7

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.
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkT6PTKWM6_cjs = require('./chunk-T6PTKWM6.cjs');
3
+ var chunkOYQ7GYAA_cjs = require('./chunk-OYQ7GYAA.cjs');
4
4
  var chunkS5RVSXDV_cjs = require('./chunk-S5RVSXDV.cjs');
5
5
  var React = require('react');
6
6
  var classVarianceAuthority = require('class-variance-authority');
@@ -1340,511 +1340,6 @@ var MessageList = React__namespace.forwardRef(
1340
1340
  }
1341
1341
  );
1342
1342
  MessageList.displayName = "MessageList";
1343
- function isFileAccepted(file, accepted) {
1344
- if (!accepted || accepted.length === 0) return true;
1345
- const mime = file.type;
1346
- const name = file.name.toLowerCase();
1347
- return accepted.some((token) => {
1348
- if (token.startsWith(".")) return name.endsWith(token.toLowerCase());
1349
- if (token.endsWith("/*")) return mime.startsWith(token.slice(0, -1));
1350
- if (token.includes("/")) return mime === token;
1351
- return false;
1352
- });
1353
- }
1354
- function CharacterCounter({
1355
- current,
1356
- max,
1357
- showWarningAt = 0.9,
1358
- className
1359
- }) {
1360
- const percentage = current / max;
1361
- const isWarning = percentage >= showWarningAt && percentage < 1;
1362
- const isOver = current > max;
1363
- return /* @__PURE__ */ jsxRuntime.jsxs(
1364
- "span",
1365
- {
1366
- className: chunkS5RVSXDV_cjs.cn(
1367
- "text-xs tabular-nums",
1368
- isOver ? "font-medium text-red-700 dark:text-red-400" : isWarning ? "text-amber-700 dark:text-amber-400" : "text-neutral-600 dark:text-neutral-400",
1369
- className
1370
- ),
1371
- "aria-live": "polite",
1372
- "aria-label": `${current} of ${max} characters`,
1373
- children: [
1374
- current,
1375
- "/",
1376
- max
1377
- ]
1378
- }
1379
- );
1380
- }
1381
- CharacterCounter.displayName = "CharacterCounter";
1382
- var sendButtonVariants = classVarianceAuthority.cva(
1383
- [
1384
- "inline-flex items-center justify-center",
1385
- "rounded-full p-3 self-start",
1386
- "transition-all duration-200",
1387
- "focus:outline-none focus:ring-2 focus:ring-primary-500",
1388
- "disabled:opacity-50 disabled:cursor-not-allowed"
1389
- ],
1390
- {
1391
- variants: {
1392
- variant: {
1393
- primary: [
1394
- "bg-primary-800 text-white",
1395
- "hover:bg-primary-900",
1396
- "active:scale-95"
1397
- ],
1398
- subtle: [
1399
- "bg-transparent text-primary-800",
1400
- "hover:bg-primary-50 dark:hover:bg-primary-900/20"
1401
- ]
1402
- },
1403
- canSend: {
1404
- true: "",
1405
- false: "opacity-50 cursor-not-allowed"
1406
- }
1407
- },
1408
- defaultVariants: {
1409
- variant: "primary",
1410
- canSend: false
1411
- }
1412
- }
1413
- );
1414
- var SendButton = React__namespace.forwardRef(
1415
- ({ className, variant, canSend, isLoading, disabled, ...props }, ref) => {
1416
- return /* @__PURE__ */ jsxRuntime.jsx(
1417
- "button",
1418
- {
1419
- ref,
1420
- type: "submit",
1421
- disabled: disabled || !canSend || isLoading,
1422
- "data-slot": "composer-send-button",
1423
- className: chunkS5RVSXDV_cjs.cn(sendButtonVariants({ variant, canSend }), className),
1424
- "aria-label": isLoading ? "Sending message" : "Send message",
1425
- ...props,
1426
- children: isLoading ? /* @__PURE__ */ jsxRuntime.jsxs(
1427
- "svg",
1428
- {
1429
- "aria-hidden": "true",
1430
- className: "h-5 w-5 animate-spin",
1431
- fill: "none",
1432
- viewBox: "0 0 24 24",
1433
- children: [
1434
- /* @__PURE__ */ jsxRuntime.jsx(
1435
- "circle",
1436
- {
1437
- className: "opacity-25",
1438
- cx: "12",
1439
- cy: "12",
1440
- r: "10",
1441
- stroke: "currentColor",
1442
- strokeWidth: "4"
1443
- }
1444
- ),
1445
- /* @__PURE__ */ jsxRuntime.jsx(
1446
- "path",
1447
- {
1448
- className: "opacity-75",
1449
- fill: "currentColor",
1450
- d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z"
1451
- }
1452
- )
1453
- ]
1454
- }
1455
- ) : /* @__PURE__ */ jsxRuntime.jsx(
1456
- "svg",
1457
- {
1458
- "aria-hidden": "true",
1459
- className: "h-5 w-5",
1460
- fill: "none",
1461
- viewBox: "0 0 24 24",
1462
- stroke: "currentColor",
1463
- children: /* @__PURE__ */ jsxRuntime.jsx(
1464
- "path",
1465
- {
1466
- strokeLinecap: "round",
1467
- strokeLinejoin: "round",
1468
- strokeWidth: 2,
1469
- d: "M12 19l9 2-9-18-9 18 9-2zm0 0v-8"
1470
- }
1471
- )
1472
- }
1473
- )
1474
- }
1475
- );
1476
- }
1477
- );
1478
- SendButton.displayName = "SendButton";
1479
- var MessageComposer = React__namespace.forwardRef(
1480
- ({
1481
- onSend,
1482
- onTypingStart,
1483
- onTypingStop,
1484
- value: controlledValue,
1485
- onValueChange,
1486
- placeholder = "Type a message...",
1487
- maxLength = 1600,
1488
- showCharacterCount = false,
1489
- disabled = false,
1490
- isSending = false,
1491
- showAttachmentPicker = true,
1492
- showCameraButton = false,
1493
- acceptedFileTypes = chunkT6PTKWM6_cjs.DEFAULT_ACCEPTED_FILE_TYPES,
1494
- maxFileSize = chunkT6PTKWM6_cjs.DEFAULT_MAX_FILE_SIZE,
1495
- maxAttachments = 10,
1496
- onError,
1497
- autoFocus = false,
1498
- replyTo = null,
1499
- onCancelReply,
1500
- variant = "default",
1501
- inputTrailing,
1502
- mentionOptions,
1503
- className
1504
- }, ref) => {
1505
- const textareaRef = React__namespace.useRef(null);
1506
- const [internalContent, setInternalContent] = React__namespace.useState("");
1507
- const isControlled = controlledValue !== void 0;
1508
- const content = isControlled ? controlledValue : internalContent;
1509
- const setContent = React__namespace.useCallback(
1510
- (val) => {
1511
- if (isControlled) {
1512
- const newVal = typeof val === "function" ? val(controlledValue) : val;
1513
- onValueChange?.(newVal);
1514
- } else {
1515
- setInternalContent(val);
1516
- }
1517
- },
1518
- [isControlled, controlledValue, onValueChange]
1519
- );
1520
- const [attachments, setAttachments] = React__namespace.useState(
1521
- []
1522
- );
1523
- const [isTyping, setIsTyping] = React__namespace.useState(false);
1524
- const typingTimeoutRef = React__namespace.useRef(null);
1525
- React__namespace.useImperativeHandle(ref, () => textareaRef.current);
1526
- React__namespace.useEffect(() => {
1527
- const textarea = textareaRef.current;
1528
- if (textarea) {
1529
- textarea.style.height = "auto";
1530
- textarea.style.height = `${Math.min(textarea.scrollHeight, 150)}px`;
1531
- }
1532
- }, [content]);
1533
- React__namespace.useEffect(() => {
1534
- if (content.length > 0 && !isTyping) {
1535
- setIsTyping(true);
1536
- onTypingStart?.();
1537
- }
1538
- if (typingTimeoutRef.current) {
1539
- clearTimeout(typingTimeoutRef.current);
1540
- }
1541
- typingTimeoutRef.current = setTimeout(() => {
1542
- if (isTyping) {
1543
- setIsTyping(false);
1544
- onTypingStop?.();
1545
- }
1546
- }, 2e3);
1547
- return () => {
1548
- if (typingTimeoutRef.current) {
1549
- clearTimeout(typingTimeoutRef.current);
1550
- }
1551
- };
1552
- }, [content, isTyping, onTypingStart, onTypingStop]);
1553
- React__namespace.useEffect(() => {
1554
- if (autoFocus) {
1555
- textareaRef.current?.focus();
1556
- }
1557
- }, [autoFocus]);
1558
- const replyToId = replyTo?.id;
1559
- React__namespace.useEffect(() => {
1560
- if (replyToId !== void 0) {
1561
- textareaRef.current?.focus();
1562
- }
1563
- }, [replyToId]);
1564
- const mention = chunkT6PTKWM6_cjs.useMentionAutocomplete({
1565
- options: mentionOptions,
1566
- value: content,
1567
- setValue: setContent,
1568
- textareaRef
1569
- });
1570
- const canSend = (content.trim().length > 0 || attachments.length > 0) && content.length <= maxLength && !disabled && !isSending;
1571
- const handleSubmit = async (event) => {
1572
- event.preventDefault();
1573
- if (!canSend) return;
1574
- const message = {
1575
- content: content.trim(),
1576
- attachments: attachments.map((a) => a.file),
1577
- replyToId: replyTo?.id
1578
- };
1579
- setContent("");
1580
- setAttachments([]);
1581
- setIsTyping(false);
1582
- onTypingStop?.();
1583
- try {
1584
- await onSend(message);
1585
- } catch {
1586
- setContent(message.content);
1587
- onError?.("Failed to send message");
1588
- }
1589
- };
1590
- const handleKeyDown = (event) => {
1591
- if (mention.handleKeyDown(event)) return;
1592
- if (event.key === "Enter" && !event.shiftKey) {
1593
- event.preventDefault();
1594
- if (canSend) {
1595
- handleSubmit(event);
1596
- }
1597
- }
1598
- };
1599
- const handleFilesSelected = (files) => {
1600
- const remainingSlots = maxAttachments - attachments.length;
1601
- const filesToAdd = files.slice(0, remainingSlots);
1602
- if (files.length > remainingSlots) {
1603
- onError?.(`Maximum ${maxAttachments} attachments allowed`);
1604
- }
1605
- const newAttachments = filesToAdd.map((file) => {
1606
- const type = chunkT6PTKWM6_cjs.getFileType(file.type);
1607
- let previewUrl;
1608
- if (type === "image" || type === "video") {
1609
- previewUrl = URL.createObjectURL(file);
1610
- }
1611
- return {
1612
- id: chunkT6PTKWM6_cjs.generateAttachmentId(),
1613
- file,
1614
- previewUrl,
1615
- type,
1616
- state: "pending"
1617
- };
1618
- });
1619
- setAttachments((prev) => [...prev, ...newAttachments]);
1620
- };
1621
- const handlePaste = (event) => {
1622
- if (!showAttachmentPicker || disabled) return;
1623
- const pasted = Array.from(event.clipboardData.items).filter((item) => item.kind === "file").map((item) => item.getAsFile()).filter((f) => f !== null).filter((f) => isFileAccepted(f, acceptedFileTypes));
1624
- if (pasted.length === 0) return;
1625
- event.preventDefault();
1626
- handleFilesSelected(pasted);
1627
- };
1628
- const handleRemoveAttachment = (attachmentId) => {
1629
- setAttachments((prev) => {
1630
- const attachment = prev.find((a) => a.id === attachmentId);
1631
- if (attachment?.previewUrl) {
1632
- URL.revokeObjectURL(attachment.previewUrl);
1633
- }
1634
- return prev.filter((a) => a.id !== attachmentId);
1635
- });
1636
- };
1637
- React__namespace.useEffect(() => {
1638
- const currentAttachments = attachments;
1639
- return () => {
1640
- currentAttachments.forEach((a) => {
1641
- if (a.previewUrl) {
1642
- URL.revokeObjectURL(a.previewUrl);
1643
- }
1644
- });
1645
- };
1646
- }, [attachments]);
1647
- return /* @__PURE__ */ jsxRuntime.jsx(
1648
- chunkT6PTKWM6_cjs.DragDropZone,
1649
- {
1650
- onFilesDropped: handleFilesSelected,
1651
- acceptedTypes: acceptedFileTypes,
1652
- maxFileSize,
1653
- maxFiles: maxAttachments - attachments.length,
1654
- disabled: disabled || attachments.length >= maxAttachments,
1655
- onError,
1656
- className: chunkS5RVSXDV_cjs.cn("w-full", className),
1657
- children: /* @__PURE__ */ jsxRuntime.jsxs(
1658
- "form",
1659
- {
1660
- onSubmit: handleSubmit,
1661
- "data-slot": "message-composer",
1662
- className: "w-full",
1663
- children: [
1664
- replyTo && /* @__PURE__ */ jsxRuntime.jsxs(
1665
- "div",
1666
- {
1667
- "data-slot": "composer-reply-preview",
1668
- className: chunkS5RVSXDV_cjs.cn(
1669
- "flex items-center gap-2 px-4 py-2",
1670
- "bg-neutral-50 dark:bg-neutral-800/50",
1671
- "border-primary-500 border-s-4"
1672
- ),
1673
- children: [
1674
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0 flex-1", children: [
1675
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-primary-800 dark:text-primary-400 text-xs font-medium", children: [
1676
- "Replying to ",
1677
- replyTo.senderName
1678
- ] }),
1679
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "truncate text-sm text-neutral-600 dark:text-neutral-300", children: replyTo.content })
1680
- ] }),
1681
- /* @__PURE__ */ jsxRuntime.jsx(
1682
- "button",
1683
- {
1684
- type: "button",
1685
- onClick: onCancelReply,
1686
- className: chunkS5RVSXDV_cjs.cn(
1687
- "shrink-0 rounded p-1",
1688
- "text-neutral-500 hover:text-neutral-700",
1689
- "dark:text-neutral-400 dark:hover:text-neutral-200",
1690
- "focus:ring-primary-500 focus:ring-2 focus:outline-none"
1691
- ),
1692
- "aria-label": "Cancel reply",
1693
- children: /* @__PURE__ */ jsxRuntime.jsx(
1694
- "svg",
1695
- {
1696
- "aria-hidden": "true",
1697
- className: "h-4 w-4",
1698
- fill: "none",
1699
- viewBox: "0 0 24 24",
1700
- stroke: "currentColor",
1701
- children: /* @__PURE__ */ jsxRuntime.jsx(
1702
- "path",
1703
- {
1704
- strokeLinecap: "round",
1705
- strokeLinejoin: "round",
1706
- strokeWidth: 2,
1707
- d: "M6 18L18 6M6 6l12 12"
1708
- }
1709
- )
1710
- }
1711
- )
1712
- }
1713
- )
1714
- ]
1715
- }
1716
- ),
1717
- attachments.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
1718
- "div",
1719
- {
1720
- "data-slot": "composer-attachments",
1721
- className: chunkS5RVSXDV_cjs.cn(
1722
- "flex flex-wrap gap-2 p-3",
1723
- "border-t border-neutral-200 dark:border-neutral-700"
1724
- ),
1725
- children: attachments.map((attachment) => /* @__PURE__ */ jsxRuntime.jsx(
1726
- chunkT6PTKWM6_cjs.AttachmentPreviewItem,
1727
- {
1728
- attachment,
1729
- onRemove: () => handleRemoveAttachment(attachment.id)
1730
- },
1731
- attachment.id
1732
- ))
1733
- }
1734
- ),
1735
- /* @__PURE__ */ jsxRuntime.jsxs(
1736
- "div",
1737
- {
1738
- "data-slot": "composer-input-area",
1739
- className: chunkS5RVSXDV_cjs.cn(
1740
- "flex items-center gap-2 p-3",
1741
- "bg-white dark:bg-neutral-900",
1742
- variant === "default" && "border-t border-neutral-200 dark:border-neutral-700"
1743
- ),
1744
- children: [
1745
- showAttachmentPicker && /* @__PURE__ */ jsxRuntime.jsx(
1746
- chunkT6PTKWM6_cjs.AttachmentPicker,
1747
- {
1748
- onFilesSelected: handleFilesSelected,
1749
- acceptedTypes: acceptedFileTypes,
1750
- maxFileSize,
1751
- maxFiles: maxAttachments - attachments.length,
1752
- disabled: disabled || attachments.length >= maxAttachments,
1753
- onError
1754
- }
1755
- ),
1756
- showCameraButton && /* @__PURE__ */ jsxRuntime.jsx(
1757
- chunkT6PTKWM6_cjs.CameraButton,
1758
- {
1759
- onCapture: (file) => handleFilesSelected([file]),
1760
- disabled: disabled || attachments.length >= maxAttachments
1761
- }
1762
- ),
1763
- /* @__PURE__ */ jsxRuntime.jsxs(
1764
- "div",
1765
- {
1766
- "data-slot": "composer-input-wrapper",
1767
- className: "relative flex-1",
1768
- ref: mention.anchorRef,
1769
- children: [
1770
- /* @__PURE__ */ jsxRuntime.jsx(chunkT6PTKWM6_cjs.MentionMenu, { mention }),
1771
- /* @__PURE__ */ jsxRuntime.jsx(
1772
- "textarea",
1773
- {
1774
- ref: textareaRef,
1775
- "data-slot": "composer-input",
1776
- value: content,
1777
- onChange: (e) => {
1778
- setContent(e.target.value);
1779
- mention.sync(
1780
- e.target.value,
1781
- e.target.selectionStart ?? e.target.value.length
1782
- );
1783
- },
1784
- onClick: (e) => {
1785
- const el = e.currentTarget;
1786
- mention.sync(el.value, el.selectionStart ?? el.value.length);
1787
- },
1788
- onKeyDown: handleKeyDown,
1789
- onPaste: handlePaste,
1790
- placeholder,
1791
- disabled: disabled || isSending,
1792
- rows: 1,
1793
- className: chunkS5RVSXDV_cjs.cn(
1794
- "w-full resize-none rounded-2xl py-2.5",
1795
- inputTrailing ? "ps-4 pe-10" : "px-4",
1796
- "bg-neutral-100 dark:bg-neutral-800",
1797
- "text-neutral-900 dark:text-neutral-100",
1798
- "placeholder:text-neutral-400 dark:placeholder:text-neutral-500",
1799
- "focus:ring-primary-500 focus:ring-2 focus:outline-none",
1800
- "disabled:cursor-not-allowed disabled:opacity-50",
1801
- "transition-colors",
1802
- "max-h-[150px]"
1803
- ),
1804
- "aria-label": "Message",
1805
- "aria-describedby": showCharacterCount ? "char-count" : void 0,
1806
- ...mention.inputProps
1807
- }
1808
- ),
1809
- inputTrailing && /* @__PURE__ */ jsxRuntime.jsx(
1810
- "div",
1811
- {
1812
- "data-slot": "composer-input-trailing",
1813
- className: "pointer-events-none absolute end-1 top-0 flex h-[44px] items-center [&>*]:pointer-events-auto",
1814
- children: inputTrailing
1815
- }
1816
- ),
1817
- showCharacterCount && /* @__PURE__ */ jsxRuntime.jsx(
1818
- "div",
1819
- {
1820
- "data-slot": "composer-char-count",
1821
- id: "char-count",
1822
- className: "absolute end-3 bottom-1.5",
1823
- children: /* @__PURE__ */ jsxRuntime.jsx(CharacterCounter, { current: content.length, max: maxLength })
1824
- }
1825
- )
1826
- ]
1827
- }
1828
- ),
1829
- /* @__PURE__ */ jsxRuntime.jsx(
1830
- SendButton,
1831
- {
1832
- canSend,
1833
- isLoading: isSending,
1834
- disabled
1835
- }
1836
- )
1837
- ]
1838
- }
1839
- )
1840
- ]
1841
- }
1842
- )
1843
- }
1844
- );
1845
- }
1846
- );
1847
- MessageComposer.displayName = "MessageComposer";
1848
1343
  var headerVariants = classVarianceAuthority.cva(
1849
1344
  [
1850
1345
  "flex items-center gap-3 px-4 py-3",
@@ -2365,6 +1860,9 @@ var MessageThread = React__namespace.forwardRef(
2365
1860
  const [lightboxAttachment, setLightboxAttachment] = React__namespace.useState(null);
2366
1861
  const [replyTo, setReplyTo] = React__namespace.useState(null);
2367
1862
  const composerRef = React__namespace.useRef(null);
1863
+ React__namespace.useEffect(() => {
1864
+ chunkOYQ7GYAA_cjs.notifyComposerMigrationOnce("MessageThread");
1865
+ }, []);
2368
1866
  const [draft, setDraft] = React__namespace.useState("");
2369
1867
  const draftEpochRef = React__namespace.useRef(0);
2370
1868
  const handleDraftChange = React__namespace.useCallback((value) => {
@@ -2422,7 +1920,7 @@ var MessageThread = React__namespace.forwardRef(
2422
1920
  }
2423
1921
  ),
2424
1922
  /* @__PURE__ */ jsxRuntime.jsx(
2425
- chunkT6PTKWM6_cjs.DragDropZone,
1923
+ chunkOYQ7GYAA_cjs.DragDropZone,
2426
1924
  {
2427
1925
  onFilesDropped: (files) => {
2428
1926
  composerRef.current?.addFiles(files);
@@ -2459,7 +1957,7 @@ var MessageThread = React__namespace.forwardRef(
2459
1957
  "data-slot": "message-thread-composer",
2460
1958
  className: "shrink-0 border-t border-neutral-200 p-3 dark:border-neutral-700",
2461
1959
  children: /* @__PURE__ */ jsxRuntime.jsx(
2462
- chunkT6PTKWM6_cjs.ChatComposer,
1960
+ chunkOYQ7GYAA_cjs.ChatComposer,
2463
1961
  {
2464
1962
  ref: composerRef,
2465
1963
  value: draft,
@@ -2470,15 +1968,15 @@ var MessageThread = React__namespace.forwardRef(
2470
1968
  showCharacterCount,
2471
1969
  isSending,
2472
1970
  allowAttachments: showAttachmentPicker,
2473
- acceptedFileTypes: acceptedFileTypes ?? chunkT6PTKWM6_cjs.DEFAULT_ACCEPTED_FILE_TYPES,
2474
- maxFileSize: maxFileSize ?? chunkT6PTKWM6_cjs.DEFAULT_MAX_FILE_SIZE,
1971
+ acceptedFileTypes: acceptedFileTypes ?? chunkOYQ7GYAA_cjs.DEFAULT_ACCEPTED_FILE_TYPES,
1972
+ maxFileSize: maxFileSize ?? chunkOYQ7GYAA_cjs.DEFAULT_MAX_FILE_SIZE,
2475
1973
  maxAttachments,
2476
1974
  onError,
2477
1975
  replyTo,
2478
1976
  onCancelReply: () => setReplyTo(null),
2479
1977
  inputLabel: "Message",
2480
1978
  micSlot: showCameraButton ? /* @__PURE__ */ jsxRuntime.jsx(
2481
- chunkT6PTKWM6_cjs.CameraButton,
1979
+ chunkOYQ7GYAA_cjs.CameraButton,
2482
1980
  {
2483
1981
  onCapture: (file) => composerRef.current?.addFiles([file]),
2484
1982
  disabled: isSending
@@ -2567,7 +2065,6 @@ function MessagingSplitView({
2567
2065
  MessagingSplitView.displayName = "MessagingSplitView";
2568
2066
 
2569
2067
  exports.AttachmentPreview = AttachmentPreview;
2570
- exports.CharacterCounter = CharacterCounter;
2571
2068
  exports.ConversationHeader = ConversationHeader;
2572
2069
  exports.ConversationListItem = ConversationListItem;
2573
2070
  exports.ConversationListSkeleton = ConversationListSkeleton;
@@ -2576,13 +2073,11 @@ exports.EmptyState = EmptyState;
2576
2073
  exports.LightboxModal = LightboxModal;
2577
2074
  exports.LoadMoreButton = LoadMoreButton;
2578
2075
  exports.MessageBubble = MessageBubble;
2579
- exports.MessageComposer = MessageComposer;
2580
2076
  exports.MessageList = MessageList;
2581
2077
  exports.MessageStatusIcon = MessageStatusIcon;
2582
2078
  exports.MessageThread = MessageThread;
2583
2079
  exports.MessagingSplitView = MessagingSplitView;
2584
2080
  exports.ReadReceiptIndicator = ReadReceiptIndicator;
2585
- exports.SendButton = SendButton;
2586
2081
  exports.SkeletonMessage = SkeletonMessage;
2587
2082
  exports.TypingIndicator = TypingIndicator;
2588
2083
  exports.bubbleVariants = bubbleVariants;
@@ -2594,11 +2089,10 @@ exports.getConversationTitle = getConversationTitle;
2594
2089
  exports.groupMessagesByDate = groupMessagesByDate;
2595
2090
  exports.headerVariants = headerVariants;
2596
2091
  exports.isSameSenderGroup = isSameSenderGroup;
2597
- exports.sendButtonVariants = sendButtonVariants;
2598
2092
  exports.useMessageScroll = useMessageScroll;
2599
2093
  exports.useMessages = useMessages;
2600
2094
  exports.useReadReceipts = useReadReceipts;
2601
2095
  exports.useTypingEmulation = useTypingEmulation;
2602
2096
  exports.useTypingIndicator = useTypingIndicator;
2603
- //# sourceMappingURL=chunk-XCNDZNY7.cjs.map
2604
- //# sourceMappingURL=chunk-XCNDZNY7.cjs.map
2097
+ //# sourceMappingURL=chunk-OFUKTVBN.cjs.map
2098
+ //# sourceMappingURL=chunk-OFUKTVBN.cjs.map