stream-chat-react 13.8.1 → 13.10.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 (104) hide show
  1. package/dist/components/Channel/Channel.d.ts +2 -2
  2. package/dist/components/Channel/Channel.js +3 -3
  3. package/dist/components/Channel/hooks/useCreateChannelStateContext.js +3 -1
  4. package/dist/components/ChannelPreview/hooks/useMessageDeliveryStatus.d.ts +1 -0
  5. package/dist/components/ChannelPreview/hooks/useMessageDeliveryStatus.js +31 -14
  6. package/dist/components/Chat/hooks/useChat.js +1 -1
  7. package/dist/components/Dialog/ButtonWithSubmenu.d.ts +2 -2
  8. package/dist/components/Dialog/ButtonWithSubmenu.js +6 -6
  9. package/dist/components/Dialog/DialogAnchor.d.ts +5 -11
  10. package/dist/components/Dialog/DialogAnchor.js +22 -26
  11. package/dist/components/Dialog/DialogPortal.d.ts +2 -1
  12. package/dist/components/Dialog/DialogPortal.js +23 -7
  13. package/dist/components/Dialog/hooks/index.d.ts +1 -0
  14. package/dist/components/Dialog/hooks/useDialog.d.ts +4 -0
  15. package/dist/components/Dialog/hooks/useDialog.js +9 -1
  16. package/dist/components/Dialog/hooks/usePopoverPosition.d.ts +68 -0
  17. package/dist/components/Dialog/hooks/usePopoverPosition.js +54 -0
  18. package/dist/components/Form/Dropdown.d.ts +2 -2
  19. package/dist/components/Message/Message.js +1 -1
  20. package/dist/components/Message/MessageRepliesCountButton.js +3 -1
  21. package/dist/components/Message/MessageStatus.d.ts +1 -0
  22. package/dist/components/Message/MessageStatus.js +22 -12
  23. package/dist/components/Message/hooks/useDeleteHandler.js +2 -2
  24. package/dist/components/Message/icons.d.ts +1 -0
  25. package/dist/components/Message/icons.js +6 -2
  26. package/dist/components/Message/renderText/remarkPlugins/index.d.ts +1 -0
  27. package/dist/components/Message/renderText/remarkPlugins/index.js +1 -0
  28. package/dist/components/Message/renderText/remarkPlugins/keepLineBreaksPlugin.d.ts +10 -2
  29. package/dist/components/Message/renderText/remarkPlugins/keepLineBreaksPlugin.js +46 -26
  30. package/dist/components/Message/renderText/remarkPlugins/remarkIgnoreMarkdown.d.ts +8 -0
  31. package/dist/components/Message/renderText/remarkPlugins/remarkIgnoreMarkdown.js +11 -0
  32. package/dist/components/Message/types.d.ts +2 -0
  33. package/dist/components/Message/utils.d.ts +4 -1
  34. package/dist/components/Message/utils.js +9 -0
  35. package/dist/components/MessageActions/MessageActions.js +4 -4
  36. package/dist/components/MessageActions/MessageActionsBox.js +3 -1
  37. package/dist/components/MessageInput/AttachmentSelector.d.ts +1 -1
  38. package/dist/components/MessageInput/AttachmentSelector.js +9 -4
  39. package/dist/components/MessageList/MessageList.js +2 -2
  40. package/dist/components/MessageList/VirtualizedMessageList.d.ts +2 -0
  41. package/dist/components/MessageList/VirtualizedMessageList.js +10 -4
  42. package/dist/components/MessageList/VirtualizedMessageListComponents.js +2 -2
  43. package/dist/components/MessageList/hooks/MessageList/useMessageListElements.d.ts +2 -2
  44. package/dist/components/MessageList/hooks/MessageList/useMessageListElements.js +13 -5
  45. package/dist/components/MessageList/hooks/useLastDeliveredData.d.ts +8 -0
  46. package/dist/components/MessageList/hooks/useLastDeliveredData.js +16 -0
  47. package/dist/components/MessageList/hooks/useLastReadData.d.ts +3 -8
  48. package/dist/components/MessageList/hooks/useLastReadData.js +10 -7
  49. package/dist/components/MessageList/renderMessages.d.ts +5 -4
  50. package/dist/components/MessageList/renderMessages.js +2 -2
  51. package/dist/components/MessageList/utils.d.ts +1 -5
  52. package/dist/components/MessageList/utils.js +0 -30
  53. package/dist/components/Modal/GlobalModal.js +2 -2
  54. package/dist/components/Reactions/ReactionSelectorWithButton.js +4 -4
  55. package/dist/components/Tooltip/Tooltip.d.ts +2 -2
  56. package/dist/components/Tooltip/Tooltip.js +11 -12
  57. package/dist/context/ChannelActionContext.d.ts +2 -2
  58. package/dist/context/DialogManagerContext.d.ts +1 -0
  59. package/dist/context/DialogManagerContext.js +1 -0
  60. package/dist/context/MessageContext.d.ts +5 -3
  61. package/dist/css/v2/index.css +1 -1
  62. package/dist/css/v2/index.layout.css +1 -1
  63. package/dist/experimental/MessageActions/MessageActions.js +5 -5
  64. package/dist/experimental/index.browser.cjs +324 -249
  65. package/dist/experimental/index.browser.cjs.map +4 -4
  66. package/dist/experimental/index.node.cjs +324 -249
  67. package/dist/experimental/index.node.cjs.map +4 -4
  68. package/dist/i18n/Streami18n.d.ts +2 -0
  69. package/dist/i18n/de.json +2 -0
  70. package/dist/i18n/en.json +2 -0
  71. package/dist/i18n/es.json +2 -0
  72. package/dist/i18n/fr.json +2 -0
  73. package/dist/i18n/hi.json +2 -0
  74. package/dist/i18n/it.json +2 -0
  75. package/dist/i18n/ja.json +2 -0
  76. package/dist/i18n/ko.json +2 -0
  77. package/dist/i18n/nl.json +2 -0
  78. package/dist/i18n/pt.json +2 -0
  79. package/dist/i18n/ru.json +2 -0
  80. package/dist/i18n/tr.json +2 -0
  81. package/dist/index.browser.cjs +1587 -1380
  82. package/dist/index.browser.cjs.map +4 -4
  83. package/dist/index.node.cjs +1592 -1381
  84. package/dist/index.node.cjs.map +4 -4
  85. package/dist/plugins/Emojis/EmojiPicker.d.ts +9 -4
  86. package/dist/plugins/Emojis/EmojiPicker.js +10 -5
  87. package/dist/plugins/Emojis/index.browser.cjs +89 -29
  88. package/dist/plugins/Emojis/index.browser.cjs.map +4 -4
  89. package/dist/plugins/Emojis/index.node.cjs +89 -29
  90. package/dist/plugins/Emojis/index.node.cjs.map +4 -4
  91. package/dist/scss/v2/Dialog/Dialog-layout.scss +12 -3
  92. package/dist/scss/v2/Icon/Icon-layout.scss +6 -0
  93. package/dist/scss/v2/Icon/Icon-theme.scss +4 -0
  94. package/dist/scss/v2/Message/Message-layout.scss +34 -3
  95. package/dist/scss/v2/Message/Message-theme.scss +9 -0
  96. package/dist/scss/v2/MessageActionsBox/MessageActionsBox-layout.scss +1 -0
  97. package/dist/scss/v2/MessageInput/MessageInput-layout.scss +8 -0
  98. package/dist/scss/v2/MessageInput/MessageInput-theme.scss +2 -1
  99. package/dist/scss/v2/Poll/Poll-layout.scss +29 -7
  100. package/package.json +7 -8
  101. package/dist/components/MessageActions/hooks/index.d.ts +0 -1
  102. package/dist/components/MessageActions/hooks/index.js +0 -1
  103. package/dist/components/MessageActions/hooks/useMessageActionsBoxPopper.d.ts +0 -18
  104. package/dist/components/MessageActions/hooks/useMessageActionsBoxPopper.js +0 -31
@@ -327,7 +327,7 @@ module.exports = __toCommonJS(experimental_exports);
327
327
 
328
328
  // src/experimental/MessageActions/MessageActions.tsx
329
329
  var import_clsx9 = __toESM(require("clsx"));
330
- var import_react42 = __toESM(require("react"));
330
+ var import_react43 = __toESM(require("react"));
331
331
 
332
332
  // src/context/ChannelListContext.tsx
333
333
  var import_react = __toESM(require("react"));
@@ -438,6 +438,14 @@ var useDialog = ({ dialogManagerId, id }) => {
438
438
  );
439
439
  return dialogManager.getOrCreate({ id });
440
440
  };
