stream-chat-react 14.0.0-beta.8 → 14.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/dist/cjs/{WithAudioPlayback.58b0b39b.js → WithAudioPlayback.d26afa91.js} +1009 -985
  2. package/dist/cjs/WithAudioPlayback.d26afa91.js.map +1 -0
  3. package/dist/cjs/emojis.js +1 -1
  4. package/dist/cjs/index.js +584 -442
  5. package/dist/cjs/index.js.map +1 -1
  6. package/dist/css/index.css +76 -25
  7. package/dist/css/index.css.map +1 -1
  8. package/dist/es/{WithAudioPlayback.2ffdc4c5.mjs → WithAudioPlayback.9b779236.mjs} +1195 -1171
  9. package/dist/es/WithAudioPlayback.9b779236.mjs.map +1 -0
  10. package/dist/es/emojis.mjs +1 -1
  11. package/dist/es/index.mjs +636 -494
  12. package/dist/es/index.mjs.map +1 -1
  13. package/dist/types/components/Attachment/Audio.d.ts.map +1 -1
  14. package/dist/types/components/Attachment/FileAttachment.d.ts.map +1 -1
  15. package/dist/types/components/Attachment/components/DownloadButton.d.ts +12 -3
  16. package/dist/types/components/Attachment/components/DownloadButton.d.ts.map +1 -1
  17. package/dist/types/components/AudioPlayback/plugins/AudioPlayerNotificationsPlugin.d.ts.map +1 -1
  18. package/dist/types/components/Dialog/components/ContextMenu.d.ts.map +1 -1
  19. package/dist/types/components/FileIcon/FileIcon.d.ts +1 -3
  20. package/dist/types/components/FileIcon/FileIcon.d.ts.map +1 -1
  21. package/dist/types/components/FileIcon/FileIconSet.d.ts +10 -10
  22. package/dist/types/components/FileIcon/FileIconSet.d.ts.map +1 -1
  23. package/dist/types/components/Icons/icons.d.ts +4 -0
  24. package/dist/types/components/Icons/icons.d.ts.map +1 -1
  25. package/dist/types/components/Message/utils.d.ts +1 -0
  26. package/dist/types/components/Message/utils.d.ts.map +1 -1
  27. package/dist/types/components/MessageActions/MessageActions.d.ts.map +1 -1
  28. package/dist/types/components/MessageActions/MessageActions.defaults.d.ts.map +1 -1
  29. package/dist/types/components/MessageActions/downloadUtils.d.ts +25 -0
  30. package/dist/types/components/MessageActions/downloadUtils.d.ts.map +1 -0
  31. package/dist/types/components/MessageActions/hooks/useBaseMessageActionSetFilter.d.ts.map +1 -1
  32. package/dist/types/i18n/Streami18n.d.ts +3 -4
  33. package/dist/types/i18n/Streami18n.d.ts.map +1 -1
  34. package/package.json +1 -1
  35. package/dist/cjs/WithAudioPlayback.58b0b39b.js.map +0 -1
  36. package/dist/es/WithAudioPlayback.2ffdc4c5.mjs.map +0 -1
package/dist/es/index.mjs CHANGED
@@ -3,13 +3,13 @@ import clsx from "clsx";
3
3
  import { nanoid } from "nanoid";
4
4
  import React, { useState, useEffect, useCallback, useLayoutEffect, useMemo, useContext, createContext, useRef, forwardRef, createElement, Component, Fragment as Fragment$1 } from "react";
5
5
  import { u as useHandleFileChangeWrapper, d as dataTransferItemsToFiles, r as renderAudio, t as toAudioBuffer, c as createFileFromBlobs, g as getExtensionFromMimeType, a as getRecordedMediaTypeFromMimeType } from "./audioProcessing.21cb49e1.mjs";
6
- import { u as useStateStore, a as useMessageComposerController, i as isMessageBounced, b as useChannelActionContext, C as ComponentContext, c as useTranslationContext, d as useChannelStateContext, e as useChatContext, f as isNotificationForPanel, B as Button, I as IconPauseFill, g as IconPlayFill, h as getDefaultExportFromCjs, j as defaultTranslatorFunction, p as predefinedFormatters, L as LocalizedFormat, k as calendar, l as IconLoading, m as useComponentContext, n as isNetworkSendFailure, o as isUserMuted, q as useThreadContext, r as usePopoverPosition, s as IconXmark, t as IconUser, v as IconExclamationMarkFill, w as IconChevronRight, x as IconChevronLeft, y as IconArrowLeft, z as IconExclamationMark, A as IconNoSign, D as isMessageDeleted, E as isMessageErrorRetryable, F as ACTIONS_NOT_WORKING_IN_THREAD, G as useNotificationApi, H as IconArrowUpRight, J as IconPin, K as mapToUserNameOrId, M as IconClock, N as IconCheckmark1Small, O as IconChecks, P as getReadByTooltipText, Q as messageHasAttachments, R as messageTextHasEmojisOnly, S as isDate, T as getDateString, U as IconTranslate, V as useMessageComposerContext, W as useIsCooldownActive, X as IconXmarkSmall, Y as IconImage, Z as IconPoll, _ as IconLocation, $ as IconFile, a0 as IconLink, a1 as IconVideo, a2 as IconCamera, a3 as IconVoice, a4 as IconBookmark, a5 as IconBell, a6 as IconChevronDown, a7 as IconMinus, a8 as IconPlusSmall, a9 as IconCheckmark, aa as DEFAULT_LOAD_PAGE_SCROLL_THRESHOLD, ab as IconTrophy, ac as IconReorder, ad as IconMinusCircle, ae as IconSend, af as IconAudio, ag as IconUserAdd, ah as IconMute, ai as IconGiphy, aj as IconFlag, ak as IconUserRemove, al as IconAttachment, am as IconCommand, an as CHANNEL_CONTAINER_ID, ao as IconPlus, ap as IconUnsupportedAttachment, aq as IconExclamationTriangleFill, ar as useAudioPlayer, as as IconMicrophoneSolid, at as IconVideoFill, au as IconRetry, av as IconArrowDownCircle, aw as IconBolt, ax as IconDelete, ay as IconUpload, az as MessageComposerContextProvider, aA as useTypingContext, aB as useChatViewContext, aC as MESSAGE_ACTIONS, aD as LegacyThreadContext, aE as IconEmojiAdd, aF as IconReply, aG as IconEmoji, aH as IconMore, aI as IconUserCheck, aJ as IconBookmarkRemove, aK as IconBellOff, aL as IconNotification, aM as IconEdit, aN as IconCopy, aO as IconUnpin, aP as IconQuote, aQ as IconThread, aR as areMessageUIPropsEqual, aS as isDateSeparatorMessage, aT as isMessageBlocked, aU as messageHasSingleAttachment, aV as messageHasGiphyAttachment, aW as messageHasReactions, aX as messageHasQuotedMessage, aY as isMessageEdited, aZ as countEmojis, a_ as areMessagePropsEqual, a$ as getMessageActions, b0 as processMessages, b1 as insertIntro, b2 as getGroupStyles, b3 as getLastReceived, b4 as IconArrowUp, b5 as isIntroMessage, b6 as isLocalMessage, b7 as getIsFirstUnreadMessage, b8 as IconArrowDown, b9 as DEFAULT_NEXT_CHANNEL_PAGE_SIZE, ba as EmptyStateIndicator, bb as useNotificationTarget, bc as getChannel, bd as IconSearch, be as IconXCircle, bf as useChannelListContext, bg as DEFAULT_JUMP_TO_PAGE_SIZE, bh as ChannelListContextProvider, bi as IconLeave, bj as IconArchive, bk as IconExclamationCircleFill, bl as useThreadsViewContext, bm as IconMessageBubbles, bn as IconRefresh, bo as hasSystemNotificationTag, bp as IconEyeFill, bq as defaultDateTimeParser, br as isLanguageSupported, bs as ChatProvider, bt as TranslationProvider } from "./WithAudioPlayback.2ffdc4c5.mjs";
7
- import { by, bB, c3, c4, c5, c6, c7, c8, bD, bG, bC, bF, bH, c9, bK, bL, bM, bN, bO, ca, bQ, bW, c1, c2, cb, cc, cd, bv, b$, bJ, bI, bw, bx, bR, bS, bY, bZ, b_, bV, ce, bX, cf, bU, bT, bu, bE, bz, bA, c0, bP } from "./WithAudioPlayback.2ffdc4c5.mjs";
8
- import { StateStore, formatMessage, MessageComposer as MessageComposer$1, isGiphyAttachment, isScrapedContent, isLocalVideoAttachment, isVideoAttachment, isLocalImageAttachment, isImageAttachment, isAudioAttachment, isVoiceRecordingAttachment, isFileAttachment, isVoteAnswer, VotingVisibility, isLocalVoiceRecordingAttachment, isLocalAudioAttachment, isLocalFileAttachment, isLocalAttachment, LinkPreviewsManager, isSharedLocationResponse, LiveLocationManager, SearchController, ChannelSearchSource, UserSearchSource, MessageSearchSource, StreamChat } from "stream-chat";
6
+ import { u as useStateStore, a as useMessageComposerController, i as isMessageBounced, b as useChannelActionContext, C as ComponentContext, c as useTranslationContext, d as useChannelStateContext, I as IconDownload, e as useChatContext, f as isNotificationForPanel, B as Button, g as IconPauseFill, h as IconPlayFill, j as getDefaultExportFromCjs, k as defaultTranslatorFunction, p as predefinedFormatters, L as LocalizedFormat, l as calendar, m as IconLoading, n as useComponentContext, o as isNetworkSendFailure, q as isUserMuted, r as useThreadContext, s as usePopoverPosition, t as IconXmark, v as IconUser, w as IconExclamationMarkFill, x as IconChevronRight, y as IconChevronLeft, z as IconArrowLeft, A as IconExclamationMark, D as IconNoSign, E as isMessageDeleted, F as isMessageErrorRetryable, G as ACTIONS_NOT_WORKING_IN_THREAD, H as useNotificationApi, J as IconArrowUpRight, K as IconPin, M as mapToUserNameOrId, N as IconClock, O as IconCheckmark1Small, P as IconChecks, Q as getReadByTooltipText, R as messageHasAttachments, S as messageTextHasEmojisOnly, T as isDate, U as getDateString, V as IconTranslate, W as useMessageComposerContext, X as useIsCooldownActive, Y as IconXmarkSmall, Z as IconImage, _ as IconPoll, $ as IconLocation, a0 as IconFile, a1 as IconLink, a2 as IconVideo, a3 as IconCamera, a4 as IconVoice, a5 as IconBookmark, a6 as IconBell, a7 as IconChevronDown, a8 as IconMinus, a9 as IconPlusSmall, aa as IconCheckmark, ab as DEFAULT_LOAD_PAGE_SCROLL_THRESHOLD, ac as IconTrophy, ad as IconReorder, ae as IconMinusCircle, af as IconSend, ag as IconAudio, ah as IconUserAdd, ai as IconMute, aj as IconGiphy, ak as IconFlag, al as IconUserRemove, am as IconAttachment, an as IconCommand, ao as CHANNEL_CONTAINER_ID, ap as IconPlus, aq as IconUnsupportedAttachment, ar as IconExclamationTriangleFill, as as useAudioPlayer, at as IconMicrophoneSolid, au as IconVideoFill, av as IconRetry, aw as IconArrowDownCircle, ax as IconBolt, ay as IconDelete, az as IconUpload, aA as MessageComposerContextProvider, aB as useTypingContext, aC as useChatViewContext, aD as MESSAGE_ACTIONS, aE as LegacyThreadContext, aF as IconEmojiAdd, aG as IconReply, aH as IconEmoji, aI as IconMore, aJ as IconUserCheck, aK as IconBookmarkRemove, aL as IconBellOff, aM as IconNotification, aN as IconEdit, aO as IconCopy, aP as IconUnpin, aQ as IconQuote, aR as IconThread, aS as areMessageUIPropsEqual, aT as isDateSeparatorMessage, aU as isMessageBlocked, aV as messageHasSingleAttachment, aW as messageHasGiphyAttachment, aX as messageHasReactions, aY as messageHasQuotedMessage, aZ as isMessageEdited, a_ as countEmojis, a$ as areMessagePropsEqual, b0 as getMessageActions, b1 as processMessages, b2 as insertIntro, b3 as getGroupStyles, b4 as getLastReceived, b5 as IconArrowUp, b6 as isIntroMessage, b7 as isLocalMessage, b8 as getIsFirstUnreadMessage, b9 as IconArrowDown, ba as DEFAULT_NEXT_CHANNEL_PAGE_SIZE, bb as EmptyStateIndicator, bc as useNotificationTarget, bd as getChannel, be as IconSearch, bf as IconXCircle, bg as useChannelListContext, bh as DEFAULT_JUMP_TO_PAGE_SIZE, bi as ChannelListContextProvider, bj as IconLeave, bk as IconArchive, bl as IconExclamationCircleFill, bm as useThreadsViewContext, bn as IconMessageBubbles, bo as IconRefresh, bp as hasSystemNotificationTag, bq as IconEyeFill, br as defaultDateTimeParser, bs as isLanguageSupported, bt as ChatProvider, bu as TranslationProvider } from "./WithAudioPlayback.9b779236.mjs";
7
+ import { bz, bC, c4, c5, c6, c7, c8, c9, bE, bH, bD, bG, bI, ca, bL, bM, bN, bO, bP, cb, bR, bX, c2, c3, cc, cd, ce, bw, c0, bK, bJ, bx, by, bS, bT, bZ, b_, b$, bW, cf, bY, cg, bV, bU, bv, bF, bA, bB, c1, bQ } from "./WithAudioPlayback.9b779236.mjs";
8
+ import { StateStore, isFileAttachment, isImageAttachment, isVideoAttachment, isAudioAttachment, isVoiceRecordingAttachment, formatMessage, MessageComposer as MessageComposer$1, isGiphyAttachment, isScrapedContent, isLocalVideoAttachment, isLocalImageAttachment, isVoteAnswer, VotingVisibility, isLocalVoiceRecordingAttachment, isLocalAudioAttachment, isLocalFileAttachment, isLocalAttachment, LinkPreviewsManager, isSharedLocationResponse, LiveLocationManager, SearchController, ChannelSearchSource, UserSearchSource, MessageSearchSource, StreamChat } from "stream-chat";
9
+ import { sanitizeUrl } from "@braintree/sanitize-url";
9
10
  import throttle from "lodash.throttle";
10
11
  import * as linkify from "linkifyjs";
11
12
  import { find } from "linkifyjs";
12
- import { sanitizeUrl } from "@braintree/sanitize-url";
13
13
  import ReactPlayer from "react-player";
14
14
  import { FocusScope } from "@react-aria/focus";
15
15
  import { createPortal } from "react-dom";
@@ -654,53 +654,38 @@ const AIStateIndicator = ({
654
654
  };
655
655
  return aiState in allowedStates ? /* @__PURE__ */ jsx("div", { className: "str-chat__ai-state-indicator-container", children: /* @__PURE__ */ jsx("p", { className: "str-chat__ai-state-indicator-text", children: allowedStates[aiState] }) }) : null;
656
656
  };
