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() {
@@ -12513,57 +12523,111 @@ var useMessageReminder = (messageId) => {
12513
12523
 
12514
12524
  // src/components/Dialog/ButtonWithSubmenu.tsx
12515
12525
  var import_clsx5 = __toESM(require("clsx"));
12516
- var import_react22 = __toESM(require("react"));
12526
+ var import_react23 = __toESM(require("react"));
12517
12527
 
12518
12528
  // src/components/Dialog/DialogAnchor.tsx
12519
12529
  var import_clsx4 = __toESM(require("clsx"));
12520
- var import_react21 = __toESM(require("react"));
12530
+ var import_react22 = __toESM(require("react"));
12521
12531
  var import_focus = require("@react-aria/focus");
12522
- var import_react_popper = require("react-popper");
12532
+
12533
+ // src/components/Dialog/hooks/usePopoverPosition.ts
12534
+ var import_react21 = require("@floating-ui/react");
12535
+ var hasResizeObserver = typeof window !== "undefined" && "ResizeObserver" in window;
12536
+ function autoMiddlewareFor(p) {
12537
+ if (!String(p).startsWith("auto")) return null;
12538
+ const alignment = p === "auto-start" ? "start" : p === "auto-end" ? "end" : void 0;
12539
+ return (0, import_react21.autoPlacement)({ alignment });
12540
+ }
12541
+ function toOffsetMw(opt) {
12542
+ if (opt == null) return null;
12543
+ if (Array.isArray(opt)) {
12544
+ const [crossAxis, mainAxis] = opt;
12545
+ return (0, import_react21.offset)({ crossAxis, mainAxis });
12546
+ }
12547
+ if (typeof opt === "number") return (0, import_react21.offset)(opt);
12548
+ return (0, import_react21.offset)(opt);
12549
+ }
12550
+ function usePopoverPosition({
12551
+ allowFlip = true,
12552
+ allowShift = true,
12553
+ autoUpdateOptions,
12554
+ fitAvailableSpace = false,
12555
+ freeze = false,
12556
+ offset,
12557
+ placement = "bottom-start"
12558
+ }) {
12559
+ const autoMw = autoMiddlewareFor(placement);
12560
+ const offsetMiddleware = toOffsetMw(offset);
12561
+ const isSidePlacement = placement.startsWith("left") || placement.startsWith("right");
12562
+ const middleware = [
12563
+ // offset first (mirrors common Popper setups)
12564
+ ...offsetMiddleware ? [offsetMiddleware] : [],
12565
+ // choose between autoPlacement (Popper's "auto*") OR flip()
12566
+ // only allow flip when not explicitly 'left*' or 'right*'
12567
+ ...autoMw ? [autoMw] : allowFlip && !isSidePlacement ? [(0, import_react21.flip)()] : [],
12568
+ // viewport collision adjustments
12569
+ ...allowShift ? [(0, import_react21.shift)({ padding: 8 })] : [],
12570
+ // optional size constraining
12571
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
12572
+ ...fitAvailableSpace ? [(0, import_react21.size)({ apply: () => {
12573
+ } })] : []
12574
+ ];
12575
+ const seedPlacement = String(placement).startsWith("auto") ? "bottom" : placement;
12576
+ return (0, import_react21.useFloating)({
12577
+ middleware,
12578
+ placement: seedPlacement,
12579
+ strategy: "fixed",
12580
+ whileElementsMounted: freeze ? void 0 : (reference, floating, update) => (0, import_react21.autoUpdate)(reference, floating, update, {
12581
+ ancestorResize: true,
12582
+ ancestorScroll: true,
12583
+ animationFrame: false,
12584
+ elementResize: hasResizeObserver,
12585
+ ...autoUpdateOptions
12586
+ })
12587
+ });
12588
+ }
12589
+
12590
+ // src/components/Dialog/DialogAnchor.tsx
12523
12591
  function useDialogAnchor({
12524
12592
  allowFlip,
12525
12593
  open,
12526
12594
  placement,
12527
12595
  referenceElement
12528
12596
  }) {
12529
- const [popperElement, setPopperElement] = (0, import_react21.useState)(null);
12530
- const { attributes, styles, update } = (0, import_react_popper.usePopper)(referenceElement, popperElement, {
12531
- modifiers: [
12532
- {
12533
- enabled: !!allowFlip,
12534
- // Prevent flipping
12535
- name: "flip"
12536
- },
12537
- {
12538
- name: "eventListeners",
12539
- options: {
12540
- // It's not safe to update popper position on resize and scroll, since popper's
12541
- // reference element might not be visible at the time.
12542
- resize: false,
12543
- scroll: false
12544
- }
12545
- }
12546
- ],
12597
+ const [popperElement, setPopperElement] = (0, import_react22.useState)(null);
12598
+ const { refs, strategy, update, x, y } = usePopoverPosition({
12599
+ allowFlip,
12600
+ freeze: true,
12547
12601
  placement
12548
12602
  });
12549
- (0, import_react21.useEffect)(() => {
12603
+ (0, import_react22.useEffect)(() => {
12604
+ refs.setReference(referenceElement);
12605
+ }, [referenceElement, refs]);
12606
+ (0, import_react22.useEffect)(() => {
12607
+ refs.setFloating(popperElement);
12608
+ }, [popperElement, refs]);
12609
+ (0, import_react22.useEffect)(() => {
12550
12610
  if (open && popperElement) {
12551
12611
  update?.();
12552
12612
  }
12553
- }, [open, popperElement, update]);
12613
+ }, [open, placement, popperElement, update]);
12554
12614
  if (popperElement && !open) {
12555
12615
  setPopperElement(null);
12556
12616
  }
12557
12617
  return {
12558
- attributes,
12559
12618
  setPopperElement,
12560
- styles
12619
+ styles: {
12620
+ left: x ?? 0,
12621
+ position: strategy,
12622
+ top: y ?? 0
12623
+ }
12561
12624
  };
12562
12625
  }
12563
12626
  var DialogAnchor = ({
12564
12627
  allowFlip = true,
12565
12628
  children,
12566
12629
  className,
12630
+ dialogManagerId,
12567
12631
  focus = true,
12568
12632
  id,
12569
12633
  placement = "auto",
@@ -12572,15 +12636,15 @@ var DialogAnchor = ({
12572
12636
  trapFocus,
12573
12637
  ...restDivProps
12574
12638
  }) => {
12575
- const dialog = useDialog({ id });
12576
- const open = useDialogIsOpen(id);
12577
- const { attributes, setPopperElement, styles } = useDialogAnchor({
12639
+ const dialog = useDialog({ dialogManagerId, id });
12640
+ const open = useDialogIsOpen(id, dialogManagerId);
12641
+ const { setPopperElement, styles } = useDialogAnchor({
12578
12642
  allowFlip,
12579
12643
  open,
12580
12644
  placement,
12581
12645
  referenceElement
12582
12646
  });
12583
- (0, import_react21.useEffect)(() => {
12647
+ (0, import_react22.useEffect)(() => {
12584
12648
  if (!open) return;
12585
12649
  const hideOnEscape = (event) => {
12586
12650
  if (event.key !== "Escape") return;
@@ -12594,15 +12658,14 @@ var DialogAnchor = ({
12594
12658
  if (!open) {
12595
12659
  return null;
12596
12660
  }
12597
- 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(
12661
+ 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(
12598
12662
  "div",
12599
12663
  {
12600
12664
  ...restDivProps,
12601
- ...attributes.popper,
12602
12665
  className: (0, import_clsx4.default)("str-chat__dialog-contents", className),
12603
12666
  "data-testid": "str-chat__dialog-contents",
12604
12667
  ref: setPopperElement,
12605
- style: styles.popper,
12668
+ style: styles,
12606
12669
  tabIndex: typeof tabIndex !== "undefined" ? tabIndex : 0
12607
12670
  },
12608
12671
  children
@@ -12618,26 +12681,26 @@ var ButtonWithSubmenu = ({
12618
12681
  submenuContainerProps,
12619
12682
  ...buttonProps
12620
12683
  }) => {
12621
- const buttonRef = (0, import_react22.useRef)(null);
12622
- const [dialogContainer, setDialogContainer] = (0, import_react22.useState)(null);
12623
- const keepSubmenuOpen = (0, import_react22.useRef)(false);
12624
- const dialogCloseTimeout = (0, import_react22.useRef)(null);
12625
- const dialogId = (0, import_react22.useMemo)(() => `submenu-${Math.random().toString(36).slice(2)}`, []);
12626
- const dialog = useDialog({ id: dialogId });
12627
- const dialogIsOpen = useDialogIsOpen(dialogId);
12628
- const { attributes, setPopperElement, styles } = useDialogAnchor({
12684
+ const buttonRef = (0, import_react23.useRef)(null);
12685
+ const [dialogContainer, setDialogContainer] = (0, import_react23.useState)(null);
12686
+ const keepSubmenuOpen = (0, import_react23.useRef)(false);
12687
+ const dialogCloseTimeout = (0, import_react23.useRef)(null);
12688
+ const dialogId = (0, import_react23.useMemo)(() => `submenu-${Math.random().toString(36).slice(2)}`, []);
12689
+ const { dialog, dialogManager } = useDialogOnNearestManager({ id: dialogId });
12690
+ const dialogIsOpen = useDialogIsOpen(dialogId, dialogManager?.id);
12691
+ const { setPopperElement, styles } = useDialogAnchor({
12629
12692
  open: dialogIsOpen,
12630
12693
  placement,
12631
12694
  referenceElement: buttonRef.current
12632
12695
  });
12633
- const closeDialogLazily = (0, import_react22.useCallback)(() => {
12696
+ const closeDialogLazily = (0, import_react23.useCallback)(() => {
12634
12697
  if (dialogCloseTimeout.current) clearTimeout(dialogCloseTimeout.current);
12635
12698
  dialogCloseTimeout.current = setTimeout(() => {
12636
12699
  if (keepSubmenuOpen.current) return;
12637
12700
  dialog.close();
12638
12701
  }, 100);
12639
12702
  }, [dialog]);
12640
- const handleClose = (0, import_react22.useCallback)(
12703
+ const handleClose = (0, import_react23.useCallback)(
12641
12704
  (event) => {
12642
12705
  const parentButton = buttonRef.current;
12643
12706
  if (!dialogIsOpen || !parentButton) return;
@@ -12652,7 +12715,7 @@ var ButtonWithSubmenu = ({
12652
12715
  dialog.open();
12653
12716
  keepSubmenuOpen.current = true;
12654
12717
  };
12655
- (0, import_react22.useEffect)(() => {
12718
+ (0, import_react23.useEffect)(() => {
12656
12719
  const parentButton = buttonRef.current;
12657
12720
  if (!dialogIsOpen || !parentButton) return;
12658
12721
  const hideOnEscape = (event) => {
@@ -12665,7 +12728,7 @@ var ButtonWithSubmenu = ({
12665
12728
  document.removeEventListener("keyup", hideOnEscape, { capture: true });
12666
12729
  };
12667
12730
  }, [dialogIsOpen, handleClose]);
12668
- return /* @__PURE__ */ import_react22.default.createElement(import_react22.default.Fragment, null, /* @__PURE__ */ import_react22.default.createElement(
12731
+ return /* @__PURE__ */ import_react23.default.createElement(import_react23.default.Fragment, null, /* @__PURE__ */ import_react23.default.createElement(
12669
12732
  "button",
12670
12733
  {
12671
12734
  "aria-selected": "false",
@@ -12691,10 +12754,9 @@ var ButtonWithSubmenu = ({
12691
12754
  ...buttonProps
12692
12755
  },
12693
12756
  children
12694
- ), dialogIsOpen && /* @__PURE__ */ import_react22.default.createElement(
12757
+ ), dialogIsOpen && /* @__PURE__ */ import_react23.default.createElement(
12695
12758
  "div",
12696
12759
  {
12697
- ...attributes.popper,
12698
12760
  onBlur: (event) => {
12699
12761
  const isBlurredDescendant = event.relatedTarget instanceof Node && dialogContainer?.contains(event.relatedTarget);
12700
12762
  if (isBlurredDescendant) return;
@@ -12715,26 +12777,26 @@ var ButtonWithSubmenu = ({
12715
12777
  setPopperElement(element2);
12716
12778
  setDialogContainer(element2);
12717
12779
  },
12718
- style: styles.popper,
12780
+ style: styles,
12719
12781
  tabIndex: -1,
12720
12782
  ...submenuContainerProps
12721
12783
  },
12722
- /* @__PURE__ */ import_react22.default.createElement(Submenu, null)
12784
+ /* @__PURE__ */ import_react23.default.createElement(Submenu, null)
12723
12785
  ));
12724
12786
  };
12725
12787
 
12726
12788
  // src/components/MessageActions/MessageActions.tsx
12727
12789
  var import_clsx6 = __toESM(require("clsx"));
12728
- var import_react25 = __toESM(require("react"));
12790
+ var import_react26 = __toESM(require("react"));
12729
12791
 
12730
12792
  // src/components/MessageActions/RemindMeSubmenu.tsx
12731
- var import_react23 = __toESM(require("react"));
12793
+ var import_react24 = __toESM(require("react"));
12732
12794
  var RemindMeActionButton = ({
12733
12795
  className,
12734
12796
  isMine
12735
12797
  }) => {
12736
12798
  const { t } = useTranslationContext();
12737
- return /* @__PURE__ */ import_react23.default.createElement(
12799
+ return /* @__PURE__ */ import_react24.default.createElement(
12738
12800
  ButtonWithSubmenu,
12739
12801
  {
12740
12802
  "aria-selected": "false",
@@ -12749,14 +12811,14 @@ var RemindMeSubmenu = () => {
12749
12811
  const { t } = useTranslationContext();
12750
12812
  const { client } = useChatContext();
12751
12813
  const { message } = useMessageContext();
12752
- return /* @__PURE__ */ import_react23.default.createElement(
12814
+ return /* @__PURE__ */ import_react24.default.createElement(
12753
12815
  "div",
12754
12816
  {
12755
12817
  "aria-label": t("aria/Remind Me Options"),
12756
12818
  className: "str-chat__message-actions-box__submenu",
12757
12819
  role: "listbox"
12758
12820
  },
12759
- client.reminders.scheduledOffsetsMs.map((offsetMs) => /* @__PURE__ */ import_react23.default.createElement(
12821
+ client.reminders.scheduledOffsetsMs.map((offsetMs) => /* @__PURE__ */ import_react24.default.createElement(
12760
12822
  "button",
12761
12823
  {
12762
12824
  className: "str-chat__message-actions-list-item-button",
@@ -12774,8 +12836,8 @@ var RemindMeSubmenu = () => {
12774
12836
  };
12775
12837
 
12776
12838
  // src/components/Message/icons.tsx
12777
- var import_react24 = __toESM(require("react"));
12778
- var ActionsIcon = ({ className = "" }) => /* @__PURE__ */ import_react24.default.createElement(
12839
+ var import_react25 = __toESM(require("react"));
12840
+ var ActionsIcon = ({ className = "" }) => /* @__PURE__ */ import_react25.default.createElement(
12779
12841
  "svg",
12780
12842
  {
12781
12843
  className,
@@ -12784,7 +12846,7 @@ var ActionsIcon = ({ className = "" }) => /* @__PURE__ */ import_react24.default
12784
12846
  width: "11",
12785
12847
  xmlns: "http://www.w3.org/2000/svg"
12786
12848
  },
12787
- /* @__PURE__ */ import_react24.default.createElement(
12849
+ /* @__PURE__ */ import_react25.default.createElement(
12788
12850
  "path",
12789
12851
  {
12790
12852
  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",
@@ -12792,7 +12854,7 @@ var ActionsIcon = ({ className = "" }) => /* @__PURE__ */ import_react24.default
12792
12854
  }
12793
12855
  )
12794
12856
  );
12795
- var ReactionIcon = ({ className = "" }) => /* @__PURE__ */ import_react24.default.createElement(
12857
+ var ReactionIcon = ({ className = "" }) => /* @__PURE__ */ import_react25.default.createElement(
12796
12858
  "svg",
12797
12859
  {
12798
12860
  className,
@@ -12801,9 +12863,9 @@ var ReactionIcon = ({ className = "" }) => /* @__PURE__ */ import_react24.defaul
12801
12863
  width: "12",
12802
12864
  xmlns: "http://www.w3.org/2000/svg"
12803
12865
  },
12804
- /* @__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" }))
12866
+ /* @__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" }))
12805
12867
  );
12806
- 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(
12868
+ 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(
12807
12869
  "path",
12808
12870
  {
12809
12871
  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",
@@ -12824,8 +12886,8 @@ var MessageActionsWrapper = (props) => {
12824
12886
  "data-testid": "message-actions",
12825
12887
  onClick: toggleOpen
12826
12888
  };
12827
- if (inline) return /* @__PURE__ */ import_react25.default.createElement("span", { ...wrapperProps }, children);
12828
- return /* @__PURE__ */ import_react25.default.createElement("div", { ...wrapperProps }, children);
12889
+ if (inline) return /* @__PURE__ */ import_react26.default.createElement("span", { ...wrapperProps }, children);
12890
+ return /* @__PURE__ */ import_react26.default.createElement("div", { ...wrapperProps }, children);
12829
12891
  };
12830
12892
 
12831
12893
  // src/components/Message/renderText/remarkPlugins/htmlToTextPlugin.ts
@@ -15947,20 +16009,20 @@ function remarkGfm(options) {
15947
16009
  }
15948
16010
 
15949
16011
  // src/components/Reactions/ReactionSelectorWithButton.tsx
15950
- var import_react30 = __toESM(require("react"));
16012
+ var import_react31 = __toESM(require("react"));
15951
16013
 
15952
16014
  // src/components/Reactions/ReactionSelector.tsx
15953
- var import_react29 = __toESM(require("react"));
16015
+ var import_react30 = __toESM(require("react"));
15954
16016
  var import_clsx7 = __toESM(require("clsx"));
15955
16017
 
15956
16018
  // src/components/Reactions/reactionOptions.tsx
15957
- var import_react28 = __toESM(require("react"));
16019
+ var import_react29 = __toESM(require("react"));
15958
16020
 
15959
16021
  // src/components/Reactions/StreamEmoji.tsx
15960
- var import_react27 = __toESM(require("react"));
16022
+ var import_react28 = __toESM(require("react"));
15961
16023
 
15962
16024
  // src/components/Reactions/SpriteImage.tsx
15963
- var import_react26 = __toESM(require("react"));
16025
+ var import_react27 = __toESM(require("react"));
15964
16026
 
15965
16027
  // src/components/Reactions/utils/utils.ts
15966
16028
  var isMutableRef = (ref) => {
@@ -15995,13 +16057,13 @@ var SpriteImage = ({
15995
16057
  style,
15996
16058
  width
15997
16059
  }) => {
15998
- const [[spriteWidth, spriteHeight], setSpriteDimensions] = (0, import_react26.useState)([0, 0]);
15999
- (0, import_react26.useEffect)(() => {
16060
+ const [[spriteWidth, spriteHeight], setSpriteDimensions] = (0, import_react27.useState)([0, 0]);
16061
+ (0, import_react27.useEffect)(() => {
16000
16062
  getImageDimensions(spriteUrl).then(setSpriteDimensions).catch(console.error);
16001
16063
  }, [spriteUrl]);
16002
16064
  const [x, y] = position3;
16003
- if (!spriteHeight || !spriteWidth) return /* @__PURE__ */ import_react26.default.createElement(import_react26.default.Fragment, null, fallback);
16004
- return /* @__PURE__ */ import_react26.default.createElement(
16065
+ if (!spriteHeight || !spriteWidth) return /* @__PURE__ */ import_react27.default.createElement(import_react27.default.Fragment, null, fallback);
16066
+ return /* @__PURE__ */ import_react27.default.createElement(
16005
16067
  "div",
16006
16068
  {
16007
16069
  "data-testid": "sprite-image",
@@ -16039,7 +16101,7 @@ var StreamEmoji = ({
16039
16101
  type
16040
16102
  }) => {
16041
16103
  const position3 = StreamSpriteEmojiPositions[type];
16042
- return /* @__PURE__ */ import_react27.default.createElement(
16104
+ return /* @__PURE__ */ import_react28.default.createElement(
16043
16105
  SpriteImage,
16044
16106
  {
16045
16107
  columns: 2,
@@ -16058,23 +16120,23 @@ var StreamEmoji = ({
16058
16120
  var defaultReactionOptions = [
16059
16121
  {
16060
16122
  type: "haha",
16061
- Component: () => /* @__PURE__ */ import_react28.default.createElement(StreamEmoji, { fallback: "\u{1F602}", type: "haha" }),
16123
+ Component: () => /* @__PURE__ */ import_react29.default.createElement(StreamEmoji, { fallback: "\u{1F602}", type: "haha" }),
16062
16124
  name: "Joy"
16063
16125
  },
16064
16126
  {
16065
16127
  type: "like",
16066
- Component: () => /* @__PURE__ */ import_react28.default.createElement(StreamEmoji, { fallback: "\u{1F44D}", type: "like" }),
16128
+ Component: () => /* @__PURE__ */ import_react29.default.createElement(StreamEmoji, { fallback: "\u{1F44D}", type: "like" }),
16067
16129
  name: "Thumbs up"
16068
16130
  },
16069
16131
  {
16070
16132
  type: "love",
16071
- Component: () => /* @__PURE__ */ import_react28.default.createElement(StreamEmoji, { fallback: "\u2764\uFE0F", type: "love" }),
16133
+ Component: () => /* @__PURE__ */ import_react29.default.createElement(StreamEmoji, { fallback: "\u2764\uFE0F", type: "love" }),
16072
16134
  name: "Heart"
16073
16135
  },
16074
- { type: "sad", Component: () => /* @__PURE__ */ import_react28.default.createElement(StreamEmoji, { fallback: "\u{1F614}", type: "sad" }), name: "Sad" },
16136
+ { type: "sad", Component: () => /* @__PURE__ */ import_react29.default.createElement(StreamEmoji, { fallback: "\u{1F614}", type: "sad" }), name: "Sad" },
16075
16137
  {
16076
16138
  type: "wow",
16077
- Component: () => /* @__PURE__ */ import_react28.default.createElement(StreamEmoji, { fallback: "\u{1F632}", type: "wow" }),
16139
+ Component: () => /* @__PURE__ */ import_react29.default.createElement(StreamEmoji, { fallback: "\u{1F632}", type: "wow" }),
16078
16140
  name: "Astonished"
16079
16141
  }
16080
16142
  ];
@@ -16108,23 +16170,23 @@ var UnMemoizedReactionSelector = (props) => {
16108
16170
  const latestReactions = propLatestReactions || message?.latest_reactions || [];
16109
16171
  const ownReactions = propOwnReactions || message?.own_reactions || [];
16110
16172
  const reactionGroups = propReactionGroups || message?.reaction_groups || {};
16111
- const [tooltipReactionType, setTooltipReactionType] = (0, import_react29.useState)(null);
16112
- const [tooltipPositions, setTooltipPositions] = (0, import_react29.useState)(null);
16113
- const rootRef = (0, import_react29.useRef)(null);
16114
- const targetRef = (0, import_react29.useRef)(null);
16115
- const tooltipRef = (0, import_react29.useRef)(null);
16116
- const showTooltip = (0, import_react29.useCallback)(
16173
+ const [tooltipReactionType, setTooltipReactionType] = (0, import_react30.useState)(null);
16174
+ const [tooltipPositions, setTooltipPositions] = (0, import_react30.useState)(null);
16175
+ const rootRef = (0, import_react30.useRef)(null);
16176
+ const targetRef = (0, import_react30.useRef)(null);
16177
+ const tooltipRef = (0, import_react30.useRef)(null);
16178
+ const showTooltip = (0, import_react30.useCallback)(
16117
16179
  (event, reactionType) => {
16118
16180
  targetRef.current = event.currentTarget;
16119
16181
  setTooltipReactionType(reactionType);
16120
16182
  },
16121
16183
  []
16122
16184
  );
16123
- const hideTooltip = (0, import_react29.useCallback)(() => {
16185
+ const hideTooltip = (0, import_react30.useCallback)(() => {
16124
16186
  setTooltipReactionType(null);
16125
16187
  setTooltipPositions(null);
16126
16188
  }, []);
16127
- (0, import_react29.useEffect)(() => {
16189
+ (0, import_react30.useEffect)(() => {
16128
16190
  if (!tooltipReactionType || !rootRef.current) return;
16129
16191
  const tooltip = tooltipRef.current?.getBoundingClientRect();
16130
16192
  const target = targetRef.current?.getBoundingClientRect();
@@ -16145,7 +16207,7 @@ var UnMemoizedReactionSelector = (props) => {
16145
16207
  }).filter(Boolean);
16146
16208
  const iHaveReactedWithReaction = (reactionType) => ownReactions.find((reaction) => reaction.type === reactionType);
16147
16209
  const getLatestUserForReactionType = (type) => latestReactions.find((reaction) => reaction.type === type && !!reaction.user)?.user || void 0;
16148
- return /* @__PURE__ */ import_react29.default.createElement(
16210
+ return /* @__PURE__ */ import_react30.default.createElement(
16149
16211
  "div",
16150
16212
  {
16151
16213
  className: (0, import_clsx7.default)(
@@ -16157,7 +16219,7 @@ var UnMemoizedReactionSelector = (props) => {
16157
16219
  "data-testid": "reaction-selector",
16158
16220
  ref: rootRef
16159
16221
  },
16160
- !!tooltipReactionType && detailedView && /* @__PURE__ */ import_react29.default.createElement(
16222
+ !!tooltipReactionType && detailedView && /* @__PURE__ */ import_react30.default.createElement(
16161
16223
  "div",
16162
16224
  {
16163
16225
  className: "str-chat__reaction-selector-tooltip",
@@ -16167,13 +16229,13 @@ var UnMemoizedReactionSelector = (props) => {
16167
16229
  visibility: tooltipPositions ? "visible" : "hidden"
16168
16230
  }
16169
16231
  },
16170
- /* @__PURE__ */ import_react29.default.createElement("div", { className: "arrow", style: { left: tooltipPositions?.arrow } }),
16171
- 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 ? ", " : ""}`))
16232
+ /* @__PURE__ */ import_react30.default.createElement("div", { className: "arrow", style: { left: tooltipPositions?.arrow } }),
16233
+ 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 ? ", " : ""}`))
16172
16234
  ),
16173
- /* @__PURE__ */ import_react29.default.createElement("ul", { className: "str-chat__message-reactions-list str-chat__message-reactions-options" }, reactionOptions.map(({ Component, name: reactionName, type: reactionType }) => {
16235
+ /* @__PURE__ */ import_react30.default.createElement("ul", { className: "str-chat__message-reactions-list str-chat__message-reactions-options" }, reactionOptions.map(({ Component, name: reactionName, type: reactionType }) => {
16174
16236
  const latestUser = getLatestUserForReactionType(reactionType);
16175
16237
  const count = reactionGroups[reactionType]?.count ?? 0;
16176
- return /* @__PURE__ */ import_react29.default.createElement("li", { key: reactionType }, /* @__PURE__ */ import_react29.default.createElement(
16238
+ return /* @__PURE__ */ import_react30.default.createElement("li", { key: reactionType }, /* @__PURE__ */ import_react30.default.createElement(
16177
16239
  "button",
16178
16240
  {
16179
16241
  "aria-label": `Select Reaction: ${reactionName || reactionType}`,
@@ -16192,7 +16254,7 @@ var UnMemoizedReactionSelector = (props) => {
16192
16254
  }
16193
16255
  }
16194
16256
  },
16195
- !!count && detailedView && /* @__PURE__ */ import_react29.default.createElement(
16257
+ !!count && detailedView && /* @__PURE__ */ import_react30.default.createElement(
16196
16258
  "div",
16197
16259
  {
16198
16260
  className: "latest-user str-chat__message-reactions-last-user",
@@ -16200,7 +16262,7 @@ var UnMemoizedReactionSelector = (props) => {
16200
16262
  onMouseEnter: (e) => showTooltip(e, reactionType),
16201
16263
  onMouseLeave: hideTooltip
16202
16264
  },
16203
- latestUser ? /* @__PURE__ */ import_react29.default.createElement(
16265
+ latestUser ? /* @__PURE__ */ import_react30.default.createElement(
16204
16266
  Avatar2,
16205
16267
  {
16206
16268
  image: latestUser.image,
@@ -16208,15 +16270,15 @@ var UnMemoizedReactionSelector = (props) => {
16208
16270
  size: 20,
16209
16271
  user: latestUser
16210
16272
  }
16211
- ) : /* @__PURE__ */ import_react29.default.createElement("div", { className: "latest-user-not-found" })
16273
+ ) : /* @__PURE__ */ import_react30.default.createElement("div", { className: "latest-user-not-found" })
16212
16274
  ),
16213
- /* @__PURE__ */ import_react29.default.createElement("span", { className: "str-chat__message-reaction-emoji" }, /* @__PURE__ */ import_react29.default.createElement(Component, null)),
16214
- Boolean(count) && detailedView && /* @__PURE__ */ import_react29.default.createElement("span", { className: "str-chat__message-reactions-list-item__count" }, count || "")
16275
+ /* @__PURE__ */ import_react30.default.createElement("span", { className: "str-chat__message-reaction-emoji" }, /* @__PURE__ */ import_react30.default.createElement(Component, null)),
16276
+ Boolean(count) && detailedView && /* @__PURE__ */ import_react30.default.createElement("span", { className: "str-chat__message-reactions-list-item__count" }, count || "")
16215
16277
  ));
16216
16278
  }))
16217
16279
  );
16218
16280
  };
16219
- var ReactionSelector = import_react29.default.memo(
16281
+ var ReactionSelector = import_react30.default.memo(
16220
16282
  UnMemoizedReactionSelector
16221
16283
  );
16222
16284
 
@@ -16227,21 +16289,22 @@ var ReactionSelectorWithButton = ({
16227
16289
  const { t } = useTranslationContext("ReactionSelectorWithButton");
16228
16290
  const { isMyMessage, message, threadList } = useMessageContext("MessageOptions");
16229
16291
  const { ReactionSelector: ReactionSelector2 = ReactionSelector } = useComponentContext("MessageOptions");
16230
- const buttonRef = (0, import_react30.useRef)(null);
16292
+ const buttonRef = (0, import_react31.useRef)(null);
16231
16293
  const dialogIdNamespace = threadList ? "-thread-" : "";
16232
16294
  const dialogId = `reaction-selector${dialogIdNamespace}--${message.id}`;
16233
- const dialog = useDialog({ id: dialogId });
16234
- const dialogIsOpen = useDialogIsOpen(dialogId);
16235
- return /* @__PURE__ */ import_react30.default.createElement(import_react30.default.Fragment, null, /* @__PURE__ */ import_react30.default.createElement(
16295
+ const { dialog, dialogManager } = useDialogOnNearestManager({ id: dialogId });
16296
+ const dialogIsOpen = useDialogIsOpen(dialogId, dialogManager?.id);
16297
+ return /* @__PURE__ */ import_react31.default.createElement(import_react31.default.Fragment, null, /* @__PURE__ */ import_react31.default.createElement(
16236
16298
  DialogAnchor,
16237
16299
  {
16300
+ dialogManagerId: dialogManager?.id,
16238
16301
  id: dialogId,
16239
16302
  placement: isMyMessage() ? "top-end" : "top-start",
16240
16303
  referenceElement: buttonRef.current,
16241
16304
  trapFocus: true
16242
16305
  },
16243
- /* @__PURE__ */ import_react30.default.createElement(ReactionSelector2, null)
16244
- ), /* @__PURE__ */ import_react30.default.createElement(
16306
+ /* @__PURE__ */ import_react31.default.createElement(ReactionSelector2, null)
16307
+ ), /* @__PURE__ */ import_react31.default.createElement(
16245
16308
  "button",
16246
16309
  {
16247
16310
  "aria-expanded": dialogIsOpen,
@@ -16251,14 +16314,14 @@ var ReactionSelectorWithButton = ({
16251
16314
  onClick: () => dialog?.toggle(),
16252
16315
  ref: buttonRef
16253
16316
  },
16254
- /* @__PURE__ */ import_react30.default.createElement(ReactionIcon2, { className: "str-chat__message-action-icon" })
16317
+ /* @__PURE__ */ import_react31.default.createElement(ReactionIcon2, { className: "str-chat__message-action-icon" })
16255
16318
  ));
16256
16319
  };
16257
16320
 
16258
16321
  // src/components/InfiniteScrollPaginator/InfiniteScrollPaginator.tsx
16259
16322
  var import_clsx8 = __toESM(require("clsx"));
16260
16323
  var import_lodash = __toESM(require("lodash.debounce"));
16261
- var import_react31 = __toESM(require("react"));
16324
+ var import_react32 = __toESM(require("react"));
16262
16325
  var mousewheelListener = (event) => {
16263
16326
  if (event instanceof WheelEvent && event.deltaY === 1) {
16264
16327
  event.preventDefault();
@@ -16276,9 +16339,9 @@ var InfiniteScrollPaginator = (props) => {
16276
16339
  useCapture = false,
16277
16340
  ...componentProps
16278
16341
  } = props;
16279
- const rootRef = (0, import_react31.useRef)(null);
16280
- const childRef = (0, import_react31.useRef)(null);
16281
- const scrollListener = (0, import_react31.useMemo)(
16342
+ const rootRef = (0, import_react32.useRef)(null);
16343
+ const childRef = (0, import_react32.useRef)(null);
16344
+ const scrollListener = (0, import_react32.useMemo)(
16282
16345
  () => (0, import_lodash.default)(() => {
16283
16346
  const root4 = rootRef.current;
16284
16347
  const child = childRef.current;
@@ -16305,7 +16368,7 @@ var InfiniteScrollPaginator = (props) => {
16305
16368
  threshold
16306
16369
  ]
16307
16370
  );
16308
- (0, import_react31.useEffect)(() => {
16371
+ (0, import_react32.useEffect)(() => {
16309
16372
  const scrollElement = rootRef.current;
16310
16373
  if (!scrollElement) return;
16311
16374
  scrollElement.addEventListener("scroll", scrollListener, useCapture);
@@ -16313,7 +16376,7 @@ var InfiniteScrollPaginator = (props) => {
16313
16376
  scrollElement.removeEventListener("scroll", scrollListener, useCapture);
16314
16377
  };
16315
16378
  }, [scrollListener, useCapture]);
16316
- (0, import_react31.useEffect)(() => {
16379
+ (0, import_react32.useEffect)(() => {
16317
16380
  const root4 = rootRef.current;
16318
16381
  if (!root4 || typeof ResizeObserver === "undefined" || !scrollListener) return;
16319
16382
  const observer = new ResizeObserver(scrollListener);
@@ -16322,7 +16385,7 @@ var InfiniteScrollPaginator = (props) => {
16322
16385
  observer.disconnect();
16323
16386
  };
16324
16387
  }, [scrollListener]);
16325
- (0, import_react31.useEffect)(() => {
16388
+ (0, import_react32.useEffect)(() => {
16326
16389
  const root4 = rootRef.current;
16327
16390
  if (root4) {
16328
16391
  root4.addEventListener("wheel", mousewheelListener, { passive: false });
@@ -16333,14 +16396,14 @@ var InfiniteScrollPaginator = (props) => {
16333
16396
  }
16334
16397
  };
16335
16398
  }, [useCapture]);
16336
- return /* @__PURE__ */ import_react31.default.createElement(
16399
+ return /* @__PURE__ */ import_react32.default.createElement(
16337
16400
  "div",
16338
16401
  {
16339
16402
  ...componentProps,
16340
16403
  className: (0, import_clsx8.default)("str-chat__infinite-scroll-paginator", className),
16341
16404
  ref: rootRef
16342
16405
  },
16343
- /* @__PURE__ */ import_react31.default.createElement("div", { className: "str-chat__infinite-scroll-paginator__content", ref: childRef }, children)
16406
+ /* @__PURE__ */ import_react32.default.createElement("div", { className: "str-chat__infinite-scroll-paginator__content", ref: childRef }, children)
16344
16407
  );
16345
16408
  };
16346
16409
 
@@ -16351,7 +16414,7 @@ var remarkPlugins = [
16351
16414
  plusPlusToEmphasis,
16352
16415
  imageToLink
16353
16416
  ];
16354
- var renderPreviewText = (text8) => /* @__PURE__ */ import_react32.default.createElement(Markdown, { remarkPlugins, skipHtml: true }, text8);
16417
+ var renderPreviewText = (text8) => /* @__PURE__ */ import_react33.default.createElement(Markdown, { remarkPlugins, skipHtml: true }, text8);
16355
16418
  var getLatestPollVote = (latestVotesByOption) => {
16356
16419
  let latestVote;
16357
16420
  for (const optionVotes of Object.values(latestVotesByOption)) {
@@ -16433,14 +16496,14 @@ var getDisplayImage = (channel, currentUser) => getChannelDisplayInfo("image", c
16433
16496
  var useChannelPreviewInfo = (props) => {
16434
16497
  const { channel, overrideImage, overrideTitle } = props;
16435
16498
  const { client } = useChatContext("useChannelPreviewInfo");
16436
- const [displayTitle, setDisplayTitle] = (0, import_react33.useState)(
16499
+ const [displayTitle, setDisplayTitle] = (0, import_react34.useState)(
16437
16500
  () => overrideTitle || getDisplayTitle(channel, client.user)
16438
16501
  );
16439
- const [displayImage, setDisplayImage] = (0, import_react33.useState)(
16502
+ const [displayImage, setDisplayImage] = (0, import_react34.useState)(
16440
16503
  () => overrideImage || getDisplayImage(channel, client.user)
16441
16504
  );
16442
- const [groupChannelDisplayInfo, setGroupDisplayChannelInfo] = (0, import_react33.useState)(() => getGroupChannelDisplayInfo(channel));
16443
- (0, import_react33.useEffect)(() => {
16505
+ const [groupChannelDisplayInfo, setGroupDisplayChannelInfo] = (0, import_react34.useState)(() => getGroupChannelDisplayInfo(channel));
16506
+ (0, import_react34.useEffect)(() => {
16444
16507
  if (overrideTitle && overrideImage) return;
16445
16508
  const updateInfo = () => {
16446
16509
  if (!overrideTitle) setDisplayTitle(getDisplayTitle(channel, client.user));
@@ -16463,54 +16526,62 @@ var useChannelPreviewInfo = (props) => {
16463
16526
  };
16464
16527
 
16465
16528
  // src/components/ChannelPreview/hooks/useMessageDeliveryStatus.ts
16466
- var import_react34 = require("react");
16529
+ var import_react35 = require("react");
16467
16530
  var useMessageDeliveryStatus = ({
16468
16531
  channel,
16469
16532
  lastMessage
16470
16533
  }) => {
16471
16534
  const { client } = useChatContext();
16472
- const [messageDeliveryStatus, setMessageDeliveryStatus] = (0, import_react34.useState)();
16473
- const isOwnMessage = (0, import_react34.useCallback)(
16474
- (message) => client.user && message?.user?.id === client.user.id,
16535
+ const [messageDeliveryStatus, setMessageDeliveryStatus] = (0, import_react35.useState)();
16536
+ const isOwnMessage = (0, import_react35.useCallback)(
16537
+ (message) => client.user && message && message.user?.id === client.user.id,
16475
16538
  [client]
16476
16539
  );
16477
- (0, import_react34.useEffect)(() => {
16540
+ (0, import_react35.useEffect)(() => {
16541
+ if (!lastMessage) {
16542
+ setMessageDeliveryStatus(void 0);
16543
+ }
16478
16544
  const lastMessageIsOwn = isOwnMessage(lastMessage);
16479
16545
  if (!lastMessage?.created_at || !lastMessageIsOwn) return;
16480
- const lastMessageCreatedAtDate = typeof lastMessage.created_at === "string" ? new Date(lastMessage.created_at) : lastMessage.created_at;
16481
- const channelReadByOthersAfterLastMessageUpdate = Object.values(
16482
- channel.state.read
16483
- ).some(({ last_read: channelLastMarkedReadDate, user }) => {
16484
- const ignoreOwnReadStatus = client.user && user.id !== client.user.id;
16485
- return ignoreOwnReadStatus && lastMessageCreatedAtDate < channelLastMarkedReadDate;
16486
- });
16546
+ const msgRef = {
16547
+ msgId: lastMessage.id,
16548
+ timestampMs: lastMessage.created_at.getTime()
16549
+ };
16550
+ const readersForMessage = channel.messageReceiptsTracker.readersForMessage(msgRef);
16551
+ const deliveredForMessage = channel.messageReceiptsTracker.deliveredForMessage(msgRef);
16487
16552
  setMessageDeliveryStatus(
16488
- channelReadByOthersAfterLastMessageUpdate ? "read" /* READ */ : "delivered" /* DELIVERED */
16553
+ 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 */
16489
16554
  );
16490
- }, [channel.state.read, client, isOwnMessage, lastMessage]);
16491
- (0, import_react34.useEffect)(() => {
16555
+ }, [channel, client, isOwnMessage, lastMessage]);
16556
+ (0, import_react35.useEffect)(() => {
16492
16557
  const handleMessageNew = (event) => {
16493
16558
  if (!isOwnMessage(event.message)) {
16494
16559
  return setMessageDeliveryStatus(void 0);
16495
16560
  }
16496
- return setMessageDeliveryStatus("delivered" /* DELIVERED */);
16561
+ return setMessageDeliveryStatus("sent" /* SENT */);
16497
16562
  };
16498
16563
  channel.on("message.new", handleMessageNew);
16499
16564
  return () => {
16500
16565
  channel.off("message.new", handleMessageNew);
16501
16566
  };
16502
- }, [channel, client, isOwnMessage]);
16503
- (0, import_react34.useEffect)(() => {
16567
+ }, [channel, isOwnMessage]);
16568
+ (0, import_react35.useEffect)(() => {
16504
16569
  if (!isOwnMessage(lastMessage)) return;
16570
+ const handleMessageDelivered = (event) => {
16571
+ if (event.user?.id !== client.user?.id && lastMessage && lastMessage.id === event.last_delivered_message_id)
16572
+ setMessageDeliveryStatus("delivered" /* DELIVERED */);
16573
+ };
16505
16574
  const handleMarkRead = (event) => {
16506
16575
  if (event.user?.id !== client.user?.id)
16507
16576
  setMessageDeliveryStatus("read" /* READ */);
16508
16577
  };
16578
+ channel.on("message.delivered", handleMessageDelivered);
16509
16579
  channel.on("message.read", handleMarkRead);
16510
16580
  return () => {
16581
+ channel.off("message.delivered", handleMessageDelivered);
16511
16582
  channel.off("message.read", handleMarkRead);
16512
16583
  };
16513
- }, [channel, client, lastMessage, isOwnMessage]);
16584
+ }, [channel, client, isOwnMessage, lastMessage]);
16514
16585
  return {
16515
16586
  messageDeliveryStatus
16516
16587
  };
@@ -16535,20 +16606,20 @@ var ChannelPreview = (props) => {
16535
16606
  const { displayImage, displayTitle, groupChannelDisplayInfo } = useChannelPreviewInfo({
16536
16607
  channel
16537
16608
  });
16538
- const [lastMessage, setLastMessage] = (0, import_react35.useState)(
16609
+ const [lastMessage, setLastMessage] = (0, import_react36.useState)(
16539
16610
  channel.state.messages[channel.state.messages.length - 1]
16540
16611
  );
16541
- const [latestMessagePreview, setLatestMessagePreview] = (0, import_react35.useState)(
16612
+ const [latestMessagePreview, setLatestMessagePreview] = (0, import_react36.useState)(
16542
16613
  () => getLatestMessagePreview2(channel, t, userLanguage, isMessageAIGenerated)
16543
16614
  );
16544
- const [unread, setUnread] = (0, import_react35.useState)(0);
16615
+ const [unread, setUnread] = (0, import_react36.useState)(0);
16545
16616
  const { messageDeliveryStatus } = useMessageDeliveryStatus({
16546
16617
  channel,
16547
16618
  lastMessage
16548
16619
  });
16549
16620
  const isActive = typeof active === "undefined" ? activeChannel?.cid === channel.cid : active;
16550
16621
  const { muted } = useIsChannelMuted(channel);
16551
- (0, import_react35.useEffect)(() => {
16622
+ (0, import_react36.useEffect)(() => {
16552
16623
  const handleEvent = (event) => {
16553
16624
  if (!event.cid) return setUnread(0);
16554
16625
  if (channel.cid === event.cid) setUnread(0);
@@ -16556,7 +16627,7 @@ var ChannelPreview = (props) => {
16556
16627
  client.on("notification.mark_read", handleEvent);
16557
16628
  return () => client.off("notification.mark_read", handleEvent);
16558
16629
  }, [channel, client]);
16559
- (0, import_react35.useEffect)(() => {
16630
+ (0, import_react36.useEffect)(() => {
16560
16631
  const handleEvent = (event) => {
16561
16632
  if (channel.cid !== event.cid) return;
16562
16633
  if (event.user?.id !== client.user?.id) return;
@@ -16567,7 +16638,7 @@ var ChannelPreview = (props) => {
16567
16638
  channel.off("notification.mark_unread", handleEvent);
16568
16639
  };
16569
16640
  }, [channel, client]);
16570
- const refreshUnreadCount = (0, import_react35.useMemo)(
16641
+ const refreshUnreadCount = (0, import_react36.useMemo)(
16571
16642
  () => (0, import_lodash2.default)(() => {
16572
16643
  if (muted) {
16573
16644
  setUnread(0);
@@ -16577,7 +16648,7 @@ var ChannelPreview = (props) => {
16577
16648
  }, 400),
16578
16649
  [channel, muted]
16579
16650
  );
16580
- (0, import_react35.useEffect)(() => {
16651
+ (0, import_react36.useEffect)(() => {
16581
16652
  refreshUnreadCount();
16582
16653
  setLatestMessagePreview(
16583
16654
  getLatestMessagePreview2(channel, t, userLanguage, isMessageAIGenerated)
@@ -16618,7 +16689,7 @@ var ChannelPreview = (props) => {
16618
16689
  isMessageAIGenerated
16619
16690
  ]);
16620
16691
  if (!Preview) return null;
16621
- return /* @__PURE__ */ import_react35.default.createElement(
16692
+ return /* @__PURE__ */ import_react36.default.createElement(
16622
16693
  Preview,
16623
16694
  {
16624
16695
  ...props,
@@ -16637,9 +16708,9 @@ var ChannelPreview = (props) => {
16637
16708
  };
16638
16709
 
16639
16710
  // src/components/Thread/LegacyThreadContext.ts
16640
- var import_react36 = __toESM(require("react"));
16641
- var LegacyThreadContext = import_react36.default.createContext({ legacyThread: void 0 });
16642
- var useLegacyThreadContext = () => (0, import_react36.useContext)(LegacyThreadContext);
16711
+ var import_react37 = __toESM(require("react"));
16712
+ var LegacyThreadContext = import_react37.default.createContext({ legacyThread: void 0 });
16713
+ var useLegacyThreadContext = () => (0, import_react37.useContext)(LegacyThreadContext);
16643
16714
 
16644
16715
  // src/components/MessageInput/hooks/useMessageComposer.ts
16645
16716
  var queueCache = new import_stream_chat2.FixedSizeQueueCache(64);
@@ -16649,15 +16720,15 @@ var useMessageComposer = () => {
16649
16720
  const { editing, message: editedMessage } = useMessageContext();
16650
16721
  const { legacyThread: parentMessage } = useLegacyThreadContext();
16651
16722
  const threadInstance = useThreadContext();
16652
- const cachedEditedMessage = (0, import_react37.useMemo)(() => {
16723
+ const cachedEditedMessage = (0, import_react38.useMemo)(() => {
16653
16724
  if (!editedMessage) return void 0;
16654
16725
  return editedMessage;
16655
16726
  }, [editedMessage?.id]);
16656
- const cachedParentMessage = (0, import_react37.useMemo)(() => {
16727
+ const cachedParentMessage = (0, import_react38.useMemo)(() => {
16657
16728
  if (!parentMessage) return void 0;
16658
16729
  return parentMessage;
16659
16730
  }, [parentMessage?.id]);
16660
- const messageComposer = (0, import_react37.useMemo)(() => {
16731
+ const messageComposer = (0, import_react38.useMemo)(() => {
16661
16732
  if (editing && cachedEditedMessage) {
16662
16733
  const tag = import_stream_chat2.MessageComposer.constructTag(cachedEditedMessage);
16663
16734
  const cachedComposer = queueCache.get(tag);
@@ -16700,7 +16771,7 @@ var useMessageComposer = () => {
16700
16771
  ) && !queueCache.peek(messageComposer.tag)) {
16701
16772
  queueCache.add(messageComposer.tag, messageComposer);
16702
16773
  }
16703
- (0, import_react37.useEffect)(() => {
16774
+ (0, import_react38.useEffect)(() => {
16704
16775
  const unsubscribe = messageComposer.registerSubscriptions();
16705
16776
  return () => {
16706
16777
  unsubscribe();
@@ -16710,17 +16781,17 @@ var useMessageComposer = () => {
16710
16781
  };
16711
16782
 
16712
16783
  // src/experimental/Search/hooks/useSearchQueriesInProgress.ts
16713
- var import_react38 = require("react");
16784
+ var import_react39 = require("react");
16714
16785
  var searchControllerStateSelector = (value) => ({
16715
16786
  sources: value.sources
16716
16787
  });
16717
16788
  var useSearchQueriesInProgress = (searchController) => {
16718
- const [queriesInProgress, setQueriesInProgress] = (0, import_react38.useState)([]);
16789
+ const [queriesInProgress, setQueriesInProgress] = (0, import_react39.useState)([]);
16719
16790
  const { sources } = useStateStore(
16720
16791
  searchController.state,
16721
16792
  searchControllerStateSelector
16722
16793
  );
16723
- (0, import_react38.useEffect)(() => {
16794
+ (0, import_react39.useEffect)(() => {
16724
16795
  const subscriptions = sources.map(
16725
16796
  (source) => source.state.subscribeWithSelector(
16726
16797
  (value) => ({ isLoading: value.isLoading }),
@@ -16740,7 +16811,7 @@ var useSearchQueriesInProgress = (searchController) => {
16740
16811
  };
16741
16812
 
16742
16813
  // src/experimental/MessageActions/hooks/useBaseMessageActionSetFilter.ts
16743
- var import_react39 = require("react");
16814
+ var import_react40 = require("react");
16744
16815
  var useBaseMessageActionSetFilter = (messageActionSet, disable2 = false) => {
16745
16816
  const { initialMessage: isInitialMessage, message } = useMessageContext();
16746
16817
  const {
@@ -16754,7 +16825,7 @@ var useBaseMessageActionSetFilter = (messageActionSet, disable2 = false) => {
16754
16825
  canReply
16755
16826
  } = useUserRole(message);
16756
16827
  const isMessageThreadReply = typeof message.parent_id === "string";
16757
- return (0, import_react39.useMemo)(() => {
16828
+ return (0, import_react40.useMemo)(() => {
16758
16829
  if (disable2) return messageActionSet;
16759
16830
  if (isInitialMessage || // not sure whether this thing even works anymore
16760
16831
  !message.type || message.type === "error" || message.type === "system" || message.type === "ephemeral" || message.status === "failed" || message.status === "sending")
@@ -16785,8 +16856,8 @@ var useBaseMessageActionSetFilter = (messageActionSet, disable2 = false) => {
16785
16856
  };
16786
16857
 
16787
16858
  // src/experimental/MessageActions/hooks/useSplitMessageActionSet.ts
16788
- var import_react40 = require("react");
16789
- var useSplitMessageActionSet = (messageActionSet) => (0, import_react40.useMemo)(() => {
16859
+ var import_react41 = require("react");
16860
+ var useSplitMessageActionSet = (messageActionSet) => (0, import_react41.useMemo)(() => {
16790
16861
  const quickActionSet = [];
16791
16862
  const dropdownActionSet = [];
16792
16863
  for (const action of messageActionSet) {
@@ -16797,7 +16868,7 @@ var useSplitMessageActionSet = (messageActionSet) => (0, import_react40.useMemo)
16797
16868
  }, [messageActionSet]);
16798
16869
 
16799
16870
  // src/experimental/MessageActions/defaults.tsx
16800
- var import_react41 = __toESM(require("react"));
16871
+ var import_react42 = __toESM(require("react"));
16801
16872
  var msgActionsBoxButtonClassName = "str-chat__message-actions-list-item-button";
16802
16873
  var DefaultDropdownActionButton = ({
16803
16874
  "aria-selected": ariaSelected = "false",
@@ -16805,7 +16876,7 @@ var DefaultDropdownActionButton = ({
16805
16876
  className = msgActionsBoxButtonClassName,
16806
16877
  role = "option",
16807
16878
  ...rest
16808
- }) => /* @__PURE__ */ import_react41.default.createElement("button", { "aria-selected": ariaSelected, className, role, ...rest }, children);
16879
+ }) => /* @__PURE__ */ import_react42.default.createElement("button", { "aria-selected": ariaSelected, className, role, ...rest }, children);
16809
16880
  var DefaultMessageActionComponents = {
16810
16881
  dropdown: {
16811
16882
  Quote() {
@@ -16820,42 +16891,42 @@ var DefaultMessageActionComponents = {
16820
16891
  textarea.focus();
16821
16892
  }
16822
16893
  };
16823
- return /* @__PURE__ */ import_react41.default.createElement(DefaultDropdownActionButton, { onClick: handleQuote }, t("Quote"));
16894
+ return /* @__PURE__ */ import_react42.default.createElement(DefaultDropdownActionButton, { onClick: handleQuote }, t("Quote"));
16824
16895
  },
16825
16896
  Pin() {
16826
16897
  const { handlePin, message } = useMessageContext();
16827
16898
  const { t } = useTranslationContext();
16828
- return /* @__PURE__ */ import_react41.default.createElement(DefaultDropdownActionButton, { onClick: handlePin }, !message.pinned ? t("Pin") : t("Unpin"));
16899
+ return /* @__PURE__ */ import_react42.default.createElement(DefaultDropdownActionButton, { onClick: handlePin }, !message.pinned ? t("Pin") : t("Unpin"));
16829
16900
  },
16830
16901
  MarkUnread() {
16831
16902
  const { handleMarkUnread } = useMessageContext();
16832
16903
  const { t } = useTranslationContext();
16833
- return /* @__PURE__ */ import_react41.default.createElement(DefaultDropdownActionButton, { onClick: handleMarkUnread }, t("Mark as unread"));
16904
+ return /* @__PURE__ */ import_react42.default.createElement(DefaultDropdownActionButton, { onClick: handleMarkUnread }, t("Mark as unread"));
16834
16905
  },
16835
16906
  Flag() {
16836
16907
  const { handleFlag } = useMessageContext();
16837
16908
  const { t } = useTranslationContext();
16838
- return /* @__PURE__ */ import_react41.default.createElement(DefaultDropdownActionButton, { onClick: handleFlag }, t("Flag"));
16909
+ return /* @__PURE__ */ import_react42.default.createElement(DefaultDropdownActionButton, { onClick: handleFlag }, t("Flag"));
16839
16910
  },
16840
16911
  Mute() {
16841
16912
  const { handleMute, message } = useMessageContext();
16842
16913
  const { mutes } = useChatContext();
16843
16914
  const { t } = useTranslationContext();
16844
- return /* @__PURE__ */ import_react41.default.createElement(DefaultDropdownActionButton, { onClick: handleMute }, isUserMuted(message, mutes) ? t("Unmute") : t("Mute"));
16915
+ return /* @__PURE__ */ import_react42.default.createElement(DefaultDropdownActionButton, { onClick: handleMute }, isUserMuted(message, mutes) ? t("Unmute") : t("Mute"));
16845
16916
  },
16846
16917
  Edit() {
16847
16918
  const { handleEdit } = useMessageContext();
16848
16919
  const { t } = useTranslationContext();
16849
- return /* @__PURE__ */ import_react41.default.createElement(DefaultDropdownActionButton, { onClick: handleEdit }, t("Edit Message"));
16920
+ return /* @__PURE__ */ import_react42.default.createElement(DefaultDropdownActionButton, { onClick: handleEdit }, t("Edit Message"));
16850
16921
  },
16851
16922
  Delete() {
16852
16923
  const { handleDelete: handleDelete2 } = useMessageContext();
16853
16924
  const { t } = useTranslationContext();
16854
- return /* @__PURE__ */ import_react41.default.createElement(DefaultDropdownActionButton, { onClick: handleDelete2 }, t("Delete"));
16925
+ return /* @__PURE__ */ import_react42.default.createElement(DefaultDropdownActionButton, { onClick: handleDelete2 }, t("Delete"));
16855
16926
  },
16856
16927
  RemindMe() {
16857
16928
  const { isMyMessage } = useMessageContext();
16858
- return /* @__PURE__ */ import_react41.default.createElement(
16929
+ return /* @__PURE__ */ import_react42.default.createElement(
16859
16930
  RemindMeActionButton,
16860
16931
  {
16861
16932
  className: msgActionsBoxButtonClassName,
@@ -16868,7 +16939,7 @@ var DefaultMessageActionComponents = {
16868
16939
  const { message } = useMessageContext();
16869
16940
  const { t } = useTranslationContext();
16870
16941
  const reminder = useMessageReminder(message.id);
16871
- return /* @__PURE__ */ import_react41.default.createElement(
16942
+ return /* @__PURE__ */ import_react42.default.createElement(
16872
16943
  DefaultDropdownActionButton,
16873
16944
  {
16874
16945
  onClick: () => reminder ? client.reminders.deleteReminder(reminder.id) : client.reminders.createReminder({ messageId: message.id })
@@ -16879,12 +16950,12 @@ var DefaultMessageActionComponents = {
16879
16950
  },
16880
16951
  quick: {
16881
16952
  React() {
16882
- return /* @__PURE__ */ import_react41.default.createElement(ReactionSelectorWithButton, { ReactionIcon });
16953
+ return /* @__PURE__ */ import_react42.default.createElement(ReactionSelectorWithButton, { ReactionIcon });
16883
16954
  },
16884
16955
  Reply() {
16885
16956
  const { handleOpenThread } = useMessageContext();
16886
16957
  const { t } = useTranslationContext();
16887
- return /* @__PURE__ */ import_react41.default.createElement(
16958
+ return /* @__PURE__ */ import_react42.default.createElement(
16888
16959
  "button",
16889
16960
  {
16890
16961
  "aria-label": t("aria/Open Thread"),
@@ -16892,7 +16963,7 @@ var DefaultMessageActionComponents = {
16892
16963
  "data-testid": "thread-action",
16893
16964
  onClick: handleOpenThread
16894
16965
  },
16895
- /* @__PURE__ */ import_react41.default.createElement(ThreadIcon, { className: "str-chat__message-action-icon" })
16966
+ /* @__PURE__ */ import_react42.default.createElement(ThreadIcon, { className: "str-chat__message-action-icon" })
16896
16967
  );
16897
16968
  }
16898
16969
  }
@@ -16964,7 +17035,7 @@ var MessageActions = ({
16964
17035
  const { theme } = useChatContext();
16965
17036
  const { isMyMessage, message } = useMessageContext();
16966
17037
  const { t } = useTranslationContext();
16967
- const [actionsBoxButtonElement, setActionsBoxButtonElement] = (0, import_react42.useState)(null);
17038
+ const [actionsBoxButtonElement, setActionsBoxButtonElement] = (0, import_react43.useState)(null);
16968
17039
  const filteredMessageActionSet = useBaseMessageActionSetFilter(
16969
17040
  messageActionSet,
16970
17041
  disableBaseMessageActionSetFilter
@@ -16974,20 +17045,23 @@ var MessageActions = ({
16974
17045
  );
16975
17046
  const dropdownDialogId = `message-actions--${message.id}`;
16976
17047
  const reactionSelectorDialogId = `reaction-selector--${message.id}`;
16977
- const dialog = useDialog({ id: dropdownDialogId });
16978
- const dropdownDialogIsOpen = useDialogIsOpen(dropdownDialogId);
16979
- const reactionSelectorDialogIsOpen = useDialogIsOpen(reactionSelectorDialogId);
17048
+ const { dialog, dialogManager } = useDialogOnNearestManager({ id: dropdownDialogId });
17049
+ const dropdownDialogIsOpen = useDialogIsOpen(dropdownDialogId, dialogManager?.id);
17050
+ const reactionSelectorDialogIsOpen = useDialogIsOpen(
17051
+ reactionSelectorDialogId,
17052
+ dialogManager?.id
17053
+ );
16980
17054
  if (dropdownActionSet.length + quickActionSet.length === 0) {
16981
17055
  return null;
16982
17056
  }
16983
- return /* @__PURE__ */ import_react42.default.createElement(
17057
+ return /* @__PURE__ */ import_react43.default.createElement(
16984
17058
  "div",
16985
17059
  {
16986
17060
  className: (0, import_clsx9.default)(`str-chat__message-${theme}__actions str-chat__message-options`, {
16987
17061
  "str-chat__message-options--active": dropdownDialogIsOpen || reactionSelectorDialogIsOpen
16988
17062
  })
16989
17063
  },
16990
- dropdownActionSet.length > 0 && /* @__PURE__ */ import_react42.default.createElement(MessageActionsWrapper, { inline: false, toggleOpen: dialog?.toggle }, /* @__PURE__ */ import_react42.default.createElement(
17064
+ dropdownActionSet.length > 0 && /* @__PURE__ */ import_react43.default.createElement(MessageActionsWrapper, { inline: false, toggleOpen: dialog?.toggle }, /* @__PURE__ */ import_react43.default.createElement(
16991
17065
  "button",
16992
17066
  {
16993
17067
  "aria-expanded": dropdownDialogIsOpen,
@@ -16997,31 +17071,32 @@ var MessageActions = ({
16997
17071
  "data-testid": "message-actions-toggle-button",
16998
17072
  ref: setActionsBoxButtonElement
16999
17073
  },
17000
- /* @__PURE__ */ import_react42.default.createElement(ActionsIcon, { className: "str-chat__message-action-icon" })
17001
- ), /* @__PURE__ */ import_react42.default.createElement(
17074
+ /* @__PURE__ */ import_react43.default.createElement(ActionsIcon, { className: "str-chat__message-action-icon" })
17075
+ ), /* @__PURE__ */ import_react43.default.createElement(
17002
17076
  DialogAnchor,
17003
17077
  {
17078
+ dialogManagerId: dialogManager?.id,
17004
17079
  id: dropdownDialogId,
17005
17080
  placement: isMyMessage() ? "top-end" : "top-start",
17006
17081
  referenceElement: actionsBoxButtonElement,
17007
17082
  tabIndex: -1,
17008
17083
  trapFocus: true
17009
17084
  },
17010
- /* @__PURE__ */ import_react42.default.createElement(DropdownBox, { open: dropdownDialogIsOpen }, dropdownActionSet.map(({ Component: DropdownActionComponent, type }) => /* @__PURE__ */ import_react42.default.createElement(DropdownActionComponent, { key: type })))
17085
+ /* @__PURE__ */ import_react43.default.createElement(DropdownBox, { open: dropdownDialogIsOpen }, dropdownActionSet.map(({ Component: DropdownActionComponent, type }) => /* @__PURE__ */ import_react43.default.createElement(DropdownActionComponent, { key: type })))
17011
17086
  )),
17012
- quickActionSet.map(({ Component: QuickActionComponent, type }) => /* @__PURE__ */ import_react42.default.createElement(QuickActionComponent, { key: type }))
17087
+ quickActionSet.map(({ Component: QuickActionComponent, type }) => /* @__PURE__ */ import_react43.default.createElement(QuickActionComponent, { key: type }))
17013
17088
  );
17014
17089
  };
17015
17090
  var DropdownBox = ({ children, open }) => {
17016
17091
  const { t } = useTranslationContext();
17017
- return /* @__PURE__ */ import_react42.default.createElement(
17092
+ return /* @__PURE__ */ import_react43.default.createElement(
17018
17093
  "div",
17019
17094
  {
17020
17095
  className: (0, import_clsx9.default)("str-chat__message-actions-box", {
17021
17096
  "str-chat__message-actions-box--open": open
17022
17097
  })
17023
17098
  },
17024
- /* @__PURE__ */ import_react42.default.createElement(
17099
+ /* @__PURE__ */ import_react43.default.createElement(
17025
17100
  "div",
17026
17101
  {
17027
17102
  "aria-label": t("aria/Message Options"),
@@ -17035,21 +17110,21 @@ var DropdownBox = ({ children, open }) => {
17035
17110
 
17036
17111
  // src/experimental/Search/Search.tsx
17037
17112
  var import_clsx12 = __toESM(require("clsx"));
17038
- var import_react55 = __toESM(require("react"));
17113
+ var import_react56 = __toESM(require("react"));
17039
17114
 
17040
17115
  // src/experimental/Search/SearchBar/SearchBar.tsx
17041
17116
  var import_clsx10 = __toESM(require("clsx"));
17042
- var import_react44 = __toESM(require("react"));
17117
+ var import_react45 = __toESM(require("react"));
17043
17118
 
17044
17119
  // src/experimental/Search/SearchContext.tsx
17045
- var import_react43 = __toESM(require("react"));
17046
- var SearchContext = (0, import_react43.createContext)(void 0);
17120
+ var import_react44 = __toESM(require("react"));
17121
+ var SearchContext = (0, import_react44.createContext)(void 0);
17047
17122
  var SearchContextProvider = ({
17048
17123
  children,
17049
17124
  value
17050
- }) => /* @__PURE__ */ import_react43.default.createElement(SearchContext.Provider, { value }, children);
17125
+ }) => /* @__PURE__ */ import_react44.default.createElement(SearchContext.Provider, { value }, children);
17051
17126
  var useSearchContext = () => {
17052
- const contextValue = (0, import_react43.useContext)(SearchContext);
17127
+ const contextValue = (0, import_react44.useContext)(SearchContext);
17053
17128
  return contextValue;
17054
17129
  };
17055
17130
 
@@ -17062,12 +17137,12 @@ var SearchBar = () => {
17062
17137
  const { t } = useTranslationContext();
17063
17138
  const { disabled, exitSearchOnInputBlur, placeholder, searchController } = useSearchContext();
17064
17139
  const queriesInProgress = useSearchQueriesInProgress(searchController);
17065
- const [input, setInput] = (0, import_react44.useState)(null);
17140
+ const [input, setInput] = (0, import_react45.useState)(null);
17066
17141
  const { isActive, searchQuery } = useStateStore(
17067
17142
  searchController.state,
17068
17143
  searchControllerStateSelector2
17069
17144
  );
17070
- (0, import_react44.useEffect)(() => {
17145
+ (0, import_react45.useEffect)(() => {
17071
17146
  if (!input) return;
17072
17147
  const handleKeyDown = (event) => {
17073
17148
  if (event.key === "Escape") {
@@ -17080,15 +17155,15 @@ var SearchBar = () => {
17080
17155
  document.removeEventListener("keydown", handleKeyDown);
17081
17156
  };
17082
17157
  }, [searchController, input]);
17083
- return /* @__PURE__ */ import_react44.default.createElement("div", { className: "str-chat__search-bar", "data-testid": "search-bar" }, /* @__PURE__ */ import_react44.default.createElement(
17158
+ return /* @__PURE__ */ import_react45.default.createElement("div", { className: "str-chat__search-bar", "data-testid": "search-bar" }, /* @__PURE__ */ import_react45.default.createElement(
17084
17159
  "div",
17085
17160
  {
17086
17161
  className: (0, import_clsx10.default)("str-chat__search-input--wrapper", {
17087
17162
  "str-chat__search-input--wrapper-active": isActive
17088
17163
  })
17089
17164
  },
17090
- /* @__PURE__ */ import_react44.default.createElement("div", { className: "str-chat__search-input--icon" }),
17091
- /* @__PURE__ */ import_react44.default.createElement(
17165
+ /* @__PURE__ */ import_react45.default.createElement("div", { className: "str-chat__search-input--icon" }),
17166
+ /* @__PURE__ */ import_react45.default.createElement(
17092
17167
  "input",
17093
17168
  {
17094
17169
  className: "str-chat__search-input",
@@ -17111,7 +17186,7 @@ var SearchBar = () => {
17111
17186
  value: searchQuery
17112
17187
  }
17113
17188
  ),
17114
- searchQuery && /* @__PURE__ */ import_react44.default.createElement(
17189
+ searchQuery && /* @__PURE__ */ import_react45.default.createElement(
17115
17190
  "button",
17116
17191
  {
17117
17192
  className: "str-chat__search-input--clear-button",
@@ -17122,9 +17197,9 @@ var SearchBar = () => {
17122
17197
  input?.focus();
17123
17198
  }
17124
17199
  },
17125
- /* @__PURE__ */ import_react44.default.createElement("div", { className: "str-chat__search-input--clear-button-icon" })
17200
+ /* @__PURE__ */ import_react45.default.createElement("div", { className: "str-chat__search-input--clear-button-icon" })
17126
17201
  )
17127
- ), isActive ? /* @__PURE__ */ import_react44.default.createElement(
17202
+ ), isActive ? /* @__PURE__ */ import_react45.default.createElement(
17128
17203
  "button",
17129
17204
  {
17130
17205
  className: (0, import_clsx10.default)(
@@ -17141,25 +17216,25 @@ var SearchBar = () => {
17141
17216
  };
17142
17217
 
17143
17218
  // src/experimental/Search/SearchResults/SearchResults.tsx
17144
- var import_react54 = __toESM(require("react"));
17219
+ var import_react55 = __toESM(require("react"));
17145
17220
 
17146
17221
  // src/experimental/Search/SearchResults/SearchSourceResults.tsx
17147
- var import_react51 = __toESM(require("react"));
17222
+ var import_react52 = __toESM(require("react"));
17148
17223
 
17149
17224
  // src/experimental/Search/SearchResults/SearchSourceResultList.tsx
17150
- var import_react49 = __toESM(require("react"));
17225
+ var import_react50 = __toESM(require("react"));
17151
17226
 
17152
17227
  // src/experimental/Search/SearchResults/SearchResultItem.tsx
17153
- var import_react45 = __toESM(require("react"));
17228
+ var import_react46 = __toESM(require("react"));
17154
17229
  var import_lodash3 = __toESM(require("lodash.uniqby"));
17155
17230
  var ChannelSearchResultItem = ({ item }) => {
17156
17231
  const { setActiveChannel } = useChatContext();
17157
17232
  const { setChannels } = useChannelListContext();
17158
- const onSelect = (0, import_react45.useCallback)(() => {
17233
+ const onSelect = (0, import_react46.useCallback)(() => {
17159
17234
  setActiveChannel(item);
17160
17235
  setChannels?.((channels) => (0, import_lodash3.default)([item, ...channels], "cid"));
17161
17236
  }, [item, setActiveChannel, setChannels]);
17162
- return /* @__PURE__ */ import_react45.default.createElement(
17237
+ return /* @__PURE__ */ import_react46.default.createElement(
17163
17238
  ChannelPreview,
17164
17239
  {
17165
17240
  channel: item,
@@ -17178,13 +17253,13 @@ var MessageSearchResultItem = ({
17178
17253
  setActiveChannel
17179
17254
  } = useChatContext();
17180
17255
  const { setChannels } = useChannelListContext();
17181
- const channel = (0, import_react45.useMemo)(() => {
17256
+ const channel = (0, import_react46.useMemo)(() => {
17182
17257
  const { channel: channelData } = item;
17183
17258
  const type = channelData?.type ?? "unknown";
17184
17259
  const id = channelData?.id ?? "unknown";
17185
17260
  return client.channel(type, id);
17186
17261
  }, [client, item]);
17187
- const onSelect = (0, import_react45.useCallback)(async () => {
17262
+ const onSelect = (0, import_react46.useCallback)(async () => {
17188
17263
  if (!channel) return;
17189
17264
  await channel.state.loadMessageIntoState(
17190
17265
  item.id,
@@ -17195,9 +17270,9 @@ var MessageSearchResultItem = ({
17195
17270
  setActiveChannel(channel);
17196
17271
  setChannels?.((channels) => (0, import_lodash3.default)([channel, ...channels], "cid"));
17197
17272
  }, [channel, item, searchController, setActiveChannel, setChannels]);
17198
- const getLatestMessagePreview2 = (0, import_react45.useCallback)(() => item.text, [item]);
17273
+ const getLatestMessagePreview2 = (0, import_react46.useCallback)(() => item.text, [item]);
17199
17274
  if (!channel) return;
17200
- return /* @__PURE__ */ import_react45.default.createElement(
17275
+ return /* @__PURE__ */ import_react46.default.createElement(
17201
17276
  ChannelPreview,
17202
17277
  {
17203
17278
  active: channel.cid === activeChannel?.cid && item.id === searchController._internalState.getLatestValue().focusedMessage?.id,
@@ -17212,7 +17287,7 @@ var UserSearchResultItem = ({ item }) => {
17212
17287
  const { client, setActiveChannel } = useChatContext();
17213
17288
  const { setChannels } = useChannelListContext();
17214
17289
  const { directMessagingChannelType } = useSearchContext();
17215
- const onClick = (0, import_react45.useCallback)(() => {
17290
+ const onClick = (0, import_react46.useCallback)(() => {
17216
17291
  const newChannel = client.channel(directMessagingChannelType, {
17217
17292
  members: [client.userID, item.id]
17218
17293
  });
@@ -17220,7 +17295,7 @@ var UserSearchResultItem = ({ item }) => {
17220
17295
  setActiveChannel(newChannel);
17221
17296
  setChannels?.((channels) => (0, import_lodash3.default)([newChannel, ...channels], "cid"));
17222
17297
  }, [client, item, setActiveChannel, setChannels, directMessagingChannelType]);
17223
- return /* @__PURE__ */ import_react45.default.createElement(
17298
+ return /* @__PURE__ */ import_react46.default.createElement(
17224
17299
  "button",
17225
17300
  {
17226
17301
  "aria-label": `Select User Channel: ${item.name || ""}`,
@@ -17229,7 +17304,7 @@ var UserSearchResultItem = ({ item }) => {
17229
17304
  onClick,
17230
17305
  role: "option"
17231
17306
  },
17232
- /* @__PURE__ */ import_react45.default.createElement(
17307
+ /* @__PURE__ */ import_react46.default.createElement(
17233
17308
  Avatar,
17234
17309
  {
17235
17310
  className: "str-chat__avatar--channel-preview",
@@ -17238,7 +17313,7 @@ var UserSearchResultItem = ({ item }) => {
17238
17313
  user: item
17239
17314
  }
17240
17315
  ),
17241
- /* @__PURE__ */ import_react45.default.createElement("div", { className: "str-chat__search-result--display-name" }, item.name || item.id)
17316
+ /* @__PURE__ */ import_react46.default.createElement("div", { className: "str-chat__search-result--display-name" }, item.name || item.id)
17242
17317
  );
17243
17318
  };
17244
17319
  var DefaultSearchResultItems = {
@@ -17248,18 +17323,18 @@ var DefaultSearchResultItems = {
17248
17323
  };
17249
17324
 
17250
17325
  // src/experimental/Search/SearchResults/SearchSourceResultListFooter.tsx
17251
- var import_react48 = __toESM(require("react"));
17326
+ var import_react49 = __toESM(require("react"));
17252
17327
 
17253
17328
  // src/experimental/Search/SearchResults/SearchSourceResultsLoadingIndicator.tsx
17254
- var import_react47 = __toESM(require("react"));
17329
+ var import_react48 = __toESM(require("react"));
17255
17330
 
17256
17331
  // src/experimental/Search/SearchSourceResultsContext.tsx
17257
- var import_react46 = __toESM(require("react"));
17258
- var SearchSourceResultsContext = (0, import_react46.createContext)(void 0);
17332
+ var import_react47 = __toESM(require("react"));
17333
+ var SearchSourceResultsContext = (0, import_react47.createContext)(void 0);
17259
17334
  var SearchSourceResultsContextProvider = ({
17260
17335
  children,
17261
17336
  value
17262
- }) => /* @__PURE__ */ import_react46.default.createElement(
17337
+ }) => /* @__PURE__ */ import_react47.default.createElement(
17263
17338
  SearchSourceResultsContext.Provider,
17264
17339
  {
17265
17340
  value
@@ -17267,7 +17342,7 @@ var SearchSourceResultsContextProvider = ({
17267
17342
  children
17268
17343
  );
17269
17344
  var useSearchSourceResultsContext = () => {
17270
- const contextValue = (0, import_react46.useContext)(SearchSourceResultsContext);
17345
+ const contextValue = (0, import_react47.useContext)(SearchSourceResultsContext);
17271
17346
  return contextValue;
17272
17347
  };
17273
17348
 
@@ -17275,7 +17350,7 @@ var useSearchSourceResultsContext = () => {
17275
17350
  var SearchSourceResultsLoadingIndicator = () => {
17276
17351
  const { t } = useTranslationContext();
17277
17352
  const { searchSource } = useSearchSourceResultsContext();
17278
- return /* @__PURE__ */ import_react47.default.createElement(
17353
+ return /* @__PURE__ */ import_react48.default.createElement(
17279
17354
  "div",
17280
17355
  {
17281
17356
  className: "str-chat__search-source-results__loading-indicator",
@@ -17300,13 +17375,13 @@ var SearchSourceResultListFooter = () => {
17300
17375
  searchSource.state,
17301
17376
  searchSourceStateSelector
17302
17377
  );
17303
- return /* @__PURE__ */ import_react48.default.createElement(
17378
+ return /* @__PURE__ */ import_react49.default.createElement(
17304
17379
  "div",
17305
17380
  {
17306
17381
  className: "str-chat__search-source-result-list__footer",
17307
17382
  "data-testid": "search-footer"
17308
17383
  },
17309
- 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
17384
+ 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
17310
17385
  );
17311
17386
  };
17312
17387
 
@@ -17324,36 +17399,36 @@ var SearchSourceResultList = ({
17324
17399
  const { items } = useStateStore(searchSource.state, searchSourceStateSelector2);
17325
17400
  const SearchResultItem = SearchResultItems[searchSource.type];
17326
17401
  if (!SearchResultItem) return null;
17327
- return /* @__PURE__ */ import_react49.default.createElement(
17402
+ return /* @__PURE__ */ import_react50.default.createElement(
17328
17403
  "div",
17329
17404
  {
17330
17405
  className: "str-chat__search-source-result-list",
17331
17406
  "data-testid": "search-source-result-list"
17332
17407
  },
17333
- /* @__PURE__ */ import_react49.default.createElement(
17408
+ /* @__PURE__ */ import_react50.default.createElement(
17334
17409
  InfiniteScrollPaginator,
17335
17410
  {
17336
17411
  loadNextDebounceMs: loadMoreDebounceMs,
17337
17412
  loadNextOnScrollToBottom: searchSource.search,
17338
17413
  threshold: loadMoreThresholdPx
17339
17414
  },
17340
- items?.map((item, i) => /* @__PURE__ */ import_react49.default.createElement(
17415
+ items?.map((item, i) => /* @__PURE__ */ import_react50.default.createElement(
17341
17416
  SearchResultItem,
17342
17417
  {
17343
17418
  item,
17344
17419
  key: `source-search-result-${searchSource.type}-${i}`
17345
17420
  }
17346
17421
  )),
17347
- /* @__PURE__ */ import_react49.default.createElement(SearchSourceResultListFooter2, null)
17422
+ /* @__PURE__ */ import_react50.default.createElement(SearchSourceResultListFooter2, null)
17348
17423
  )
17349
17424
  );
17350
17425
  };
17351
17426
 
17352
17427
  // src/experimental/Search/SearchResults/SearchSourceResultsEmpty.tsx
17353
- var import_react50 = __toESM(require("react"));
17428
+ var import_react51 = __toESM(require("react"));
17354
17429
  var SearchSourceResultsEmpty = () => {
17355
17430
  const { t } = useTranslationContext();
17356
- return /* @__PURE__ */ import_react50.default.createElement("div", { className: "str-chat__search-source-results-empty" }, t("No results found"));
17431
+ return /* @__PURE__ */ import_react51.default.createElement("div", { className: "str-chat__search-source-results-empty" }, t("No results found"));
17357
17432
  };
17358
17433
 
17359
17434
  // src/experimental/Search/SearchResults/SearchSourceResultsHeader.tsx
@@ -17375,20 +17450,20 @@ var SearchSourceResults = ({ searchSource }) => {
17375
17450
  searchSourceStateSelector3
17376
17451
  );
17377
17452
  if (!items && !isLoading) return null;
17378
- return /* @__PURE__ */ import_react51.default.createElement(SearchSourceResultsContextProvider, { value: { searchSource } }, /* @__PURE__ */ import_react51.default.createElement(
17453
+ return /* @__PURE__ */ import_react52.default.createElement(SearchSourceResultsContextProvider, { value: { searchSource } }, /* @__PURE__ */ import_react52.default.createElement(
17379
17454
  "div",
17380
17455
  {
17381
17456
  className: "str-chat__search-source-results",
17382
17457
  "data-testid": "search-source-results"
17383
17458
  },
17384
- /* @__PURE__ */ import_react51.default.createElement(SearchSourceResultsHeader2, null),
17385
- items?.length || isLoading ? /* @__PURE__ */ import_react51.default.createElement(SearchSourceResultList2, null) : /* @__PURE__ */ import_react51.default.createElement(SearchSourceResultsEmpty2, null)
17459
+ /* @__PURE__ */ import_react52.default.createElement(SearchSourceResultsHeader2, null),
17460
+ items?.length || isLoading ? /* @__PURE__ */ import_react52.default.createElement(SearchSourceResultList2, null) : /* @__PURE__ */ import_react52.default.createElement(SearchSourceResultsEmpty2, null)
17386
17461
  ));
17387
17462
  };
17388
17463
 
17389
17464
  // src/experimental/Search/SearchResults/SearchResultsHeader.tsx
17390
17465
  var import_clsx11 = __toESM(require("clsx"));
17391
- var import_react52 = __toESM(require("react"));
17466
+ var import_react53 = __toESM(require("react"));
17392
17467
  var searchSourceStateSelector4 = (nextValue) => ({
17393
17468
  isActive: nextValue.isActive
17394
17469
  });
@@ -17397,7 +17472,7 @@ var SearchSourceFilterButton = ({ source }) => {
17397
17472
  const { searchController } = useSearchContext();
17398
17473
  const { isActive } = useStateStore(source.state, searchSourceStateSelector4);
17399
17474
  const label = `search-results-header-filter-source-button-label--${source.type}`;
17400
- return /* @__PURE__ */ import_react52.default.createElement(
17475
+ return /* @__PURE__ */ import_react53.default.createElement(
17401
17476
  "button",
17402
17477
  {
17403
17478
  "aria-label": t("aria/Search results header filter button"),
@@ -17420,13 +17495,13 @@ var SearchSourceFilterButton = ({ source }) => {
17420
17495
  };
17421
17496
  var SearchResultsHeader = () => {
17422
17497
  const { searchController } = useSearchContext();
17423
- return /* @__PURE__ */ import_react52.default.createElement("div", { className: "str-chat__search-results-header", "data-testid": "search-results-header" }, /* @__PURE__ */ import_react52.default.createElement(
17498
+ return /* @__PURE__ */ import_react53.default.createElement("div", { className: "str-chat__search-results-header", "data-testid": "search-results-header" }, /* @__PURE__ */ import_react53.default.createElement(
17424
17499
  "div",
17425
17500
  {
17426
17501
  className: "str-chat__search-results-header__filter-source-buttons",
17427
17502
  "data-testid": "filter-source-buttons"
17428
17503
  },
17429
- searchController.sources.map((source) => /* @__PURE__ */ import_react52.default.createElement(
17504
+ searchController.sources.map((source) => /* @__PURE__ */ import_react53.default.createElement(
17430
17505
  SearchSourceFilterButton,
17431
17506
  {
17432
17507
  key: `search-source-filter-button-${source.type}`,
@@ -17437,10 +17512,10 @@ var SearchResultsHeader = () => {
17437
17512
  };
17438
17513
 
17439
17514
  // src/experimental/Search/SearchResults/SearchResultsPresearch.tsx
17440
- var import_react53 = __toESM(require("react"));
17515
+ var import_react54 = __toESM(require("react"));
17441
17516
  var SearchResultsPresearch = () => {
17442
17517
  const { t } = useTranslationContext();
17443
- return /* @__PURE__ */ import_react53.default.createElement("div", { className: "str-chat__search-results-presearch" }, t("Start typing to search"));
17518
+ return /* @__PURE__ */ import_react54.default.createElement("div", { className: "str-chat__search-results-presearch" }, t("Start typing to search"));
17444
17519
  };
17445
17520
 
17446
17521
  // src/experimental/Search/SearchResults/SearchResults.tsx
@@ -17461,7 +17536,7 @@ var SearchResults = () => {
17461
17536
  searchController.state,
17462
17537
  searchControllerStateSelector3
17463
17538
  );
17464
- 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 })));
17539
+ 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 })));
17465
17540
  };
17466
17541
 
17467
17542
  // src/experimental/Search/Search.tsx
@@ -17475,7 +17550,7 @@ var Search = ({
17475
17550
  const { SearchBar: SearchBar2 = SearchBar, SearchResults: SearchResults2 = SearchResults } = useComponentContext();
17476
17551
  const { searchController } = useChatContext();
17477
17552
  const { isActive } = useStateStore(searchController.state, searchControllerStateSelector4);
17478
- return /* @__PURE__ */ import_react55.default.createElement(
17553
+ return /* @__PURE__ */ import_react56.default.createElement(
17479
17554
  SearchContextProvider,
17480
17555
  {
17481
17556
  value: {
@@ -17486,7 +17561,7 @@ var Search = ({
17486
17561
  searchController
17487
17562
  }
17488
17563
  },
17489
- /* @__PURE__ */ import_react55.default.createElement(
17564
+ /* @__PURE__ */ import_react56.default.createElement(
17490
17565
  "div",
17491
17566
  {
17492
17567
  className: (0, import_clsx12.default)("str-chat__search", {
@@ -17494,8 +17569,8 @@ var Search = ({
17494
17569
  }),
17495
17570
  "data-testid": "search"
17496
17571
  },
17497
- /* @__PURE__ */ import_react55.default.createElement(SearchBar2, null),
17498
- /* @__PURE__ */ import_react55.default.createElement(SearchResults2, null)
17572
+ /* @__PURE__ */ import_react56.default.createElement(SearchBar2, null),
17573
+ /* @__PURE__ */ import_react56.default.createElement(SearchResults2, null)
17499
17574
  )
17500
17575
  );
17501
17576
  };