441
+ var useDialogOnNearestManager = ({ id }) => {
442
+ const { dialogManager } = useNearestDialogManagerContext() ?? {};
443
+ const dialog = useDialog({ dialogManagerId: dialogManager?.id, id });
444
+ return {
445
+ dialog,
446
+ dialogManager
447
+ };
448
+ };
441
449
  var useDialogIsOpen = (id, dialogManagerId) => {
442
450
  const { dialogManager } = useDialogManager({ dialogManagerId });
443
451
  const dialogIsOpenSelector = (0, import_react6.useCallback)(
@@ -468,10 +476,11 @@ var Portal = ({
468
476
  // src/components/Dialog/DialogPortal.tsx
469
477
  var DialogPortalEntry = ({
470
478
  children,
471
- dialogId
479
+ dialogId,
480
+ dialogManagerId
472
481
  }) => {
473
- const { dialogManager } = useDialogManager({ dialogId });
474
- const dialogIsOpen = useDialogIsOpen(dialogId, dialogManager.id);
482
+ const { dialogManager } = useDialogManager({ dialogId, dialogManagerId });
483
+ const dialogIsOpen = useDialogIsOpen(dialogId, dialogManagerId);
475
484
  const getPortalDestination = (0, import_react8.useCallback)(
476
485
  () => document.querySelector(`div[data-str-chat__portal-id="${dialogManager.id}"]`),
477
486
  [dialogManager.id]
@@ -558,6 +567,7 @@ var useDialogManager = ({
558
567
  }
559
568
  return dialogManagerContext;
560
569
  };
570
+ var useNearestDialogManagerContext = () => (0, import_react9.useContext)(DialogManagerProviderContext);
561
571
 
562
572
  // src/context/MessageContext.tsx
563
573
  var import_react10 = __toESM(require("react"));
@@ -603,7 +613,7 @@ var useTranslationContext = (componentName) => {
603
613
  };
604
614
 
605
615
  // src/components/MessageInput/hooks/useMessageComposer.ts
606
- var import_react37 = require("react");
616
+ var import_react38 = require("react");
607
617
  var import_stream_chat2 = require("stream-chat");
608
618
 
609
619
  // src/components/Threads/ThreadContext.tsx
@@ -773,7 +783,7 @@ var Avatar = (props) => {
773
783
 
774
784
  // src/components/ChannelPreview/ChannelPreview.tsx
775
785
  var import_lodash2 = __toESM(require("lodash.throttle"));
776
- var import_react35 = __toESM(require("react"));
786
+ var import_react36 = __toESM(require("react"));
777
787
 
778
788
  // src/components/ChannelPreview/ChannelPreviewMessenger.tsx
779
789
  var import_react18 = __toESM(require("react"));
@@ -982,10 +992,10 @@ var useIsChannelMuted = (channel) => {
982
992
  };
983
993
 
984
994
  // src/components/ChannelPreview/hooks/useChannelPreviewInfo.ts
985
- var import_react33 = require("react");
995
+ var import_react34 = require("react");
986
996
 
987
997
  // src/components/ChannelPreview/utils.tsx
988
- var import_react32 = __toESM(require("react"));
998
+ var import_react33 = __toESM(require("react"));
989
999
 
990
1000
  // node_modules/devlop/lib/default.js
991
1001
  function ok() {
@@ -10643,57 +10653,111 @@ var useMessageReminder = (messageId) => {
10643
10653
 
10644
10654
  // src/components/Dialog/ButtonWithSubmenu.tsx
10645
10655
  var import_clsx5 = __toESM(require("clsx"));
10646
- var import_react22 = __toESM(require("react"));
10656
+ var import_react23 = __toESM(require("react"));
10647
10657
 
10648
10658
  // src/components/Dialog/DialogAnchor.tsx
10649
10659
  var import_clsx4 = __toESM(require("clsx"));
10650
- var import_react21 = __toESM(require("react"));
10660
+ var import_react22 = __toESM(require("react"));
10651
10661
  var import_focus = require("@react-aria/focus");
10652
- var import_react_popper = require("react-popper");
10662
+
10663
+ // src/components/Dialog/hooks/usePopoverPosition.ts
10664
+ var import_react21 = require("@floating-ui/react");
10665
+ var hasResizeObserver = typeof window !== "undefined" && "ResizeObserver" in window;
10666
+ function autoMiddlewareFor(p) {
10667
+ if (!String(p).startsWith("auto")) return null;
10668
+ const alignment = p === "auto-start" ? "start" : p === "auto-end" ? "end" : void 0;
10669
+ return (0, import_react21.autoPlacement)({ alignment });
10670
+ }
10671
+ function toOffsetMw(opt) {
10672
+ if (opt == null) return null;
10673
+ if (Array.isArray(opt)) {
10674
+ const [crossAxis, mainAxis] = opt;
10675
+ return (0, import_react21.offset)({ crossAxis, mainAxis });
10676
+ }
10677
+ if (typeof opt === "number") return (0, import_react21.offset)(opt);
10678
+ return (0, import_react21.offset)(opt);
10679
+ }
10680
+ function usePopoverPosition({
10681
+ allowFlip = true,
10682
+ allowShift = true,
10683
+ autoUpdateOptions,
10684
+ fitAvailableSpace = false,
10685
+ freeze = false,
10686
+ offset,
10687
+ placement = "bottom-start"
10688
+ }) {
10689
+ const autoMw = autoMiddlewareFor(placement);
10690
+ const offsetMiddleware = toOffsetMw(offset);
10691
+ const isSidePlacement = placement.startsWith("left") || placement.startsWith("right");
10692
+ const middleware = [
10693
+ // offset first (mirrors common Popper setups)
10694
+ ...offsetMiddleware ? [offsetMiddleware] : [],
10695
+ // choose between autoPlacement (Popper's "auto*") OR flip()
10696
+ // only allow flip when not explicitly 'left*' or 'right*'
10697
+ ...autoMw ? [autoMw] : allowFlip && !isSidePlacement ? [(0, import_react21.flip)()] : [],
10698
+ // viewport collision adjustments
10699
+ ...allowShift ? [(0, import_react21.shift)({ padding: 8 })] : [],
10700
+ // optional size constraining
10701
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
10702
+ ...fitAvailableSpace ? [(0, import_react21.size)({ apply: () => {
10703
+ } })] : []
10704
+ ];
10705
+ const seedPlacement = String(placement).startsWith("auto") ? "bottom" : placement;
10706
+ return (0, import_react21.useFloating)({
10707
+ middleware,
10708
+ placement: seedPlacement,
10709
+ strategy: "fixed",
10710
+ whileElementsMounted: freeze ? void 0 : (reference, floating, update) => (0, import_react21.autoUpdate)(reference, floating, update, {
10711
+ ancestorResize: true,
10712
+ ancestorScroll: true,
10713
+ animationFrame: false,
10714
+ elementResize: hasResizeObserver,
10715
+ ...autoUpdateOptions
10716
+ })
10717
+ });
10718
+ }
10719
+
10720
+ // src/components/Dialog/DialogAnchor.tsx
10653
10721
  function useDialogAnchor({
10654
10722
  allowFlip,
10655
10723
  open,
10656
10724
  placement,
10657
10725
  referenceElement
10658
10726
  }) {
10659
- const [popperElement, setPopperElement] = (0, import_react21.useState)(null);
10660
- const { attributes, styles, update } = (0, import_react_popper.usePopper)(referenceElement, popperElement, {
10661
- modifiers: [
10662
- {
10663
- enabled: !!allowFlip,
10664
- // Prevent flipping
10665
- name: "flip"
10666
- },
10667
- {
10668
- name: "eventListeners",
10669
- options: {
10670
- // It's not safe to update popper position on resize and scroll, since popper's
10671
- // reference element might not be visible at the time.
10672
- resize: false,
10673
- scroll: false
10674
- }
10675
- }
10676
- ],
10727
+ const [popperElement, setPopperElement] = (0, import_react22.useState)(null);
10728
+ const { refs, strategy, update, x, y } = usePopoverPosition({
10729
+ allowFlip,
10730
+ freeze: true,
10677
10731
  placement
10678
10732
  });
10679
- (0, import_react21.useEffect)(() => {
10733
+ (0, import_react22.useEffect)(() => {
10734
+ refs.setReference(referenceElement);
10735
+ }, [referenceElement, refs]);
10736
+ (0, import_react22.useEffect)(() => {
10737
+ refs.setFloating(popperElement);
10738
+ }, [popperElement, refs]);
10739
+ (0, import_react22.useEffect)(() => {
10680
10740
  if (open && popperElement) {
10681
10741
  update?.();
10682
10742
  }
10683
- }, [open, popperElement, update]);
10743
+ }, [open, placement, popperElement, update]);
10684
10744
  if (popperElement && !open) {
10685
10745
  setPopperElement(null);
10686
10746
  }
10687
10747
  return {
10688
- attributes,
10689
10748
  setPopperElement,
10690
- styles
10749
+ styles: {
10750
+ left: x ?? 0,
10751
+ position: strategy,
10752
+ top: y ?? 0
10753
+ }
10691
10754
  };
10692
10755
  }
10693
10756
  var DialogAnchor = ({
10694
10757
  allowFlip = true,
10695
10758
  children,
10696
10759
  className,
10760
+ dialogManagerId,
10697
10761
  focus = true,
10698
10762
  id,
10699
10763
  placement = "auto",
@@ -10702,15 +10766,15 @@ var DialogAnchor = ({
10702
10766
  trapFocus,
10703
10767
  ...restDivProps
10704
10768
  }) => {
10705
- const dialog = useDialog({ id });
10706
- const open = useDialogIsOpen(id);
10707
- const { attributes, setPopperElement, styles } = useDialogAnchor({
10769
+ const dialog = useDialog({ dialogManagerId, id });
10770
+ const open = useDialogIsOpen(id, dialogManagerId);
10771
+ const { setPopperElement, styles } = useDialogAnchor({
10708
10772
  allowFlip,
10709
10773
  open,
10710
10774
  placement,
10711
10775
  referenceElement
10712
10776
  });
10713
- (0, import_react21.useEffect)(() => {
10777
+ (0, import_react22.useEffect)(() => {
10714
10778
  if (!open) return;
10715
10779
  const hideOnEscape = (event) => {
10716
10780
  if (event.key !== "Escape") return;
@@ -10724,15 +10788,14 @@ var DialogAnchor = ({
10724
10788
  if (!open) {
10725
10789
  return null;
10726
10790
  }
10727
- return /* @__PURE__ */ import_react21.default.createElement(DialogPortalEntry, { dialogId: id }, /* @__PURE__ */ import_react21.default.createElement(import_focus.FocusScope, { autoFocus: focus, contain: trapFocus, restoreFocus: true }, /* @__PURE__ */ import_react21.default.createElement(
10791
+ return /* @__PURE__ */ import_react22.default.createElement(DialogPortalEntry, { dialogId: id, dialogManagerId }, /* @__PURE__ */ import_react22.default.createElement(import_focus.FocusScope, { autoFocus: focus, contain: trapFocus, restoreFocus: true }, /* @__PURE__ */ import_react22.default.createElement(
10728
10792
  "div",
10729
10793
  {
10730
10794
  ...restDivProps,
10731
- ...attributes.popper,
10732
10795
  className: (0, import_clsx4.default)("str-chat__dialog-contents", className),
10733
10796
  "data-testid": "str-chat__dialog-contents",
10734
10797
  ref: setPopperElement,
10735
- style: styles.popper,
10798
+ style: styles,
10736
10799
  tabIndex: typeof tabIndex !== "undefined" ? tabIndex : 0
10737
10800
  },
10738
10801
  children
@@ -10748,26 +10811,26 @@ var ButtonWithSubmenu = ({
10748
10811
  submenuContainerProps,
10749
10812
  ...buttonProps
10750
10813
  }) => {
10751
- const buttonRef = (0, import_react22.useRef)(null);
10752
- const [dialogContainer, setDialogContainer] = (0, import_react22.useState)(null);
10753
- const keepSubmenuOpen = (0, import_react22.useRef)(false);
10754
- const dialogCloseTimeout = (0, import_react22.useRef)(null);
10755
- const dialogId = (0, import_react22.useMemo)(() => `submenu-${Math.random().toString(36).slice(2)}`, []);
10756
- const dialog = useDialog({ id: dialogId });
10757
- const dialogIsOpen = useDialogIsOpen(dialogId);
10758
- const { attributes, setPopperElement, styles } = useDialogAnchor({
10814
+ const buttonRef = (0, import_react23.useRef)(null);
10815
+ const [dialogContainer, setDialogContainer] = (0, import_react23.useState)(null);
10816
+ const keepSubmenuOpen = (0, import_react23.useRef)(false);
10817
+ const dialogCloseTimeout = (0, import_react23.useRef)(null);
10818
+ const dialogId = (0, import_react23.useMemo)(() => `submenu-${Math.random().toString(36).slice(2)}`, []);
10819
+ const { dialog, dialogManager } = useDialogOnNearestManager({ id: dialogId });
10820
+ const dialogIsOpen = useDialogIsOpen(dialogId, dialogManager?.id);
10821
+ const { setPopperElement, styles } = useDialogAnchor({
10759
10822
  open: dialogIsOpen,
10760
10823
  placement,
10761
10824
  referenceElement: buttonRef.current
10762
10825
  });
10763
- const closeDialogLazily = (0, import_react22.useCallback)(() => {
10826
+ const closeDialogLazily = (0, import_react23.useCallback)(() => {
10764
10827
  if (dialogCloseTimeout.current) clearTimeout(dialogCloseTimeout.current);
10765
10828
  dialogCloseTimeout.current = setTimeout(() => {
10766
10829
  if (keepSubmenuOpen.current) return;
10767
10830
  dialog.close();
10768
10831
  }, 100);
10769
10832
  }, [dialog]);
10770
- const handleClose = (0, import_react22.useCallback)(
10833
+ const handleClose = (0, import_react23.useCallback)(
10771
10834
  (event) => {
10772
10835
  const parentButton = buttonRef.current;
10773
10836
  if (!dialogIsOpen || !parentButton) return;
@@ -10782,7 +10845,7 @@ var ButtonWithSubmenu = ({
10782
10845
  dialog.open();
10783
10846
  keepSubmenuOpen.current = true;
10784
10847
  };
10785
- (0, import_react22.useEffect)(() => {
10848
+ (0, import_react23.useEffect)(() => {
10786
10849
  const parentButton = buttonRef.current;
10787
10850
  if (!dialogIsOpen || !parentButton) return;
10788
10851
  const hideOnEscape = (event) => {
@@ -10795,7 +10858,7 @@ var ButtonWithSubmenu = ({
10795
10858
  document.removeEventListener("keyup", hideOnEscape, { capture: true });
10796
10859
  };
10797
10860
  }, [dialogIsOpen, handleClose]);
10798
- return /* @__PURE__ */ import_react22.default.createElement(import_react22.default.Fragment, null, /* @__PURE__ */ import_react22.default.createElement(
10861
+ return /* @__PURE__ */ import_react23.default.createElement(import_react23.default.Fragment, null, /* @__PURE__ */ import_react23.default.createElement(
10799
10862
  "button",
10800
10863
  {
10801
10864
  "aria-selected": "false",
@@ -10821,10 +10884,9 @@ var ButtonWithSubmenu = ({
10821
10884
  ...buttonProps
10822
10885
  },
10823
10886
  children
10824
- ), dialogIsOpen && /* @__PURE__ */ import_react22.default.createElement(
10887
+ ), dialogIsOpen && /* @__PURE__ */ import_react23.default.createElement(
10825
10888
  "div",
10826
10889
  {
10827
- ...attributes.popper,
10828
10890
  onBlur: (event) => {
10829
10891
  const isBlurredDescendant = event.relatedTarget instanceof Node && dialogContainer?.contains(event.relatedTarget);
10830
10892
  if (isBlurredDescendant) return;
@@ -10845,26 +10907,26 @@ var ButtonWithSubmenu = ({
10845
10907
  setPopperElement(element3);
10846
10908
  setDialogContainer(element3);
10847
10909
  },
10848
- style: styles.popper,
10910
+ style: styles,
10849
10911
  tabIndex: -1,
10850
10912
  ...submenuContainerProps
10851
10913
  },
10852
- /* @__PURE__ */ import_react22.default.createElement(Submenu, null)
10914
+ /* @__PURE__ */ import_react23.default.createElement(Submenu, null)
10853
10915
  ));
10854
10916
  };
10855
10917
 
10856
10918
  // src/components/MessageActions/MessageActions.tsx
10857
10919
  var import_clsx6 = __toESM(require("clsx"));
10858
- var import_react25 = __toESM(require("react"));
10920
+ var import_react26 = __toESM(require("react"));
10859
10921
 
10860
10922
  // src/components/MessageActions/RemindMeSubmenu.tsx
10861
- var import_react23 = __toESM(require("react"));
10923
+ var import_react24 = __toESM(require("react"));
10862
10924
  var RemindMeActionButton = ({
10863
10925
  className,
10864
10926
  isMine
10865
10927
  }) => {
10866
10928
  const { t } = useTranslationContext();
10867
- return /* @__PURE__ */ import_react23.default.createElement(
10929
+ return /* @__PURE__ */ import_react24.default.createElement(
10868
10930
  ButtonWithSubmenu,
10869
10931
  {
10870
10932
  "aria-selected": "false",
@@ -10879,14 +10941,14 @@ var RemindMeSubmenu = () => {
10879
10941
  const { t } = useTranslationContext();
10880
10942
  const { client } = useChatContext();
10881
10943
  const { message } = useMessageContext();
10882
- return /* @__PURE__ */ import_react23.default.createElement(
10944
+ return /* @__PURE__ */ import_react24.default.createElement(
10883
10945
  "div",
10884
10946
  {
10885
10947
  "aria-label": t("aria/Remind Me Options"),
10886
10948
  className: "str-chat__message-actions-box__submenu",
10887
10949
  role: "listbox"
10888
10950
  },
10889
- client.reminders.scheduledOffsetsMs.map((offsetMs) => /* @__PURE__ */ import_react23.default.createElement(
10951
+ client.reminders.scheduledOffsetsMs.map((offsetMs) => /* @__PURE__ */ import_react24.default.createElement(
10890
10952
  "button",
10891
10953
  {
10892
10954
  className: "str-chat__message-actions-list-item-button",
@@ -10904,8 +10966,8 @@ var RemindMeSubmenu = () => {
10904
10966
  };
10905
10967
 
10906
10968
  // src/components/Message/icons.tsx
10907
- var import_react24 = __toESM(require("react"));
10908
- var ActionsIcon = ({ className = "" }) => /* @__PURE__ */ import_react24.default.createElement(
10969
+ var import_react25 = __toESM(require("react"));
10970
+ var ActionsIcon = ({ className = "" }) => /* @__PURE__ */ import_react25.default.createElement(
10909
10971
  "svg",
10910
10972
  {
10911
10973
  className,
@@ -10914,7 +10976,7 @@ var ActionsIcon = ({ className = "" }) => /* @__PURE__ */ import_react24.default
10914
10976
  width: "11",
10915
10977
  xmlns: "http://www.w3.org/2000/svg"
10916
10978
  },
10917
- /* @__PURE__ */ import_react24.default.createElement(
10979
+ /* @__PURE__ */ import_react25.default.createElement(
10918
10980
  "path",
10919
10981
  {
10920
10982
  d: "M1.5 3a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3zm4 0a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3zm4 0a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3z",
@@ -10922,7 +10984,7 @@ var ActionsIcon = ({ className = "" }) => /* @__PURE__ */ import_react24.default
10922
10984
  }
10923
10985
  )
10924
10986
  );
10925
- var ReactionIcon = ({ className = "" }) => /* @__PURE__ */ import_react24.default.createElement(
10987
+ var ReactionIcon = ({ className = "" }) => /* @__PURE__ */ import_react25.default.createElement(
10926
10988
  "svg",
10927
10989
  {
10928
10990
  className,
@@ -10931,9 +10993,9 @@ var ReactionIcon = ({ className = "" }) => /* @__PURE__ */ import_react24.defaul
10931
10993
  width: "12",
10932
10994
  xmlns: "http://www.w3.org/2000/svg"
10933
10995
  },
10934
- /* @__PURE__ */ import_react24.default.createElement("g", { clipRule: "evenodd", fillRule: "evenodd" }, /* @__PURE__ */ import_react24.default.createElement("path", { d: "M6 1.2C3.3 1.2 1.2 3.3 1.2 6c0 2.7 2.1 4.8 4.8 4.8 2.7 0 4.8-2.1 4.8-4.8 0-2.7-2.1-4.8-4.8-4.8zM0 6c0-3.3 2.7-6 6-6s6 2.7 6 6-2.7 6-6 6-6-2.7-6-6z" }), /* @__PURE__ */ import_react24.default.createElement("path", { d: "M5.4 4.5c0 .5-.4.9-.9.9s-.9-.4-.9-.9.4-.9.9-.9.9.4.9.9zM8.4 4.5c0 .5-.4.9-.9.9s-.9-.4-.9-.9.4-.9.9-.9.9.4.9.9zM3.3 6.7c.3-.2.6-.1.8.1.3.4.8.9 1.5 1 .6.2 1.4.1 2.4-1 .2-.2.6-.3.8 0 .2.2.3.6 0 .8-1.1 1.3-2.4 1.7-3.5 1.5-1-.2-1.8-.9-2.2-1.5-.2-.3-.1-.7.2-.9z" }))
10996
+ /* @__PURE__ */ import_react25.default.createElement("g", { clipRule: "evenodd", fillRule: "evenodd" }, /* @__PURE__ */ import_react25.default.createElement("path", { d: "M6 1.2C3.3 1.2 1.2 3.3 1.2 6c0 2.7 2.1 4.8 4.8 4.8 2.7 0 4.8-2.1 4.8-4.8 0-2.7-2.1-4.8-4.8-4.8zM0 6c0-3.3 2.7-6 6-6s6 2.7 6 6-2.7 6-6 6-6-2.7-6-6z" }), /* @__PURE__ */ import_react25.default.createElement("path", { d: "M5.4 4.5c0 .5-.4.9-.9.9s-.9-.4-.9-.9.4-.9.9-.9.9.4.9.9zM8.4 4.5c0 .5-.4.9-.9.9s-.9-.4-.9-.9.4-.9.9-.9.9.4.9.9zM3.3 6.7c.3-.2.6-.1.8.1.3.4.8.9 1.5 1 .6.2 1.4.1 2.4-1 .2-.2.6-.3.8 0 .2.2.3.6 0 .8-1.1 1.3-2.4 1.7-3.5 1.5-1-.2-1.8-.9-2.2-1.5-.2-.3-.1-.7.2-.9z" }))
10935
10997
  );
10936
- var ThreadIcon = ({ className = "" }) => /* @__PURE__ */ import_react24.default.createElement("svg", { className, height: "10", width: "14", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react24.default.createElement(
10998
+ var ThreadIcon = ({ className = "" }) => /* @__PURE__ */ import_react25.default.createElement("svg", { className, height: "10", width: "14", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react25.default.createElement(
10937
10999
  "path",
10938
11000
  {
10939
11001
  d: "M8.516 3c4.78 0 4.972 6.5 4.972 6.5-1.6-2.906-2.847-3.184-4.972-3.184v2.872L3.772 4.994 8.516.5V3zM.484 5l4.5-4.237v1.78L2.416 5l2.568 2.125v1.828L.484 5z",
@@ -10954,8 +11016,8 @@ var MessageActionsWrapper = (props) => {
10954
11016
  "data-testid": "message-actions",
10955
11017
  onClick: toggleOpen
10956
11018
  };
10957
- if (inline) return /* @__PURE__ */ import_react25.default.createElement("span", { ...wrapperProps }, children);
10958
- return /* @__PURE__ */ import_react25.default.createElement("div", { ...wrapperProps }, children);
11019
+ if (inline) return /* @__PURE__ */ import_react26.default.createElement("span", { ...wrapperProps }, children);
11020
+ return /* @__PURE__ */ import_react26.default.createElement("div", { ...wrapperProps }, children);
10959
11021
  };
10960
11022
 
10961
11023
  // src/components/Message/renderText/remarkPlugins/htmlToTextPlugin.ts
@@ -14077,20 +14139,20 @@ function remarkGfm(options) {
14077
14139
  }
14078
14140
 
14079
14141
  // src/components/Reactions/ReactionSelectorWithButton.tsx
14080
- var import_react30 = __toESM(require("react"));
14142
+ var import_react31 = __toESM(require("react"));
14081
14143
 
14082
14144
  // src/components/Reactions/ReactionSelector.tsx
14083
- var import_react29 = __toESM(require("react"));
14145
+ var import_react30 = __toESM(require("react"));
14084
14146
  var import_clsx7 = __toESM(require("clsx"));
14085
14147
 
14086
14148
  // src/components/Reactions/reactionOptions.tsx
14087
- var import_react28 = __toESM(require("react"));
14149
+ var import_react29 = __toESM(require("react"));
14088
14150
 
14089
14151
  // src/components/Reactions/StreamEmoji.tsx
14090
- var import_react27 = __toESM(require("react"));
14152
+ var import_react28 = __toESM(require("react"));
14091
14153
 
14092
14154
  // src/components/Reactions/SpriteImage.tsx
14093
- var import_react26 = __toESM(require("react"));
14155
+ var import_react27 = __toESM(require("react"));
14094
14156
 
14095
14157
  // src/components/Reactions/utils/utils.ts
14096
14158
  var isMutableRef = (ref) => {
@@ -14125,13 +14187,13 @@ var SpriteImage = ({
14125
14187
  style,
14126
14188
  width
14127
14189
  }) => {
14128
- const [[spriteWidth, spriteHeight], setSpriteDimensions] = (0, import_react26.useState)([0, 0]);
14129
- (0, import_react26.useEffect)(() => {
14190
+ const [[spriteWidth, spriteHeight], setSpriteDimensions] = (0, import_react27.useState)([0, 0]);
14191
+ (0, import_react27.useEffect)(() => {
14130
14192
  getImageDimensions(spriteUrl).then(setSpriteDimensions).catch(console.error);
14131
14193
  }, [spriteUrl]);
14132
14194
  const [x, y] = position3;
14133
- if (!spriteHeight || !spriteWidth) return /* @__PURE__ */ import_react26.default.createElement(import_react26.default.Fragment, null, fallback);
14134
- return /* @__PURE__ */ import_react26.default.createElement(
14195
+ if (!spriteHeight || !spriteWidth) return /* @__PURE__ */ import_react27.default.createElement(import_react27.default.Fragment, null, fallback);
14196
+ return /* @__PURE__ */ import_react27.default.createElement(
14135
14197
  "div",
14136
14198
  {
14137
14199
  "data-testid": "sprite-image",
@@ -14169,7 +14231,7 @@ var StreamEmoji = ({
14169
14231
  type
14170
14232
  }) => {
14171
14233
  const position3 = StreamSpriteEmojiPositions[type];
14172
- return /* @__PURE__ */ import_react27.default.createElement(
14234
+ return /* @__PURE__ */ import_react28.default.createElement(
14173
14235
  SpriteImage,
14174
14236
  {
14175
14237
  columns: 2,
@@ -14188,23 +14250,23 @@ var StreamEmoji = ({
14188
14250
  var defaultReactionOptions = [
14189
14251
  {
14190
14252
  type: "haha",
14191
- Component: () => /* @__PURE__ */ import_react28.default.createElement(StreamEmoji, { fallback: "\u{1F602}", type: "haha" }),
14253
+ Component: () => /* @__PURE__ */ import_react29.default.createElement(StreamEmoji, { fallback: "\u{1F602}", type: "haha" }),
14192
14254
  name: "Joy"
14193
14255
  },
14194
14256
  {
14195
14257
  type: "like",
14196
- Component: () => /* @__PURE__ */ import_react28.default.createElement(StreamEmoji, { fallback: "\u{1F44D}", type: "like" }),
14258
+ Component: () => /* @__PURE__ */ import_react29.default.createElement(StreamEmoji, { fallback: "\u{1F44D}", type: "like" }),
14197
14259
  name: "Thumbs up"
14198
14260
  },
14199
14261
  {
14200
14262
  type: "love",
14201
- Component: () => /* @__PURE__ */ import_react28.default.createElement(StreamEmoji, { fallback: "\u2764\uFE0F", type: "love" }),
14263
+ Component: () => /* @__PURE__ */ import_react29.default.createElement(StreamEmoji, { fallback: "\u2764\uFE0F", type: "love" }),
14202
14264
  name: "Heart"
14203
14265
  },
14204
- { type: "sad", Component: () => /* @__PURE__ */ import_react28.default.createElement(StreamEmoji, { fallback: "\u{1F614}", type: "sad" }), name: "Sad" },
14266
+ { type: "sad", Component: () => /* @__PURE__ */ import_react29.default.createElement(StreamEmoji, { fallback: "\u{1F614}", type: "sad" }), name: "Sad" },
14205
14267
  {
14206
14268
  type: "wow",
14207
- Component: () => /* @__PURE__ */ import_react28.default.createElement(StreamEmoji, { fallback: "\u{1F632}", type: "wow" }),
14269
+ Component: () => /* @__PURE__ */ import_react29.default.createElement(StreamEmoji, { fallback: "\u{1F632}", type: "wow" }),
14208
14270
  name: "Astonished"
14209
14271
  }
14210
14272
  ];
@@ -14238,23 +14300,23 @@ var UnMemoizedReactionSelector = (props) => {
14238
14300
  const latestReactions = propLatestReactions || message?.latest_reactions || [];
14239
14301
  const ownReactions = propOwnReactions || message?.own_reactions || [];
14240
14302
  const reactionGroups = propReactionGroups || message?.reaction_groups || {};
14241
- const [tooltipReactionType, setTooltipReactionType] = (0, import_react29.useState)(null);
14242
- const [tooltipPositions, setTooltipPositions] = (0, import_react29.useState)(null);
14243
- const rootRef = (0, import_react29.useRef)(null);
14244
- const targetRef = (0, import_react29.useRef)(null);
14245
- const tooltipRef = (0, import_react29.useRef)(null);
14246
- const showTooltip = (0, import_react29.useCallback)(
14303
+ const [tooltipReactionType, setTooltipReactionType] = (0, import_react30.useState)(null);
14304
+ const [tooltipPositions, setTooltipPositions] = (0, import_react30.useState)(null);
14305
+ const rootRef = (0, import_react30.useRef)(null);
14306
+ const targetRef = (0, import_react30.useRef)(null);
14307
+ const tooltipRef = (0, import_react30.useRef)(null);
14308
+ const showTooltip = (0, import_react30.useCallback)(
14247
14309
  (event, reactionType) => {
14248
14310
  targetRef.current = event.currentTarget;
14249
14311
  setTooltipReactionType(reactionType);
14250
14312
  },
14251
14313
  []
14252
14314
  );
14253
- const hideTooltip = (0, import_react29.useCallback)(() => {
14315
+ const hideTooltip = (0, import_react30.useCallback)(() => {
14254
14316
  setTooltipReactionType(null);
14255
14317
  setTooltipPositions(null);
14256
14318
  }, []);
14257
- (0, import_react29.useEffect)(() => {
14319
+ (0, import_react30.useEffect)(() => {
14258
14320
  if (!tooltipReactionType || !rootRef.current) return;
14259
14321
  const tooltip = tooltipRef.current?.getBoundingClientRect();
14260
14322
  const target = targetRef.current?.getBoundingClientRect();
@@ -14275,7 +14337,7 @@ var UnMemoizedReactionSelector = (props) => {
14275
14337
  }).filter(Boolean);
14276
14338
  const iHaveReactedWithReaction = (reactionType) => ownReactions.find((reaction) => reaction.type === reactionType);
14277
14339
  const getLatestUserForReactionType = (type) => latestReactions.find((reaction) => reaction.type === type && !!reaction.user)?.user || void 0;
14278
- return /* @__PURE__ */ import_react29.default.createElement(
14340
+ return /* @__PURE__ */ import_react30.default.createElement(
14279
14341
  "div",
14280
14342
  {
14281
14343
  className: (0, import_clsx7.default)(
@@ -14287,7 +14349,7 @@ var UnMemoizedReactionSelector = (props) => {
14287
14349
  "data-testid": "reaction-selector",
14288
14350
  ref: rootRef
14289
14351
  },
14290
- !!tooltipReactionType && detailedView && /* @__PURE__ */ import_react29.default.createElement(
14352
+ !!tooltipReactionType && detailedView && /* @__PURE__ */ import_react30.default.createElement(
14291
14353
  "div",
14292
14354
  {
14293
14355
  className: "str-chat__reaction-selector-tooltip",
@@ -14297,13 +14359,13 @@ var UnMemoizedReactionSelector = (props) => {
14297
14359
  visibility: tooltipPositions ? "visible" : "hidden"
14298
14360
  }
14299
14361
  },
14300
- /* @__PURE__ */ import_react29.default.createElement("div", { className: "arrow", style: { left: tooltipPositions?.arrow } }),
14301
- getUsersPerReactionType(tooltipReactionType)?.map((user, i, users) => /* @__PURE__ */ import_react29.default.createElement("span", { className: "latest-user-username", key: `key-${i}-${user}` }, `${user}${i < users.length - 1 ? ", " : ""}`))
14362
+ /* @__PURE__ */ import_react30.default.createElement("div", { className: "arrow", style: { left: tooltipPositions?.arrow } }),
14363
+ getUsersPerReactionType(tooltipReactionType)?.map((user, i, users) => /* @__PURE__ */ import_react30.default.createElement("span", { className: "latest-user-username", key: `key-${i}-${user}` }, `${user}${i < users.length - 1 ? ", " : ""}`))
14302
14364
  ),
14303
- /* @__PURE__ */ import_react29.default.createElement("ul", { className: "str-chat__message-reactions-list str-chat__message-reactions-options" }, reactionOptions.map(({ Component, name: reactionName, type: reactionType }) => {
14365
+ /* @__PURE__ */ import_react30.default.createElement("ul", { className: "str-chat__message-reactions-list str-chat__message-reactions-options" }, reactionOptions.map(({ Component, name: reactionName, type: reactionType }) => {
14304
14366
  const latestUser = getLatestUserForReactionType(reactionType);
14305
14367
  const count = reactionGroups[reactionType]?.count ?? 0;
14306
- return /* @__PURE__ */ import_react29.default.createElement("li", { key: reactionType }, /* @__PURE__ */ import_react29.default.createElement(
14368
+ return /* @__PURE__ */ import_react30.default.createElement("li", { key: reactionType }, /* @__PURE__ */ import_react30.default.createElement(
14307
14369
  "button",
14308
14370
  {
14309
14371
  "aria-label": `Select Reaction: ${reactionName || reactionType}`,
@@ -14322,7 +14384,7 @@ var UnMemoizedReactionSelector = (props) => {
14322
14384
  }
14323
14385
  }
14324
14386
  },
14325
- !!count && detailedView && /* @__PURE__ */ import_react29.default.createElement(
14387
+ !!count && detailedView && /* @__PURE__ */ import_react30.default.createElement(
14326
14388
  "div",
14327
14389
  {
14328
14390
  className: "latest-user str-chat__message-reactions-last-user",
@@ -14330,7 +14392,7 @@ var UnMemoizedReactionSelector = (props) => {
14330
14392
  onMouseEnter: (e) => showTooltip(e, reactionType),
14331
14393
  onMouseLeave: hideTooltip
14332
14394
  },
14333
- latestUser ? /* @__PURE__ */ import_react29.default.createElement(
14395
+ latestUser ? /* @__PURE__ */ import_react30.default.createElement(
14334
14396
  Avatar2,
14335
14397
  {
14336
14398
  image: latestUser.image,
@@ -14338,15 +14400,15 @@ var UnMemoizedReactionSelector = (props) => {
14338
14400
  size: 20,
14339
14401
  user: latestUser
14340
14402
  }
14341
- ) : /* @__PURE__ */ import_react29.default.createElement("div", { className: "latest-user-not-found" })
14403
+ ) : /* @__PURE__ */ import_react30.default.createElement("div", { className: "latest-user-not-found" })
14342
14404
  ),
14343
- /* @__PURE__ */ import_react29.default.createElement("span", { className: "str-chat__message-reaction-emoji" }, /* @__PURE__ */ import_react29.default.createElement(Component, null)),
14344
- Boolean(count) && detailedView && /* @__PURE__ */ import_react29.default.createElement("span", { className: "str-chat__message-reactions-list-item__count" }, count || "")
14405
+ /* @__PURE__ */ import_react30.default.createElement("span", { className: "str-chat__message-reaction-emoji" }, /* @__PURE__ */ import_react30.default.createElement(Component, null)),
14406
+ Boolean(count) && detailedView && /* @__PURE__ */ import_react30.default.createElement("span", { className: "str-chat__message-reactions-list-item__count" }, count || "")
14345
14407
  ));
14346
14408
  }))
14347
14409
  );
14348
14410
  };
14349
- var ReactionSelector = import_react29.default.memo(
14411
+ var ReactionSelector = import_react30.default.memo(
14350
14412
  UnMemoizedReactionSelector
14351
14413
  );
14352
14414
 
@@ -14357,21 +14419,22 @@ var ReactionSelectorWithButton = ({
14357
14419
  const { t } = useTranslationContext("ReactionSelectorWithButton");
14358
14420
  const { isMyMessage, message, threadList } = useMessageContext("MessageOptions");
14359
14421
  const { ReactionSelector: ReactionSelector2 = ReactionSelector } = useComponentContext("MessageOptions");
14360
- const buttonRef = (0, import_react30.useRef)(null);
14422
+ const buttonRef = (0, import_react31.useRef)(null);
14361
14423
  const dialogIdNamespace = threadList ? "-thread-" : "";
14362
14424
  const dialogId = `reaction-selector${dialogIdNamespace}--${message.id}`;
14363
- const dialog = useDialog({ id: dialogId });
14364
- const dialogIsOpen = useDialogIsOpen(dialogId);
14365
- return /* @__PURE__ */ import_react30.default.createElement(import_react30.default.Fragment, null, /* @__PURE__ */ import_react30.default.createElement(
14425
+ const { dialog, dialogManager } = useDialogOnNearestManager({ id: dialogId });
14426
+ const dialogIsOpen = useDialogIsOpen(dialogId, dialogManager?.id);
14427
+ return /* @__PURE__ */ import_react31.default.createElement(import_react31.default.Fragment, null, /* @__PURE__ */ import_react31.default.createElement(
14366
14428
  DialogAnchor,
14367
14429
  {
14430
+ dialogManagerId: dialogManager?.id,
14368
14431
  id: dialogId,
14369
14432
  placement: isMyMessage() ? "top-end" : "top-start",
14370
14433
  referenceElement: buttonRef.current,
14371
14434
  trapFocus: true
14372
14435
  },
14373
- /* @__PURE__ */ import_react30.default.createElement(ReactionSelector2, null)
14374
- ), /* @__PURE__ */ import_react30.default.createElement(
14436
+ /* @__PURE__ */ import_react31.default.createElement(ReactionSelector2, null)
14437
+ ), /* @__PURE__ */ import_react31.default.createElement(
14375
14438
  "button",
14376
14439
  {
14377
14440
  "aria-expanded": dialogIsOpen,
@@ -14381,14 +14444,14 @@ var ReactionSelectorWithButton = ({
14381
14444
  onClick: () => dialog?.toggle(),
14382
14445
  ref: buttonRef
14383
14446
  },
14384
- /* @__PURE__ */ import_react30.default.createElement(ReactionIcon2, { className: "str-chat__message-action-icon" })
14447
+ /* @__PURE__ */ import_react31.default.createElement(ReactionIcon2, { className: "str-chat__message-action-icon" })
14385
14448
  ));
14386
14449
  };
14387
14450
 
14388
14451
  // src/components/InfiniteScrollPaginator/InfiniteScrollPaginator.tsx
14389
14452
  var import_clsx8 = __toESM(require("clsx"));
14390
14453
  var import_lodash = __toESM(require("lodash.debounce"));
14391
- var import_react31 = __toESM(require("react"));
14454
+ var import_react32 = __toESM(require("react"));
14392
14455
  var mousewheelListener = (event) => {
14393
14456
  if (event instanceof WheelEvent && event.deltaY === 1) {
14394
14457
  event.preventDefault();
@@ -14406,9 +14469,9 @@ var InfiniteScrollPaginator = (props) => {
14406
14469
  useCapture = false,
14407
14470
  ...componentProps
14408
14471
  } = props;
14409
- const rootRef = (0, import_react31.useRef)(null);
14410
- const childRef = (0, import_react31.useRef)(null);
14411
- const scrollListener = (0, import_react31.useMemo)(
14472
+ const rootRef = (0, import_react32.useRef)(null);
14473
+ const childRef = (0, import_react32.useRef)(null);
14474
+ const scrollListener = (0, import_react32.useMemo)(
14412
14475
  () => (0, import_lodash.default)(() => {
14413
14476
  const root4 = rootRef.current;
14414
14477
  const child = childRef.current;
@@ -14435,7 +14498,7 @@ var InfiniteScrollPaginator = (props) => {
14435
14498
  threshold
14436
14499
  ]
14437
14500
  );
14438
- (0, import_react31.useEffect)(() => {
14501
+ (0, import_react32.useEffect)(() => {
14439
14502
  const scrollElement = rootRef.current;
14440
14503
  if (!scrollElement) return;
14441
14504
  scrollElement.addEventListener("scroll", scrollListener, useCapture);
@@ -14443,7 +14506,7 @@ var InfiniteScrollPaginator = (props) => {
14443
14506
  scrollElement.removeEventListener("scroll", scrollListener, useCapture);
14444
14507
  };
14445
14508
  }, [scrollListener, useCapture]);
14446
- (0, import_react31.useEffect)(() => {
14509
+ (0, import_react32.useEffect)(() => {
14447
14510
  const root4 = rootRef.current;
14448
14511
  if (!root4 || typeof ResizeObserver === "undefined" || !scrollListener) return;
14449
14512
  const observer = new ResizeObserver(scrollListener);
@@ -14452,7 +14515,7 @@ var InfiniteScrollPaginator = (props) => {
14452
14515
  observer.disconnect();
14453
14516
  };
14454
14517
  }, [scrollListener]);
14455
- (0, import_react31.useEffect)(() => {
14518
+ (0, import_react32.useEffect)(() => {
14456
14519
  const root4 = rootRef.current;
14457
14520
  if (root4) {
14458
14521
  root4.addEventListener("wheel", mousewheelListener, { passive: false });
@@ -14463,14 +14526,14 @@ var InfiniteScrollPaginator = (props) => {
14463
14526
  }
14464
14527
  };
14465
14528
  }, [useCapture]);
14466
- return /* @__PURE__ */ import_react31.default.createElement(
14529
+ return /* @__PURE__ */ import_react32.default.createElement(
14467
14530
  "div",
14468
14531
  {
14469
14532
  ...componentProps,
14470
14533
  className: (0, import_clsx8.default)("str-chat__infinite-scroll-paginator", className),
14471
14534
  ref: rootRef
14472
14535
  },
14473
- /* @__PURE__ */ import_react31.default.createElement("div", { className: "str-chat__infinite-scroll-paginator__content", ref: childRef }, children)
14536
+ /* @__PURE__ */ import_react32.default.createElement("div", { className: "str-chat__infinite-scroll-paginator__content", ref: childRef }, children)
14474
14537
  );
14475
14538
  };
14476
14539
 
@@ -14481,7 +14544,7 @@ var remarkPlugins = [
14481
14544
  plusPlusToEmphasis,
14482
14545
  imageToLink
14483
14546
  ];
14484
- var renderPreviewText = (text8) => /* @__PURE__ */ import_react32.default.createElement(Markdown, { remarkPlugins, skipHtml: true }, text8);
14547
+ var renderPreviewText = (text8) => /* @__PURE__ */ import_react33.default.createElement(Markdown, { remarkPlugins, skipHtml: true }, text8);
14485
14548
  var getLatestPollVote = (latestVotesByOption) => {
14486
14549
  let latestVote;
14487
14550
  for (const optionVotes of Object.values(latestVotesByOption)) {
@@ -14563,14 +14626,14 @@ var getDisplayImage = (channel, currentUser) => getChannelDisplayInfo("image", c
14563
14626
  var useChannelPreviewInfo = (props) => {
14564
14627
  const { channel, overrideImage, overrideTitle } = props;
14565
14628
  const { client } = useChatContext("useChannelPreviewInfo");
14566
- const [displayTitle, setDisplayTitle] = (0, import_react33.useState)(
14629
+ const [displayTitle, setDisplayTitle] = (0, import_react34.useState)(
14567
14630
  () => overrideTitle || getDisplayTitle(channel, client.user)
14568
14631
  );
14569
- const [displayImage, setDisplayImage] = (0, import_react33.useState)(
14632
+ const [displayImage, setDisplayImage] = (0, import_react34.useState)(
14570
14633
  () => overrideImage || getDisplayImage(channel, client.user)
14571
14634
  );
14572
- const [groupChannelDisplayInfo, setGroupDisplayChannelInfo] = (0, import_react33.useState)(() => getGroupChannelDisplayInfo(channel));
14573
- (0, import_react33.useEffect)(() => {
14635
+ const [groupChannelDisplayInfo, setGroupDisplayChannelInfo] = (0, import_react34.useState)(() => getGroupChannelDisplayInfo(channel));
14636
+ (0, import_react34.useEffect)(() => {
14574
14637
  if (overrideTitle && overrideImage) return;
14575
14638
  const updateInfo = () => {
14576
14639
  if (!overrideTitle) setDisplayTitle(getDisplayTitle(channel, client.user));
@@ -14593,54 +14656,62 @@ var useChannelPreviewInfo = (props) => {
14593
14656
  };
14594
14657
 
14595
14658
  // src/components/ChannelPreview/hooks/useMessageDeliveryStatus.ts
14596
- var import_react34 = require("react");
14659
+ var import_react35 = require("react");
14597
14660
  var useMessageDeliveryStatus = ({
14598
14661
  channel,
14599
14662
  lastMessage
14600
14663
  }) => {
14601
14664
  const { client } = useChatContext();
14602
- const [messageDeliveryStatus, setMessageDeliveryStatus] = (0, import_react34.useState)();
14603
- const isOwnMessage = (0, import_react34.useCallback)(
14604
- (message) => client.user && message?.user?.id === client.user.id,
14665
+ const [messageDeliveryStatus, setMessageDeliveryStatus] = (0, import_react35.useState)();
14666
+ const isOwnMessage = (0, import_react35.useCallback)(
14667
+ (message) => client.user && message && message.user?.id === client.user.id,
14605
14668
  [client]
14606
14669
  );
14607
- (0, import_react34.useEffect)(() => {
14670
+ (0, import_react35.useEffect)(() => {
14671
+ if (!lastMessage) {
14672
+ setMessageDeliveryStatus(void 0);
14673
+ }
14608
14674
  const lastMessageIsOwn = isOwnMessage(lastMessage);
14609
14675
  if (!lastMessage?.created_at || !lastMessageIsOwn) return;
14610
- const lastMessageCreatedAtDate = typeof lastMessage.created_at === "string" ? new Date(lastMessage.created_at) : lastMessage.created_at;
14611
- const channelReadByOthersAfterLastMessageUpdate = Object.values(
14612
- channel.state.read
14613
- ).some(({ last_read: channelLastMarkedReadDate, user }) => {
14614
- const ignoreOwnReadStatus = client.user && user.id !== client.user.id;
14615
- return ignoreOwnReadStatus && lastMessageCreatedAtDate < channelLastMarkedReadDate;
14616
- });
14676
+ const msgRef = {
14677
+ msgId: lastMessage.id,
14678
+ timestampMs: lastMessage.created_at.getTime()
14679
+ };
14680
+ const readersForMessage = channel.messageReceiptsTracker.readersForMessage(msgRef);
14681
+ const deliveredForMessage = channel.messageReceiptsTracker.deliveredForMessage(msgRef);
14617
14682
  setMessageDeliveryStatus(
14618
- channelReadByOthersAfterLastMessageUpdate ? "read" /* READ */ : "delivered" /* DELIVERED */
14683
+ readersForMessage.length > 1 || readersForMessage.length === 1 && readersForMessage[0].id !== client.user?.id ? "read" /* READ */ : deliveredForMessage.length > 1 || deliveredForMessage.length === 1 && deliveredForMessage[0].id !== client.user?.id ? "delivered" /* DELIVERED */ : "sent" /* SENT */
14619
14684
  );
14620
- }, [channel.state.read, client, isOwnMessage, lastMessage]);
14621
- (0, import_react34.useEffect)(() => {
14685
+ }, [channel, client, isOwnMessage, lastMessage]);
14686
+ (0, import_react35.useEffect)(() => {
14622
14687
  const handleMessageNew = (event) => {
14623
14688
  if (!isOwnMessage(event.message)) {
14624
14689
  return setMessageDeliveryStatus(void 0);
14625
14690
  }
14626
- return setMessageDeliveryStatus("delivered" /* DELIVERED */);
14691
+ return setMessageDeliveryStatus("sent" /* SENT */);
14627
14692
  };
14628
14693
  channel.on("message.new", handleMessageNew);
14629
14694
  return () => {
14630
14695
  channel.off("message.new", handleMessageNew);
14631
14696
  };
14632
- }, [channel, client, isOwnMessage]);
14633
- (0, import_react34.useEffect)(() => {
14697
+ }, [channel, isOwnMessage]);
14698
+ (0, import_react35.useEffect)(() => {
14634
14699
  if (!isOwnMessage(lastMessage)) return;
14700
+ const handleMessageDelivered = (event) => {
14701
+ if (event.user?.id !== client.user?.id && lastMessage && lastMessage.id === event.last_delivered_message_id)
14702
+ setMessageDeliveryStatus("delivered" /* DELIVERED */);
14703
+ };
14635
14704
  const handleMarkRead = (event) => {
14636
14705
  if (event.user?.id !== client.user?.id)
14637
14706
  setMessageDeliveryStatus("read" /* READ */);
14638
14707
  };
14708
+ channel.on("message.delivered", handleMessageDelivered);
14639
14709
  channel.on("message.read", handleMarkRead);
14640
14710
  return () => {
14711
+ channel.off("message.delivered", handleMessageDelivered);
14641
14712
  channel.off("message.read", handleMarkRead);
14642
14713
  };
14643
- }, [channel, client, lastMessage, isOwnMessage]);
14714
+ }, [channel, client, isOwnMessage, lastMessage]);
14644
14715
  return {
14645
14716
  messageDeliveryStatus
14646
14717
  };
@@ -14665,20 +14736,20 @@ var ChannelPreview = (props) => {
14665
14736
  const { displayImage, displayTitle, groupChannelDisplayInfo } = useChannelPreviewInfo({
14666
14737
  channel
14667
14738
  });
14668
- const [lastMessage, setLastMessage] = (0, import_react35.useState)(
14739
+ const [lastMessage, setLastMessage] = (0, import_react36.useState)(
14669
14740
  channel.state.messages[channel.state.messages.length - 1]
14670
14741
  );
14671
- const [latestMessagePreview, setLatestMessagePreview] = (0, import_react35.useState)(
14742
+ const [latestMessagePreview, setLatestMessagePreview] = (0, import_react36.useState)(
14672
14743
  () => getLatestMessagePreview2(channel, t, userLanguage, isMessageAIGenerated)
14673
14744
  );
14674
- const [unread, setUnread] = (0, import_react35.useState)(0);
14745
+ const [unread, setUnread] = (0, import_react36.useState)(0);
14675
14746
  const { messageDeliveryStatus } = useMessageDeliveryStatus({
14676
14747
  channel,
14677
14748
  lastMessage
14678
14749
  });
14679
14750
  const isActive = typeof active === "undefined" ? activeChannel?.cid === channel.cid : active;
14680
14751
  const { muted } = useIsChannelMuted(channel);
14681
- (0, import_react35.useEffect)(() => {
14752
+ (0, import_react36.useEffect)(() => {
14682
14753
  const handleEvent = (event) => {
14683
14754
  if (!event.cid) return setUnread(0);
14684
14755
  if (channel.cid === event.cid) setUnread(0);
@@ -14686,7 +14757,7 @@ var ChannelPreview = (props) => {
14686
14757
  client.on("notification.mark_read", handleEvent);
14687
14758
  return () => client.off("notification.mark_read", handleEvent);
14688
14759
  }, [channel, client]);
14689
- (0, import_react35.useEffect)(() => {
14760
+ (0, import_react36.useEffect)(() => {
14690
14761
  const handleEvent = (event) => {
14691
14762
  if (channel.cid !== event.cid) return;
14692
14763
  if (event.user?.id !== client.user?.id) return;
@@ -14697,7 +14768,7 @@ var ChannelPreview = (props) => {
14697
14768
  channel.off("notification.mark_unread", handleEvent);
14698
14769
  };
14699
14770
  }, [channel, client]);
14700
- const refreshUnreadCount = (0, import_react35.useMemo)(
14771
+ const refreshUnreadCount = (0, import_react36.useMemo)(
14701
14772
  () => (0, import_lodash2.default)(() => {
14702
14773
  if (muted) {
14703
14774
  setUnread(0);
@@ -14707,7 +14778,7 @@ var ChannelPreview = (props) => {
14707
14778
  }, 400),
14708
14779
  [channel, muted]
14709
14780
  );
14710
- (0, import_react35.useEffect)(() => {
14781
+ (0, import_react36.useEffect)(() => {
14711
14782
  refreshUnreadCount();
14712
14783
  setLatestMessagePreview(
14713
14784
  getLatestMessagePreview2(channel, t, userLanguage, isMessageAIGenerated)
@@ -14748,7 +14819,7 @@ var ChannelPreview = (props) => {
14748
14819
  isMessageAIGenerated
14749
14820
  ]);
14750
14821
  if (!Preview) return null;
14751
- return /* @__PURE__ */ import_react35.default.createElement(
14822
+ return /* @__PURE__ */ import_react36.default.createElement(
14752
14823
  Preview,
14753
14824
  {
14754
14825
  ...props,
@@ -14767,9 +14838,9 @@ var ChannelPreview = (props) => {
14767
14838
  };
14768
14839
 
14769
14840
  // src/components/Thread/LegacyThreadContext.ts
14770
- var import_react36 = __toESM(require("react"));
14771
- var LegacyThreadContext = import_react36.default.createContext({ legacyThread: void 0 });
14772
- var useLegacyThreadContext = () => (0, import_react36.useContext)(LegacyThreadContext);
14841
+ var import_react37 = __toESM(require("react"));
14842
+ var LegacyThreadContext = import_react37.default.createContext({ legacyThread: void 0 });
14843
+ var useLegacyThreadContext = () => (0, import_react37.useContext)(LegacyThreadContext);
14773
14844
 
14774
14845
  // src/components/MessageInput/hooks/useMessageComposer.ts
14775
14846
  var queueCache = new import_stream_chat2.FixedSizeQueueCache(64);
@@ -14779,15 +14850,15 @@ var useMessageComposer = () => {
14779
14850
  const { editing, message: editedMessage } = useMessageContext();
14780
14851
  const { legacyThread: parentMessage } = useLegacyThreadContext();
14781
14852
  const threadInstance = useThreadContext();
14782
- const cachedEditedMessage = (0, import_react37.useMemo)(() => {
14853
+ const cachedEditedMessage = (0, import_react38.useMemo)(() => {
14783
14854
  if (!editedMessage) return void 0;
14784
14855
  return editedMessage;
14785
14856
  }, [editedMessage?.id]);
14786
- const cachedParentMessage = (0, import_react37.useMemo)(() => {
14857
+ const cachedParentMessage = (0, import_react38.useMemo)(() => {
14787
14858
  if (!parentMessage) return void 0;
14788
14859
  return parentMessage;
14789
14860
  }, [parentMessage?.id]);
14790
- const messageComposer = (0, import_react37.useMemo)(() => {
14861
+ const messageComposer = (0, import_react38.useMemo)(() => {
14791
14862
  if (editing && cachedEditedMessage) {
14792
14863
  const tag = import_stream_chat2.MessageComposer.constructTag(cachedEditedMessage);
14793
14864
  const cachedComposer = queueCache.get(tag);
@@ -14830,7 +14901,7 @@ var useMessageComposer = () => {
14830
14901
  ) && !queueCache.peek(messageComposer.tag)) {
14831
14902
  queueCache.add(messageComposer.tag, messageComposer);
14832
14903
  }
14833
- (0, import_react37.useEffect)(() => {
14904
+ (0, import_react38.useEffect)(() => {
14834
14905
  const unsubscribe = messageComposer.registerSubscriptions();
14835
14906
  return () => {
14836
14907
  unsubscribe();
@@ -14840,17 +14911,17 @@ var useMessageComposer = () => {
14840
14911
  };
14841
14912
 
14842
14913
  // src/experimental/Search/hooks/useSearchQueriesInProgress.ts
14843
- var import_react38 = require("react");
14914
+ var import_react39 = require("react");
14844
14915
  var searchControllerStateSelector = (value) => ({
14845
14916
  sources: value.sources
14846
14917
  });
14847
14918
  var useSearchQueriesInProgress = (searchController) => {
14848
- const [queriesInProgress, setQueriesInProgress] = (0, import_react38.useState)([]);
14919
+ const [queriesInProgress, setQueriesInProgress] = (0, import_react39.useState)([]);
14849
14920
  const { sources } = useStateStore(
14850
14921
  searchController.state,
14851
14922
  searchControllerStateSelector
14852
14923
  );
14853
- (0, import_react38.useEffect)(() => {
14924
+ (0, import_react39.useEffect)(() => {
14854
14925
  const subscriptions = sources.map(
14855
14926
  (source) => source.state.subscribeWithSelector(
14856
14927
  (value) => ({ isLoading: value.isLoading }),
@@ -14870,7 +14941,7 @@ var useSearchQueriesInProgress = (searchController) => {
14870
14941
  };
14871
14942
 
14872
14943
  // src/experimental/MessageActions/hooks/useBaseMessageActionSetFilter.ts
14873
- var import_react39 = require("react");
14944
+ var import_react40 = require("react");
14874
14945
  var useBaseMessageActionSetFilter = (messageActionSet, disable2 = false) => {
14875
14946
  const { initialMessage: isInitialMessage, message } = useMessageContext();
14876
14947
  const {
@@ -14884,7 +14955,7 @@ var useBaseMessageActionSetFilter = (messageActionSet, disable2 = false) => {
14884
14955
  canReply
14885
14956
  } = useUserRole(message);
14886
14957
  const isMessageThreadReply = typeof message.parent_id === "string";
14887
- return (0, import_react39.useMemo)(() => {
14958
+ return (0, import_react40.useMemo)(() => {
14888
14959
  if (disable2) return messageActionSet;
14889
14960
  if (isInitialMessage || // not sure whether this thing even works anymore
14890
14961
  !message.type || message.type === "error" || message.type === "system" || message.type === "ephemeral" || message.status === "failed" || message.status === "sending")
@@ -14915,8 +14986,8 @@ var useBaseMessageActionSetFilter = (messageActionSet, disable2 = false) => {
14915
14986
  };
14916
14987
 
14917
14988
  // src/experimental/MessageActions/hooks/useSplitMessageActionSet.ts
14918
- var import_react40 = require("react");
14919
- var useSplitMessageActionSet = (messageActionSet) => (0, import_react40.useMemo)(() => {
14989
+ var import_react41 = require("react");
14990
+ var useSplitMessageActionSet = (messageActionSet) => (0, import_react41.useMemo)(() => {
14920
14991
  const quickActionSet = [];
14921
14992
  const dropdownActionSet = [];
14922
14993
  for (const action of messageActionSet) {
@@ -14927,7 +14998,7 @@ var useSplitMessageActionSet = (messageActionSet) => (0, import_react40.useMemo)
14927
14998
  }, [messageActionSet]);
14928
14999
 
14929
15000
  // src/experimental/MessageActions/defaults.tsx
14930
- var import_react41 = __toESM(require("react"));
15001
+ var import_react42 = __toESM(require("react"));
14931
15002
  var msgActionsBoxButtonClassName = "str-chat__message-actions-list-item-button";
14932
15003
  var DefaultDropdownActionButton = ({
14933
15004
  "aria-selected": ariaSelected = "false",
@@ -14935,7 +15006,7 @@ var DefaultDropdownActionButton = ({
14935
15006
  className = msgActionsBoxButtonClassName,
14936
15007
  role = "option",
14937
15008
  ...rest
14938
- }) => /* @__PURE__ */ import_react41.default.createElement("button", { "aria-selected": ariaSelected, className, role, ...rest }, children);
15009
+ }) => /* @__PURE__ */ import_react42.default.createElement("button", { "aria-selected": ariaSelected, className, role, ...rest }, children);
14939
15010
  var DefaultMessageActionComponents = {
14940
15011
  dropdown: {
14941
15012
  Quote() {
@@ -14950,42 +15021,42 @@ var DefaultMessageActionComponents = {
14950
15021
  textarea.focus();
14951
15022
  }
14952
15023
  };
14953
- return /* @__PURE__ */ import_react41.default.createElement(DefaultDropdownActionButton, { onClick: handleQuote }, t("Quote"));
15024
+ return /* @__PURE__ */ import_react42.default.createElement(DefaultDropdownActionButton, { onClick: handleQuote }, t("Quote"));
14954
15025
  },
14955
15026
  Pin() {
14956
15027
  const { handlePin, message } = useMessageContext();
14957
15028
  const { t } = useTranslationContext();
14958
- return /* @__PURE__ */ import_react41.default.createElement(DefaultDropdownActionButton, { onClick: handlePin }, !message.pinned ? t("Pin") : t("Unpin"));
15029
+ return /* @__PURE__ */ import_react42.default.createElement(DefaultDropdownActionButton, { onClick: handlePin }, !message.pinned ? t("Pin") : t("Unpin"));
14959
15030
  },
14960
15031
  MarkUnread() {
14961
15032
  const { handleMarkUnread } = useMessageContext();
14962
15033
  const { t } = useTranslationContext();
14963
- return /* @__PURE__ */ import_react41.default.createElement(DefaultDropdownActionButton, { onClick: handleMarkUnread }, t("Mark as unread"));
15034
+ return /* @__PURE__ */ import_react42.default.createElement(DefaultDropdownActionButton, { onClick: handleMarkUnread }, t("Mark as unread"));
14964
15035
  },
14965
15036
  Flag() {
14966
15037
  const { handleFlag } = useMessageContext();
14967
15038
  const { t } = useTranslationContext();
14968
- return /* @__PURE__ */ import_react41.default.createElement(DefaultDropdownActionButton, { onClick: handleFlag }, t("Flag"));
15039
+ return /* @__PURE__ */ import_react42.default.createElement(DefaultDropdownActionButton, { onClick: handleFlag }, t("Flag"));
14969
15040
  },
14970
15041
  Mute() {
14971
15042
  const { handleMute, message } = useMessageContext();
14972
15043
  const { mutes } = useChatContext();
14973
15044
  const { t } = useTranslationContext();
14974
- return /* @__PURE__ */ import_react41.default.createElement(DefaultDropdownActionButton, { onClick: handleMute }, isUserMuted(message, mutes) ? t("Unmute") : t("Mute"));
15045
+ return /* @__PURE__ */ import_react42.default.createElement(DefaultDropdownActionButton, { onClick: handleMute }, isUserMuted(message, mutes) ? t("Unmute") : t("Mute"));
14975
15046
  },
14976
15047
  Edit() {
14977
15048
  const { handleEdit } = useMessageContext();
14978
15049
  const { t } = useTranslationContext();
14979
- return /* @__PURE__ */ import_react41.default.createElement(DefaultDropdownActionButton, { onClick: handleEdit }, t("Edit Message"));
15050
+ return /* @__PURE__ */ import_react42.default.createElement(DefaultDropdownActionButton, { onClick: handleEdit }, t("Edit Message"));
14980
15051
  },
14981
15052
  Delete() {
14982
15053
  const { handleDelete: handleDelete2 } = useMessageContext();
14983
15054
  const { t } = useTranslationContext();
14984
- return /* @__PURE__ */ import_react41.default.createElement(DefaultDropdownActionButton, { onClick: handleDelete2 }, t("Delete"));
15055
+ return /* @__PURE__ */ import_react42.default.createElement(DefaultDropdownActionButton, { onClick: handleDelete2 }, t("Delete"));
14985
15056
  },
14986
15057
  RemindMe() {
14987
15058
  const { isMyMessage } = useMessageContext();
14988
- return /* @__PURE__ */ import_react41.default.createElement(
15059
+ return /* @__PURE__ */ import_react42.default.createElement(
14989
15060
  RemindMeActionButton,
14990
15061
  {
14991
15062
  className: msgActionsBoxButtonClassName,
@@ -14998,7 +15069,7 @@ var DefaultMessageActionComponents = {
14998
15069
  const { message } = useMessageContext();
14999
15070
  const { t } = useTranslationContext();
15000
15071
  const reminder = useMessageReminder(message.id);
15001
- return /* @__PURE__ */ import_react41.default.createElement(
15072
+ return /* @__PURE__ */ import_react42.default.createElement(
15002
15073
  DefaultDropdownActionButton,
15003
15074
  {
15004
15075
  onClick: () => reminder ? client.reminders.deleteReminder(reminder.id) : client.reminders.createReminder({ messageId: message.id })
@@ -15009,12 +15080,12 @@ var DefaultMessageActionComponents = {
15009
15080
  },
15010
15081
  quick: {
15011
15082
  React() {
15012
- return /* @__PURE__ */ import_react41.default.createElement(ReactionSelectorWithButton, { ReactionIcon });
15083
+ return /* @__PURE__ */ import_react42.default.createElement(ReactionSelectorWithButton, { ReactionIcon });
15013
15084
  },
15014
15085
  Reply() {
15015
15086
  const { handleOpenThread } = useMessageContext();
15016
15087
  const { t } = useTranslationContext();
15017
- return /* @__PURE__ */ import_react41.default.createElement(
15088
+ return /* @__PURE__ */ import_react42.default.createElement(
15018
15089
  "button",
15019
15090
  {
15020
15091
  "aria-label": t("aria/Open Thread"),
@@ -15022,7 +15093,7 @@ var DefaultMessageActionComponents = {
15022
15093
  "data-testid": "thread-action",
15023
15094
  onClick: handleOpenThread
15024
15095
  },
15025
- /* @__PURE__ */ import_react41.default.createElement(ThreadIcon, { className: "str-chat__message-action-icon" })
15096
+ /* @__PURE__ */ import_react42.default.createElement(ThreadIcon, { className: "str-chat__message-action-icon" })
15026
15097
  );
15027
15098
  }
15028
15099
  }
@@ -15094,7 +15165,7 @@ var MessageActions = ({
15094
15165
  const { theme } = useChatContext();
15095
15166
  const { isMyMessage, message } = useMessageContext();
15096
15167
  const { t } = useTranslationContext();
15097
- const [actionsBoxButtonElement, setActionsBoxButtonElement] = (0, import_react42.useState)(null);
15168
+ const [actionsBoxButtonElement, setActionsBoxButtonElement] = (0, import_react43.useState)(null);
15098
15169
  const filteredMessageActionSet = useBaseMessageActionSetFilter(
15099
15170
  messageActionSet,
15100
15171
  disableBaseMessageActionSetFilter
@@ -15104,20 +15175,23 @@ var MessageActions = ({
15104
15175
  );
15105
15176
  const dropdownDialogId = `message-actions--${message.id}`;
15106
15177
  const reactionSelectorDialogId = `reaction-selector--${message.id}`;
15107
- const dialog = useDialog({ id: dropdownDialogId });
15108
- const dropdownDialogIsOpen = useDialogIsOpen(dropdownDialogId);
15109
- const reactionSelectorDialogIsOpen = useDialogIsOpen(reactionSelectorDialogId);
15178
+ const { dialog, dialogManager } = useDialogOnNearestManager({ id: dropdownDialogId });
15179
+ const dropdownDialogIsOpen = useDialogIsOpen(dropdownDialogId, dialogManager?.id);
15180
+ const reactionSelectorDialogIsOpen = useDialogIsOpen(
15181
+ reactionSelectorDialogId,
15182
+ dialogManager?.id
15183
+ );
15110
15184
  if (dropdownActionSet.length + quickActionSet.length === 0) {
15111
15185
  return null;
15112
15186
  }
15113
- return /* @__PURE__ */ import_react42.default.createElement(
15187
+ return /* @__PURE__ */ import_react43.default.createElement(
15114
15188
  "div",
15115
15189
  {
15116
15190
  className: (0, import_clsx9.default)(`str-chat__message-${theme}__actions str-chat__message-options`, {
15117
15191
  "str-chat__message-options--active": dropdownDialogIsOpen || reactionSelectorDialogIsOpen
15118
15192
  })
15119
15193
  },
15120
- dropdownActionSet.length > 0 && /* @__PURE__ */ import_react42.default.createElement(MessageActionsWrapper, { inline: false, toggleOpen: dialog?.toggle }, /* @__PURE__ */ import_react42.default.createElement(
15194
+ dropdownActionSet.length > 0 && /* @__PURE__ */ import_react43.default.createElement(MessageActionsWrapper, { inline: false, toggleOpen: dialog?.toggle }, /* @__PURE__ */ import_react43.default.createElement(
15121
15195
  "button",
15122
15196
  {
15123
15197
  "aria-expanded": dropdownDialogIsOpen,
@@ -15127,31 +15201,32 @@ var MessageActions = ({
15127
15201
  "data-testid": "message-actions-toggle-button",
15128
15202
  ref: setActionsBoxButtonElement
15129
15203
  },
15130
- /* @__PURE__ */ import_react42.default.createElement(ActionsIcon, { className: "str-chat__message-action-icon" })
15131
- ), /* @__PURE__ */ import_react42.default.createElement(
15204
+ /* @__PURE__ */ import_react43.default.createElement(ActionsIcon, { className: "str-chat__message-action-icon" })
15205
+ ), /* @__PURE__ */ import_react43.default.createElement(
15132
15206
  DialogAnchor,
15133
15207
  {
15208
+ dialogManagerId: dialogManager?.id,
15134
15209
  id: dropdownDialogId,
15135
15210
  placement: isMyMessage() ? "top-end" : "top-start",
15136
15211
  referenceElement: actionsBoxButtonElement,
15137
15212
  tabIndex: -1,
15138
15213
  trapFocus: true
15139
15214
  },
15140
- /* @__PURE__ */ import_react42.default.createElement(DropdownBox, { open: dropdownDialogIsOpen }, dropdownActionSet.map(({ Component: DropdownActionComponent, type }) => /* @__PURE__ */ import_react42.default.createElement(DropdownActionComponent, { key: type })))
15215
+ /* @__PURE__ */ import_react43.default.createElement(DropdownBox, { open: dropdownDialogIsOpen }, dropdownActionSet.map(({ Component: DropdownActionComponent, type }) => /* @__PURE__ */ import_react43.default.createElement(DropdownActionComponent, { key: type })))
15141
15216
  )),
15142
- quickActionSet.map(({ Component: QuickActionComponent, type }) => /* @__PURE__ */ import_react42.default.createElement(QuickActionComponent, { key: type }))
15217
+ quickActionSet.map(({ Component: QuickActionComponent, type }) => /* @__PURE__ */ import_react43.default.createElement(QuickActionComponent, { key: type }))
15143
15218
  );
15144
15219
  };
15145
15220
  var DropdownBox = ({ children, open }) => {
15146
15221
  const { t } = useTranslationContext();
15147
- return /* @__PURE__ */ import_react42.default.createElement(
15222
+ return /* @__PURE__ */ import_react43.default.createElement(
15148
15223
  "div",
15149
15224
  {
15150
15225
  className: (0, import_clsx9.default)("str-chat__message-actions-box", {
15151
15226
  "str-chat__message-actions-box--open": open
15152
15227
  })
15153
15228
  },
15154
- /* @__PURE__ */ import_react42.default.createElement(
15229
+ /* @__PURE__ */ import_react43.default.createElement(
15155
15230
  "div",
15156
15231
  {
15157
15232
  "aria-label": t("aria/Message Options"),
@@ -15165,21 +15240,21 @@ var DropdownBox = ({ children, open }) => {
15165
15240
 
15166
15241
  // src/experimental/Search/Search.tsx
15167
15242
  var import_clsx12 = __toESM(require("clsx"));
15168
- var import_react55 = __toESM(require("react"));
15243
+ var import_react56 = __toESM(require("react"));
15169
15244
 
15170
15245
  // src/experimental/Search/SearchBar/SearchBar.tsx
15171
15246
  var import_clsx10 = __toESM(require("clsx"));
15172
- var import_react44 = __toESM(require("react"));
15247
+ var import_react45 = __toESM(require("react"));
15173
15248
 
15174
15249
  // src/experimental/Search/SearchContext.tsx
15175
- var import_react43 = __toESM(require("react"));
15176
- var SearchContext = (0, import_react43.createContext)(void 0);
15250
+ var import_react44 = __toESM(require("react"));
15251
+ var SearchContext = (0, import_react44.createContext)(void 0);
15177
15252
  var SearchContextProvider = ({
15178
15253
  children,
15179
15254
  value
15180
- }) => /* @__PURE__ */ import_react43.default.createElement(SearchContext.Provider, { value }, children);
15255
+ }) => /* @__PURE__ */ import_react44.default.createElement(SearchContext.Provider, { value }, children);
15181
15256
  var useSearchContext = () => {
15182
- const contextValue = (0, import_react43.useContext)(SearchContext);
15257
+ const contextValue = (0, import_react44.useContext)(SearchContext);
15183
15258
  return contextValue;
15184
15259
  };
15185
15260
 
@@ -15192,12 +15267,12 @@ var SearchBar = () => {
15192
15267
  const { t } = useTranslationContext();
15193
15268
  const { disabled, exitSearchOnInputBlur, placeholder, searchController } = useSearchContext();
15194
15269
  const queriesInProgress = useSearchQueriesInProgress(searchController);
15195
- const [input, setInput] = (0, import_react44.useState)(null);
15270
+ const [input, setInput] = (0, import_react45.useState)(null);
15196
15271
  const { isActive, searchQuery } = useStateStore(
15197
15272
  searchController.state,
15198
15273
  searchControllerStateSelector2
15199
15274
  );
15200
- (0, import_react44.useEffect)(() => {
15275
+ (0, import_react45.useEffect)(() => {
15201
15276
  if (!input) return;
15202
15277
  const handleKeyDown = (event) => {
15203
15278
  if (event.key === "Escape") {
@@ -15210,15 +15285,15 @@ var SearchBar = () => {
15210
15285
  document.removeEventListener("keydown", handleKeyDown);
15211
15286
  };
15212
15287
  }, [searchController, input]);
15213
- return /* @__PURE__ */ import_react44.default.createElement("div", { className: "str-chat__search-bar", "data-testid": "search-bar" }, /* @__PURE__ */ import_react44.default.createElement(
15288
+ return /* @__PURE__ */ import_react45.default.createElement("div", { className: "str-chat__search-bar", "data-testid": "search-bar" }, /* @__PURE__ */ import_react45.default.createElement(
15214
15289
  "div",
15215
15290
  {
15216
15291
  className: (0, import_clsx10.default)("str-chat__search-input--wrapper", {
15217
15292
  "str-chat__search-input--wrapper-active": isActive
15218
15293
  })
15219
15294
  },
15220
- /* @__PURE__ */ import_react44.default.createElement("div", { className: "str-chat__search-input--icon" }),
15221
- /* @__PURE__ */ import_react44.default.createElement(
15295
+ /* @__PURE__ */ import_react45.default.createElement("div", { className: "str-chat__search-input--icon" }),
15296
+ /* @__PURE__ */ import_react45.default.createElement(
15222
15297
  "input",
15223
15298
  {
15224
15299
  className: "str-chat__search-input",
@@ -15241,7 +15316,7 @@ var SearchBar = () => {
15241
15316
  value: searchQuery
15242
15317
  }
15243
15318
  ),
15244
- searchQuery && /* @__PURE__ */ import_react44.default.createElement(
15319
+ searchQuery && /* @__PURE__ */ import_react45.default.createElement(
15245
15320
  "button",
15246
15321
  {
15247
15322
  className: "str-chat__search-input--clear-button",
@@ -15252,9 +15327,9 @@ var SearchBar = () => {
15252
15327
  input?.focus();
15253
15328
  }
15254
15329
  },
15255
- /* @__PURE__ */ import_react44.default.createElement("div", { className: "str-chat__search-input--clear-button-icon" })
15330
+ /* @__PURE__ */ import_react45.default.createElement("div", { className: "str-chat__search-input--clear-button-icon" })
15256
15331
  )
15257
- ), isActive ? /* @__PURE__ */ import_react44.default.createElement(
15332
+ ), isActive ? /* @__PURE__ */ import_react45.default.createElement(
15258
15333
  "button",
15259
15334
  {
15260
15335
  className: (0, import_clsx10.default)(
@@ -15271,25 +15346,25 @@ var SearchBar = () => {
15271
15346
  };
15272
15347
 
15273
15348
  // src/experimental/Search/SearchResults/SearchResults.tsx
15274
- var import_react54 = __toESM(require("react"));
15349
+ var import_react55 = __toESM(require("react"));
15275
15350
 
15276
15351
  // src/experimental/Search/SearchResults/SearchSourceResults.tsx
15277
- var import_react51 = __toESM(require("react"));
15352
+ var import_react52 = __toESM(require("react"));
15278
15353
 
15279
15354
  // src/experimental/Search/SearchResults/SearchSourceResultList.tsx
15280
- var import_react49 = __toESM(require("react"));
15355
+ var import_react50 = __toESM(require("react"));
15281
15356
 
15282
15357
  // src/experimental/Search/SearchResults/SearchResultItem.tsx
15283
- var import_react45 = __toESM(require("react"));
15358
+ var import_react46 = __toESM(require("react"));
15284
15359
  var import_lodash3 = __toESM(require("lodash.uniqby"));
15285
15360
  var ChannelSearchResultItem = ({ item }) => {
15286
15361
  const { setActiveChannel } = useChatContext();
15287
15362
  const { setChannels } = useChannelListContext();
15288
- const onSelect = (0, import_react45.useCallback)(() => {
15363
+ const onSelect = (0, import_react46.useCallback)(() => {
15289
15364
  setActiveChannel(item);
15290
15365
  setChannels?.((channels) => (0, import_lodash3.default)([item, ...channels], "cid"));
15291
15366
  }, [item, setActiveChannel, setChannels]);
15292
- return /* @__PURE__ */ import_react45.default.createElement(
15367
+ return /* @__PURE__ */ import_react46.default.createElement(
15293
15368
  ChannelPreview,
15294
15369
  {
15295
15370
  channel: item,
@@ -15308,13 +15383,13 @@ var MessageSearchResultItem = ({
15308
15383
  setActiveChannel
15309
15384
  } = useChatContext();
15310
15385
  const { setChannels } = useChannelListContext();
15311
- const channel = (0, import_react45.useMemo)(() => {
15386
+ const channel = (0, import_react46.useMemo)(() => {
15312
15387
  const { channel: channelData } = item;
15313
15388
  const type = channelData?.type ?? "unknown";
15314
15389
  const id = channelData?.id ?? "unknown";
15315
15390
  return client.channel(type, id);
15316
15391
  }, [client, item]);
15317
- const onSelect = (0, import_react45.useCallback)(async () => {
15392
+ const onSelect = (0, import_react46.useCallback)(async () => {
15318
15393
  if (!channel) return;
15319
15394
  await channel.state.loadMessageIntoState(
15320
15395
  item.id,
@@ -15325,9 +15400,9 @@ var MessageSearchResultItem = ({
15325
15400
  setActiveChannel(channel);
15326
15401
  setChannels?.((channels) => (0, import_lodash3.default)([channel, ...channels], "cid"));
15327
15402
  }, [channel, item, searchController, setActiveChannel, setChannels]);
15328
- const getLatestMessagePreview2 = (0, import_react45.useCallback)(() => item.text, [item]);
15403
+ const getLatestMessagePreview2 = (0, import_react46.useCallback)(() => item.text, [item]);
15329
15404
  if (!channel) return;
15330
- return /* @__PURE__ */ import_react45.default.createElement(
15405
+ return /* @__PURE__ */ import_react46.default.createElement(
15331
15406
  ChannelPreview,
15332
15407
  {
15333
15408
  active: channel.cid === activeChannel?.cid && item.id === searchController._internalState.getLatestValue().focusedMessage?.id,
@@ -15342,7 +15417,7 @@ var UserSearchResultItem = ({ item }) => {
15342
15417
  const { client, setActiveChannel } = useChatContext();
15343
15418
  const { setChannels } = useChannelListContext();
15344
15419
  const { directMessagingChannelType } = useSearchContext();
15345
- const onClick = (0, import_react45.useCallback)(() => {
15420
+ const onClick = (0, import_react46.useCallback)(() => {
15346
15421
  const newChannel = client.channel(directMessagingChannelType, {
15347
15422
  members: [client.userID, item.id]
15348
15423
  });
@@ -15350,7 +15425,7 @@ var UserSearchResultItem = ({ item }) => {
15350
15425
  setActiveChannel(newChannel);
15351
15426
  setChannels?.((channels) => (0, import_lodash3.default)([newChannel, ...channels], "cid"));
15352
15427
  }, [client, item, setActiveChannel, setChannels, directMessagingChannelType]);
15353
- return /* @__PURE__ */ import_react45.default.createElement(
15428
+ return /* @__PURE__ */ import_react46.default.createElement(
15354
15429
  "button",
15355
15430
  {
15356
15431
  "aria-label": `Select User Channel: ${item.name || ""}`,
@@ -15359,7 +15434,7 @@ var UserSearchResultItem = ({ item }) => {
15359
15434
  onClick,
15360
15435
  role: "option"
15361
15436
  },
15362
- /* @__PURE__ */ import_react45.default.createElement(
15437
+ /* @__PURE__ */ import_react46.default.createElement(
15363
15438
  Avatar,
15364
15439
  {
15365
15440
  className: "str-chat__avatar--channel-preview",
@@ -15368,7 +15443,7 @@ var UserSearchResultItem = ({ item }) => {
15368
15443
  user: item
15369
15444
  }
15370
15445
  ),
15371
- /* @__PURE__ */ import_react45.default.createElement("div", { className: "str-chat__search-result--display-name" }, item.name || item.id)
15446
+ /* @__PURE__ */ import_react46.default.createElement("div", { className: "str-chat__search-result--display-name" }, item.name || item.id)
15372
15447
  );
15373
15448
  };
15374
15449
  var DefaultSearchResultItems = {
@@ -15378,18 +15453,18 @@ var DefaultSearchResultItems = {
15378
15453
  };
15379
15454
 
15380
15455
  // src/experimental/Search/SearchResults/SearchSourceResultListFooter.tsx
15381
- var import_react48 = __toESM(require("react"));
15456
+ var import_react49 = __toESM(require("react"));
15382
15457
 
15383
15458
  // src/experimental/Search/SearchResults/SearchSourceResultsLoadingIndicator.tsx
15384
- var import_react47 = __toESM(require("react"));
15459
+ var import_react48 = __toESM(require("react"));
15385
15460
 
15386
15461
  // src/experimental/Search/SearchSourceResultsContext.tsx
15387
- var import_react46 = __toESM(require("react"));
15388
- var SearchSourceResultsContext = (0, import_react46.createContext)(void 0);
15462
+ var import_react47 = __toESM(require("react"));
15463
+ var SearchSourceResultsContext = (0, import_react47.createContext)(void 0);
15389
15464
  var SearchSourceResultsContextProvider = ({
15390
15465
  children,
15391
15466
  value
15392
- }) => /* @__PURE__ */ import_react46.default.createElement(
15467
+ }) => /* @__PURE__ */ import_react47.default.createElement(
15393
15468
  SearchSourceResultsContext.Provider,
15394
15469
  {
15395
15470
  value
@@ -15397,7 +15472,7 @@ var SearchSourceResultsContextProvider = ({
15397
15472
  children
15398
15473
  );
15399
15474
  var useSearchSourceResultsContext = () => {
15400
- const contextValue = (0, import_react46.useContext)(SearchSourceResultsContext);
15475
+ const contextValue = (0, import_react47.useContext)(SearchSourceResultsContext);
15401
15476
  return contextValue;
15402
15477
  };
15403
15478
 
@@ -15405,7 +15480,7 @@ var useSearchSourceResultsContext = () => {
15405
15480
  var SearchSourceResultsLoadingIndicator = () => {
15406
15481
  const { t } = useTranslationContext();
15407
15482
  const { searchSource } = useSearchSourceResultsContext();
15408
- return /* @__PURE__ */ import_react47.default.createElement(
15483
+ return /* @__PURE__ */ import_react48.default.createElement(
15409
15484
  "div",
15410
15485
  {
15411
15486
  className: "str-chat__search-source-results__loading-indicator",
@@ -15430,13 +15505,13 @@ var SearchSourceResultListFooter = () => {
15430
15505
  searchSource.state,
15431
15506
  searchSourceStateSelector
15432
15507
  );
15433
- return /* @__PURE__ */ import_react48.default.createElement(
15508
+ return /* @__PURE__ */ import_react49.default.createElement(
15434
15509
  "div",
15435
15510
  {
15436
15511
  className: "str-chat__search-source-result-list__footer",
15437
15512
  "data-testid": "search-footer"
15438
15513
  },
15439
- isLoading ? /* @__PURE__ */ import_react48.default.createElement(SearchSourceResultsLoadingIndicator2, null) : !hasNext ? /* @__PURE__ */ import_react48.default.createElement("div", { className: "str-chat__search-source-results---empty" }, t("All results loaded")) : null
15514
+ isLoading ? /* @__PURE__ */ import_react49.default.createElement(SearchSourceResultsLoadingIndicator2, null) : !hasNext ? /* @__PURE__ */ import_react49.default.createElement("div", { className: "str-chat__search-source-results---empty" }, t("All results loaded")) : null
15440
15515
  );
15441
15516
  };
15442
15517
 
@@ -15454,36 +15529,36 @@ var SearchSourceResultList = ({
15454
15529
  const { items } = useStateStore(searchSource.state, searchSourceStateSelector2);
15455
15530
  const SearchResultItem = SearchResultItems[searchSource.type];
15456
15531
  if (!SearchResultItem) return null;
15457
- return /* @__PURE__ */ import_react49.default.createElement(
15532
+ return /* @__PURE__ */ import_react50.default.createElement(
15458
15533
  "div",
15459
15534
  {
15460
15535
  className: "str-chat__search-source-result-list",
15461
15536
  "data-testid": "search-source-result-list"
15462
15537
  },
15463
- /* @__PURE__ */ import_react49.default.createElement(
15538
+ /* @__PURE__ */ import_react50.default.createElement(
15464
15539
  InfiniteScrollPaginator,
15465
15540
  {
15466
15541
  loadNextDebounceMs: loadMoreDebounceMs,
15467
15542
  loadNextOnScrollToBottom: searchSource.search,
15468
15543
  threshold: loadMoreThresholdPx
15469
15544
  },
15470
- items?.map((item, i) => /* @__PURE__ */ import_react49.default.createElement(
15545
+ items?.map((item, i) => /* @__PURE__ */ import_react50.default.createElement(
15471
15546
  SearchResultItem,
15472
15547
  {
15473
15548
  item,
15474
15549
  key: `source-search-result-${searchSource.type}-${i}`
15475
15550
  }
15476
15551
  )),
15477
- /* @__PURE__ */ import_react49.default.createElement(SearchSourceResultListFooter2, null)
15552
+ /* @__PURE__ */ import_react50.default.createElement(SearchSourceResultListFooter2, null)
15478
15553
  )
15479
15554
  );
15480
15555
  };
15481
15556
 
15482
15557
  // src/experimental/Search/SearchResults/SearchSourceResultsEmpty.tsx
15483
- var import_react50 = __toESM(require("react"));
15558
+ var import_react51 = __toESM(require("react"));
15484
15559
  var SearchSourceResultsEmpty = () => {
15485
15560
  const { t } = useTranslationContext();
15486
- return /* @__PURE__ */ import_react50.default.createElement("div", { className: "str-chat__search-source-results-empty" }, t("No results found"));
15561
+ return /* @__PURE__ */ import_react51.default.createElement("div", { className: "str-chat__search-source-results-empty" }, t("No results found"));
15487
15562
  };
15488
15563
 
15489
15564
  // src/experimental/Search/SearchResults/SearchSourceResultsHeader.tsx
@@ -15505,20 +15580,20 @@ var SearchSourceResults = ({ searchSource }) => {
15505
15580
  searchSourceStateSelector3
15506
15581
  );
15507
15582
  if (!items && !isLoading) return null;
15508
- return /* @__PURE__ */ import_react51.default.createElement(SearchSourceResultsContextProvider, { value: { searchSource } }, /* @__PURE__ */ import_react51.default.createElement(
15583
+ return /* @__PURE__ */ import_react52.default.createElement(SearchSourceResultsContextProvider, { value: { searchSource } }, /* @__PURE__ */ import_react52.default.createElement(
15509
15584
  "div",
15510
15585
  {
15511
15586
  className: "str-chat__search-source-results",
15512
15587
  "data-testid": "search-source-results"
15513
15588
  },
15514
- /* @__PURE__ */ import_react51.default.createElement(SearchSourceResultsHeader2, null),
15515
- items?.length || isLoading ? /* @__PURE__ */ import_react51.default.createElement(SearchSourceResultList2, null) : /* @__PURE__ */ import_react51.default.createElement(SearchSourceResultsEmpty2, null)
15589
+ /* @__PURE__ */ import_react52.default.createElement(SearchSourceResultsHeader2, null),
15590
+ items?.length || isLoading ? /* @__PURE__ */ import_react52.default.createElement(SearchSourceResultList2, null) : /* @__PURE__ */ import_react52.default.createElement(SearchSourceResultsEmpty2, null)
15516
15591
  ));
15517
15592
  };
15518
15593
 
15519
15594
  // src/experimental/Search/SearchResults/SearchResultsHeader.tsx
15520
15595
  var import_clsx11 = __toESM(require("clsx"));
15521
- var import_react52 = __toESM(require("react"));
15596
+ var import_react53 = __toESM(require("react"));
15522
15597
  var searchSourceStateSelector4 = (nextValue) => ({
15523
15598
  isActive: nextValue.isActive
15524
15599
  });
@@ -15527,7 +15602,7 @@ var SearchSourceFilterButton = ({ source }) => {
15527
15602
  const { searchController } = useSearchContext();
15528
15603
  const { isActive } = useStateStore(source.state, searchSourceStateSelector4);
15529
15604
  const label = `search-results-header-filter-source-button-label--${source.type}`;
15530
- return /* @__PURE__ */ import_react52.default.createElement(
15605
+ return /* @__PURE__ */ import_react53.default.createElement(
15531
15606
  "button",
15532
15607
  {
15533
15608
  "aria-label": t("aria/Search results header filter button"),
@@ -15550,13 +15625,13 @@ var SearchSourceFilterButton = ({ source }) => {
15550
15625
  };
15551
15626
  var SearchResultsHeader = () => {
15552
15627
  const { searchController } = useSearchContext();
15553
- return /* @__PURE__ */ import_react52.default.createElement("div", { className: "str-chat__search-results-header", "data-testid": "search-results-header" }, /* @__PURE__ */ import_react52.default.createElement(
15628
+ return /* @__PURE__ */ import_react53.default.createElement("div", { className: "str-chat__search-results-header", "data-testid": "search-results-header" }, /* @__PURE__ */ import_react53.default.createElement(
15554
15629
  "div",
15555
15630
  {
15556
15631
  className: "str-chat__search-results-header__filter-source-buttons",
15557
15632
  "data-testid": "filter-source-buttons"
15558
15633
  },
15559
- searchController.sources.map((source) => /* @__PURE__ */ import_react52.default.createElement(
15634
+ searchController.sources.map((source) => /* @__PURE__ */ import_react53.default.createElement(
15560
15635
  SearchSourceFilterButton,
15561
15636
  {
15562
15637
  key: `search-source-filter-button-${source.type}`,
@@ -15567,10 +15642,10 @@ var SearchResultsHeader = () => {
15567
15642
  };
15568
15643
 
15569
15644
  // src/experimental/Search/SearchResults/SearchResultsPresearch.tsx
15570
- var import_react53 = __toESM(require("react"));
15645
+ var import_react54 = __toESM(require("react"));
15571
15646
  var SearchResultsPresearch = () => {
15572
15647
  const { t } = useTranslationContext();
15573
- return /* @__PURE__ */ import_react53.default.createElement("div", { className: "str-chat__search-results-presearch" }, t("Start typing to search"));
15648
+ return /* @__PURE__ */ import_react54.default.createElement("div", { className: "str-chat__search-results-presearch" }, t("Start typing to search"));
15574
15649
  };
15575
15650
 
15576
15651
  // src/experimental/Search/SearchResults/SearchResults.tsx
@@ -15591,7 +15666,7 @@ var SearchResults = () => {
15591
15666
  searchController.state,
15592
15667
  searchControllerStateSelector3
15593
15668
  );
15594
- return !isActive ? null : /* @__PURE__ */ import_react54.default.createElement("div", { "aria-label": t("aria/Search results"), className: "str-chat__search-results" }, /* @__PURE__ */ import_react54.default.createElement(SearchResultsHeader2, null), !searchQuery ? /* @__PURE__ */ import_react54.default.createElement(SearchResultsPresearch2, { activeSources }) : activeSources.map((source) => /* @__PURE__ */ import_react54.default.createElement(SearchSourceResults2, { key: source.type, searchSource: source })));
15669
+ return !isActive ? null : /* @__PURE__ */ import_react55.default.createElement("div", { "aria-label": t("aria/Search results"), className: "str-chat__search-results" }, /* @__PURE__ */ import_react55.default.createElement(SearchResultsHeader2, null), !searchQuery ? /* @__PURE__ */ import_react55.default.createElement(SearchResultsPresearch2, { activeSources }) : activeSources.map((source) => /* @__PURE__ */ import_react55.default.createElement(SearchSourceResults2, { key: source.type, searchSource: source })));
15595
15670
  };
15596
15671
 
15597
15672
  // src/experimental/Search/Search.tsx
@@ -15605,7 +15680,7 @@ var Search = ({
15605
15680
  const { SearchBar: SearchBar2 = SearchBar, SearchResults: SearchResults2 = SearchResults } = useComponentContext();
15606
15681
  const { searchController } = useChatContext();
15607
15682
  const { isActive } = useStateStore(searchController.state, searchControllerStateSelector4);
15608
- return /* @__PURE__ */ import_react55.default.createElement(
15683
+ return /* @__PURE__ */ import_react56.default.createElement(
15609
15684
  SearchContextProvider,
15610
15685
  {
15611
15686
  value: {
@@ -15616,7 +15691,7 @@ var Search = ({
15616
15691
  searchController
15617
15692
  }
15618
15693
  },
15619
- /* @__PURE__ */ import_react55.default.createElement(
15694
+ /* @__PURE__ */ import_react56.default.createElement(
15620
15695
  "div",
15621
15696
  {
15622
15697
  className: (0, import_clsx12.default)("str-chat__search", {
@@ -15624,8 +15699,8 @@ var Search = ({
15624
15699
  }),
15625
15700
  "data-testid": "search"
15626
15701
  },
15627
- /* @__PURE__ */ import_react55.default.createElement(SearchBar2, null),
15628
- /* @__PURE__ */ import_react55.default.createElement(SearchResults2, null)
15702
+ /* @__PURE__ */ import_react56.default.createElement(SearchBar2, null),
15703
+ /* @__PURE__ */ import_react56.default.createElement(SearchResults2, null)
15629
15704
  )
15630
15705
  );
15631
15706
  };