657
- const DownloadIcon = ({ className }) => /* @__PURE__ */ jsx(
658
- "svg",
659
- {
660
- className,
661
- "data-testid": "download",
662
- fill: "none",
663
- height: "24",
664
- viewBox: "0 0 24 24",
665
- width: "24",
666
- xmlns: "http://www.w3.org/2000/svg",
667
- children: /* @__PURE__ */ jsx(
668
- "path",
669
- {
670
- d: "M19.35 10.04C18.67 6.59 15.64 4 12 4C9.11 4 6.6 5.64 5.35 8.04C2.34 8.36 0 10.91 0 14C0 17.31 2.69 20 6 20H19C21.76 20 24 17.76 24 15C24 12.36 21.95 10.22 19.35 10.04ZM19 18H6C3.79 18 2 16.21 2 14C2 11.95 3.53 10.24 5.56 10.03L6.63 9.92L7.13 8.97C8.08 7.14 9.94 6 12 6C14.62 6 16.88 7.86 17.39 10.43L17.69 11.93L19.22 12.04C20.78 12.14 22 13.45 22 15C22 16.65 20.65 18 19 18ZM13.45 10H10.55V13H8L12 17L16 13H13.45V10Z",
671
- fill: "black"
672
- }
673
- )
674
- }
675
- );
676
- const ExternalLinkIcon = () => /* @__PURE__ */ jsx("svg", { fill: "currentColor", viewBox: "0 0 16 16", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ jsx("path", { d: "M12.586 2H10a1 1 0 1 1 0-2h5a1 1 0 0 1 1 1v5a1 1 0 1 1-2 0V3.414l-6.793 6.793a1 1 0 0 1-1.414-1.414L12.586 2zM6 1a1 1 0 1 1 0 2H3a1 1 0 0 0-1 1v9a1 1 0 0 0 1 1h8.967a1 1 0 0 0 1-.99L13 9.99a1 1 0 1 1 2 .02l-.033 3.023a3 3 0 0 1-3 2.967H3a3 3 0 0 1-3-3V4a3 3 0 0 1 3-3h3z" }) });
677
- const UnMemoizedSafeAnchor = (props) => {
678
- const { children, className, download, href, rel, target } = props;
657
+ const DownloadButton = ({
658
+ assetUrl,
659
+ className,
660
+ suggestedFileName,
661
+ tooltipTitle
662
+ }) => {
663
+ const { t } = useTranslationContext();
664
+ if (!assetUrl) return null;
665
+ const href = sanitizeUrl(assetUrl);
679
666
  if (!href) return null;
680
- const sanitized = sanitizeUrl(href);
681
667
  return /* @__PURE__ */ jsx(
682
668
  "a",
683
669
  {
684
- className,
685
- download,
686
- href: sanitized,
687
- rel,
688
- target,
689
- children
670
+ "aria-label": t("aria/Download attachment"),
671
+ className: clsx(
672
+ "str-chat__button",
673
+ "str-chat__button--secondary",
674
+ "str-chat__button--outline",
675
+ "str-chat__button--circular",
676
+ "str-chat__button--size-sm",
677
+ "str-chat__audio-attachment-download-button",
678
+ className
679
+ ),
680
+ download: suggestedFileName ?? "",
681
+ href,
682
+ rel: "noopener noreferrer",
683
+ target: "_blank",
684
+ title: tooltipTitle ?? t("Download Attachment"),
685
+ children: /* @__PURE__ */ jsx("div", { className: "str-chat__button__content", children: /* @__PURE__ */ jsx(IconDownload, { className: "str-chat__icon str-chat__audio-attachment-download-button__icon" }) })
690
686
  }
691
687
  );
692
688
  };
693
- const SafeAnchor = React.memo(UnMemoizedSafeAnchor);
694
- const DownloadButton = ({ assetUrl }) => /* @__PURE__ */ jsx(
695
- SafeAnchor,
696
- {
697
- className: "str-chat__message-attachment-file--item-download",
698
- download: true,
699
- href: assetUrl,
700
- target: "_blank",
701
- children: /* @__PURE__ */ jsx(DownloadIcon, { className: "str-chat__message-attachment-download-icon" })
702
- }
703
- );
704
689
  function prettifyFileSize(bytes, precision = 3) {
705
690
  const units = ["B", "kB", "MB", "GB"];
706
691
  const exponent = bytes === 0 ? 0 : Math.min(Math.floor(Math.log(bytes) / Math.log(1024)), units.length - 1);
@@ -773,7 +758,7 @@ const Delete$b = "Löschen";
773
758
  const Delivered$b = "Zugestellt";
774
759
  const Edited$b = "Bearbeitet";
775
760
  const End$b = "Beenden";
776
- const File$b = "Datei";
761
+ const File$c = "Datei";
777
762
  const fileCount_one$9 = "1 datei";
778
763
  const fileCount_other$b = "{{ count }} dateien";
779
764
  const Flag$b = "Melden";
@@ -969,6 +954,8 @@ const deTranslations = {
969
954
  Delivered: Delivered$b,
970
955
  "Direct message": "Direktnachricht",
971
956
  "Do you want to end this poll now? Nobody will be able to vote in this poll anymore.": "Möchten Sie diese Umfrage jetzt beenden? Niemand wird mehr in dieser Umfrage abstimmen können.",
957
+ "Download All": "Alle herunterladen",
958
+ "Download Attachment": "Anhang herunterladen",
972
959
  "Download attachment {{ name }}": "Anhang {{ name }} herunterladen",
973
960
  "Drag your files here": "Ziehen Sie Ihre Dateien hierher",
974
961
  "Drag your files here to add to your post": "Ziehen Sie Ihre Dateien hierher, um sie Ihrem Beitrag hinzuzufügen",
@@ -1018,7 +1005,7 @@ const deTranslations = {
1018
1005
  "Failed to update channel archive status": "Archivierungsstatus des Kanals konnte nicht aktualisiert werden",
1019
1006
  "Failed to update channel mute status": "Stummschaltungsstatus des Kanals konnte nicht aktualisiert werden",
1020
1007
  "Failed to update channel pinned status": "Anheftstatus des Kanals konnte nicht aktualisiert werden",
1021
- File: File$b,
1008
+ File: File$c,
1022
1009
  "File is required for upload attachment": "Datei ist für den Anhang-Upload erforderlich",
1023
1010
  "File is too large: {{ size }}, maximum upload size is {{ limit }}": "Datei ist zu groß: {{ size }}, maximale Upload-Größe beträgt {{ limit }}",
1024
1011
  "File too large": "Datei ist zu groß",
@@ -1308,7 +1295,7 @@ const Delete$a = "Delete";
1308
1295
  const Delivered$a = "Delivered";
1309
1296
  const Edited$a = "Edited";
1310
1297
  const End$a = "End";
1311
- const File$a = "File";
1298
+ const File$b = "File";
1312
1299
  const fileCount_one$8 = "File";
1313
1300
  const fileCount_other$a = "{{ count }} files";
1314
1301
  const Flag$a = "Flag";
@@ -1504,6 +1491,8 @@ const enTranslations = {
1504
1491
  Delivered: Delivered$a,
1505
1492
  "Direct message": "Direct message",
1506
1493
  "Do you want to end this poll now? Nobody will be able to vote in this poll anymore.": "Do you want to end this poll now? Nobody will be able to vote in this poll anymore.",
1494
+ "Download All": "Download All",
1495
+ "Download Attachment": "Download Attachment",
1507
1496
  "Download attachment {{ name }}": "Download attachment {{ name }}",
1508
1497
  "Drag your files here": "Drag your files here",
1509
1498
  "Drag your files here to add to your post": "Drag your files here to add to your post",
@@ -1553,7 +1542,7 @@ const enTranslations = {
1553
1542
  "Failed to update channel archive status": "Failed to update channel archive status",
1554
1543
  "Failed to update channel mute status": "Failed to update channel mute status",
1555
1544
  "Failed to update channel pinned status": "Failed to update channel pinned status",
1556
- File: File$a,
1545
+ File: File$b,
1557
1546
  "File is required for upload attachment": "File is required for upload attachment",
1558
1547
  "File is too large: {{ size }}, maximum upload size is {{ limit }}": "File is too large: {{ size }}, maximum upload size is {{ limit }}",
1559
1548
  "File too large": "File too large",
@@ -1843,7 +1832,7 @@ const Delete$9 = "Borrar";
1843
1832
  const Delivered$9 = "Entregado";
1844
1833
  const Edited$9 = "Editado";
1845
1834
  const End$9 = "Final";
1846
- const File$9 = "Archivo";
1835
+ const File$a = "Archivo";
1847
1836
  const fileCount_one$7 = "1 archivo";
1848
1837
  const fileCount_many$4 = "{{ count }} archivos";
1849
1838
  const fileCount_other$9 = "{{ count }} archivos";
@@ -2055,6 +2044,8 @@ const esTranslations = {
2055
2044
  Delivered: Delivered$9,
2056
2045
  "Direct message": "Mensaje directo",
2057
2046
  "Do you want to end this poll now? Nobody will be able to vote in this poll anymore.": "¿Quieres terminar esta encuesta ahora? Nadie podrá votar más en esta encuesta.",
2047
+ "Download All": "Descargar todo",
2048
+ "Download Attachment": "Descargar archivo adjunto",
2058
2049
  "Download attachment {{ name }}": "Descargar adjunto {{ name }}",
2059
2050
  "Drag your files here": "Arrastra tus archivos aquí",
2060
2051
  "Drag your files here to add to your post": "Arrastra tus archivos aquí para agregarlos a tu publicación",
@@ -2104,7 +2095,7 @@ const esTranslations = {
2104
2095
  "Failed to update channel archive status": "No se pudo actualizar el estado de archivo del canal",
2105
2096
  "Failed to update channel mute status": "No se pudo actualizar el estado de silencio del canal",
2106
2097
  "Failed to update channel pinned status": "No se pudo actualizar el estado de fijación del canal",
2107
- File: File$9,
2098
+ File: File$a,
2108
2099
  "File is required for upload attachment": "Se requiere un archivo para subir el adjunto",
2109
2100
  "File is too large: {{ size }}, maximum upload size is {{ limit }}": "El archivo es demasiado grande: {{ size }}, el tamaño máximo de carga es de {{ limit }}",
2110
2101
  "File too large": "Archivo demasiado grande",
@@ -2405,7 +2396,7 @@ const Delete$8 = "Supprimer";
2405
2396
  const Delivered$8 = "Publié";
2406
2397
  const Edited$8 = "Modifié";
2407
2398
  const End$8 = "Fin";
2408
- const File$8 = "Fichier";
2399
+ const File$9 = "Fichier";
2409
2400
  const fileCount_one$6 = "1 fichier";
2410
2401
  const fileCount_many$3 = "{{ count }} fichiers";
2411
2402
  const fileCount_other$8 = "{{ count }} fichiers";
@@ -2617,6 +2608,8 @@ const frTranslations = {
2617
2608
  Delivered: Delivered$8,
2618
2609
  "Direct message": "Message direct",
2619
2610
  "Do you want to end this poll now? Nobody will be able to vote in this poll anymore.": "Voulez-vous terminer ce sondage maintenant ? Personne ne pourra plus voter dans ce sondage.",
2611
+ "Download All": "Tout télécharger",
2612
+ "Download Attachment": "Télécharger la pièce jointe",
2620
2613
  "Download attachment {{ name }}": "Télécharger la pièce jointe {{ name }}",
2621
2614
  "Drag your files here": "Glissez vos fichiers ici",
2622
2615
  "Drag your files here to add to your post": "Glissez vos fichiers ici pour les ajouter à votre publication",
@@ -2666,7 +2659,7 @@ const frTranslations = {
2666
2659
  "Failed to update channel archive status": "Impossible de mettre à jour l'état d'archivage du canal",
2667
2660
  "Failed to update channel mute status": "Impossible de mettre à jour l'état de la mise en sourdine du canal",
2668
2661
  "Failed to update channel pinned status": "Impossible de mettre à jour l'état d'épinglage du canal",
2669
- File: File$8,
2662
+ File: File$9,
2670
2663
  "File is required for upload attachment": "Un fichier est requis pour joindre une pièce",
2671
2664
  "File is too large: {{ size }}, maximum upload size is {{ limit }}": "Le fichier est trop volumineux : {{ size }}, la taille maximale de téléchargement est de {{ limit }}",
2672
2665
  "File too large": "Fichier trop volumineux",
@@ -2967,7 +2960,7 @@ const Delete$7 = "डिलीट";
2967
2960
  const Delivered$7 = "पहुंच गया";
2968
2961
  const Edited$7 = "संपादित";
2969
2962
  const End$7 = "समाप्त";
2970
- const File$7 = "फ़ाइल";
2963
+ const File$8 = "फ़ाइल";
2971
2964
  const fileCount_one$5 = "1 फ़ाइल";
2972
2965
  const fileCount_other$7 = "{{ count }} फ़ाइलें";
2973
2966
  const Flag$7 = "फ्लैग करे";
@@ -3163,6 +3156,8 @@ const hiTranslations = {
3163
3156
  Delivered: Delivered$7,
3164
3157
  "Direct message": "प्रत्यक्ष संदेश",
3165
3158
  "Do you want to end this poll now? Nobody will be able to vote in this poll anymore.": "क्या आप अभी इस पोल को समाप्त करना चाहते हैं? इस पोल में अब कोई भी वोट नहीं कर पाएगा।",
3159
+ "Download All": "सब डाउनलोड करें",
3160
+ "Download Attachment": "अटैचमेंट डाउनलोड करें",
3166
3161
  "Download attachment {{ name }}": "अनुलग्नक {{ name }} डाउनलोड करें",
3167
3162
  "Drag your files here": "अपनी फ़ाइलें यहाँ खींचें",
3168
3163
  "Drag your files here to add to your post": "अपनी फ़ाइलें यहाँ खींचें और अपने पोस्ट में जोड़ने के लिए",
@@ -3213,7 +3208,7 @@ const hiTranslations = {
3213
3208
  "Failed to update channel archive status": "चैनल के आर्काइव स्थिति को अपडेट करने में विफल",
3214
3209
  "Failed to update channel mute status": "चैनल की म्यूट स्थिति को अपडेट करने में विफल",
3215
3210
  "Failed to update channel pinned status": "चैनल की पिन स्थिति को अपडेट करने में विफल",
3216
- File: File$7,
3211
+ File: File$8,
3217
3212
  "File is required for upload attachment": "अटैचमेंट अपलोड के लिए फ़ाइल आवश्यक है",
3218
3213
  "File is too large: {{ size }}, maximum upload size is {{ limit }}": "फ़ाइल बहुत बड़ी है: {{ size }}, अधिकतम अपलोड साइज़ {{ limit }} है",
3219
3214
  "File too large": "फ़ाइल बहुत बड़ी है",
@@ -3503,7 +3498,7 @@ const Delete$6 = "Elimina";
3503
3498
  const Delivered$6 = "Consegnato";
3504
3499
  const Edited$6 = "Modificato";
3505
3500
  const End$6 = "Fine";
3506
- const File$6 = "File";
3501
+ const File$7 = "File";
3507
3502
  const fileCount_one$4 = "1 file";
3508
3503
  const fileCount_many$2 = "{{ count }} file";
3509
3504
  const fileCount_other$6 = "{{ count }} file";
@@ -3715,6 +3710,8 @@ const itTranslations = {
3715
3710
  Delivered: Delivered$6,
3716
3711
  "Direct message": "Messaggio diretto",
3717
3712
  "Do you want to end this poll now? Nobody will be able to vote in this poll anymore.": "Vuoi terminare questo sondaggio ora? Nessuno potrà più votare in questo sondaggio.",
3713
+ "Download All": "Scarica tutto",
3714
+ "Download Attachment": "Scarica allegato",
3718
3715
  "Download attachment {{ name }}": "Scarica l'allegato {{ name }}",
3719
3716
  "Drag your files here": "Trascina i tuoi file qui",
3720
3717
  "Drag your files here to add to your post": "Trascina i tuoi file qui per aggiungerli al tuo post",
@@ -3764,7 +3761,7 @@ const itTranslations = {
3764
3761
  "Failed to update channel archive status": "Impossibile aggiornare lo stato di archiviazione del canale",
3765
3762
  "Failed to update channel mute status": "Impossibile aggiornare lo stato di silenziamento del canale",
3766
3763
  "Failed to update channel pinned status": "Impossibile aggiornare lo stato di blocco del canale",
3767
- File: File$6,
3764
+ File: File$7,
3768
3765
  "File is required for upload attachment": "È richiesto un file per caricare l'allegato",
3769
3766
  "File is too large: {{ size }}, maximum upload size is {{ limit }}": "Il file è troppo grande: {{ size }}, la dimensione massima di caricamento è {{ limit }}",
3770
3767
  "File too large": "File troppo grande",
@@ -4065,7 +4062,7 @@ const Delete$5 = "消去";
4065
4062
  const Delivered$5 = "配信しました";
4066
4063
  const Edited$5 = "編集済み";
4067
4064
  const End$5 = "終了";
4068
- const File$5 = "ファイル";
4065
+ const File$6 = "ファイル";
4069
4066
  const fileCount_other$5 = "{{ count }}件のファイル";
4070
4067
  const Flag$5 = "フラグ";
4071
4068
  const Image$6 = "画像";
@@ -4254,6 +4251,8 @@ const jaTranslations = {
4254
4251
  Delivered: Delivered$5,
4255
4252
  "Direct message": "ダイレクトメッセージ",
4256
4253
  "Do you want to end this poll now? Nobody will be able to vote in this poll anymore.": "このアンケートを今終了しますか?終了すると、誰も投票できなくなります。",
4254
+ "Download All": "すべてダウンロード",
4255
+ "Download Attachment": "添付ファイルをダウンロード",
4257
4256
  "Download attachment {{ name }}": "添付ファイル {{ name }} をダウンロード",
4258
4257
  "Drag your files here": "ここにファイルをドラッグ",
4259
4258
  "Drag your files here to add to your post": "投稿に追加するためにここにファイルをドラッグ",
@@ -4303,7 +4302,7 @@ const jaTranslations = {
4303
4302
  "Failed to update channel archive status": "チャンネルのアーカイブ状態の更新に失敗しました",
4304
4303
  "Failed to update channel mute status": "チャンネルのミュート状態の更新に失敗しました",
4305
4304
  "Failed to update channel pinned status": "チャンネルのピン状態の更新に失敗しました",
4306
- File: File$5,
4305
+ File: File$6,
4307
4306
  "File is required for upload attachment": "添付ファイルのアップロードにはファイルが必要です",
4308
4307
  "File is too large: {{ size }}, maximum upload size is {{ limit }}": "ファイルが大きすぎます:{{ size }}、最大アップロードサイズは{{ limit }}です",
4309
4308
  "File too large": "ファイルが大きすぎます",
@@ -4586,7 +4585,7 @@ const Delete$4 = "삭제";
4586
4585
  const Delivered$4 = "배달됨";
4587
4586
  const Edited$4 = "편집됨";
4588
4587
  const End$4 = "종료";
4589
- const File$4 = "파일";
4588
+ const File$5 = "파일";
4590
4589
  const fileCount_other$4 = "파일 {{ count }}개";
4591
4590
  const Flag$4 = "플래그";
4592
4591
  const Image$5 = "이미지";
@@ -4775,6 +4774,8 @@ const koTranslations = {
4775
4774
  Delivered: Delivered$4,
4776
4775
  "Direct message": "다이렉트 메시지",
4777
4776
  "Do you want to end this poll now? Nobody will be able to vote in this poll anymore.": "지금 이 투표를 종료하시겠습니까? 종료 후에는 더 이상 투표할 수 없습니다.",
4777
+ "Download All": "모두 다운로드",
4778
+ "Download Attachment": "첨부 파일 다운로드",
4778
4779
  "Download attachment {{ name }}": "첨부 파일 {{ name }} 다운로드",
4779
4780
  "Drag your files here": "여기로 파일을 끌어다 놓으세요",
4780
4781
  "Drag your files here to add to your post": "게시물에 추가하려면 파일을 여기로 끌어다 놓으세요",
@@ -4824,7 +4825,7 @@ const koTranslations = {
4824
4825
  "Failed to update channel archive status": "채널 아카이브 상태 업데이트에 실패했습니다",
4825
4826
  "Failed to update channel mute status": "채널 음소거 상태 업데이트에 실패했습니다",
4826
4827
  "Failed to update channel pinned status": "채널 고정 상태 업데이트에 실패했습니다",
4827
- File: File$4,
4828
+ File: File$5,
4828
4829
  "File is required for upload attachment": "첨부 파일 업로드에 파일이 필요합니다",
4829
4830
  "File is too large: {{ size }}, maximum upload size is {{ limit }}": "파일이 너무 큽니다: {{ size }}, 최대 업로드 크기는 {{ limit }}입니다",
4830
4831
  "File too large": "파일이 너무 큽니다",
@@ -5107,7 +5108,7 @@ const Delete$3 = "Verwijder";
5107
5108
  const Delivered$3 = "Afgeleverd";
5108
5109
  const Edited$3 = "Bewerkt";
5109
5110
  const End$3 = "Einde";
5110
- const File$3 = "Bestand";
5111
+ const File$4 = "Bestand";
5111
5112
  const fileCount_one$3 = "1 bestand";
5112
5113
  const fileCount_other$3 = "{{ count }} bestanden";
5113
5114
  const Flag$3 = "Markeer";
@@ -5303,6 +5304,8 @@ const nlTranslations = {
5303
5304
  Delivered: Delivered$3,
5304
5305
  "Direct message": "Direct bericht",
5305
5306
  "Do you want to end this poll now? Nobody will be able to vote in this poll anymore.": "Wil je deze peiling nu beëindigen? Niemand kan daarna meer op deze peiling stemmen.",
5307
+ "Download All": "Alles downloaden",
5308
+ "Download Attachment": "Bijlage downloaden",
5306
5309
  "Download attachment {{ name }}": "Bijlage {{ name }} downloaden",
5307
5310
  "Drag your files here": "Sleep je bestanden hier naartoe",
5308
5311
  "Drag your files here to add to your post": "Sleep je bestanden hier naartoe om aan je bericht toe te voegen",
@@ -5352,7 +5355,7 @@ const nlTranslations = {
5352
5355
  "Failed to update channel archive status": "Archiefstatus van kanaal kon niet worden bijgewerkt",
5353
5356
  "Failed to update channel mute status": "Muteerstatus van kanaal kon niet worden bijgewerkt",
5354
5357
  "Failed to update channel pinned status": "Vastgezette status van kanaal kon niet worden bijgewerkt",
5355
- File: File$3,
5358
+ File: File$4,
5356
5359
  "File is required for upload attachment": "Bestand is vereist voor het uploaden van een bijlage",
5357
5360
  "File is too large: {{ size }}, maximum upload size is {{ limit }}": "Bestand is te groot: {{ size }}, maximale uploadgrootte is {{ limit }}",
5358
5361
  "File too large": "Bestand is te groot",
@@ -5644,7 +5647,7 @@ const Delete$2 = "Excluir";
5644
5647
  const Delivered$2 = "Entregue";
5645
5648
  const Edited$2 = "Editada";
5646
5649
  const End$2 = "Fim";
5647
- const File$2 = "Arquivo";
5650
+ const File$3 = "Arquivo";
5648
5651
  const fileCount_one$2 = "1 arquivo";
5649
5652
  const fileCount_many$1 = "{{ count }} arquivos";
5650
5653
  const fileCount_other$2 = "{{ count }} arquivos";
@@ -5856,6 +5859,8 @@ const ptTranslations = {
5856
5859
  Delivered: Delivered$2,
5857
5860
  "Direct message": "Mensagem direta",
5858
5861
  "Do you want to end this poll now? Nobody will be able to vote in this poll anymore.": "Deseja encerrar esta enquete agora? Ninguém poderá mais votar nesta enquete.",
5862
+ "Download All": "Baixar tudo",
5863
+ "Download Attachment": "Baixar anexo",
5859
5864
  "Download attachment {{ name }}": "Baixar anexo {{ name }}",
5860
5865
  "Drag your files here": "Arraste seus arquivos aqui",
5861
5866
  "Drag your files here to add to your post": "Arraste seus arquivos aqui para adicionar ao seu post",
@@ -5905,7 +5910,7 @@ const ptTranslations = {
5905
5910
  "Failed to update channel archive status": "Falha ao atualizar o status de arquivamento do canal",
5906
5911
  "Failed to update channel mute status": "Falha ao atualizar o status de mudo do canal",
5907
5912
  "Failed to update channel pinned status": "Falha ao atualizar o status de fixação do canal",
5908
- File: File$2,
5913
+ File: File$3,
5909
5914
  "File is required for upload attachment": "Arquivo é necessário para enviar o anexo",
5910
5915
  "File is too large: {{ size }}, maximum upload size is {{ limit }}": "O arquivo é muito grande: {{ size }}, o tamanho máximo de upload é {{ limit }}",
5911
5916
  "File too large": "Arquivo muito grande",
@@ -6206,7 +6211,7 @@ const Delete$1 = "Удалить";
6206
6211
  const Delivered$1 = "Отправлено";
6207
6212
  const Edited$1 = "Отредактировано";
6208
6213
  const End$1 = "Конец";
6209
- const File$1 = "Файл";
6214
+ const File$2 = "Файл";
6210
6215
  const fileCount_four = "{{ count }} файла";
6211
6216
  const fileCount_one$1 = "{{ count }} файл";
6212
6217
  const fileCount_few = "{{ count }} файла";
@@ -6438,6 +6443,8 @@ const ruTranslations = {
6438
6443
  Delivered: Delivered$1,
6439
6444
  "Direct message": "Личное сообщение",
6440
6445
  "Do you want to end this poll now? Nobody will be able to vote in this poll anymore.": "Вы хотите завершить этот опрос сейчас? После этого никто не сможет голосовать в этом опросе.",
6446
+ "Download All": "Скачать всё",
6447
+ "Download Attachment": "Скачать вложение",
6441
6448
  "Download attachment {{ name }}": "Скачать вложение {{ name }}",
6442
6449
  "Drag your files here": "Перетащите ваши файлы сюда",
6443
6450
  "Drag your files here to add to your post": "Перетащите ваши файлы сюда, чтобы добавить их в ваш пост",
@@ -6487,7 +6494,7 @@ const ruTranslations = {
6487
6494
  "Failed to update channel archive status": "Не удалось обновить статус архивации канала",
6488
6495
  "Failed to update channel mute status": "Не удалось обновить статус отключения звука канала",
6489
6496
  "Failed to update channel pinned status": "Не удалось обновить статус закрепления канала",
6490
- File: File$1,
6497
+ File: File$2,
6491
6498
  "File is required for upload attachment": "Для загрузки вложения требуется файл",
6492
6499
  "File is too large: {{ size }}, maximum upload size is {{ limit }}": "Файл слишком большой: {{ size }}, максимальный размер загрузки составляет {{ limit }}",
6493
6500
  "File too large": "Файл слишком большой",
@@ -6802,7 +6809,7 @@ const Delete = "Sil";
6802
6809
  const Delivered = "İletildi";
6803
6810
  const Edited = "Düzenlendi";
6804
6811
  const End = "Son";
6805
- const File = "Dosya";
6812
+ const File$1 = "Dosya";
6806
6813
  const fileCount_one = "1 dosya";
6807
6814
  const fileCount_other = "{{ count }} dosya";
6808
6815
  const Flag = "Bayrak";
@@ -6998,6 +7005,8 @@ const trTranslations = {
6998
7005
  Delivered,
6999
7006
  "Direct message": "Doğrudan mesaj",
7000
7007
  "Do you want to end this poll now? Nobody will be able to vote in this poll anymore.": "Bu anketi şimdi sonlandırmak istiyor musunuz? Sonlandırdıktan sonra bu ankette kimse oy kullanamayacak.",
7008
+ "Download All": "Tümünü indir",
7009
+ "Download Attachment": "Eki indir",
7001
7010
  "Download attachment {{ name }}": "Ek {{ name }}'i indir",
7002
7011
  "Drag your files here": "Dosyalarınızı buraya sürükleyin",
7003
7012
  "Drag your files here to add to your post": "Gönderinize eklemek için dosyalarınızı buraya sürükleyin",
@@ -7047,7 +7056,7 @@ const trTranslations = {
7047
7056
  "Failed to update channel archive status": "Kanalın arşiv durumu güncellenemedi",
7048
7057
  "Failed to update channel mute status": "Kanalın sessiz durumu güncellenemedi",
7049
7058
  "Failed to update channel pinned status": "Kanalın sabitleme durumu güncellenemedi",
7050
- File,
7059
+ File: File$1,
7051
7060
  "File is required for upload attachment": "Ek yüklemek için dosya gerekli",
7052
7061
  "File is too large: {{ size }}, maximum upload size is {{ limit }}": "Dosya çok büyük: {{ size }}, maksimum yükleme boyutu {{ limit }}",
7053
7062
  "File too large": "Dosya çok büyük",
@@ -9894,9 +9903,11 @@ function ContextMenuContent({
9894
9903
  [ItemsWrapper]
9895
9904
  );
9896
9905
  const returnToParentMenu = useCallback(() => {
9897
- if (menuStack.length <= 1) return;
9898
- setMenuStack((current) => current.slice(0, current.length - 1));
9899
- }, [menuStack.length]);
9906
+ setMenuStack((current) => {
9907
+ if (current.length <= 1) return current;
9908
+ return current.slice(0, -1);
9909
+ });
9910
+ }, []);
9900
9911
  useEffect(() => {
9901
9912
  setMenuStack((current) => {
9902
9913
  if (current.length === 1 && current[0] === rootLevel) return current;
@@ -10385,7 +10396,9 @@ const useBaseMessageActionSetFilter = (messageActionSet, disable = false) => {
10385
10396
  if (message.error) {
10386
10397
  return type === "resendMessage" && canSendMessage && (allowRetry || isBounced) || type === "edit" && (isBounced && canEdit || hasNetworkSendFailure) || type === "delete" && !messageIsDeleted && (isBounced && canDelete || hasNetworkSendFailure);
10387
10398
  }
10388
- if (type === "resendMessage" || type === "blockUser" && !canBlockUser || type === "copyMessageText" && !message.text || type === "delete" && (!canDelete || messageIsDeleted) || type === "edit" && !canEdit || type === "flag" && !canFlag || type === "markUnread" && !canMarkUnread || type === "mute" && !canMute || type === "quote" && !canQuote || type === "react" && !canReact || type === "reply" && !canReply || type === "remindMe" && !channelConfig?.["user_message_reminders"] || type === "saveForLater" && !channelConfig?.["user_message_reminders"])
10399
+ if (type === "resendMessage" || type === "blockUser" && !canBlockUser || type === "copyMessageText" && !message.text || type === "download" && !message.attachments?.some(
10400
+ (attachment) => isFileAttachment(attachment) || isImageAttachment(attachment) || isVideoAttachment(attachment) || isAudioAttachment(attachment) || isVoiceRecordingAttachment(attachment)
10401
+ ) || type === "delete" && (!canDelete || messageIsDeleted) || type === "edit" && !canEdit || type === "flag" && !canFlag || type === "markUnread" && !canMarkUnread || type === "mute" && !canMute || type === "quote" && !canQuote || type === "react" && !canReact || type === "reply" && !canReply || type === "remindMe" && !channelConfig?.["user_message_reminders"] || type === "saveForLater" && !channelConfig?.["user_message_reminders"])
10389
10402
  return false;
10390
10403
  return true;
10391
10404
  });
@@ -10407,6 +10420,7 @@ const useBaseMessageActionSetFilter = (messageActionSet, disable = false) => {
10407
10420
  messageIsDeleted,
10408
10421
  isMessageThreadReply,
10409
10422
  message.error,
10423
+ message.attachments,
10410
10424
  message.status,
10411
10425
  message.text,
10412
10426
  message.type,
@@ -12306,13 +12320,14 @@ const BASE_FILE_ICON_CLASSNAME = "str-chat__file-icon";
12306
12320
  const FILE_ICON_GRAPHIC_CLASSNAME = "str-chat__file-icon__graphic";
12307
12321
  const FILE_ICON_NO_LABEL_CLASSNAME = "str-chat__file-icon--no-label";
12308
12322
  const FILE_ICON_SIZE_CONFIG = {
12309
- lg: { height: 48, labelX: 16, labelY: 36, width: 40 },
12310
- md: { height: 40, labelX: 16, labelY: 35, width: 32 },
12311
- sm: { height: 24, labelX: 16, labelY: 31.5, width: 19 }
12323
+ lg: { height: 40, labelX: 16, labelY: 36, width: 32 },
12324
+ md: { height: 32, labelX: 16, labelY: 35, width: 26 },
12325
+ sm: { height: 24, labelX: 16, labelY: 31.5, width: 19 },
12326
+ xl: { height: 48, labelX: 16, labelY: 36, width: 40 }
12312
12327
  };
12313
12328
  const mergeFileIconSizeConfig = (overrides) => {
12314
12329
  if (!overrides) return FILE_ICON_SIZE_CONFIG;
12315
- return ["sm", "md", "lg"].reduce(
12330
+ return ["sm", "md", "lg", "xl"].reduce(
12316
12331
  (acc, size) => ({
12317
12332
  ...acc,
12318
12333
  [size]: { ...FILE_ICON_SIZE_CONFIG[size], ...overrides[size] }
@@ -12320,16 +12335,24 @@ const mergeFileIconSizeConfig = (overrides) => {
12320
12335
  {}
12321
12336
  );
12322
12337
  };
12323
- const VIEWBOX_WIDTH = 32;
12324
- const VIEWBOX_HEIGHT = 40;
12338
+ const FILE_ICON_VIEWBOX = { height: 40, width: 32 };
12339
+ const FILE_ICON_PAPER_PATH = "M0 4C0 1.79086 1.79086 0 4 0H22.4L32 10V36C32 38.2091 30.2091 40 28 40H4C1.79086 40 0 38.2091 0 36V4Z";
12340
+ const FILE_ICON_FOLD_PATH = "M32 10H25.4C23.7431 10 22.4 8.65685 22.4 7V0L32 10Z";
12341
+ const FILE_ICON_WITHOUT_CAPTION_SYMBOL_SCALE_X = 32 / 26;
12342
+ const FILE_ICON_WITHOUT_CAPTION_SYMBOL_SCALE_Y = 40 / 32;
12325
12343
  const Svg = ({ className, size, sizeConfig, ...props }) => {
12326
12344
  const config = sizeConfig ?? FILE_ICON_SIZE_CONFIG;
12327
12345
  const dimensions = size ? config[size] : void 0;
12346
+ const dimensionsStyle = dimensions ? {
12347
+ flexShrink: 0,
12348
+ height: `${dimensions.height}px`,
12349
+ width: `${dimensions.width}px`
12350
+ } : void 0;
12328
12351
  return /* @__PURE__ */ jsx(
12329
12352
  "svg",
12330
12353
  {
12331
12354
  height: dimensions?.height,
12332
- viewBox: `0 0 ${VIEWBOX_WIDTH} ${VIEWBOX_HEIGHT}`,
12355
+ viewBox: `0 0 ${FILE_ICON_VIEWBOX.width} ${FILE_ICON_VIEWBOX.height}`,
12333
12356
  width: dimensions?.width,
12334
12357
  xmlns: "http://www.w3.org/2000/svg",
12335
12358
  ...props,
@@ -12337,7 +12360,8 @@ const Svg = ({ className, size, sizeConfig, ...props }) => {
12337
12360
  BASE_FILE_ICON_CLASSNAME,
12338
12361
  { [`${BASE_FILE_ICON_CLASSNAME}--size-${size}`]: size },
12339
12362
  className
12340
- )
12363
+ ),
12364
+ style: { ...dimensionsStyle, ...props.style }
12341
12365
  }
12342
12366
  );
12343
12367
  };
@@ -12346,397 +12370,343 @@ const FileIconLabel = ({ label, size, sizeConfig }) => {
12346
12370
  const config = size ? configMap[size] : { labelX: 16, labelY: 33 };
12347
12371
  return /* @__PURE__ */ jsx("text", { className: "str-chat__file-icon__label", x: config.labelX, y: config.labelY, children: label });
12348
12372
  };
12349
- const FilePdfIcon = ({
12373
+ const TEXT_SYMBOLS = {
12374
+ withCaption: /* @__PURE__ */ jsxs(Fragment, { children: [
12375
+ /* @__PURE__ */ jsx("rect", { fill: "white", height: "1.6", rx: "0.8", width: "14.4", x: "8", y: "12.2" }),
12376
+ /* @__PURE__ */ jsx("rect", { fill: "white", height: "1.6", rx: "0.8", width: "14.4", x: "8", y: "20.2" }),
12377
+ /* @__PURE__ */ jsx("rect", { fill: "white", height: "1.6", rx: "0.8", width: "9.6", x: "8", y: "16.2" })
12378
+ ] }),
12379
+ withoutCaption: /* @__PURE__ */ jsxs(Fragment, { children: [
12380
+ /* @__PURE__ */ jsx("rect", { fill: "white", height: "1.4", rx: "0.7", width: "12.6", x: "6", y: "14.8" }),
12381
+ /* @__PURE__ */ jsx("rect", { fill: "white", height: "1.4", rx: "0.7", width: "12.6", x: "6", y: "21.8" }),
12382
+ /* @__PURE__ */ jsx("rect", { fill: "white", height: "1.4", rx: "0.7", width: "8.4", x: "6", y: "18.3" })
12383
+ ] })
12384
+ };
12385
+ const OTHER_SYMBOLS = {
12386
+ withCaption: /* @__PURE__ */ jsxs(Fragment, { children: [
12387
+ /* @__PURE__ */ jsx("rect", { fill: "white", height: "1.6", rx: "0.8", width: "14.4", x: "8", y: "13.2" }),
12388
+ /* @__PURE__ */ jsx("rect", { fill: "white", height: "1.6", rx: "0.8", width: "14.4", x: "8", y: "21.2" }),
12389
+ /* @__PURE__ */ jsx("rect", { fill: "white", height: "1.6", rx: "0.8", width: "9.6", x: "8", y: "17.2" })
12390
+ ] }),
12391
+ withoutCaption: TEXT_SYMBOLS.withoutCaption
12392
+ };
12393
+ const CODE_SYMBOLS = {
12394
+ withCaption: /* @__PURE__ */ jsx(
12395
+ "path",
12396
+ {
12397
+ d: "M14.5 22.5L17.5 11.5M20.1666 14.1667L21.9732 16.0862C22.4564 16.5996 22.4564 17.4004 21.9732 17.9138L20.1666 19.8333M11.8333 19.8333L10.0267 17.9138C9.54351 17.4004 9.54351 16.5996 10.0267 16.0862L11.8333 14.1667",
12398
+ stroke: "white",
12399
+ strokeLinecap: "round",
12400
+ strokeLinejoin: "round",
12401
+ strokeWidth: "1.2"
12402
+ }
12403
+ ),
12404
+ withoutCaption: /* @__PURE__ */ jsx(
12405
+ "path",
12406
+ {
12407
+ d: "M11.6876 23.8125L14.3126 14.1875M16.646 16.5208L18.2267 18.2004C18.6495 18.6496 18.6495 19.3503 18.2267 19.7996L16.646 21.4792M9.3543 21.4792L7.77352 19.7996C7.35072 19.3503 7.35072 18.6496 7.77352 18.2004L9.3543 16.5208",
12408
+ stroke: "white",
12409
+ strokeLinecap: "round",
12410
+ strokeLinejoin: "round",
12411
+ strokeWidth: "1.33333"
12412
+ }
12413
+ )
12414
+ };
12415
+ const AUDIO_SYMBOLS = {
12416
+ withCaption: /* @__PURE__ */ jsx(
12417
+ "path",
12418
+ {
12419
+ d: "M20.5 15.5V18.5M22.5 14.5V19.5M13.5 19.5H10.5C10.3674 19.5 10.2402 19.4473 10.1464 19.3536C10.0527 19.2598 10 19.1326 10 19V15C10 14.8674 10.0527 14.7402 10.1464 14.6464C10.2402 14.5527 10.3674 14.5 10.5 14.5H13.5L18 11V23L13.5 19.5Z",
12420
+ stroke: "white",
12421
+ strokeLinecap: "round",
12422
+ strokeLinejoin: "round",
12423
+ strokeWidth: "1.2"
12424
+ }
12425
+ ),
12426
+ withoutCaption: /* @__PURE__ */ jsx(
12427
+ "path",
12428
+ {
12429
+ d: "M17.5 17.5V20.5M19.5 16.5V21.5M10.5 21.5H7.5C7.36739 21.5 7.24021 21.4473 7.14645 21.3536C7.05268 21.2598 7 21.1326 7 21V17C7 16.8674 7.05268 16.7402 7.14645 16.6464C7.24021 16.5527 7.36739 16.5 7.5 16.5H10.5L15 13V25L10.5 21.5Z",
12430
+ stroke: "white",
12431
+ strokeLinecap: "round",
12432
+ strokeLinejoin: "round",
12433
+ strokeWidth: "1.33333"
12434
+ }
12435
+ )
12436
+ };
12437
+ const PRESENTATION_SYMBOLS = {
12438
+ withCaption: /* @__PURE__ */ jsx(
12439
+ "path",
12440
+ {
12441
+ d: "M12.5 15.5H19.5M16 17.5V22.5M14 22.5H18M9.49999 17.5C9.41472 17.5001 9.33085 17.4783 9.25635 17.4368C9.18185 17.3953 9.1192 17.3355 9.07436 17.263C9.02952 17.1904 9.00397 17.1076 9.00014 17.0224C8.99631 16.9373 9.01433 16.8525 9.05249 16.7762L11.5525 11.7763C11.5941 11.6932 11.6579 11.6233 11.737 11.5745C11.816 11.5257 11.9071 11.4999 12 11.5H20C20.0929 11.4999 20.184 11.5257 20.263 11.5745C20.342 11.6233 20.4059 11.6932 20.4475 11.7763L22.9475 16.7762C22.9857 16.8525 23.0037 16.9373 22.9998 17.0224C22.996 17.1076 22.9705 17.1904 22.9256 17.263C22.8808 17.3355 22.8181 17.3953 22.7436 17.4368C22.6691 17.4783 22.5853 17.5001 22.5 17.5H9.49999Z",
12442
+ stroke: "white",
12443
+ strokeLinecap: "round",
12444
+ strokeLinejoin: "round",
12445
+ strokeWidth: "1.2"
12446
+ }
12447
+ ),
12448
+ withoutCaption: /* @__PURE__ */ jsx(
12449
+ "path",
12450
+ {
12451
+ d: "M9.49999 17.5H16.5M13 19.5V24.5M11 24.5H15M6.49999 19.5C6.41472 19.5001 6.33085 19.4783 6.25635 19.4368C6.18185 19.3953 6.11921 19.3355 6.07436 19.263C6.02952 19.1904 6.00397 19.1076 6.00014 19.0224C5.99631 18.9373 6.01433 18.8525 6.05249 18.7763L8.55249 13.7763C8.59406 13.6932 8.65795 13.6233 8.73699 13.5745C8.81603 13.5257 8.9071 13.4999 8.99999 13.5H17C17.0929 13.4999 17.184 13.5257 17.263 13.5745C17.342 13.6233 17.4059 13.6932 17.4475 13.7763L19.9475 18.7763C19.9857 18.8525 20.0037 18.9373 19.9998 19.0224C19.996 19.1076 19.9705 19.1904 19.9256 19.263C19.8808 19.3355 19.8181 19.3953 19.7436 19.4368C19.6691 19.4783 19.5853 19.5001 19.5 19.5H6.49999Z",
12452
+ stroke: "white",
12453
+ strokeLinecap: "round",
12454
+ strokeLinejoin: "round",
12455
+ strokeWidth: "1.33333"
12456
+ }
12457
+ )
12458
+ };
12459
+ const SPREADSHEET_SYMBOLS = {
12460
+ withCaption: /* @__PURE__ */ jsx(
12461
+ "path",
12462
+ {
12463
+ d: "M10 15.5H22M10 18.5H22M13.5 15.5V21.5M10 12.5H22V21C22 21.1326 21.9473 21.2598 21.8536 21.3536C21.7598 21.4473 21.6326 21.5 21.5 21.5H10.5C10.3674 21.5 10.2402 21.4473 10.1464 21.3536C10.0527 21.2598 10 21.1326 10 21V12.5Z",
12464
+ stroke: "white",
12465
+ strokeLinecap: "round",
12466
+ strokeLinejoin: "round",
12467
+ strokeWidth: "1.5"
12468
+ }
12469
+ ),
12470
+ withoutCaption: /* @__PURE__ */ jsx(
12471
+ "path",
12472
+ {
12473
+ d: "M7 17.5H19M7 20.5H19M10.5 17.5V23.5M7 14.5H19V23C19 23.1326 18.9473 23.2598 18.8536 23.3536C18.7598 23.4473 18.6326 23.5 18.5 23.5H7.5C7.36739 23.5 7.24021 23.4473 7.14645 23.3536C7.05268 23.2598 7 23.1326 7 23V14.5Z",
12474
+ stroke: "white",
12475
+ strokeLinecap: "round",
12476
+ strokeLinejoin: "round",
12477
+ strokeWidth: "1.2"
12478
+ }
12479
+ )
12480
+ };
12481
+ const COMPRESSION_SYMBOLS = {
12482
+ withCaption: /* @__PURE__ */ jsx(
12483
+ "path",
12484
+ {
12485
+ clipRule: "evenodd",
12486
+ d: "M9.41177 0H7.52942V2H9.41177V4H7.52942V6H9.41177V8H7.52942V10H9.41177V12H7.52942V14H9.41177V12H11.2941V10H9.41177V8H11.2941V6H9.41177V4H11.2941V2H9.41177V0ZM7.52942 17C7.52942 16.4477 7.9508 16 8.4706 16H10.3529C10.8727 16 11.2941 16.4477 11.2941 17V23C11.2941 23.5523 10.8727 24 10.3529 24H8.4706C7.9508 24 7.52942 23.5523 7.52942 23V17ZM8.4706 23V20H10.3529V23H8.4706Z",
12487
+ fill: "white",
12488
+ fillRule: "evenodd"
12489
+ }
12490
+ ),
12491
+ withoutCaption: /* @__PURE__ */ jsx(
12492
+ "path",
12493
+ {
12494
+ clipRule: "evenodd",
12495
+ d: "M8.17031 0H6.11768V2.14737H8.17031V4.29474H6.11768V6.4421H8.17031V8.58947H6.11768V10.7368H8.17031V12.8842H6.11768V15.0316H8.17031V12.8842H10.2229V10.7368H8.17031V8.58947H10.2229V6.4421H8.17031V4.29474H10.2229V2.14737H8.17031V0ZM6.11768 18.2526C6.11768 17.6597 6.57717 17.1789 7.14399 17.1789H9.19662C9.76344 17.1789 10.2229 17.6597 10.2229 18.2526V24.6947C10.2229 25.2877 9.76344 25.7684 9.19662 25.7684H7.14399C6.57717 25.7684 6.11768 25.2877 6.11768 24.6947V18.2526ZM7.14399 24.6947V21.4737H9.19662V24.6947H7.14399Z",
12496
+ fill: "white",
12497
+ fillRule: "evenodd"
12498
+ }
12499
+ )
12500
+ };
12501
+ const VIDEO_SYMBOLS = {
12502
+ withCaption: /* @__PURE__ */ jsx(
12503
+ "path",
12504
+ {
12505
+ d: "M20.5 16L23.5 14V20L20.5 18M10 13H20C20.2761 13 20.5 13.2239 20.5 13.5V20.5C20.5 20.7761 20.2761 21 20 21H10C9.72386 21 9.5 20.7761 9.5 20.5V13.5C9.5 13.2239 9.72386 13 10 13Z",
12506
+ stroke: "white",
12507
+ strokeLinecap: "round",
12508
+ strokeLinejoin: "round",
12509
+ strokeWidth: "1.2"
12510
+ }
12511
+ ),
12512
+ withoutCaption: /* @__PURE__ */ jsx(
12513
+ "path",
12514
+ {
12515
+ d: "M17.5001 18L20.5001 16V22L17.5001 20M7.00012 15H17.0001C17.2763 15 17.5001 15.2239 17.5001 15.5V22.5C17.5001 22.7761 17.2763 23 17.0001 23H7.00012C6.72398 23 6.50012 22.7761 6.50012 22.5V15.5C6.50012 15.2239 6.72398 15 7.00012 15Z",
12516
+ stroke: "white",
12517
+ strokeLinecap: "round",
12518
+ strokeLinejoin: "round",
12519
+ strokeWidth: "1.33333"
12520
+ }
12521
+ )
12522
+ };
12523
+ const StandardFileTypeIcon = ({
12350
12524
  className,
12525
+ color,
12526
+ fileTypeClassName,
12527
+ label,
12528
+ size,
12529
+ sizeConfig,
12530
+ symbols,
12351
12531
  ...props
12352
- }) => /* @__PURE__ */ jsx(
12353
- Svg,
12532
+ }) => {
12533
+ const renderLabel = !!label;
12534
+ const resolvedLabel = renderLabel ? label : void 0;
12535
+ const symbolVariant = renderLabel ? "withCaption" : "withoutCaption";
12536
+ return /* @__PURE__ */ jsxs(
12537
+ Svg,
12538
+ {
12539
+ ...props,
12540
+ className: clsx(fileTypeClassName, className),
12541
+ size,
12542
+ sizeConfig,
12543
+ children: [
12544
+ /* @__PURE__ */ jsxs("g", { className: FILE_ICON_GRAPHIC_CLASSNAME, children: [
12545
+ /* @__PURE__ */ jsx("path", { d: FILE_ICON_PAPER_PATH, fill: color }),
12546
+ renderLabel ? symbols[symbolVariant] : /* @__PURE__ */ jsx(
12547
+ "g",
12548
+ {
12549
+ transform: `scale(${FILE_ICON_WITHOUT_CAPTION_SYMBOL_SCALE_X} ${FILE_ICON_WITHOUT_CAPTION_SYMBOL_SCALE_Y})`,
12550
+ children: symbols[symbolVariant]
12551
+ }
12552
+ ),
12553
+ /* @__PURE__ */ jsx("path", { d: FILE_ICON_FOLD_PATH, fill: "white", opacity: "0.5" })
12554
+ ] }),
12555
+ resolvedLabel && /* @__PURE__ */ jsx(FileIconLabel, { label: resolvedLabel, size, sizeConfig })
12556
+ ]
12557
+ }
12558
+ );
12559
+ };
12560
+ const PDF_SMALL_SYMBOL = /* @__PURE__ */ jsx(
12561
+ "path",
12354
12562
  {
12355
- ...props,
12356
- className: clsx("str-chat__file-icon--pdf", FILE_ICON_NO_LABEL_CLASSNAME, className),
12357
- children: /* @__PURE__ */ jsxs("g", { className: FILE_ICON_GRAPHIC_CLASSNAME, children: [
12358
- /* @__PURE__ */ jsx(
12359
- "path",
12360
- {
12361
- d: "M0 4C0 1.79086 1.79086 0 4 0H22.4L32 10V36C32 38.2091 30.2091 40 28 40H4C1.79086 40 0 38.2091 0 36V4Z",
12362
- fill: "#E71A01"
12363
- }
12364
- ),
12365
- /* @__PURE__ */ jsx(
12366
- "path",
12367
- {
12368
- d: "M32 10H25.4C23.7431 10 22.4 8.65685 22.4 7V0L32 10Z",
12369
- fill: "white",
12370
- opacity: "0.5"
12371
- }
12372
- ),
12373
- /* @__PURE__ */ jsx("g", { clipPath: "url(#clip0_1008_7871)", children: /* @__PURE__ */ jsx(
12374
- "path",
12375
- {
12376
- d: "M23.7533 19.2C23.28 18.7033 22.3093 18.42 20.9373 18.42C20.204 18.42 19.3526 18.4906 18.43 18.656C17.8647 18.1124 17.3499 17.5186 16.892 16.882C16.5373 16.4086 16.2293 15.8886 15.9453 15.3913C16.49 13.7353 16.75 12.3866 16.75 11.4166C16.75 10.3286 16.348 9.19263 15.1886 9.19263C14.834 9.19263 14.4786 9.40596 14.2893 9.71329C13.7693 10.636 14.006 12.6466 14.9046 14.634C14.5664 15.6502 14.1877 16.6526 13.7693 17.6386C13.3906 18.538 12.9646 19.4606 12.4913 20.312C9.88931 21.3533 8.20931 22.56 8.01998 23.5053C7.94931 23.8606 8.06731 24.192 8.32798 24.452C8.42265 24.5233 8.75398 24.8073 9.32131 24.8073C11.048 24.8073 12.87 22.0153 13.7926 20.336C14.5026 20.0993 15.2126 19.8626 15.922 19.6733C16.6704 19.4701 17.4284 19.3043 18.1933 19.1766C20.0146 20.8086 21.6233 21.0693 22.428 21.0693C23.4213 21.0693 23.7766 20.6666 23.8946 20.336C24.108 19.9093 23.966 19.4366 23.7533 19.2ZM22.8066 19.8866C22.7353 20.2413 22.38 20.478 21.884 20.478C21.742 20.478 21.624 20.454 21.4813 20.4306C20.5826 20.2173 19.7306 19.768 18.8793 19.058C19.5357 18.947 20.2003 18.8917 20.866 18.8926C21.3633 18.8926 21.7893 18.916 22.0726 18.9873C22.404 19.058 22.9246 19.2713 22.806 19.886L22.8066 19.8866ZM17.7906 18.7746C17.1305 18.8983 16.4755 19.0482 15.8273 19.224C15.262 19.3709 14.7017 19.5366 14.1473 19.7206C14.4355 19.1625 14.7039 18.5944 14.952 18.0173C15.236 17.3546 15.472 16.6686 15.7093 16.03C15.9453 16.432 16.206 16.8346 16.466 17.1893C16.8911 17.7313 17.3329 18.26 17.7906 18.7746ZM14.692 9.97329C14.7338 9.88949 14.7978 9.81875 14.877 9.7688C14.9563 9.71884 15.0477 9.69157 15.1413 9.68996C15.638 9.68996 15.7326 10.2573 15.7326 10.7073C15.7326 11.464 15.496 12.6233 15.094 13.948C14.4073 12.1026 14.3606 10.5653 14.692 9.97329ZM12.0893 20.998C10.8826 22.9853 9.72331 24.2153 9.01398 24.2153C8.88599 24.2161 8.76132 24.1746 8.65931 24.0973C8.51731 23.9553 8.44598 23.79 8.49331 23.6006C8.63531 22.8906 10.0073 21.8973 12.0893 20.998Z",
12377
- fill: "white"
12378
- }
12379
- ) }),
12380
- /* @__PURE__ */ jsx(
12381
- "path",
12382
- {
12383
- d: "M9.74219 34.4258V28.6992H10.8828V29.3633H10.9531C11.0286 29.2096 11.1276 29.0781 11.25 28.9688C11.375 28.8594 11.5208 28.776 11.6875 28.7188C11.8542 28.6589 12.0391 28.6289 12.2422 28.6289C12.6016 28.6289 12.9115 28.7188 13.1719 28.8984C13.4323 29.0781 13.6328 29.3333 13.7734 29.6641C13.9167 29.9922 13.9883 30.3854 13.9883 30.8438V30.8516C13.9883 31.3125 13.918 31.7083 13.7773 32.0391C13.6367 32.3698 13.4362 32.6237 13.1758 32.8008C12.9154 32.9779 12.6042 33.0664 12.2422 33.0664C12.0443 33.0664 11.8607 33.0365 11.6914 32.9766C11.5247 32.9141 11.3776 32.8268 11.25 32.7148C11.125 32.6029 11.026 32.4688 10.9531 32.3125H10.8828V34.4258H9.74219ZM11.8516 32.1211C12.0547 32.1211 12.2279 32.0703 12.3711 31.9688C12.5169 31.8672 12.6289 31.7214 12.707 31.5312C12.7878 31.3411 12.8281 31.1146 12.8281 30.8516V30.8438C12.8281 30.5807 12.7878 30.3542 12.707 30.1641C12.6289 29.974 12.5169 29.8281 12.3711 29.7266C12.2279 29.625 12.0547 29.5742 11.8516 29.5742C11.651 29.5742 11.4766 29.625 11.3281 29.7266C11.1823 29.8281 11.069 29.974 10.9883 30.1641C10.9102 30.3516 10.8711 30.5781 10.8711 30.8438V30.8516C10.8711 31.112 10.9115 31.3385 10.9922 31.5312C11.0729 31.7214 11.1862 31.8672 11.332 31.9688C11.4805 32.0703 11.6536 32.1211 11.8516 32.1211ZM16.457 33.0664C16.1003 33.0664 15.7904 32.9779 15.5273 32.8008C15.2669 32.6211 15.0651 32.3659 14.9219 32.0352C14.7812 31.7044 14.7109 31.3099 14.7109 30.8516V30.8438C14.7109 30.3828 14.7799 29.987 14.918 29.6562C15.0586 29.3255 15.2591 29.0716 15.5195 28.8945C15.7799 28.7174 16.0924 28.6289 16.457 28.6289C16.6523 28.6289 16.8333 28.6602 17 28.7227C17.1693 28.7826 17.3177 28.8685 17.4453 28.9805C17.5729 29.0924 17.6719 29.2279 17.7422 29.3867H17.8125V27.0547H18.9531V33H17.8125V32.332H17.7422C17.6693 32.4857 17.5703 32.6172 17.4453 32.7266C17.3229 32.8359 17.1784 32.9206 17.0117 32.9805C16.8451 33.0378 16.6602 33.0664 16.457 33.0664ZM16.8438 32.1211C17.0469 32.1211 17.2214 32.0703 17.3672 31.9688C17.513 31.8672 17.625 31.7214 17.7031 31.5312C17.7839 31.3411 17.8242 31.1159 17.8242 30.8555V30.8477C17.8242 30.582 17.7839 30.3555 17.7031 30.168C17.625 29.9779 17.5117 29.832 17.3633 29.7305C17.2174 29.6263 17.0443 29.5742 16.8438 29.5742C16.6458 29.5742 16.4727 29.6263 16.3242 29.7305C16.1784 29.832 16.0664 29.9779 15.9883 30.168C15.9102 30.3555 15.8711 30.5807 15.8711 30.8438V30.8516C15.8711 31.1146 15.9102 31.3411 15.9883 31.5312C16.0664 31.7214 16.1784 31.8672 16.3242 31.9688C16.4701 32.0703 16.6432 32.1211 16.8438 32.1211ZM20.4648 33V29.5586H19.7695V28.6992H20.4648V28.2969C20.4648 28.0104 20.5156 27.7721 20.6172 27.582C20.7188 27.3919 20.8776 27.25 21.0938 27.1562C21.3125 27.0599 21.5951 27.0117 21.9414 27.0117C22.0586 27.0117 22.1641 27.0156 22.2578 27.0234C22.3542 27.0312 22.444 27.0417 22.5273 27.0547V27.8164C22.4909 27.8086 22.4427 27.8034 22.3828 27.8008C22.3255 27.7956 22.2604 27.793 22.1875 27.793C21.9661 27.793 21.8099 27.8438 21.7188 27.9453C21.6276 28.0443 21.582 28.1875 21.582 28.375V28.6992H22.4922V29.5586H21.6055V33H20.4648Z",
12384
- fill: "white"
12385
- }
12386
- ),
12387
- /* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsx("clipPath", { id: "clip0_1008_7871", children: /* @__PURE__ */ jsx("rect", { fill: "white", height: "16", transform: "translate(8 9)", width: "16" }) }) })
12388
- ] })
12563
+ d: "M20.7533 19.5337C20.28 19.037 19.3093 18.7537 17.9373 18.7537C17.204 18.7537 16.3526 18.8244 15.43 18.9897C14.8647 18.4461 14.3499 17.8523 13.892 17.2157C13.5373 16.7424 13.2293 16.2224 12.9453 15.725C13.49 14.069 13.75 12.7204 13.75 11.7504C13.75 10.6624 13.348 9.52637 12.1886 9.52637C11.834 9.52637 11.4786 9.7397 11.2893 10.047C10.7693 10.9697 11.006 12.9804 11.9046 14.9677C11.5664 15.984 11.1876 16.9863 10.7693 17.9724C10.3906 18.8717 9.96465 19.7944 9.49131 20.6457C6.88931 21.687 5.20931 22.8937 5.01998 23.839C4.94931 24.1944 5.06731 24.5257 5.32798 24.7857C5.42265 24.857 5.75398 25.141 6.32131 25.141C8.04798 25.141 9.86998 22.349 10.7926 20.6697C11.5026 20.433 12.2126 20.1964 12.922 20.007C13.6704 19.8038 14.4284 19.638 15.1933 19.5104C17.0146 21.1424 18.6233 21.403 19.428 21.403C20.4213 21.403 20.7766 21.0004 20.8946 20.6697C21.108 20.243 20.966 19.7704 20.7533 19.5337ZM19.8066 20.2204C19.7353 20.575 19.38 20.8117 18.884 20.8117C18.742 20.8117 18.624 20.7877 18.4813 20.7644C17.5826 20.551 16.7306 20.1017 15.8793 19.3917C16.5357 19.2807 17.2003 19.2254 17.866 19.2264C18.3633 19.2264 18.7893 19.2497 19.0726 19.321C19.404 19.3917 19.9246 19.605 19.806 20.2197L19.8066 20.2204ZM14.7906 19.1084C14.1305 19.2321 13.4755 19.382 12.8273 19.5577C12.262 19.7047 11.7017 19.8703 11.1473 20.0544C11.4355 19.4962 11.7039 18.9281 11.952 18.351C12.236 17.6884 12.472 17.0024 12.7093 16.3637C12.9453 16.7657 13.206 17.1684 13.466 17.523C13.8911 18.065 14.3329 18.5937 14.7906 19.1084ZM11.692 10.307C11.7338 10.2232 11.7978 10.1525 11.877 10.1025C11.9563 10.0526 12.0477 10.0253 12.1413 10.0237C12.638 10.0237 12.7326 10.591 12.7326 11.041C12.7326 11.7977 12.496 12.957 12.094 14.2817C11.4073 12.4364 11.3606 10.899 11.692 10.307ZM9.08931 21.3317C7.88265 23.319 6.72331 24.549 6.01398 24.549C5.88599 24.5498 5.76132 24.5083 5.65931 24.431C5.51731 24.289 5.44598 24.1237 5.49331 23.9344C5.63531 23.2244 7.00731 22.231 9.08931 21.3317Z",
12564
+ fill: "white"
12389
12565
  }
12390
12566
  );
12391
- const FileWordIcon = ({
12567
+ const PDF_LEGACY_SYMBOL = /* @__PURE__ */ jsxs(Fragment, { children: [
12568
+ /* @__PURE__ */ jsx(
12569
+ "path",
12570
+ {
12571
+ d: "M23.7533 19.2C23.28 18.7033 22.3093 18.42 20.9373 18.42C20.204 18.42 19.3526 18.4906 18.43 18.656C17.8647 18.1124 17.3499 17.5186 16.892 16.882C16.5373 16.4086 16.2293 15.8886 15.9453 15.3913C16.49 13.7353 16.75 12.3866 16.75 11.4166C16.75 10.3286 16.348 9.19263 15.1886 9.19263C14.834 9.19263 14.4786 9.40596 14.2893 9.71329C13.7693 10.636 14.006 12.6466 14.9046 14.634C14.5664 15.6502 14.1877 16.6526 13.7693 17.6386C13.3906 18.538 12.9646 19.4606 12.4913 20.312C9.88931 21.3533 8.20931 22.56 8.01998 23.5053C7.94931 23.8606 8.06731 24.192 8.32798 24.452C8.42265 24.5233 8.75398 24.8073 9.32131 24.8073C11.048 24.8073 12.87 22.0153 13.7926 20.336C14.5026 20.0993 15.2126 19.8626 15.922 19.6733C16.6704 19.4701 17.4284 19.3043 18.1933 19.1766C20.0146 20.8086 21.6233 21.0693 22.428 21.0693C23.4213 21.0693 23.7766 20.6666 23.8946 20.336C24.108 19.9093 23.966 19.4366 23.7533 19.2ZM22.8066 19.8866C22.7353 20.2413 22.38 20.478 21.884 20.478C21.742 20.478 21.624 20.454 21.4813 20.4306C20.5826 20.2173 19.7306 19.768 18.8793 19.058C19.5357 18.947 20.2003 18.8917 20.866 18.8926C21.3633 18.8926 21.7893 18.916 22.0726 18.9873C22.404 19.058 22.9246 19.2713 22.806 19.886L22.8066 19.8866ZM17.7906 18.7746C17.1305 18.8983 16.4755 19.0482 15.8273 19.224C15.262 19.3709 14.7017 19.5366 14.1473 19.7206C14.4355 19.1625 14.7039 18.5944 14.952 18.0173C15.236 17.3546 15.472 16.6686 15.7093 16.03C15.9453 16.432 16.206 16.8346 16.466 17.1893C16.8911 17.7313 17.3329 18.26 17.7906 18.7746ZM14.692 9.97329C14.7338 9.88949 14.7978 9.81875 14.877 9.7688C14.9563 9.71884 15.0477 9.69157 15.1413 9.68996C15.638 9.68996 15.7326 10.2573 15.7326 10.7073C15.7326 11.464 15.496 12.6233 15.094 13.948C14.4073 12.1026 14.3606 10.5653 14.692 9.97329ZM12.0893 20.998C10.8826 22.9853 9.72331 24.2153 9.01398 24.2153C8.88599 24.2161 8.76132 24.1746 8.65931 24.0973C8.51731 23.9553 8.44598 23.79 8.49331 23.6006C8.63531 22.8906 10.0073 21.8973 12.0893 20.998Z",
12572
+ fill: "white"
12573
+ }
12574
+ ),
12575
+ /* @__PURE__ */ jsx(
12576
+ "path",
12577
+ {
12578
+ d: "M9.74219 34.4258V28.6992H10.8828V29.3633H10.9531C11.0286 29.2096 11.1276 29.0781 11.25 28.9688C11.375 28.8594 11.5208 28.776 11.6875 28.7188C11.8542 28.6589 12.0391 28.6289 12.2422 28.6289C12.6016 28.6289 12.9115 28.7188 13.1719 28.8984C13.4323 29.0781 13.6328 29.3333 13.7734 29.6641C13.9167 29.9922 13.9883 30.3854 13.9883 30.8438V30.8516C13.9883 31.3125 13.918 31.7083 13.7773 32.0391C13.6367 32.3698 13.4362 32.6237 13.1758 32.8008C12.9154 32.9779 12.6042 33.0664 12.2422 33.0664C12.0443 33.0664 11.8607 33.0365 11.6914 32.9766C11.5247 32.9141 11.3776 32.8268 11.25 32.7148C11.125 32.6029 11.026 32.4688 10.9531 32.3125H10.8828V34.4258H9.74219ZM11.8516 32.1211C12.0547 32.1211 12.2279 32.0703 12.3711 31.9688C12.5169 31.8672 12.6289 31.7214 12.707 31.5312C12.7878 31.3411 12.8281 31.1146 12.8281 30.8516V30.8438C12.8281 30.5807 12.7878 30.3542 12.707 30.1641C12.6289 29.974 12.5169 29.8281 12.3711 29.7266C12.2279 29.625 12.0547 29.5742 11.8516 29.5742C11.651 29.5742 11.4766 29.625 11.3281 29.7266C11.1823 29.8281 11.069 29.974 10.9883 30.1641C10.9102 30.3516 10.8711 30.5781 10.8711 30.8438V30.8516C10.8711 31.112 10.9115 31.3385 10.9922 31.5312C11.0729 31.7214 11.1862 31.8672 11.332 31.9688C11.4805 32.0703 11.6536 32.1211 11.8516 32.1211ZM16.457 33.0664C16.1003 33.0664 15.7904 32.9779 15.5273 32.8008C15.2669 32.6211 15.0651 32.3659 14.9219 32.0352C14.7812 31.7044 14.7109 31.3099 14.7109 30.8516V30.8438C14.7109 30.3828 14.7799 29.987 14.918 29.6562C15.0586 29.3255 15.2591 29.0716 15.5195 28.8945C15.7799 28.7174 16.0924 28.6289 16.457 28.6289C16.6523 28.6289 16.8333 28.6602 17 28.7227C17.1693 28.7826 17.3177 28.8685 17.4453 28.9805C17.5729 29.0924 17.6719 29.2279 17.7422 29.3867H17.8125V27.0547H18.9531V33H17.8125V32.332H17.7422C17.6693 32.4857 17.5703 32.6172 17.4453 32.7266C17.3229 32.8359 17.1784 32.9206 17.0117 32.9805C16.8451 33.0378 16.6602 33.0664 16.457 33.0664ZM16.8438 32.1211C17.0469 32.1211 17.2214 32.0703 17.3672 31.9688C17.513 31.8672 17.625 31.7214 17.7031 31.5312C17.7839 31.3411 17.8242 31.1159 17.8242 30.8555V30.8477C17.8242 30.582 17.7839 30.3555 17.7031 30.168C17.625 29.9779 17.5117 29.832 17.3633 29.7305C17.2174 29.6263 17.0443 29.5742 16.8438 29.5742C16.6458 29.5742 16.4727 29.6263 16.3242 29.7305C16.1784 29.832 16.0664 29.9779 15.9883 30.168C15.9102 30.3555 15.8711 30.5807 15.8711 30.8438V30.8516C15.8711 31.1146 15.9102 31.3411 15.9883 31.5312C16.0664 31.7214 16.1784 31.8672 16.3242 31.9688C16.4701 32.0703 16.6432 32.1211 16.8438 32.1211ZM20.4648 33V29.5586H19.7695V28.6992H20.4648V28.2969C20.4648 28.0104 20.5156 27.7721 20.6172 27.582C20.7188 27.3919 20.8776 27.25 21.0938 27.1562C21.3125 27.0599 21.5951 27.0117 21.9414 27.0117C22.0586 27.0117 22.1641 27.0156 22.2578 27.0234C22.3542 27.0312 22.444 27.0417 22.5273 27.0547V27.8164C22.4909 27.8086 22.4427 27.8034 22.3828 27.8008C22.3255 27.7956 22.2604 27.793 22.1875 27.793C21.9661 27.793 21.8099 27.8438 21.7188 27.9453C21.6276 28.0443 21.582 28.1875 21.582 28.375V28.6992H22.4922V29.5586H21.6055V33H20.4648Z",
12579
+ fill: "white"
12580
+ }
12581
+ )
12582
+ ] });
12583
+ const FilePdfIcon = ({
12392
12584
  className,
12393
- label = "doc",
12585
+ label,
12394
12586
  size,
12395
12587
  sizeConfig,
12396
12588
  ...props
12397
- }) => /* @__PURE__ */ jsxs(
12398
- Svg,
12399
- {
12400
- ...props,
12401
- className: clsx(
12402
- "str-chat__file-icon--doc",
12403
- !label && FILE_ICON_NO_LABEL_CLASSNAME,
12404
- className
12405
- ),
12406
- size,
12407
- sizeConfig,
12408
- children: [
12409
- /* @__PURE__ */ jsxs("g", { className: FILE_ICON_GRAPHIC_CLASSNAME, children: [
12410
- /* @__PURE__ */ jsx(
12411
- "path",
12412
- {
12413
- d: "M0 4C0 1.79086 1.79086 0 4 0H22.4L32 10V36C32 38.2091 30.2091 40 28 40H4C1.79086 40 0 38.2091 0 36V4Z",
12414
- fill: "#3375E2"
12415
- }
12416
- ),
12417
- /* @__PURE__ */ jsx(
12418
- "path",
12589
+ }) => {
12590
+ const useLegacyPdfMarkup = !!label;
12591
+ return /* @__PURE__ */ jsx(
12592
+ Svg,
12593
+ {
12594
+ ...props,
12595
+ className: clsx(
12596
+ "str-chat__file-icon--pdf",
12597
+ useLegacyPdfMarkup && FILE_ICON_NO_LABEL_CLASSNAME,
12598
+ className
12599
+ ),
12600
+ size,
12601
+ sizeConfig,
12602
+ children: /* @__PURE__ */ jsxs("g", { className: FILE_ICON_GRAPHIC_CLASSNAME, children: [
12603
+ /* @__PURE__ */ jsx("path", { d: FILE_ICON_PAPER_PATH, fill: "#E71A01" }),
12604
+ useLegacyPdfMarkup ? PDF_LEGACY_SYMBOL : /* @__PURE__ */ jsx(
12605
+ "g",
12419
12606
  {
12420
- d: "M32 10H25.4C23.7431 10 22.4 8.65685 22.4 7V0L32 10Z",
12421
- fill: "white",
12422
- opacity: "0.5"
12607
+ transform: `scale(${FILE_ICON_WITHOUT_CAPTION_SYMBOL_SCALE_X} ${FILE_ICON_WITHOUT_CAPTION_SYMBOL_SCALE_Y})`,
12608
+ children: PDF_SMALL_SYMBOL
12423
12609
  }
12424
12610
  ),
12425
- /* @__PURE__ */ jsx("rect", { fill: "white", height: "1.6", rx: "0.8", width: "14.4", x: "8", y: "12.2" }),
12426
- /* @__PURE__ */ jsx("rect", { fill: "white", height: "1.6", rx: "0.8", width: "14.4", x: "8", y: "20.2" }),
12427
- /* @__PURE__ */ jsx("rect", { fill: "white", height: "1.6", rx: "0.8", width: "9.6", x: "8", y: "16.2" })
12428
- ] }),
12429
- /* @__PURE__ */ jsx(FileIconLabel, { label, size, sizeConfig })
12430
- ]
12611
+ /* @__PURE__ */ jsx("path", { d: FILE_ICON_FOLD_PATH, fill: "white", opacity: "0.5" })
12612
+ ] })
12613
+ }
12614
+ );
12615
+ };
12616
+ const FileWordIcon = ({ className, label, ...props }) => /* @__PURE__ */ jsx(
12617
+ StandardFileTypeIcon,
12618
+ {
12619
+ ...props,
12620
+ className,
12621
+ color: "#3375E2",
12622
+ fileTypeClassName: "str-chat__file-icon--doc",
12623
+ label,
12624
+ symbols: TEXT_SYMBOLS
12431
12625
  }
12432
12626
  );
12433
- const FilePowerPointIcon = ({
12434
- className,
12435
- label = "ppt",
12436
- size,
12437
- sizeConfig,
12438
- ...props
12439
- }) => /* @__PURE__ */ jsxs(
12440
- Svg,
12627
+ const FilePowerPointIcon = ({ className, label, ...props }) => /* @__PURE__ */ jsx(
12628
+ StandardFileTypeIcon,
12441
12629
  {
12442
12630
  ...props,
12443
- className: clsx(
12444
- "str-chat__file-icon--ppt",
12445
- !label && FILE_ICON_NO_LABEL_CLASSNAME,
12446
- className
12447
- ),
12448
- size,
12449
- sizeConfig,
12450
- children: [
12451
- /* @__PURE__ */ jsxs("g", { className: FILE_ICON_GRAPHIC_CLASSNAME, children: [
12452
- /* @__PURE__ */ jsx(
12453
- "path",
12454
- {
12455
- d: "M0 4C0 1.79086 1.79086 0 4 0H22.4L32 10V36C32 38.2091 30.2091 40 28 40H4C1.79086 40 0 38.2091 0 36V4Z",
12456
- fill: "#D14423"
12457
- }
12458
- ),
12459
- /* @__PURE__ */ jsx(
12460
- "path",
12461
- {
12462
- d: "M32 10H25.4C23.7431 10 22.4 8.65685 22.4 7V0L32 10Z",
12463
- fill: "white",
12464
- opacity: "0.5"
12465
- }
12466
- ),
12467
- /* @__PURE__ */ jsx(
12468
- "path",
12469
- {
12470
- d: "M11.1666 11.5H20.8333M11.1666 21.8333C10.4303 21.8333 9.83331 21.2364 9.83331 20.5V14.8333C9.83331 14.097 10.4303 13.5 11.1666 13.5H20.8333C21.5697 13.5 22.1666 14.097 22.1666 14.8333V20.5C22.1666 21.2364 21.5697 21.8333 20.8333 21.8333H11.1666Z",
12471
- stroke: "white",
12472
- strokeLinecap: "round",
12473
- strokeLinejoin: "round",
12474
- strokeWidth: "1.2"
12475
- }
12476
- )
12477
- ] }),
12478
- /* @__PURE__ */ jsx(FileIconLabel, { label, size, sizeConfig })
12479
- ]
12631
+ className,
12632
+ color: "#D14423",
12633
+ fileTypeClassName: "str-chat__file-icon--ppt",
12634
+ label,
12635
+ symbols: PRESENTATION_SYMBOLS
12480
12636
  }
12481
12637
  );
12482
- const FileExcelIcon = ({
12483
- className = "",
12484
- label = "xls",
12485
- size,
12486
- sizeConfig,
12487
- ...props
12488
- }) => /* @__PURE__ */ jsxs(
12489
- Svg,
12638
+ const FileExcelIcon = ({ className = "", label, ...props }) => /* @__PURE__ */ jsx(
12639
+ StandardFileTypeIcon,
12490
12640
  {
12491
12641
  ...props,
12492
- className: clsx(
12493
- "str-chat__file-icon--xls",
12494
- !label && FILE_ICON_NO_LABEL_CLASSNAME,
12495
- className
12496
- ),
12497
- size,
12498
- sizeConfig,
12499
- children: [
12500
- /* @__PURE__ */ jsxs("g", { className: FILE_ICON_GRAPHIC_CLASSNAME, children: [
12501
- /* @__PURE__ */ jsx(
12502
- "path",
12503
- {
12504
- d: "M0 4C0 1.79086 1.79086 0 4 0H22.4L32 10V36C32 38.2091 30.2091 40 28 40H4C1.79086 40 0 38.2091 0 36V4Z",
12505
- fill: "#0C864B"
12506
- }
12507
- ),
12508
- /* @__PURE__ */ jsx(
12509
- "path",
12510
- {
12511
- d: "M15 11.5V11H14V11.5H15ZM14 22.5V23H15V22.5H14ZM10.5 15H10V16H10.5V15ZM21.5 16H22V15H21.5V16ZM21 13.6333V20.3667H22V13.6333H21ZM19.3667 22H12.6333V23H19.3667V22ZM11 20.3667V13.6333H10V20.3667H11ZM12.6333 12H19.3667V11H12.6333V12ZM12.6333 22C12.2517 22 11.9956 21.9996 11.7983 21.9835C11.6069 21.9679 11.5154 21.9399 11.455 21.9092L11.001 22.8002C11.2259 22.9147 11.4636 22.9595 11.7169 22.9802C11.9643 23.0004 12.2682 23 12.6333 23V22ZM10 20.3667C10 20.7318 9.99961 21.0357 10.0198 21.2831C10.0405 21.5364 10.0853 21.7741 10.1998 21.999L11.0908 21.545C11.0601 21.4846 11.0321 21.3931 11.0165 21.2017C11.0004 21.0044 11 20.7483 11 20.3667H10ZM11.455 21.9092C11.2982 21.8293 11.1707 21.7018 11.0908 21.545L10.1998 21.999C10.3756 22.3439 10.6561 22.6244 11.001 22.8002L11.455 21.9092ZM21 20.3667C21 20.7483 20.9996 21.0044 20.9835 21.2017C20.9679 21.3931 20.9399 21.4846 20.9092 21.545L21.8002 21.999C21.9147 21.7741 21.9595 21.5364 21.9802 21.2831C22.0004 21.0357 22 20.7318 22 20.3667H21ZM19.3667 23C19.7318 23 20.0357 23.0004 20.2831 22.9802C20.5364 22.9595 20.7741 22.9147 20.999 22.8002L20.545 21.9092C20.4846 21.9399 20.3931 21.9679 20.2017 21.9835C20.0044 21.9996 19.7483 22 19.3667 22V23ZM20.9092 21.545C20.8293 21.7018 20.7018 21.8293 20.545 21.9092L20.999 22.8002C21.3439 22.6244 21.6244 22.3439 21.8002 21.999L20.9092 21.545ZM22 13.6333C22 13.2682 22.0004 12.9643 21.9802 12.7169C21.9595 12.4636 21.9147 12.2259 21.8002 12.001L20.9092 12.455C20.9399 12.5154 20.9679 12.6069 20.9835 12.7983C20.9996 12.9956 21 13.2517 21 13.6333H22ZM19.3667 12C19.7483 12 20.0044 12.0004 20.2017 12.0165C20.3931 12.0321 20.4846 12.0601 20.545 12.0908L20.999 11.1998C20.7741 11.0853 20.5364 11.0405 20.2831 11.0198C20.0357 10.9996 19.7318 11 19.3667 11V12ZM21.8002 12.001C21.6244 11.6561 21.3439 11.3756 20.999 11.1998L20.545 12.0908C20.7018 12.1707 20.8293 12.2982 20.9092 12.455L21.8002 12.001ZM11 13.6333C11 13.2517 11.0004 12.9956 11.0165 12.7983C11.0321 12.6069 11.0601 12.5154 11.0908 12.455L10.1998 12.001C10.0853 12.2259 10.0405 12.4636 10.0198 12.7169C9.99961 12.9643 10 13.2682 10 13.6333H11ZM12.6333 11C12.2682 11 11.9643 10.9996 11.7169 11.0198C11.4636 11.0405 11.2259 11.0853 11.001 11.1998L11.455 12.0908C11.5154 12.0601 11.6069 12.0321 11.7983 12.0165C11.9956 12.0004 12.2517 12 12.6333 12V11ZM11.0908 12.455C11.1707 12.2982 11.2982 12.1707 11.455 12.0908L11.001 11.1998C10.6561 11.3756 10.3756 11.6561 10.1998 12.001L11.0908 12.455ZM14 11.5V15.5H15V11.5H14ZM14 15.5V22.5H15V15.5H14ZM10.5 16H14.5V15H10.5V16ZM14.5 16H21.5V15H14.5V16Z",
12512
- fill: "white"
12513
- }
12514
- ),
12515
- /* @__PURE__ */ jsx(
12516
- "path",
12517
- {
12518
- d: "M32 10H25.4C23.7431 10 22.4 8.65685 22.4 7V0L32 10Z",
12519
- fill: "white",
12520
- opacity: "0.5"
12521
- }
12522
- )
12523
- ] }),
12524
- /* @__PURE__ */ jsx(FileIconLabel, { label, size, sizeConfig })
12525
- ]
12642
+ className,
12643
+ color: "#0C864B",
12644
+ fileTypeClassName: "str-chat__file-icon--xls",
12645
+ label,
12646
+ symbols: SPREADSHEET_SYMBOLS
12526
12647
  }
12527
12648
  );
12528
12649
  const FileArchiveIcon = ({
12529
12650
  className = "",
12530
12651
  label = "",
12531
- size,
12532
- sizeConfig,
12533
12652
  ...props
12534
- }) => /* @__PURE__ */ jsxs(
12535
- Svg,
12653
+ }) => /* @__PURE__ */ jsx(
12654
+ StandardFileTypeIcon,
12536
12655
  {
12537
12656
  ...props,
12538
- className: clsx(
12539
- "str-chat__file-icon--compressed",
12540
- !label && FILE_ICON_NO_LABEL_CLASSNAME,
12541
- className
12542
- ),
12543
- size,
12544
- sizeConfig,
12545
- children: [
12546
- /* @__PURE__ */ jsxs("g", { className: FILE_ICON_GRAPHIC_CLASSNAME, children: [
12547
- /* @__PURE__ */ jsx(
12548
- "path",
12549
- {
12550
- d: "M0 4C0 1.79086 1.79086 0 4 0H22.4L32 10V36C32 38.2091 30.2091 40 28 40H4C1.79086 40 0 38.2091 0 36V4Z",
12551
- fill: "#E59E34"
12552
- }
12553
- ),
12554
- /* @__PURE__ */ jsx(
12555
- "path",
12556
- {
12557
- clipRule: "evenodd",
12558
- d: "M9.41177 0H7.52942V2H9.41177V4H7.52942V6H9.41177V8H7.52942V10H9.41177V12H7.52942V14H9.41177V12H11.2941V10H9.41177V8H11.2941V6H9.41177V4H11.2941V2H9.41177V0ZM7.52942 17C7.52942 16.4477 7.9508 16 8.4706 16H10.3529C10.8727 16 11.2941 16.4477 11.2941 17V23C11.2941 23.5523 10.8727 24 10.3529 24H8.4706C7.9508 24 7.52942 23.5523 7.52942 23V17ZM8.4706 23V20H10.3529V23H8.4706Z",
12559
- fill: "white",
12560
- fillRule: "evenodd"
12561
- }
12562
- ),
12563
- /* @__PURE__ */ jsx(
12564
- "path",
12565
- {
12566
- d: "M32 10H25.4C23.7431 10 22.4 8.65685 22.4 7V0L32 10Z",
12567
- fill: "white",
12568
- opacity: "0.5"
12569
- }
12570
- )
12571
- ] }),
12572
- /* @__PURE__ */ jsx(FileIconLabel, { label, size, sizeConfig })
12573
- ]
12657
+ className,
12658
+ color: "#E59E34",
12659
+ fileTypeClassName: "str-chat__file-icon--compressed",
12660
+ label,
12661
+ symbols: COMPRESSION_SYMBOLS
12574
12662
  }
12575
12663
  );
12576
- const FileCodeIcon = ({
12577
- className = "",
12578
- label = "code",
12579
- size,
12580
- sizeConfig,
12581
- ...props
12582
- }) => /* @__PURE__ */ jsxs(
12583
- Svg,
12664
+ const FileCodeIcon = ({ className = "", label, ...props }) => /* @__PURE__ */ jsx(
12665
+ StandardFileTypeIcon,
12584
12666
  {
12585
12667
  ...props,
12586
- className: clsx(
12587
- "str-chat__file-icon--code",
12588
- !label && FILE_ICON_NO_LABEL_CLASSNAME,
12589
- className
12590
- ),
12591
- size,
12592
- sizeConfig,
12593
- children: [
12594
- /* @__PURE__ */ jsxs("g", { className: FILE_ICON_GRAPHIC_CLASSNAME, children: [
12595
- /* @__PURE__ */ jsx(
12596
- "path",
12597
- {
12598
- d: "M0 4C0 1.79086 1.79086 0 4 0H22.4L32 10V36C32 38.2091 30.2091 40 28 40H4C1.79086 40 0 38.2091 0 36V4Z",
12599
- fill: "#00ACA1"
12600
- }
12601
- ),
12602
- /* @__PURE__ */ jsx(
12603
- "path",
12604
- {
12605
- d: "M14.8333 15L13.3047 16.5286C13.0444 16.7889 13.0444 17.2111 13.3047 17.4714L14.8333 19M17.1667 15L18.6953 16.5286C18.9556 16.7889 18.9556 17.2111 18.6953 17.4714L17.1667 19M11.8333 22.5H20.1667C20.9031 22.5 21.5 21.9031 21.5 21.1667V12.8333C21.5 12.097 20.9031 11.5 20.1667 11.5H11.8333C11.097 11.5 10.5 12.097 10.5 12.8333V21.1667C10.5 21.9031 11.097 22.5 11.8333 22.5Z",
12606
- stroke: "white",
12607
- strokeLinecap: "round",
12608
- strokeLinejoin: "round",
12609
- strokeWidth: "1.2"
12610
- }
12611
- ),
12612
- /* @__PURE__ */ jsx(
12613
- "path",
12614
- {
12615
- d: "M32 10H25.4C23.7431 10 22.4 8.65685 22.4 7V0L32 10Z",
12616
- fill: "white",
12617
- opacity: "0.5"
12618
- }
12619
- )
12620
- ] }),
12621
- /* @__PURE__ */ jsx(FileIconLabel, { label, size, sizeConfig })
12622
- ]
12668
+ className,
12669
+ color: "#00ACA1",
12670
+ fileTypeClassName: "str-chat__file-icon--code",
12671
+ label,
12672
+ symbols: CODE_SYMBOLS
12623
12673
  }
12624
12674
  );
12625
- const FileAudioIcon = ({
12626
- className = "",
12627
- label = "audio",
12628
- size,
12629
- sizeConfig,
12630
- ...props
12631
- }) => /* @__PURE__ */ jsxs(
12632
- Svg,
12675
+ const FileAudioIcon = ({ className = "", label, ...props }) => /* @__PURE__ */ jsx(
12676
+ StandardFileTypeIcon,
12633
12677
  {
12634
12678
  ...props,
12635
- className: clsx(
12636
- "str-chat__file-icon--audio",
12637
- !label && FILE_ICON_NO_LABEL_CLASSNAME,
12638
- className
12639
- ),
12640
- size,
12641
- sizeConfig,
12642
- children: [
12643
- /* @__PURE__ */ jsxs("g", { className: FILE_ICON_GRAPHIC_CLASSNAME, children: [
12644
- /* @__PURE__ */ jsx(
12645
- "path",
12646
- {
12647
- d: "M0 4C0 1.79086 1.79086 0 4 0H22.4L32 10V36C32 38.2091 30.2091 40 28 40H4C1.79086 40 0 38.2091 0 36V4Z",
12648
- fill: "#2727B0"
12649
- }
12650
- ),
12651
- /* @__PURE__ */ jsx(
12652
- "path",
12653
- {
12654
- d: "M20.8318 12.1679C22.0684 13.4045 22.8333 15.1128 22.8333 16.9998C22.8333 18.8867 22.0684 20.595 20.8318 21.8316M18.5927 14.4075C19.2562 15.071 19.6666 15.9876 19.6666 17.0002C19.6666 18.0127 19.2562 18.9294 18.5927 19.5929M10.5 14.1666H11.5699C11.8495 14.1666 12.1221 14.0787 12.349 13.9153L15.6385 11.5468C15.859 11.3881 16.1666 11.5456 16.1666 11.8173V22.1825C16.1666 22.4542 15.859 22.6118 15.6385 22.453L12.349 20.0845C12.1221 19.9211 11.8495 19.8332 11.5699 19.8332H10.5C9.76358 19.8332 9.16663 19.2363 9.16663 18.4999V15.4999C9.16663 14.7635 9.76358 14.1666 10.5 14.1666Z",
12655
- stroke: "white",
12656
- strokeLinecap: "round",
12657
- strokeLinejoin: "round",
12658
- strokeWidth: "1.2"
12659
- }
12660
- ),
12661
- /* @__PURE__ */ jsx(
12662
- "path",
12663
- {
12664
- d: "M32 10H25.4C23.7431 10 22.4 8.65685 22.4 7V0L32 10Z",
12665
- fill: "white",
12666
- opacity: "0.5"
12667
- }
12668
- )
12669
- ] }),
12670
- /* @__PURE__ */ jsx(FileIconLabel, { label, size, sizeConfig })
12671
- ]
12679
+ className,
12680
+ color: "#2727B0",
12681
+ fileTypeClassName: "str-chat__file-icon--audio",
12682
+ label,
12683
+ symbols: AUDIO_SYMBOLS
12672
12684
  }
12673
12685
  );
12674
- const FileVideoIcon = ({ className = "", ...props }) => /* @__PURE__ */ jsxs(
12675
- "svg",
12686
+ const FileVideoIcon = ({ className = "", label, ...props }) => /* @__PURE__ */ jsx(
12687
+ StandardFileTypeIcon,
12676
12688
  {
12677
- className: clsx("rfu-file-video", className),
12678
- fill: "none",
12679
- viewBox: "0 0 34 40",
12680
- xmlns: "http://www.w3.org/2000/svg",
12681
12689
  ...props,
12682
- children: [
12683
- /* @__PURE__ */ jsx(
12684
- "path",
12685
- {
12686
- clipRule: "evenodd",
12687
- d: "M17.7168 33.172C18.2348 33.172 18.4238 33.655 18.4238 34.18C18.4238 34.642 18.2978 35.195 17.7168 35.195C17.1708 35.195 16.9888 34.642 16.9888 34.145C16.9888 33.683 17.1708 33.172 17.7168 33.172ZM19.5718 31.002H18.3818V32.7589H18.3678C18.1228 32.43 17.7798 32.262 17.3318 32.262C16.3028 32.262 15.7988 33.158 15.7988 34.103C15.7988 35.125 16.2818 36.1049 17.4228 36.1049C17.8428 36.1049 18.1928 35.923 18.4238 35.58H18.4378V36H19.5718V31.002ZM12.7095 34.1872C12.7095 33.7252 12.8775 33.1722 13.4305 33.1722C13.9835 33.1722 14.1585 33.7252 14.1585 34.1872C14.1585 34.6492 13.9835 35.1952 13.4305 35.1952C12.8775 35.1952 12.7095 34.6492 12.7095 34.1872ZM11.5195 34.1872C11.5195 35.2792 12.3035 36.1052 13.4305 36.1052C14.5575 36.1052 15.3485 35.2792 15.3485 34.1872C15.3485 33.0952 14.5575 32.2622 13.4305 32.2622C12.3035 32.2622 11.5195 33.0952 11.5195 34.1872ZM21.839 32.3671H22.574V33.1371H21.839V34.7891C21.839 35.0761 22.007 35.1391 22.266 35.1391C22.3142 35.1391 22.364 35.1357 22.4147 35.1323C22.4672 35.1287 22.5206 35.1251 22.574 35.1251V36.0001C22.481 36.0031 22.388 36.0099 22.295 36.0168C22.171 36.0259 22.047 36.0351 21.923 36.0351C20.908 36.0351 20.649 35.7411 20.649 34.7541V33.1371H20.047V32.3671H20.649V31.2681H21.839V32.3671Z",
12688
- fill: "white",
12689
- fillRule: "evenodd"
12690
- }
12691
- ),
12692
- /* @__PURE__ */ jsx(
12693
- "path",
12694
- {
12695
- d: "M0 28H34V37C34 38.6569 32.6569 40 31 40H3C1.34315 40 0 38.6569 0 37V28Z",
12696
- fill: "#9D27B0"
12697
- }
12698
- ),
12699
- /* @__PURE__ */ jsx("path", { d: "M0 3C0 1.34315 1.34315 0 3 0H23L34 11V28H0V3Z", fill: "#F5F5F5" }),
12700
- /* @__PURE__ */ jsx("path", { d: "M34 11L26 11C24.3431 11 23 9.65685 23 8V0L34 11Z", fill: "#DBDBDB" }),
12701
- /* @__PURE__ */ jsx(
12702
- "path",
12703
- {
12704
- d: "M9 17H25V24H9V17ZM27 14C27 12.8954 26.1046 12 25 12H22L24 15H21L19 12H17L19 15H16L14 12H12L14 15H11L9 12C7.9 12 7.01 12.9 7.01 14L7 24C7 25.1 7.9 26 9 26H25C26.1 26 27 25.1 27 24V14Z",
12705
- fill: "#9D27B0"
12706
- }
12707
- )
12708
- ]
12690
+ className,
12691
+ color: "#A847B7",
12692
+ fileTypeClassName: "str-chat__file-icon--video",
12693
+ label,
12694
+ symbols: VIDEO_SYMBOLS
12709
12695
  }
12710
12696
  );
12711
- const FileFallbackIcon = ({ className = "", ...props }) => /* @__PURE__ */ jsx(
12712
- Svg,
12697
+ const FileFallbackIcon = ({
12698
+ className = "",
12699
+ label = "",
12700
+ ...props
12701
+ }) => /* @__PURE__ */ jsx(
12702
+ StandardFileTypeIcon,
12713
12703
  {
12714
12704
  ...props,
12715
- className: clsx(
12716
- "str-chat__file-icon--other",
12717
- FILE_ICON_NO_LABEL_CLASSNAME,
12718
- className
12719
- ),
12720
- children: /* @__PURE__ */ jsxs("g", { className: FILE_ICON_GRAPHIC_CLASSNAME, children: [
12721
- /* @__PURE__ */ jsx(
12722
- "path",
12723
- {
12724
- d: "M0 4C0 1.79086 1.79086 0 4 0H22.4L32 10V36C32 38.2091 30.2091 40 28 40H4C1.79086 40 0 38.2091 0 36V4Z",
12725
- fill: "#888888"
12726
- }
12727
- ),
12728
- /* @__PURE__ */ jsx(
12729
- "path",
12730
- {
12731
- d: "M32 10H25.4C23.7431 10 22.4 8.65685 22.4 7V0L32 10Z",
12732
- fill: "white",
12733
- opacity: "0.5"
12734
- }
12735
- ),
12736
- /* @__PURE__ */ jsx("rect", { fill: "white", height: "1.6", rx: "0.8", width: "14.4", x: "8", y: "13.2" }),
12737
- /* @__PURE__ */ jsx("rect", { fill: "white", height: "1.6", rx: "0.8", width: "14.4", x: "8", y: "21.2" }),
12738
- /* @__PURE__ */ jsx("rect", { fill: "white", height: "1.6", rx: "0.8", width: "9.6", x: "8", y: "17.2" })
12739
- ] })
12705
+ className,
12706
+ color: "#888888",
12707
+ fileTypeClassName: "str-chat__file-icon--other",
12708
+ label,
12709
+ symbols: OTHER_SYMBOLS
12740
12710
  }
12741
12711
  );
12742
12712
  const wordMimeTypes = [
@@ -13141,7 +13111,6 @@ const FileIcon = (props) => {
13141
13111
  const {
13142
13112
  className,
13143
13113
  fileName,
13144
- hideLabel,
13145
13114
  mimeType,
13146
13115
  size = "md",
13147
13116
  sizeConfig: sizeConfigOverride,
@@ -13152,12 +13121,12 @@ const FileIcon = (props) => {
13152
13121
  [sizeConfigOverride]
13153
13122
  );
13154
13123
  const Icon = mimeTypeToIcon(mimeType);
13155
- const label = hideLabel ? void 0 : labelFromMimeType({ fileName, mimeType });
13124
+ const label = fileName ? labelFromMimeType({ fileName, mimeType }) : void 0;
13156
13125
  return /* @__PURE__ */ jsx(
13157
13126
  Icon,
13158
13127
  {
13159
13128
  ...rest,
13160
- className: clsx(className, hideLabel && FILE_ICON_NO_LABEL_CLASSNAME),
13129
+ className,
13161
13130
  label,
13162
13131
  size,
13163
13132
  sizeConfig
@@ -20639,6 +20608,79 @@ const DeleteMessageAlert = ({ onCancel, onDelete }) => {
20639
20608
  }
20640
20609
  );
20641
20610
  };
20611
+ const isDownloadableAttachment = (attachment) => {
20612
+ if (!attachment || typeof attachment !== "object") return false;
20613
+ const typedAttachment = attachment;
20614
+ return isFileAttachment(typedAttachment) || isImageAttachment(typedAttachment) || isVideoAttachment(typedAttachment) || isAudioAttachment(typedAttachment) || isVoiceRecordingAttachment(typedAttachment);
20615
+ };
20616
+ const triggerUrlDownload = ({
20617
+ filename,
20618
+ openInNewTab,
20619
+ revokeObjectUrl,
20620
+ url
20621
+ }) => {
20622
+ const anchor = document.createElement("a");
20623
+ anchor.download = filename;
20624
+ anchor.href = url;
20625
+ anchor.rel = "noopener noreferrer";
20626
+ if (openInNewTab && !url.startsWith("blob:")) {
20627
+ anchor.target = "_blank";
20628
+ }
20629
+ document.body.append(anchor);
20630
+ anchor.click();
20631
+ anchor.remove();
20632
+ const shouldRevokeObjectUrl = revokeObjectUrl ?? url.startsWith("blob:");
20633
+ if (shouldRevokeObjectUrl && url.startsWith("blob:")) {
20634
+ setTimeout(() => URL.revokeObjectURL(url), 0);
20635
+ }
20636
+ };
20637
+ const fetchRemoteAttachmentAsObjectUrl = async (url) => {
20638
+ if (typeof fetch !== "function") return null;
20639
+ const response = await fetch(url);
20640
+ if (!response.ok) {
20641
+ throw new Error(`Failed to fetch attachment, status ${response.status}`);
20642
+ }
20643
+ const blob = await response.blob();
20644
+ return URL.createObjectURL(blob);
20645
+ };
20646
+ const downloadAttachment = async (attachment, options = {}) => {
20647
+ const { openRemoteInNewTab = true, preferRemoteFetch = true } = options;
20648
+ const titleFallback = attachment.title ?? "downloaded-attachment";
20649
+ const rawFile = attachment.localMetadata?.file;
20650
+ if (rawFile instanceof Blob) {
20651
+ const filename2 = rawFile instanceof File && rawFile.name ? rawFile.name : titleFallback;
20652
+ triggerUrlDownload({
20653
+ filename: filename2,
20654
+ url: URL.createObjectURL(rawFile)
20655
+ });
20656
+ return;
20657
+ }
20658
+ const filename = rawFile && typeof rawFile === "object" && "name" in rawFile && typeof rawFile.name === "string" ? rawFile.name : titleFallback;
20659
+ const url = attachment.asset_url ?? attachment.image_url;
20660
+ if (!url) return;
20661
+ if (preferRemoteFetch) {
20662
+ try {
20663
+ const objectUrl = await fetchRemoteAttachmentAsObjectUrl(url);
20664
+ if (objectUrl) {
20665
+ triggerUrlDownload({
20666
+ filename,
20667
+ url: objectUrl
20668
+ });
20669
+ return;
20670
+ }
20671
+ } catch {
20672
+ }
20673
+ }
20674
+ triggerUrlDownload({ filename, openInNewTab: openRemoteInNewTab, url });
20675
+ };
20676
+ const downloadAllAttachments = async (attachments) => {
20677
+ for (const attachment of attachments) {
20678
+ await downloadAttachment(attachment, {
20679
+ openRemoteInNewTab: true,
20680
+ preferRemoteFetch: true
20681
+ });
20682
+ }
20683
+ };
20642
20684
  const msgActionsBoxButtonClassName = "str-chat__message-actions-list-item-button";
20643
20685
  const getErrorMessage = (error, fallback) => error instanceof Error && error.message ? error.message : fallback;
20644
20686
  const getNotificationError = (error) => {
@@ -20752,6 +20794,82 @@ const DefaultMessageActionComponents = {
20752
20794
  }
20753
20795
  );
20754
20796
  },
20797
+ Download() {
20798
+ const { closeMenu, openSubmenu } = useContextMenuContext();
20799
+ const { message } = useMessageContext();
20800
+ const { t } = useTranslationContext();
20801
+ const downloadableAttachments = (message.attachments ?? []).filter(
20802
+ isDownloadableAttachment
20803
+ );
20804
+ if (!downloadableAttachments.length) return null;
20805
+ const DownloadSubmenuHeader = () => {
20806
+ const { returnToParentMenu: goBack } = useContextMenuContext();
20807
+ const { t: translate } = useTranslationContext();
20808
+ return /* @__PURE__ */ jsx(ContextMenuHeader, { children: /* @__PURE__ */ jsxs(ContextMenuBackButton, { onClick: goBack, children: [
20809
+ /* @__PURE__ */ jsx(IconChevronLeft, {}),
20810
+ /* @__PURE__ */ jsx("span", { children: translate("Download Attachment") })
20811
+ ] }) });
20812
+ };
20813
+ const DownloadSubmenu = () => /* @__PURE__ */ jsxs(
20814
+ "div",
20815
+ {
20816
+ "aria-label": t("aria/Download attachment"),
20817
+ className: "str-chat__message-actions-box__submenu str-chat__message-actions-box__submenu--download-attachments",
20818
+ role: "listbox",
20819
+ children: [
20820
+ downloadableAttachments.map((attachment, index) => {
20821
+ const fileName = attachment.localMetadata?.file?.name ?? attachment.title ?? t("Download Attachment");
20822
+ return /* @__PURE__ */ jsx(
20823
+ ContextMenuButton,
20824
+ {
20825
+ className: msgActionsBoxButtonClassName,
20826
+ Icon: IconDownload,
20827
+ onClick: () => {
20828
+ void downloadAttachment(attachment);
20829
+ closeMenu();
20830
+ },
20831
+ children: `Download ${fileName}`
20832
+ },
20833
+ attachment.localMetadata?.id ?? attachment.asset_url ?? attachment.image_url ?? `${fileName}-${index}`
20834
+ );
20835
+ }),
20836
+ /* @__PURE__ */ jsx(
20837
+ ContextMenuButton,
20838
+ {
20839
+ className: msgActionsBoxButtonClassName,
20840
+ Icon: IconDownload,
20841
+ onClick: () => {
20842
+ void downloadAllAttachments(downloadableAttachments);
20843
+ closeMenu();
20844
+ },
20845
+ children: t("Download All")
20846
+ }
20847
+ )
20848
+ ]
20849
+ }
20850
+ );
20851
+ return /* @__PURE__ */ jsx(
20852
+ ContextMenuButton,
20853
+ {
20854
+ "aria-label": t("aria/Download attachment"),
20855
+ className: msgActionsBoxButtonClassName,
20856
+ hasSubMenu: downloadableAttachments.length > 1,
20857
+ Icon: IconDownload,
20858
+ onClick: () => {
20859
+ if (downloadableAttachments.length > 1) {
20860
+ openSubmenu({
20861
+ Header: DownloadSubmenuHeader,
20862
+ Submenu: DownloadSubmenu
20863
+ });
20864
+ return;
20865
+ }
20866
+ void downloadAttachment(downloadableAttachments[0]);
20867
+ closeMenu();
20868
+ },
20869
+ children: t("Download Attachment")
20870
+ }
20871
+ );
20872
+ },
20755
20873
  Pin() {
20756
20874
  const { closeMenu } = useContextMenuContext();
20757
20875
  const { handlePin, message } = useMessageContext();
@@ -21276,6 +21394,11 @@ const defaultMessageActionSet = [
21276
21394
  placement: "dropdown",
21277
21395
  type: "quote"
21278
21396
  },
21397
+ {
21398
+ Component: DefaultMessageActionComponents.dropdown.Download,
21399
+ placement: "dropdown",
21400
+ type: "download"
21401
+ },
21279
21402
  {
21280
21403
  Component: DefaultMessageActionComponents.dropdown.Pin,
21281
21404
  placement: "dropdown",
@@ -21396,6 +21519,7 @@ const MessageActions = ({
21396
21519
  /* @__PURE__ */ jsx(
21397
21520
  ContextMenuComponent,
21398
21521
  {
21522
+ allowFlip: false,
21399
21523
  backLabel: t("Back"),
21400
21524
  className: clsx("str-chat__message-actions-box", {
21401
21525
  "str-chat__message-actions-box--hidden": dropdownReactionSelectorDialogIsOpen,
@@ -27209,17 +27333,7 @@ const AudioAttachmentUI = ({ audioPlayer }) => {
27209
27333
  return /* @__PURE__ */ jsxs("div", { className: rootClassName2, "data-testid": dataTestId, children: [
27210
27334
  /* @__PURE__ */ jsx("div", { className: "str-chat__message-attachment-audio-widget--play-controls", children: /* @__PURE__ */ jsx(PlayButton, { isPlaying: !!isPlaying, onClick: audioPlayer.togglePlay }) }),
27211
27335
  /* @__PURE__ */ jsxs("div", { className: "str-chat__message-attachment-audio-widget--data", children: [
27212
- /* @__PURE__ */ jsxs("div", { className: "str-chat__message-attachment-audio-widget--text-first-row", children: [
27213
- /* @__PURE__ */ jsx("div", { className: "str-chat__message-attachment-audio-widget--title", children: audioPlayer.title }),
27214
- /* @__PURE__ */ jsx(
27215
- FileIcon,
27216
- {
27217
- className: "str-chat__file-icon",
27218
- mimeType: audioPlayer.mimeType,
27219
- size: "sm"
27220
- }
27221
- )
27222
- ] }),
27336
+ /* @__PURE__ */ jsx("div", { className: "str-chat__message-attachment-audio-widget--text-first-row", children: /* @__PURE__ */ jsx("div", { className: "str-chat__message-attachment-audio-widget--title", children: audioPlayer.title }) }),
27223
27337
  /* @__PURE__ */ jsx("div", { className: "str-chat__message-attachment-audio-widget--text-second-row", children: durationSeconds ? /* @__PURE__ */ jsxs(Fragment, { children: [
27224
27338
  /* @__PURE__ */ jsx(
27225
27339
  DurationDisplay,
@@ -27234,7 +27348,9 @@ const AudioAttachmentUI = ({ audioPlayer }) => {
27234
27348
  /* @__PURE__ */ jsx(FileSizeIndicator$1, { fileSize: audioPlayer.fileSize }),
27235
27349
  /* @__PURE__ */ jsx(ProgressBar, { progress: progress ?? 0, seek: audioPlayer.seek })
27236
27350
  ] }) })
27237
- ] })
27351
+ ] }),
27352
+ /* @__PURE__ */ jsx(FileIcon, { className: "str-chat__file-icon", mimeType: audioPlayer.mimeType }),
27353
+ /* @__PURE__ */ jsx(DownloadButton, { assetUrl: audioPlayer.src, suggestedFileName: audioPlayer.title })
27238
27354
  ] });
27239
27355
  };
27240
27356
  const audioPlayerStateSelector$1 = (state) => ({
@@ -27622,6 +27738,23 @@ const ImageComponent = (galleryItem) => {
27622
27738
  const { ModalGallery: ModalGallery$1 = ModalGallery } = useComponentContext();
27623
27739
  return /* @__PURE__ */ jsx(ModalGallery$1, { items: [galleryItem], modalClassName: "str-chat__image-modal" });
27624
27740
  };
27741
+ const UnMemoizedSafeAnchor = (props) => {
27742
+ const { children, className, download, href, rel, target } = props;
27743
+ if (!href) return null;
27744
+ const sanitized = sanitizeUrl(href);
27745
+ return /* @__PURE__ */ jsx(
27746
+ "a",
27747
+ {
27748
+ className,
27749
+ download,
27750
+ href: sanitized,
27751
+ rel,
27752
+ target,
27753
+ children
27754
+ }
27755
+ );
27756
+ };
27757
+ const SafeAnchor = React.memo(UnMemoizedSafeAnchor);
27625
27758
  const UnableToRenderCard = ({ type }) => {
27626
27759
  const { t } = useTranslationContext("Card");
27627
27760
  return /* @__PURE__ */ jsx(
@@ -27736,7 +27869,14 @@ const FileAttachment = ({ attachment }) => {
27736
27869
  }
27737
27870
  ) }),
27738
27871
  /* @__PURE__ */ jsx("div", { className: "str-chat__message-attachment-file--item__data", children: /* @__PURE__ */ jsx(FileSizeIndicator$1, { fileSize: attachment.file_size }) })
27739
- ] })
27872
+ ] }),
27873
+ /* @__PURE__ */ jsx(
27874
+ DownloadButton,
27875
+ {
27876
+ assetUrl: attachment.asset_url,
27877
+ suggestedFileName: attachment.title
27878
+ }
27879
+ )
27740
27880
  ]
27741
27881
  }
27742
27882
  );
@@ -27791,6 +27931,7 @@ const GiphyBadge = () => /* @__PURE__ */ jsxs("div", { className: "str-chat__gip
27791
27931
  /* @__PURE__ */ jsx(IconGiphy, {}),
27792
27932
  "Giphy"
27793
27933
  ] });
27934
+ const ExternalLinkIcon = () => /* @__PURE__ */ jsx("svg", { fill: "currentColor", viewBox: "0 0 16 16", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ jsx("path", { d: "M12.586 2H10a1 1 0 1 1 0-2h5a1 1 0 0 1 1 1v5a1 1 0 1 1-2 0V3.414l-6.793 6.793a1 1 0 0 1-1.414-1.414L12.586 2zM6 1a1 1 0 1 1 0 2H3a1 1 0 0 0-1 1v9a1 1 0 0 0 1 1h8.967a1 1 0 0 0 1-.99L13 9.99a1 1 0 1 1 2 .02l-.033 3.023a3 3 0 0 1-3 2.967H3a3 3 0 0 1-3-3V4a3 3 0 0 1 3-3h3z" }) });
27794
27935
  const Geolocation = ({
27795
27936
  GeolocationAttachmentMapPlaceholder = DefaultGeolocationAttachmentMapPlaceholder,
27796
27937
  GeolocationMap,
@@ -28370,7 +28511,7 @@ const useChat = ({
28370
28511
  };
28371
28512
  useEffect(() => {
28372
28513
  if (!client) return;
28373
- const version = "14.0.0-beta.8";
28514
+ const version = "14.0.0";
28374
28515
  const userAgent = client.getUserAgent();
28375
28516
  if (!userAgent.includes("stream-chat-react")) {
28376
28517
  client.setUserAgent(`stream-chat-react-${version}-${userAgent}`);
@@ -28644,7 +28785,7 @@ export {
28644
28785
  AttachmentWithinContainer,
28645
28786
  Audio,
28646
28787
  AudioContainer,
28647
- by as AudioPlayer,
28788
+ bz as AudioPlayer,
28648
28789
  AudioRecorder,
28649
28790
  Avatar,
28650
28791
  AvatarStack,
@@ -28656,13 +28797,13 @@ export {
28656
28797
  Callout,
28657
28798
  Card,
28658
28799
  CardContainer,
28659
- bB as Channel,
28660
- c3 as ChannelActionContext,
28661
- c4 as ChannelActionProvider,
28800
+ bC as Channel,
28801
+ c4 as ChannelActionContext,
28802
+ c5 as ChannelActionProvider,
28662
28803
  ChannelAvatar,
28663
28804
  ChannelHeader,
28664
28805
  ChannelList,
28665
- c5 as ChannelListContext,
28806
+ c6 as ChannelListContext,
28666
28807
  ChannelListContextProvider,
28667
28808
  ChannelListItem,
28668
28809
  ChannelListItemActionButtons,
@@ -28670,23 +28811,23 @@ export {
28670
28811
  ChannelListItemUI,
28671
28812
  ChannelListUI,
28672
28813
  ChannelSearchResultItem,
28673
- c6 as ChannelStateContext,
28674
- c7 as ChannelStateProvider,
28814
+ c7 as ChannelStateContext,
28815
+ c8 as ChannelStateProvider,
28675
28816
  Chat,
28676
- c8 as ChatContext,
28817
+ c9 as ChatContext,
28677
28818
  ChatProvider,
28678
- bD as ChatView,
28679
- bG as ChatViewChannelsSelectorButton,
28680
- bC as ChatViewContext,
28681
- bF as ChatViewSelectorButton,
28682
- bH as ChatViewThreadsSelectorButton,
28819
+ bE as ChatView,
28820
+ bH as ChatViewChannelsSelectorButton,
28821
+ bD as ChatViewContext,
28822
+ bG as ChatViewSelectorButton,
28823
+ bI as ChatViewThreadsSelectorButton,
28683
28824
  CheckSignIcon,
28684
28825
  Checkmark,
28685
28826
  CircularProgressIndicator,
28686
28827
  CommandChip,
28687
28828
  CommandItem,
28688
28829
  ComponentContext,
28689
- c9 as ComponentProvider,
28830
+ ca as ComponentProvider,
28690
28831
  ContextMenu,
28691
28832
  ContextMenuBackButton,
28692
28833
  ContextMenuBody,
@@ -28756,6 +28897,7 @@ export {
28756
28897
  IconCommand,
28757
28898
  IconCopy,
28758
28899
  IconDelete,
28900
+ IconDownload,
28759
28901
  IconEdit,
28760
28902
  IconEmoji,
28761
28903
  IconEmojiAdd,
@@ -28772,8 +28914,8 @@ export {
28772
28914
  IconLink,
28773
28915
  IconLoading,
28774
28916
  IconLocation,
28775
- bK as IconMessageBubble,
28776
- bL as IconMessageBubbleFill,
28917
+ bL as IconMessageBubble,
28918
+ bM as IconMessageBubbleFill,
28777
28919
  IconMessageBubbles,
28778
28920
  IconMicrophoneSolid,
28779
28921
  IconMinus,
@@ -28796,7 +28938,7 @@ export {
28796
28938
  IconSearch,
28797
28939
  IconSend,
28798
28940
  IconThread,
28799
- bM as IconThreadFill,
28941
+ bN as IconThreadFill,
28800
28942
  IconTranslate,
28801
28943
  IconTrophy,
28802
28944
  IconUnpin,
@@ -28820,9 +28962,9 @@ export {
28820
28962
  LinkPreviewList,
28821
28963
  LoadMoreButton,
28822
28964
  LoadMorePaginator,
28823
- bN as LoadingChannel,
28965
+ bO as LoadingChannel,
28824
28966
  LoadingChannels,
28825
- bO as LoadingErrorIndicator,
28967
+ bP as LoadingErrorIndicator,
28826
28968
  LoadingIndicator,
28827
28969
  MAX_MESSAGE_REACTIONS_TO_FETCH,
28828
28970
  MESSAGE_ACTIONS,
@@ -28836,7 +28978,7 @@ export {
28836
28978
  MessageBouncePrompt,
28837
28979
  MessageBounceProvider,
28838
28980
  MessageComposer,
28839
- ca as MessageComposerContext,
28981
+ cb as MessageComposerContext,
28840
28982
  MessageComposerContextProvider,
28841
28983
  MessageComposerUI,
28842
28984
  MessageContext,
@@ -28868,7 +29010,7 @@ export {
28868
29010
  NotificationList,
28869
29011
  NotificationTranslationTopic,
28870
29012
  NumericInput,
28871
- bQ as OPTIONAL_MESSAGE_ACTIONS,
29013
+ bR as OPTIONAL_MESSAGE_ACTIONS,
28872
29014
  OtherFilesContainer,
28873
29015
  PauseIcon,
28874
29016
  PinIndicator,
@@ -28904,7 +29046,7 @@ export {
28904
29046
  ReminderNotification,
28905
29047
  Root,
28906
29048
  SUPPORTED_VIDEO_FORMATS$1 as SUPPORTED_VIDEO_FORMATS,
28907
- bW as SYSTEM_NOTIFICATION_TAG,
29049
+ bX as SYSTEM_NOTIFICATION_TAG,
28908
29050
  SafeAnchor,
28909
29051
  ScrollToLatestMessageButton,
28910
29052
  Search,
@@ -28939,22 +29081,22 @@ export {
28939
29081
  TextInputFieldSet,
28940
29082
  TextareaComposer,
28941
29083
  Thread,
28942
- c1 as ThreadContext,
29084
+ c2 as ThreadContext,
28943
29085
  ThreadHeader,
28944
29086
  ThreadList,
28945
29087
  ThreadListItem,
28946
29088
  ThreadListItemUI,
28947
- c2 as ThreadProvider,
29089
+ c3 as ThreadProvider,
28948
29090
  ThreadStart,
28949
29091
  Tooltip,
28950
29092
  TranslationBuilder,
28951
- cb as TranslationContext,
29093
+ cc as TranslationContext,
28952
29094
  TranslationProvider,
28953
29095
  TranslationTopic,
28954
- cc as TypingContext,
29096
+ cd as TypingContext,
28955
29097
  TypingIndicator,
28956
29098
  TypingIndicatorHeader,
28957
- cd as TypingProvider,
29099
+ ce as TypingProvider,
28958
29100
  UNREAD_MESSAGE_SEPARATOR_CLASS,
28959
29101
  UnMemoizedLoadMorePaginator,
28960
29102
  UnreadMessagesNotification,
@@ -28975,30 +29117,30 @@ export {
28975
29117
  VoiceRecordingPlayer,
28976
29118
  WaveProgressBar,
28977
29119
  Window,
28978
- bv as WithAudioPlayback,
29120
+ bw as WithAudioPlayback,
28979
29121
  WithComponents,
28980
29122
  WithDragAndDropUpload,
28981
- b$ as addNotificationTargetTag,
29123
+ c0 as addNotificationTargetTag,
28982
29124
  areMessagePropsEqual,
28983
29125
  areMessageUIPropsEqual,
28984
29126
  countEmojis,
28985
- bJ as createIcon,
29127
+ bK as createIcon,
28986
29128
  deTranslations,
28987
29129
  defaultAllowedTagNames,
28988
29130
  defaultAttachmentActionsDefaultFocus,
28989
29131
  defaultAttachmentSelectorActionSet,
28990
- bI as defaultChatViewSelectorItemSet,
29132
+ bJ as defaultChatViewSelectorItemSet,
28991
29133
  defaultComponents$1 as defaultComponents,
28992
29134
  defaultDateTimeParser,
28993
29135
  defaultMessageActionSet,
28994
29136
  defaultReactionOptions,
28995
- bw as defaultRegisterAudioPlayerError,
29137
+ bx as defaultRegisterAudioPlayerError,
28996
29138
  defaultRenderMessages,
28997
29139
  defaultTranslatorFunction,
28998
29140
  displayDuration,
28999
29141
  divMod,
29000
29142
  downSample,
29001
- bx as elementIsPlaying,
29143
+ by as elementIsPlaying,
29002
29144
  emojiMarkdownPlugin,
29003
29145
  emojiToUnicode,
29004
29146
  enTranslations,
@@ -29012,21 +29154,21 @@ export {
29012
29154
  getCssDimensionsVariables,
29013
29155
  getGroupChannelDisplayInfo,
29014
29156
  getGroupStyles,
29015
- bR as getImages,
29157
+ bS as getImages,
29016
29158
  getIsFirstUnreadMessage,
29017
29159
  getLastReceived,
29018
29160
  getLatestMessagePreview,
29019
29161
  getMessageActions,
29020
- bS as getNonImageAttachments,
29021
- bY as getNotificationTargetPanel,
29022
- bZ as getNotificationTargetPanels,
29023
- b_ as getNotificationTargetTag,
29162
+ bT as getNonImageAttachments,
29163
+ bZ as getNotificationTargetPanel,
29164
+ b_ as getNotificationTargetPanels,
29165
+ b$ as getNotificationTargetTag,
29024
29166
  getReadByTooltipText,
29025
29167
  getTextareaCaretRect,
29026
29168
  getTranslatedMessageText,
29027
29169
  getWholeChar,
29028
29170
  handleActionWarning,
29029
- bV as hasMoreMessagesProbably,
29171
+ bW as hasMoreMessagesProbably,
29030
29172
  hasSystemNotificationTag,
29031
29173
  hiTranslations,
29032
29174
  htmlToTextPlugin,
@@ -29037,7 +29179,7 @@ export {
29037
29179
  isChrome,
29038
29180
  isDate,
29039
29181
  isDateSeparatorMessage,
29040
- ce as isDayOrMoment,
29182
+ cf as isDayOrMoment,
29041
29183
  isFirefox,
29042
29184
  isGalleryAttachmentType,
29043
29185
  isIntroMessage,
@@ -29050,8 +29192,8 @@ export {
29050
29192
  isMessageErrorRetryable,
29051
29193
  isNetworkSendFailure,
29052
29194
  isNotificationForPanel,
29053
- bX as isNotificationTargetPanel,
29054
- cf as isNumberOrString,
29195
+ bY as isNotificationTargetPanel,
29196
+ cg as isNumberOrString,
29055
29197
  isSafari,
29056
29198
  isSvgAttachment,
29057
29199
  isUserMuted,
@@ -29059,8 +29201,8 @@ export {
29059
29201
  jaTranslations,
29060
29202
  keepLineBreaksPlugin,
29061
29203
  koTranslations,
29062
- bU as makeDateMessageId,
29063
- bT as makeIntroMessage,
29204
+ bV as makeDateMessageId,
29205
+ bU as makeIntroMessage,
29064
29206
  mapEmojiMartData,
29065
29207
  mapToUserNameOrId,
29066
29208
  markDownRenderers,
@@ -29097,8 +29239,8 @@ export {
29097
29239
  upSample,
29098
29240
  useAIState,
29099
29241
  useActionHandler,
29100
- bu as useActiveAudioPlayer,
29101
- bE as useActiveThread,
29242
+ bv as useActiveAudioPlayer,
29243
+ bF as useActiveThread,
29102
29244
  useAttachmentManagerState,
29103
29245
  useAttachmentsForPreview,
29104
29246
  useAudioPlayer,
@@ -29106,12 +29248,12 @@ export {
29106
29248
  useCanCreatePoll,
29107
29249
  useChannelActionContext,
29108
29250
  useChannelDisplayName,
29109
- bz as useChannelEditMessageHandler,
29251
+ bA as useChannelEditMessageHandler,
29110
29252
  useChannelListContext,
29111
29253
  useChannelListItemContext,
29112
29254
  useChannelMembersState,
29113
29255
  useChannelMembershipState,
29114
- bA as useChannelMentionsHandler,
29256
+ bB as useChannelMentionsHandler,
29115
29257
  useChannelPreviewInfo,
29116
29258
  useChannelStateContext,
29117
29259
  useChat,
@@ -29133,7 +29275,7 @@ export {
29133
29275
  useFlagHandler,
29134
29276
  useGalleryContext,
29135
29277
  useLastReadData,
29136
- c0 as useLegacyThreadContext,
29278
+ c1 as useLegacyThreadContext,
29137
29279
  useLiveLocationSharingManager,
29138
29280
  useMarkUnreadHandler,
29139
29281
  useMentionsHandler,
@@ -29186,6 +29328,6 @@ export {
29186
29328
  useTypingContext,
29187
29329
  useUserHandler,
29188
29330
  useUserRole,
29189
- bP as validateAndGetMessage
29331
+ bQ as validateAndGetMessage
29190
29332
  };
29191
29333
  //# sourceMappingURL=index.mjs.map