stream-chat-react 13.0.5 → 13.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. package/dist/components/Channel/Channel.d.ts +1 -1
  2. package/dist/components/Channel/Channel.js +7 -0
  3. package/dist/components/ChannelList/hooks/useChannelListShape.js +3 -3
  4. package/dist/components/Chat/hooks/useChat.js +7 -3
  5. package/dist/components/Dialog/ButtonWithSubmenu.d.ts +11 -0
  6. package/dist/components/Dialog/ButtonWithSubmenu.js +88 -0
  7. package/dist/components/Dialog/index.d.ts +1 -0
  8. package/dist/components/Dialog/index.js +1 -0
  9. package/dist/components/Loading/LoadingErrorIndicator.js +1 -1
  10. package/dist/components/Message/Message.js +3 -2
  11. package/dist/components/Message/MessageIsThreadReplyInChannelButtonIndicator.d.ts +2 -0
  12. package/dist/components/Message/MessageIsThreadReplyInChannelButtonIndicator.js +63 -0
  13. package/dist/components/Message/MessageSimple.js +11 -4
  14. package/dist/components/Message/ReminderNotification.d.ts +6 -0
  15. package/dist/components/Message/ReminderNotification.js +30 -0
  16. package/dist/components/Message/hooks/index.d.ts +1 -0
  17. package/dist/components/Message/hooks/index.js +1 -0
  18. package/dist/components/Message/hooks/useMessageReminder.d.ts +1 -0
  19. package/dist/components/Message/hooks/useMessageReminder.js +11 -0
  20. package/dist/components/Message/index.d.ts +1 -0
  21. package/dist/components/Message/index.js +1 -0
  22. package/dist/components/Message/utils.d.ts +4 -2
  23. package/dist/components/Message/utils.js +11 -1
  24. package/dist/components/MessageActions/MessageActionsBox.js +12 -6
  25. package/dist/components/MessageActions/RemindMeSubmenu.d.ts +6 -0
  26. package/dist/components/MessageActions/RemindMeSubmenu.js +18 -0
  27. package/dist/components/MessageInput/MessageInputFlat.js +5 -3
  28. package/dist/components/MessageInput/SendToChannelCheckbox.d.ts +2 -0
  29. package/dist/components/MessageInput/SendToChannelCheckbox.js +20 -0
  30. package/dist/components/MessageList/MessageListNotifications.js +8 -3
  31. package/dist/components/MessageList/VirtualizedMessageListComponents.d.ts +1 -1
  32. package/dist/components/MessageList/VirtualizedMessageListComponents.js +4 -0
  33. package/dist/components/Notifications/hooks/index.d.ts +1 -0
  34. package/dist/components/Notifications/hooks/index.js +1 -0
  35. package/dist/components/Notifications/hooks/useNotifications.d.ts +2 -0
  36. package/dist/components/Notifications/hooks/useNotifications.js +10 -0
  37. package/dist/components/Notifications/index.d.ts +1 -0
  38. package/dist/components/Notifications/index.js +1 -0
  39. package/dist/components/TextareaComposer/TextareaComposer.js +4 -0
  40. package/dist/components/Thread/LegacyThreadContext.d.ts +8 -0
  41. package/dist/components/Thread/LegacyThreadContext.js +3 -0
  42. package/dist/components/Thread/Thread.d.ts +0 -4
  43. package/dist/components/Thread/Thread.js +2 -3
  44. package/dist/components/Thread/index.d.ts +1 -0
  45. package/dist/components/Thread/index.js +1 -0
  46. package/dist/components/index.d.ts +1 -0
  47. package/dist/components/index.js +1 -0
  48. package/dist/context/ComponentContext.d.ts +7 -1
  49. package/dist/css/v2/index.css +1 -1
  50. package/dist/css/v2/index.layout.css +1 -1
  51. package/dist/experimental/MessageActions/defaults.d.ts +1 -1
  52. package/dist/experimental/MessageActions/defaults.js +27 -4
  53. package/dist/experimental/index.browser.cjs +382 -169
  54. package/dist/experimental/index.browser.cjs.map +4 -4
  55. package/dist/experimental/index.node.cjs +382 -169
  56. package/dist/experimental/index.node.cjs.map +4 -4
  57. package/dist/i18n/Streami18n.d.ts +32 -3
  58. package/dist/i18n/Streami18n.js +34 -5
  59. package/dist/i18n/TranslationBuilder/TranslationBuilder.d.ts +35 -0
  60. package/dist/i18n/TranslationBuilder/TranslationBuilder.js +92 -0
  61. package/dist/i18n/TranslationBuilder/index.d.ts +2 -0
  62. package/dist/i18n/TranslationBuilder/index.js +2 -0
  63. package/dist/i18n/TranslationBuilder/notifications/NotificationTranslationTopic.d.ts +11 -0
  64. package/dist/i18n/TranslationBuilder/notifications/NotificationTranslationTopic.js +27 -0
  65. package/dist/i18n/TranslationBuilder/notifications/attachmentUpload.d.ts +4 -0
  66. package/dist/i18n/TranslationBuilder/notifications/attachmentUpload.js +32 -0
  67. package/dist/i18n/TranslationBuilder/notifications/index.d.ts +2 -0
  68. package/dist/i18n/TranslationBuilder/notifications/index.js +2 -0
  69. package/dist/i18n/TranslationBuilder/notifications/pollComposition.d.ts +3 -0
  70. package/dist/i18n/TranslationBuilder/notifications/pollComposition.js +9 -0
  71. package/dist/i18n/TranslationBuilder/notifications/types.d.ts +4 -0
  72. package/dist/i18n/TranslationBuilder/notifications/types.js +1 -0
  73. package/dist/i18n/de.json +23 -0
  74. package/dist/i18n/en.json +23 -0
  75. package/dist/i18n/es.json +23 -0
  76. package/dist/i18n/fr.json +23 -0
  77. package/dist/i18n/hi.json +23 -0
  78. package/dist/i18n/index.d.ts +1 -0
  79. package/dist/i18n/index.js +1 -0
  80. package/dist/i18n/it.json +23 -0
  81. package/dist/i18n/ja.json +23 -0
  82. package/dist/i18n/ko.json +23 -0
  83. package/dist/i18n/nl.json +23 -0
  84. package/dist/i18n/pt.json +23 -0
  85. package/dist/i18n/ru.json +23 -0
  86. package/dist/i18n/tr.json +23 -0
  87. package/dist/i18n/types.d.ts +54 -0
  88. package/dist/i18n/utils.d.ts +1 -1
  89. package/dist/i18n/utils.js +8 -2
  90. package/dist/index.browser.cjs +3617 -2162
  91. package/dist/index.browser.cjs.map +4 -4
  92. package/dist/index.node.cjs +3674 -2156
  93. package/dist/index.node.cjs.map +4 -4
  94. package/dist/plugins/Emojis/index.browser.cjs +1 -2
  95. package/dist/plugins/Emojis/index.browser.cjs.map +3 -3
  96. package/dist/plugins/Emojis/index.node.cjs +1 -2
  97. package/dist/plugins/Emojis/index.node.cjs.map +3 -3
  98. package/dist/scss/v2/Message/Message-layout.scss +11 -1
  99. package/dist/scss/v2/Message/Message-theme.scss +31 -1
  100. package/dist/scss/v2/MessageActionsBox/MessageActionsBox-theme.scss +8 -0
  101. package/dist/scss/v2/MessageInput/MessageInput-layout.scss +19 -0
  102. package/dist/scss/v2/MessageInput/MessageInput-theme.scss +11 -0
  103. package/package.json +6 -8
@@ -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_react39 = __toESM(require("react"));
330
+ var import_react42 = __toESM(require("react"));
331
331
 
332
332
  // src/context/ChannelListContext.tsx
333
333
  var import_react = __toESM(require("react"));
@@ -529,7 +529,7 @@ var useTranslationContext = (componentName) => {
529
529
  };
530
530
 
531
531
  // src/components/MessageInput/hooks/useMessageComposer.ts
532
- var import_react34 = require("react");
532
+ var import_react37 = require("react");
533
533
  var import_stream_chat = require("stream-chat");
534
534
 
535
535
  // src/components/Threads/ThreadContext.tsx
@@ -12657,9 +12657,10 @@ var ChannelPreview = (props) => {
12657
12657
  );
12658
12658
  };
12659
12659
 
12660
- // src/components/Thread/Thread.tsx
12661
- var import_react33 = __toESM(require("react"));
12662
- var import_clsx8 = __toESM(require("clsx"));
12660
+ // src/components/Thread/LegacyThreadContext.ts
12661
+ var import_react24 = __toESM(require("react"));
12662
+ var LegacyThreadContext = import_react24.default.createContext({ legacyThread: void 0 });
12663
+ var useLegacyThreadContext = () => (0, import_react24.useContext)(LegacyThreadContext);
12663
12664
 
12664
12665
  // src/components/Message/utils.tsx
12665
12666
  var import_react_fast_compare = __toESM(require("react-fast-compare"));
@@ -12678,7 +12679,9 @@ var MESSAGE_ACTIONS = {
12678
12679
  pin: "pin",
12679
12680
  quote: "quote",
12680
12681
  react: "react",
12681
- reply: "reply"
12682
+ remindMe: "remindMe",
12683
+ reply: "reply",
12684
+ saveForLater: "saveForLater"
12682
12685
  };
12683
12686
  var ACTIONS_NOT_WORKING_IN_THREAD = [
12684
12687
  MESSAGE_ACTIONS.pin,
@@ -12718,13 +12721,34 @@ var useUserRole = (message, onlySenderCanEdit, disableQuotedMessages) => {
12718
12721
  };
12719
12722
  };
12720
12723
 
12724
+ // src/components/Message/hooks/useMessageReminder.ts
12725
+ var import_react25 = require("react");
12726
+ var useMessageReminder = (messageId) => {
12727
+ const { client } = useChatContext();
12728
+ const reminderSelector = (0, import_react25.useCallback)(
12729
+ (state) => ({
12730
+ reminder: state.reminders.get(messageId)
12731
+ }),
12732
+ [messageId]
12733
+ );
12734
+ const { reminder } = useStateStore(client.reminders.state, reminderSelector);
12735
+ return reminder;
12736
+ };
12737
+
12721
12738
  // src/components/MessageActions/MessageActions.tsx
12739
+ var import_clsx6 = __toESM(require("clsx"));
12740
+ var import_react30 = __toESM(require("react"));
12741
+
12742
+ // src/components/MessageActions/RemindMeSubmenu.tsx
12743
+ var import_react28 = __toESM(require("react"));
12744
+
12745
+ // src/components/Dialog/ButtonWithSubmenu.tsx
12722
12746
  var import_clsx5 = __toESM(require("clsx"));
12723
- var import_react26 = __toESM(require("react"));
12747
+ var import_react27 = __toESM(require("react"));
12724
12748
 
12725
12749
  // src/components/Dialog/DialogAnchor.tsx
12726
12750
  var import_clsx4 = __toESM(require("clsx"));
12727
- var import_react24 = __toESM(require("react"));
12751
+ var import_react26 = __toESM(require("react"));
12728
12752
  var import_focus = require("@react-aria/focus");
12729
12753
  var import_react_popper = require("react-popper");
12730
12754
  function useDialogAnchor({
@@ -12732,7 +12756,7 @@ function useDialogAnchor({
12732
12756
  placement,
12733
12757
  referenceElement
12734
12758
  }) {
12735
- const [popperElement, setPopperElement] = (0, import_react24.useState)(null);
12759
+ const [popperElement, setPopperElement] = (0, import_react26.useState)(null);
12736
12760
  const { attributes, styles, update } = (0, import_react_popper.usePopper)(referenceElement, popperElement, {
12737
12761
  modifiers: [
12738
12762
  {
@@ -12747,7 +12771,7 @@ function useDialogAnchor({
12747
12771
  ],
12748
12772
  placement
12749
12773
  });
12750
- (0, import_react24.useEffect)(() => {
12774
+ (0, import_react26.useEffect)(() => {
12751
12775
  if (open && popperElement) {
12752
12776
  update?.();
12753
12777
  }
@@ -12779,7 +12803,7 @@ var DialogAnchor = ({
12779
12803
  placement,
12780
12804
  referenceElement
12781
12805
  });
12782
- (0, import_react24.useEffect)(() => {
12806
+ (0, import_react26.useEffect)(() => {
12783
12807
  if (!open) return;
12784
12808
  const hideOnEscape = (event) => {
12785
12809
  if (event.key !== "Escape") return;
@@ -12793,7 +12817,7 @@ var DialogAnchor = ({
12793
12817
  if (!open) {
12794
12818
  return null;
12795
12819
  }
12796
- return /* @__PURE__ */ import_react24.default.createElement(DialogPortalEntry, { dialogId: id }, /* @__PURE__ */ import_react24.default.createElement(import_focus.FocusScope, { autoFocus: focus, contain: trapFocus, restoreFocus: true }, /* @__PURE__ */ import_react24.default.createElement(
12820
+ return /* @__PURE__ */ import_react26.default.createElement(DialogPortalEntry, { dialogId: id }, /* @__PURE__ */ import_react26.default.createElement(import_focus.FocusScope, { autoFocus: focus, contain: trapFocus, restoreFocus: true }, /* @__PURE__ */ import_react26.default.createElement(
12797
12821
  "div",
12798
12822
  {
12799
12823
  ...restDivProps,
@@ -12808,9 +12832,168 @@ var DialogAnchor = ({
12808
12832
  )));
12809
12833
  };
12810
12834
 
12835
+ // src/components/Dialog/ButtonWithSubmenu.tsx
12836
+ var ButtonWithSubmenu = ({
12837
+ children,
12838
+ className,
12839
+ placement,
12840
+ Submenu,
12841
+ submenuContainerProps,
12842
+ ...buttonProps
12843
+ }) => {
12844
+ const buttonRef = (0, import_react27.useRef)(null);
12845
+ const [dialogContainer, setDialogContainer] = (0, import_react27.useState)(null);
12846
+ const keepSubmenuOpen = (0, import_react27.useRef)(false);
12847
+ const dialogCloseTimeout = (0, import_react27.useRef)(null);
12848
+ const dialogId = (0, import_react27.useMemo)(() => `submenu-${Math.random().toString(36).slice(2)}`, []);
12849
+ const dialog = useDialog({ id: dialogId });
12850
+ const dialogIsOpen = useDialogIsOpen(dialogId);
12851
+ const { attributes, setPopperElement, styles } = useDialogAnchor({
12852
+ open: dialogIsOpen,
12853
+ placement,
12854
+ referenceElement: buttonRef.current
12855
+ });
12856
+ const closeDialogLazily = (0, import_react27.useCallback)(() => {
12857
+ if (dialogCloseTimeout.current) clearTimeout(dialogCloseTimeout.current);
12858
+ dialogCloseTimeout.current = setTimeout(() => {
12859
+ if (keepSubmenuOpen.current) return;
12860
+ dialog.close();
12861
+ }, 100);
12862
+ }, [dialog]);
12863
+ const handleClose = (0, import_react27.useCallback)(
12864
+ (event) => {
12865
+ const parentButton = buttonRef.current;
12866
+ if (!dialogIsOpen || !parentButton) return;
12867
+ event.stopPropagation();
12868
+ closeDialogLazily();
12869
+ parentButton.focus();
12870
+ },
12871
+ [closeDialogLazily, dialogIsOpen, buttonRef]
12872
+ );
12873
+ const handleFocusParentButton = () => {
12874
+ if (dialogIsOpen) return;
12875
+ dialog.open();
12876
+ keepSubmenuOpen.current = true;
12877
+ };
12878
+ (0, import_react27.useEffect)(() => {
12879
+ const parentButton = buttonRef.current;
12880
+ if (!dialogIsOpen || !parentButton) return;
12881
+ const hideOnEscape = (event) => {
12882
+ if (event.key !== "Escape") return;
12883
+ handleClose(event);
12884
+ keepSubmenuOpen.current = false;
12885
+ };
12886
+ document.addEventListener("keyup", hideOnEscape, { capture: true });
12887
+ return () => {
12888
+ document.removeEventListener("keyup", hideOnEscape, { capture: true });
12889
+ };
12890
+ }, [dialogIsOpen, handleClose]);
12891
+ return /* @__PURE__ */ import_react27.default.createElement(import_react27.default.Fragment, null, /* @__PURE__ */ import_react27.default.createElement(
12892
+ "button",
12893
+ {
12894
+ "aria-selected": "false",
12895
+ className: (0, import_clsx5.default)(className, "str_chat__button-with-submenu", {
12896
+ "str_chat__button-with-submenu--submenu-open": dialogIsOpen
12897
+ }),
12898
+ onBlur: () => {
12899
+ keepSubmenuOpen.current = false;
12900
+ closeDialogLazily();
12901
+ },
12902
+ onClick: (event) => {
12903
+ event.stopPropagation();
12904
+ dialog.toggle();
12905
+ },
12906
+ onFocus: handleFocusParentButton,
12907
+ onMouseEnter: handleFocusParentButton,
12908
+ onMouseLeave: () => {
12909
+ keepSubmenuOpen.current = false;
12910
+ closeDialogLazily();
12911
+ },
12912
+ ref: buttonRef,
12913
+ role: "option",
12914
+ ...buttonProps
12915
+ },
12916
+ children
12917
+ ), dialogIsOpen && /* @__PURE__ */ import_react27.default.createElement(
12918
+ "div",
12919
+ {
12920
+ ...attributes.popper,
12921
+ onBlur: (event) => {
12922
+ const isBlurredDescendant = event.relatedTarget instanceof Node && dialogContainer?.contains(event.relatedTarget);
12923
+ if (isBlurredDescendant) return;
12924
+ keepSubmenuOpen.current = false;
12925
+ closeDialogLazily();
12926
+ },
12927
+ onFocus: () => {
12928
+ keepSubmenuOpen.current = true;
12929
+ },
12930
+ onMouseEnter: () => {
12931
+ keepSubmenuOpen.current = true;
12932
+ },
12933
+ onMouseLeave: () => {
12934
+ keepSubmenuOpen.current = false;
12935
+ closeDialogLazily();
12936
+ },
12937
+ ref: (element2) => {
12938
+ setPopperElement(element2);
12939
+ setDialogContainer(element2);
12940
+ },
12941
+ style: styles.popper,
12942
+ tabIndex: -1,
12943
+ ...submenuContainerProps
12944
+ },
12945
+ /* @__PURE__ */ import_react27.default.createElement(Submenu, null)
12946
+ ));
12947
+ };
12948
+
12949
+ // src/components/MessageActions/RemindMeSubmenu.tsx
12950
+ var RemindMeActionButton = ({
12951
+ className,
12952
+ isMine
12953
+ }) => {
12954
+ const { t } = useTranslationContext();
12955
+ return /* @__PURE__ */ import_react28.default.createElement(
12956
+ ButtonWithSubmenu,
12957
+ {
12958
+ "aria-selected": "false",
12959
+ className,
12960
+ placement: isMine ? "left-start" : "right-start",
12961
+ Submenu: RemindMeSubmenu
12962
+ },
12963
+ t("Remind Me")
12964
+ );
12965
+ };
12966
+ var RemindMeSubmenu = () => {
12967
+ const { t } = useTranslationContext();
12968
+ const { client } = useChatContext();
12969
+ const { message } = useMessageContext();
12970
+ return /* @__PURE__ */ import_react28.default.createElement(
12971
+ "div",
12972
+ {
12973
+ "aria-label": t("aria/Remind Me Options"),
12974
+ className: "str-chat__message-actions-box__submenu",
12975
+ role: "listbox"
12976
+ },
12977
+ client.reminders.scheduledOffsetsMs.map((offsetMs) => /* @__PURE__ */ import_react28.default.createElement(
12978
+ "button",
12979
+ {
12980
+ className: "str-chat__message-actions-list-item-button",
12981
+ key: `reminder-offset-option--${offsetMs}`,
12982
+ onClick: () => {
12983
+ client.reminders.upsertReminder({
12984
+ messageId: message.id,
12985
+ remind_at: new Date((/* @__PURE__ */ new Date()).getTime() + offsetMs).toISOString()
12986
+ });
12987
+ }
12988
+ },
12989
+ t("duration/Remind Me", { milliseconds: offsetMs })
12990
+ ))
12991
+ );
12992
+ };
12993
+
12811
12994
  // src/components/Message/icons.tsx
12812
- var import_react25 = __toESM(require("react"));
12813
- var ActionsIcon = ({ className = "" }) => /* @__PURE__ */ import_react25.default.createElement(
12995
+ var import_react29 = __toESM(require("react"));
12996
+ var ActionsIcon = ({ className = "" }) => /* @__PURE__ */ import_react29.default.createElement(
12814
12997
  "svg",
12815
12998
  {
12816
12999
  className,
@@ -12819,7 +13002,7 @@ var ActionsIcon = ({ className = "" }) => /* @__PURE__ */ import_react25.default
12819
13002
  width: "11",
12820
13003
  xmlns: "http://www.w3.org/2000/svg"
12821
13004
  },
12822
- /* @__PURE__ */ import_react25.default.createElement(
13005
+ /* @__PURE__ */ import_react29.default.createElement(
12823
13006
  "path",
12824
13007
  {
12825
13008
  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",
@@ -12827,7 +13010,7 @@ var ActionsIcon = ({ className = "" }) => /* @__PURE__ */ import_react25.default
12827
13010
  }
12828
13011
  )
12829
13012
  );
12830
- var ReactionIcon = ({ className = "" }) => /* @__PURE__ */ import_react25.default.createElement(
13013
+ var ReactionIcon = ({ className = "" }) => /* @__PURE__ */ import_react29.default.createElement(
12831
13014
  "svg",
12832
13015
  {
12833
13016
  className,
@@ -12836,9 +13019,9 @@ var ReactionIcon = ({ className = "" }) => /* @__PURE__ */ import_react25.defaul
12836
13019
  width: "12",
12837
13020
  xmlns: "http://www.w3.org/2000/svg"
12838
13021
  },
12839
- /* @__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" }))
13022
+ /* @__PURE__ */ import_react29.default.createElement("g", { clipRule: "evenodd", fillRule: "evenodd" }, /* @__PURE__ */ import_react29.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_react29.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" }))
12840
13023
  );
12841
- 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(
13024
+ var ThreadIcon = ({ className = "" }) => /* @__PURE__ */ import_react29.default.createElement("svg", { className, height: "10", width: "14", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react29.default.createElement(
12842
13025
  "path",
12843
13026
  {
12844
13027
  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",
@@ -12849,7 +13032,7 @@ var ThreadIcon = ({ className = "" }) => /* @__PURE__ */ import_react25.default.
12849
13032
  // src/components/MessageActions/MessageActions.tsx
12850
13033
  var MessageActionsWrapper = (props) => {
12851
13034
  const { children, customWrapperClass, inline, toggleOpen } = props;
12852
- const defaultWrapperClass = (0, import_clsx5.default)(
13035
+ const defaultWrapperClass = (0, import_clsx6.default)(
12853
13036
  "str-chat__message-simple__actions__action",
12854
13037
  "str-chat__message-simple__actions__action--options",
12855
13038
  "str-chat__message-actions-container"
@@ -12859,25 +13042,25 @@ var MessageActionsWrapper = (props) => {
12859
13042
  "data-testid": "message-actions",
12860
13043
  onClick: toggleOpen
12861
13044
  };
12862
- if (inline) return /* @__PURE__ */ import_react26.default.createElement("span", { ...wrapperProps }, children);
12863
- return /* @__PURE__ */ import_react26.default.createElement("div", { ...wrapperProps }, children);
13045
+ if (inline) return /* @__PURE__ */ import_react30.default.createElement("span", { ...wrapperProps }, children);
13046
+ return /* @__PURE__ */ import_react30.default.createElement("div", { ...wrapperProps }, children);
12864
13047
  };
12865
13048
 
12866
13049
  // src/components/Reactions/ReactionSelectorWithButton.tsx
12867
- var import_react31 = __toESM(require("react"));
13050
+ var import_react35 = __toESM(require("react"));
12868
13051
 
12869
13052
  // src/components/Reactions/ReactionSelector.tsx
12870
- var import_react30 = __toESM(require("react"));
12871
- var import_clsx6 = __toESM(require("clsx"));
13053
+ var import_react34 = __toESM(require("react"));
13054
+ var import_clsx7 = __toESM(require("clsx"));
12872
13055
 
12873
13056
  // src/components/Reactions/reactionOptions.tsx
12874
- var import_react29 = __toESM(require("react"));
13057
+ var import_react33 = __toESM(require("react"));
12875
13058
 
12876
13059
  // src/components/Reactions/StreamEmoji.tsx
12877
- var import_react28 = __toESM(require("react"));
13060
+ var import_react32 = __toESM(require("react"));
12878
13061
 
12879
13062
  // src/components/Reactions/SpriteImage.tsx
12880
- var import_react27 = __toESM(require("react"));
13063
+ var import_react31 = __toESM(require("react"));
12881
13064
 
12882
13065
  // src/components/Reactions/utils/utils.ts
12883
13066
  var isMutableRef = (ref) => {
@@ -12912,13 +13095,13 @@ var SpriteImage = ({
12912
13095
  style,
12913
13096
  width
12914
13097
  }) => {
12915
- const [[spriteWidth, spriteHeight], setSpriteDimensions] = (0, import_react27.useState)([0, 0]);
12916
- (0, import_react27.useEffect)(() => {
13098
+ const [[spriteWidth, spriteHeight], setSpriteDimensions] = (0, import_react31.useState)([0, 0]);
13099
+ (0, import_react31.useEffect)(() => {
12917
13100
  getImageDimensions(spriteUrl).then(setSpriteDimensions).catch(console.error);
12918
13101
  }, [spriteUrl]);
12919
13102
  const [x, y] = position4;
12920
- if (!spriteHeight || !spriteWidth) return /* @__PURE__ */ import_react27.default.createElement(import_react27.default.Fragment, null, fallback);
12921
- return /* @__PURE__ */ import_react27.default.createElement(
13103
+ if (!spriteHeight || !spriteWidth) return /* @__PURE__ */ import_react31.default.createElement(import_react31.default.Fragment, null, fallback);
13104
+ return /* @__PURE__ */ import_react31.default.createElement(
12922
13105
  "div",
12923
13106
  {
12924
13107
  "data-testid": "sprite-image",
@@ -12956,7 +13139,7 @@ var StreamEmoji = ({
12956
13139
  type
12957
13140
  }) => {
12958
13141
  const position4 = StreamSpriteEmojiPositions[type];
12959
- return /* @__PURE__ */ import_react28.default.createElement(
13142
+ return /* @__PURE__ */ import_react32.default.createElement(
12960
13143
  SpriteImage,
12961
13144
  {
12962
13145
  columns: 2,
@@ -12975,23 +13158,23 @@ var StreamEmoji = ({
12975
13158
  var defaultReactionOptions = [
12976
13159
  {
12977
13160
  type: "haha",
12978
- Component: () => /* @__PURE__ */ import_react29.default.createElement(StreamEmoji, { fallback: "\u{1F602}", type: "haha" }),
13161
+ Component: () => /* @__PURE__ */ import_react33.default.createElement(StreamEmoji, { fallback: "\u{1F602}", type: "haha" }),
12979
13162
  name: "Joy"
12980
13163
  },
12981
13164
  {
12982
13165
  type: "like",
12983
- Component: () => /* @__PURE__ */ import_react29.default.createElement(StreamEmoji, { fallback: "\u{1F44D}", type: "like" }),
13166
+ Component: () => /* @__PURE__ */ import_react33.default.createElement(StreamEmoji, { fallback: "\u{1F44D}", type: "like" }),
12984
13167
  name: "Thumbs up"
12985
13168
  },
12986
13169
  {
12987
13170
  type: "love",
12988
- Component: () => /* @__PURE__ */ import_react29.default.createElement(StreamEmoji, { fallback: "\u2764\uFE0F", type: "love" }),
13171
+ Component: () => /* @__PURE__ */ import_react33.default.createElement(StreamEmoji, { fallback: "\u2764\uFE0F", type: "love" }),
12989
13172
  name: "Heart"
12990
13173
  },
12991
- { type: "sad", Component: () => /* @__PURE__ */ import_react29.default.createElement(StreamEmoji, { fallback: "\u{1F614}", type: "sad" }), name: "Sad" },
13174
+ { type: "sad", Component: () => /* @__PURE__ */ import_react33.default.createElement(StreamEmoji, { fallback: "\u{1F614}", type: "sad" }), name: "Sad" },
12992
13175
  {
12993
13176
  type: "wow",
12994
- Component: () => /* @__PURE__ */ import_react29.default.createElement(StreamEmoji, { fallback: "\u{1F632}", type: "wow" }),
13177
+ Component: () => /* @__PURE__ */ import_react33.default.createElement(StreamEmoji, { fallback: "\u{1F632}", type: "wow" }),
12995
13178
  name: "Astonished"
12996
13179
  }
12997
13180
  ];
@@ -13025,23 +13208,23 @@ var UnMemoizedReactionSelector = (props) => {
13025
13208
  const latestReactions = propLatestReactions || message?.latest_reactions || [];
13026
13209
  const ownReactions = propOwnReactions || message?.own_reactions || [];
13027
13210
  const reactionGroups = propReactionGroups || message?.reaction_groups || {};
13028
- const [tooltipReactionType, setTooltipReactionType] = (0, import_react30.useState)(null);
13029
- const [tooltipPositions, setTooltipPositions] = (0, import_react30.useState)(null);
13030
- const rootRef = (0, import_react30.useRef)(null);
13031
- const targetRef = (0, import_react30.useRef)(null);
13032
- const tooltipRef = (0, import_react30.useRef)(null);
13033
- const showTooltip = (0, import_react30.useCallback)(
13211
+ const [tooltipReactionType, setTooltipReactionType] = (0, import_react34.useState)(null);
13212
+ const [tooltipPositions, setTooltipPositions] = (0, import_react34.useState)(null);
13213
+ const rootRef = (0, import_react34.useRef)(null);
13214
+ const targetRef = (0, import_react34.useRef)(null);
13215
+ const tooltipRef = (0, import_react34.useRef)(null);
13216
+ const showTooltip = (0, import_react34.useCallback)(
13034
13217
  (event, reactionType) => {
13035
13218
  targetRef.current = event.currentTarget;
13036
13219
  setTooltipReactionType(reactionType);
13037
13220
  },
13038
13221
  []
13039
13222
  );
13040
- const hideTooltip = (0, import_react30.useCallback)(() => {
13223
+ const hideTooltip = (0, import_react34.useCallback)(() => {
13041
13224
  setTooltipReactionType(null);
13042
13225
  setTooltipPositions(null);
13043
13226
  }, []);
13044
- (0, import_react30.useEffect)(() => {
13227
+ (0, import_react34.useEffect)(() => {
13045
13228
  if (!tooltipReactionType || !rootRef.current) return;
13046
13229
  const tooltip = tooltipRef.current?.getBoundingClientRect();
13047
13230
  const target = targetRef.current?.getBoundingClientRect();
@@ -13062,10 +13245,10 @@ var UnMemoizedReactionSelector = (props) => {
13062
13245
  }).filter(Boolean);
13063
13246
  const iHaveReactedWithReaction = (reactionType) => ownReactions.find((reaction) => reaction.type === reactionType);
13064
13247
  const getLatestUserForReactionType = (type) => latestReactions.find((reaction) => reaction.type === type && !!reaction.user)?.user || void 0;
13065
- return /* @__PURE__ */ import_react30.default.createElement(
13248
+ return /* @__PURE__ */ import_react34.default.createElement(
13066
13249
  "div",
13067
13250
  {
13068
- className: (0, import_clsx6.default)(
13251
+ className: (0, import_clsx7.default)(
13069
13252
  "str-chat__reaction-selector str-chat__message-reaction-selector str-chat-react__message-reaction-selector",
13070
13253
  {
13071
13254
  "str-chat__reaction-selector--reverse": reverse
@@ -13074,7 +13257,7 @@ var UnMemoizedReactionSelector = (props) => {
13074
13257
  "data-testid": "reaction-selector",
13075
13258
  ref: rootRef
13076
13259
  },
13077
- !!tooltipReactionType && detailedView && /* @__PURE__ */ import_react30.default.createElement(
13260
+ !!tooltipReactionType && detailedView && /* @__PURE__ */ import_react34.default.createElement(
13078
13261
  "div",
13079
13262
  {
13080
13263
  className: "str-chat__reaction-selector-tooltip",
@@ -13084,17 +13267,17 @@ var UnMemoizedReactionSelector = (props) => {
13084
13267
  visibility: tooltipPositions ? "visible" : "hidden"
13085
13268
  }
13086
13269
  },
13087
- /* @__PURE__ */ import_react30.default.createElement("div", { className: "arrow", style: { left: tooltipPositions?.arrow } }),
13088
- 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 ? ", " : ""}`))
13270
+ /* @__PURE__ */ import_react34.default.createElement("div", { className: "arrow", style: { left: tooltipPositions?.arrow } }),
13271
+ getUsersPerReactionType(tooltipReactionType)?.map((user, i, users) => /* @__PURE__ */ import_react34.default.createElement("span", { className: "latest-user-username", key: `key-${i}-${user}` }, `${user}${i < users.length - 1 ? ", " : ""}`))
13089
13272
  ),
13090
- /* @__PURE__ */ import_react30.default.createElement("ul", { className: "str-chat__message-reactions-list str-chat__message-reactions-options" }, reactionOptions.map(({ Component, name: reactionName, type: reactionType }) => {
13273
+ /* @__PURE__ */ import_react34.default.createElement("ul", { className: "str-chat__message-reactions-list str-chat__message-reactions-options" }, reactionOptions.map(({ Component, name: reactionName, type: reactionType }) => {
13091
13274
  const latestUser = getLatestUserForReactionType(reactionType);
13092
13275
  const count = reactionGroups[reactionType]?.count ?? 0;
13093
- return /* @__PURE__ */ import_react30.default.createElement("li", { key: reactionType }, /* @__PURE__ */ import_react30.default.createElement(
13276
+ return /* @__PURE__ */ import_react34.default.createElement("li", { key: reactionType }, /* @__PURE__ */ import_react34.default.createElement(
13094
13277
  "button",
13095
13278
  {
13096
13279
  "aria-label": `Select Reaction: ${reactionName || reactionType}`,
13097
- className: (0, import_clsx6.default)(
13280
+ className: (0, import_clsx7.default)(
13098
13281
  "str-chat__message-reactions-list-item str-chat__message-reactions-option",
13099
13282
  {
13100
13283
  "str-chat__message-reactions-option-selected": iHaveReactedWithReaction(reactionType)
@@ -13109,7 +13292,7 @@ var UnMemoizedReactionSelector = (props) => {
13109
13292
  }
13110
13293
  }
13111
13294
  },
13112
- !!count && detailedView && /* @__PURE__ */ import_react30.default.createElement(
13295
+ !!count && detailedView && /* @__PURE__ */ import_react34.default.createElement(
13113
13296
  "div",
13114
13297
  {
13115
13298
  className: "latest-user str-chat__message-reactions-last-user",
@@ -13117,7 +13300,7 @@ var UnMemoizedReactionSelector = (props) => {
13117
13300
  onMouseEnter: (e) => showTooltip(e, reactionType),
13118
13301
  onMouseLeave: hideTooltip
13119
13302
  },
13120
- latestUser ? /* @__PURE__ */ import_react30.default.createElement(
13303
+ latestUser ? /* @__PURE__ */ import_react34.default.createElement(
13121
13304
  Avatar2,
13122
13305
  {
13123
13306
  image: latestUser.image,
@@ -13125,15 +13308,15 @@ var UnMemoizedReactionSelector = (props) => {
13125
13308
  size: 20,
13126
13309
  user: latestUser
13127
13310
  }
13128
- ) : /* @__PURE__ */ import_react30.default.createElement("div", { className: "latest-user-not-found" })
13311
+ ) : /* @__PURE__ */ import_react34.default.createElement("div", { className: "latest-user-not-found" })
13129
13312
  ),
13130
- /* @__PURE__ */ import_react30.default.createElement("span", { className: "str-chat__message-reaction-emoji" }, /* @__PURE__ */ import_react30.default.createElement(Component, null)),
13131
- Boolean(count) && detailedView && /* @__PURE__ */ import_react30.default.createElement("span", { className: "str-chat__message-reactions-list-item__count" }, count || "")
13313
+ /* @__PURE__ */ import_react34.default.createElement("span", { className: "str-chat__message-reaction-emoji" }, /* @__PURE__ */ import_react34.default.createElement(Component, null)),
13314
+ Boolean(count) && detailedView && /* @__PURE__ */ import_react34.default.createElement("span", { className: "str-chat__message-reactions-list-item__count" }, count || "")
13132
13315
  ));
13133
13316
  }))
13134
13317
  );
13135
13318
  };
13136
- var ReactionSelector = import_react30.default.memo(
13319
+ var ReactionSelector = import_react34.default.memo(
13137
13320
  UnMemoizedReactionSelector
13138
13321
  );
13139
13322
 
@@ -13144,11 +13327,11 @@ var ReactionSelectorWithButton = ({
13144
13327
  const { t } = useTranslationContext("ReactionSelectorWithButton");
13145
13328
  const { isMyMessage, message } = useMessageContext("MessageOptions");
13146
13329
  const { ReactionSelector: ReactionSelector2 = ReactionSelector } = useComponentContext("MessageOptions");
13147
- const buttonRef = (0, import_react31.useRef)(null);
13330
+ const buttonRef = (0, import_react35.useRef)(null);
13148
13331
  const dialogId = `reaction-selector--${message.id}`;
13149
13332
  const dialog = useDialog({ id: dialogId });
13150
13333
  const dialogIsOpen = useDialogIsOpen(dialogId);
13151
- return /* @__PURE__ */ import_react31.default.createElement(import_react31.default.Fragment, null, /* @__PURE__ */ import_react31.default.createElement(
13334
+ return /* @__PURE__ */ import_react35.default.createElement(import_react35.default.Fragment, null, /* @__PURE__ */ import_react35.default.createElement(
13152
13335
  DialogAnchor,
13153
13336
  {
13154
13337
  id: dialogId,
@@ -13156,8 +13339,8 @@ var ReactionSelectorWithButton = ({
13156
13339
  referenceElement: buttonRef.current,
13157
13340
  trapFocus: true
13158
13341
  },
13159
- /* @__PURE__ */ import_react31.default.createElement(ReactionSelector2, null)
13160
- ), /* @__PURE__ */ import_react31.default.createElement(
13342
+ /* @__PURE__ */ import_react35.default.createElement(ReactionSelector2, null)
13343
+ ), /* @__PURE__ */ import_react35.default.createElement(
13161
13344
  "button",
13162
13345
  {
13163
13346
  "aria-expanded": dialogIsOpen,
@@ -13167,14 +13350,14 @@ var ReactionSelectorWithButton = ({
13167
13350
  onClick: () => dialog?.toggle(),
13168
13351
  ref: buttonRef
13169
13352
  },
13170
- /* @__PURE__ */ import_react31.default.createElement(ReactionIcon2, { className: "str-chat__message-action-icon" })
13353
+ /* @__PURE__ */ import_react35.default.createElement(ReactionIcon2, { className: "str-chat__message-action-icon" })
13171
13354
  ));
13172
13355
  };
13173
13356
 
13174
13357
  // src/components/InfiniteScrollPaginator/InfiniteScrollPaginator.tsx
13175
- var import_clsx7 = __toESM(require("clsx"));
13358
+ var import_clsx8 = __toESM(require("clsx"));
13176
13359
  var import_lodash2 = __toESM(require("lodash.debounce"));
13177
- var import_react32 = __toESM(require("react"));
13360
+ var import_react36 = __toESM(require("react"));
13178
13361
  var mousewheelListener = (event) => {
13179
13362
  if (event instanceof WheelEvent && event.deltaY === 1) {
13180
13363
  event.preventDefault();
@@ -13192,9 +13375,9 @@ var InfiniteScrollPaginator = (props) => {
13192
13375
  useCapture = false,
13193
13376
  ...componentProps
13194
13377
  } = props;
13195
- const rootRef = (0, import_react32.useRef)(null);
13196
- const childRef = (0, import_react32.useRef)(null);
13197
- const scrollListener = (0, import_react32.useMemo)(
13378
+ const rootRef = (0, import_react36.useRef)(null);
13379
+ const childRef = (0, import_react36.useRef)(null);
13380
+ const scrollListener = (0, import_react36.useMemo)(
13198
13381
  () => (0, import_lodash2.default)(() => {
13199
13382
  const root3 = rootRef.current;
13200
13383
  const child = childRef.current;
@@ -13221,7 +13404,7 @@ var InfiniteScrollPaginator = (props) => {
13221
13404
  threshold
13222
13405
  ]
13223
13406
  );
13224
- (0, import_react32.useEffect)(() => {
13407
+ (0, import_react36.useEffect)(() => {
13225
13408
  const scrollElement = rootRef.current;
13226
13409
  if (!scrollElement) return;
13227
13410
  scrollElement.addEventListener("scroll", scrollListener, useCapture);
@@ -13229,7 +13412,7 @@ var InfiniteScrollPaginator = (props) => {
13229
13412
  scrollElement.removeEventListener("scroll", scrollListener, useCapture);
13230
13413
  };
13231
13414
  }, [scrollListener, useCapture]);
13232
- (0, import_react32.useEffect)(() => {
13415
+ (0, import_react36.useEffect)(() => {
13233
13416
  const root3 = rootRef.current;
13234
13417
  if (!root3 || typeof ResizeObserver === "undefined" || !scrollListener) return;
13235
13418
  const observer = new ResizeObserver(scrollListener);
@@ -13238,7 +13421,7 @@ var InfiniteScrollPaginator = (props) => {
13238
13421
  observer.disconnect();
13239
13422
  };
13240
13423
  }, [scrollListener]);
13241
- (0, import_react32.useEffect)(() => {
13424
+ (0, import_react36.useEffect)(() => {
13242
13425
  const root3 = rootRef.current;
13243
13426
  if (root3) {
13244
13427
  root3.addEventListener("wheel", mousewheelListener, { passive: false });
@@ -13249,21 +13432,17 @@ var InfiniteScrollPaginator = (props) => {
13249
13432
  }
13250
13433
  };
13251
13434
  }, [useCapture]);
13252
- return /* @__PURE__ */ import_react32.default.createElement(
13435
+ return /* @__PURE__ */ import_react36.default.createElement(
13253
13436
  "div",
13254
13437
  {
13255
13438
  ...componentProps,
13256
- className: (0, import_clsx7.default)("str-chat__infinite-scroll-paginator", className),
13439
+ className: (0, import_clsx8.default)("str-chat__infinite-scroll-paginator", className),
13257
13440
  ref: rootRef
13258
13441
  },
13259
- /* @__PURE__ */ import_react32.default.createElement("div", { className: "str-chat__infinite-scroll-paginator__content", ref: childRef }, children)
13442
+ /* @__PURE__ */ import_react36.default.createElement("div", { className: "str-chat__infinite-scroll-paginator__content", ref: childRef }, children)
13260
13443
  );
13261
13444
  };
13262
13445
 
13263
- // src/components/Thread/Thread.tsx
13264
- var LegacyThreadContext = import_react33.default.createContext({ legacyThread: void 0 });
13265
- var useLegacyThreadContext = () => (0, import_react33.useContext)(LegacyThreadContext);
13266
-
13267
13446
  // src/components/MessageInput/hooks/useMessageComposer.ts
13268
13447
  var queueCache = new import_stream_chat.FixedSizeQueueCache(64);
13269
13448
  var useMessageComposer = () => {
@@ -13272,15 +13451,15 @@ var useMessageComposer = () => {
13272
13451
  const { editing, message: editedMessage } = useMessageContext();
13273
13452
  const { legacyThread: parentMessage } = useLegacyThreadContext();
13274
13453
  const threadInstance = useThreadContext();
13275
- const cachedEditedMessage = (0, import_react34.useMemo)(() => {
13454
+ const cachedEditedMessage = (0, import_react37.useMemo)(() => {
13276
13455
  if (!editedMessage) return void 0;
13277
13456
  return editedMessage;
13278
13457
  }, [editedMessage?.id]);
13279
- const cachedParentMessage = (0, import_react34.useMemo)(() => {
13458
+ const cachedParentMessage = (0, import_react37.useMemo)(() => {
13280
13459
  if (!parentMessage) return void 0;
13281
13460
  return parentMessage;
13282
13461
  }, [parentMessage?.id]);
13283
- const messageComposer = (0, import_react34.useMemo)(() => {
13462
+ const messageComposer = (0, import_react37.useMemo)(() => {
13284
13463
  if (editing && cachedEditedMessage) {
13285
13464
  const tag = import_stream_chat.MessageComposer.constructTag(cachedEditedMessage);
13286
13465
  const cachedComposer = queueCache.get(tag);
@@ -13320,7 +13499,7 @@ var useMessageComposer = () => {
13320
13499
  ) && !queueCache.peek(messageComposer.tag)) {
13321
13500
  queueCache.add(messageComposer.tag, messageComposer);
13322
13501
  }
13323
- (0, import_react34.useEffect)(() => {
13502
+ (0, import_react37.useEffect)(() => {
13324
13503
  const unsubscribe = messageComposer.registerSubscriptions();
13325
13504
  return () => {
13326
13505
  unsubscribe();
@@ -13330,17 +13509,17 @@ var useMessageComposer = () => {
13330
13509
  };
13331
13510
 
13332
13511
  // src/experimental/Search/hooks/useSearchQueriesInProgress.ts
13333
- var import_react35 = require("react");
13512
+ var import_react38 = require("react");
13334
13513
  var searchControllerStateSelector = (value) => ({
13335
13514
  sources: value.sources
13336
13515
  });
13337
13516
  var useSearchQueriesInProgress = (searchController) => {
13338
- const [queriesInProgress, setQueriesInProgress] = (0, import_react35.useState)([]);
13517
+ const [queriesInProgress, setQueriesInProgress] = (0, import_react38.useState)([]);
13339
13518
  const { sources } = useStateStore(
13340
13519
  searchController.state,
13341
13520
  searchControllerStateSelector
13342
13521
  );
13343
- (0, import_react35.useEffect)(() => {
13522
+ (0, import_react38.useEffect)(() => {
13344
13523
  const subscriptions = sources.map(
13345
13524
  (source) => source.state.subscribeWithSelector(
13346
13525
  (value) => ({ isLoading: value.isLoading }),
@@ -13360,7 +13539,7 @@ var useSearchQueriesInProgress = (searchController) => {
13360
13539
  };
13361
13540
 
13362
13541
  // src/experimental/MessageActions/hooks/useBaseMessageActionSetFilter.ts
13363
- var import_react36 = require("react");
13542
+ var import_react39 = require("react");
13364
13543
  var useBaseMessageActionSetFilter = (messageActionSet, disable2 = false) => {
13365
13544
  const { initialMessage: isInitialMessage, message } = useMessageContext();
13366
13545
  const {
@@ -13374,7 +13553,7 @@ var useBaseMessageActionSetFilter = (messageActionSet, disable2 = false) => {
13374
13553
  canReply
13375
13554
  } = useUserRole(message);
13376
13555
  const isMessageThreadReply = typeof message.parent_id === "string";
13377
- return (0, import_react36.useMemo)(() => {
13556
+ return (0, import_react39.useMemo)(() => {
13378
13557
  if (disable2) return messageActionSet;
13379
13558
  if (isInitialMessage || // not sure whether this thing even works anymore
13380
13559
  !message.type || message.type === "error" || message.type === "system" || message.type === "ephemeral" || message.status === "failed" || message.status === "sending")
@@ -13405,8 +13584,8 @@ var useBaseMessageActionSetFilter = (messageActionSet, disable2 = false) => {
13405
13584
  };
13406
13585
 
13407
13586
  // src/experimental/MessageActions/hooks/useSplitMessageActionSet.ts
13408
- var import_react37 = require("react");
13409
- var useSplitMessageActionSet = (messageActionSet) => (0, import_react37.useMemo)(() => {
13587
+ var import_react40 = require("react");
13588
+ var useSplitMessageActionSet = (messageActionSet) => (0, import_react40.useMemo)(() => {
13410
13589
  const quickActionSet = [];
13411
13590
  const dropdownActionSet = [];
13412
13591
  for (const action of messageActionSet) {
@@ -13417,14 +13596,15 @@ var useSplitMessageActionSet = (messageActionSet) => (0, import_react37.useMemo)
13417
13596
  }, [messageActionSet]);
13418
13597
 
13419
13598
  // src/experimental/MessageActions/defaults.tsx
13420
- var import_react38 = __toESM(require("react"));
13599
+ var import_react41 = __toESM(require("react"));
13600
+ var msgActionsBoxButtonClassName = "str-chat__message-actions-list-item-button";
13421
13601
  var DefaultDropdownActionButton = ({
13422
13602
  "aria-selected": ariaSelected = "false",
13423
13603
  children,
13424
- className = "str-chat__message-actions-list-item-button",
13604
+ className = msgActionsBoxButtonClassName,
13425
13605
  role = "option",
13426
13606
  ...rest
13427
- }) => /* @__PURE__ */ import_react38.default.createElement("button", { "aria-selected": ariaSelected, className, role, ...rest }, children);
13607
+ }) => /* @__PURE__ */ import_react41.default.createElement("button", { "aria-selected": ariaSelected, className, role, ...rest }, children);
13428
13608
  var DefaultMessageActionComponents = {
13429
13609
  dropdown: {
13430
13610
  Quote() {
@@ -13439,48 +13619,71 @@ var DefaultMessageActionComponents = {
13439
13619
  textarea.focus();
13440
13620
  }
13441
13621
  };
13442
- return /* @__PURE__ */ import_react38.default.createElement(DefaultDropdownActionButton, { onClick: handleQuote }, t("Quote"));
13622
+ return /* @__PURE__ */ import_react41.default.createElement(DefaultDropdownActionButton, { onClick: handleQuote }, t("Quote"));
13443
13623
  },
13444
13624
  Pin() {
13445
13625
  const { handlePin, message } = useMessageContext();
13446
13626
  const { t } = useTranslationContext();
13447
- return /* @__PURE__ */ import_react38.default.createElement(DefaultDropdownActionButton, { onClick: handlePin }, !message.pinned ? t("Pin") : t("Unpin"));
13627
+ return /* @__PURE__ */ import_react41.default.createElement(DefaultDropdownActionButton, { onClick: handlePin }, !message.pinned ? t("Pin") : t("Unpin"));
13448
13628
  },
13449
13629
  MarkUnread() {
13450
13630
  const { handleMarkUnread } = useMessageContext();
13451
13631
  const { t } = useTranslationContext();
13452
- return /* @__PURE__ */ import_react38.default.createElement(DefaultDropdownActionButton, { onClick: handleMarkUnread }, t("Mark as unread"));
13632
+ return /* @__PURE__ */ import_react41.default.createElement(DefaultDropdownActionButton, { onClick: handleMarkUnread }, t("Mark as unread"));
13453
13633
  },
13454
13634
  Flag() {
13455
13635
  const { handleFlag } = useMessageContext();
13456
13636
  const { t } = useTranslationContext();
13457
- return /* @__PURE__ */ import_react38.default.createElement(DefaultDropdownActionButton, { onClick: handleFlag }, t("Flag"));
13637
+ return /* @__PURE__ */ import_react41.default.createElement(DefaultDropdownActionButton, { onClick: handleFlag }, t("Flag"));
13458
13638
  },
13459
13639
  Mute() {
13460
13640
  const { handleMute, message } = useMessageContext();
13461
13641
  const { mutes } = useChatContext();
13462
13642
  const { t } = useTranslationContext();
13463
- return /* @__PURE__ */ import_react38.default.createElement(DefaultDropdownActionButton, { onClick: handleMute }, isUserMuted(message, mutes) ? t("Unmute") : t("Mute"));
13643
+ return /* @__PURE__ */ import_react41.default.createElement(DefaultDropdownActionButton, { onClick: handleMute }, isUserMuted(message, mutes) ? t("Unmute") : t("Mute"));
13464
13644
  },
13465
13645
  Edit() {
13466
13646
  const { handleEdit } = useMessageContext();
13467
13647
  const { t } = useTranslationContext();
13468
- return /* @__PURE__ */ import_react38.default.createElement(DefaultDropdownActionButton, { onClick: handleEdit }, t("Edit Message"));
13648
+ return /* @__PURE__ */ import_react41.default.createElement(DefaultDropdownActionButton, { onClick: handleEdit }, t("Edit Message"));
13469
13649
  },
13470
13650
  Delete() {
13471
13651
  const { handleDelete } = useMessageContext();
13472
13652
  const { t } = useTranslationContext();
13473
- return /* @__PURE__ */ import_react38.default.createElement(DefaultDropdownActionButton, { onClick: handleDelete }, t("Delete"));
13653
+ return /* @__PURE__ */ import_react41.default.createElement(DefaultDropdownActionButton, { onClick: handleDelete }, t("Delete"));
13654
+ },
13655
+ RemindMe() {
13656
+ const { isMyMessage } = useMessageContext();
13657
+ return /* @__PURE__ */ import_react41.default.createElement(
13658
+ RemindMeActionButton,
13659
+ {
13660
+ className: msgActionsBoxButtonClassName,
13661
+ isMine: isMyMessage()
13662
+ }
13663
+ );
13664
+ },
13665
+ SaveForLater() {
13666
+ const { client } = useChatContext();
13667
+ const { message } = useMessageContext();
13668
+ const { t } = useTranslationContext();
13669
+ const reminder = useMessageReminder(message.id);
13670
+ return /* @__PURE__ */ import_react41.default.createElement(
13671
+ DefaultDropdownActionButton,
13672
+ {
13673
+ onClick: () => reminder ? client.reminders.deleteReminder(reminder.id) : client.reminders.createReminder({ messageId: message.id })
13674
+ },
13675
+ reminder ? t("Remove reminder") : t("Save for later")
13676
+ );
13474
13677
  }
13475
13678
  },
13476
13679
  quick: {
13477
13680
  React() {
13478
- return /* @__PURE__ */ import_react38.default.createElement(ReactionSelectorWithButton, { ReactionIcon });
13681
+ return /* @__PURE__ */ import_react41.default.createElement(ReactionSelectorWithButton, { ReactionIcon });
13479
13682
  },
13480
13683
  Reply() {
13481
13684
  const { handleOpenThread } = useMessageContext();
13482
13685
  const { t } = useTranslationContext();
13483
- return /* @__PURE__ */ import_react38.default.createElement(
13686
+ return /* @__PURE__ */ import_react41.default.createElement(
13484
13687
  "button",
13485
13688
  {
13486
13689
  "aria-label": t("aria/Open Thread"),
@@ -13488,7 +13691,7 @@ var DefaultMessageActionComponents = {
13488
13691
  "data-testid": "thread-action",
13489
13692
  onClick: handleOpenThread
13490
13693
  },
13491
- /* @__PURE__ */ import_react38.default.createElement(ThreadIcon, { className: "str-chat__message-action-icon" })
13694
+ /* @__PURE__ */ import_react41.default.createElement(ThreadIcon, { className: "str-chat__message-action-icon" })
13492
13695
  );
13493
13696
  }
13494
13697
  }
@@ -13539,6 +13742,16 @@ var defaultMessageActionSet = [
13539
13742
  Component: DefaultMessageActionComponents.dropdown.MarkUnread,
13540
13743
  placement: "dropdown",
13541
13744
  type: "markUnread"
13745
+ },
13746
+ {
13747
+ Component: DefaultMessageActionComponents.dropdown.RemindMe,
13748
+ placement: "dropdown",
13749
+ type: "remindMe"
13750
+ },
13751
+ {
13752
+ Component: DefaultMessageActionComponents.dropdown.SaveForLater,
13753
+ placement: "dropdown",
13754
+ type: "saveForLater"
13542
13755
  }
13543
13756
  ];
13544
13757
 
@@ -13550,7 +13763,7 @@ var MessageActions = ({
13550
13763
  const { theme } = useChatContext();
13551
13764
  const { isMyMessage, message } = useMessageContext();
13552
13765
  const { t } = useTranslationContext();
13553
- const [actionsBoxButtonElement, setActionsBoxButtonElement] = (0, import_react39.useState)(null);
13766
+ const [actionsBoxButtonElement, setActionsBoxButtonElement] = (0, import_react42.useState)(null);
13554
13767
  const filteredMessageActionSet = useBaseMessageActionSetFilter(
13555
13768
  messageActionSet,
13556
13769
  disableBaseMessageActionSetFilter
@@ -13566,14 +13779,14 @@ var MessageActions = ({
13566
13779
  if (dropdownActionSet.length + quickActionSet.length === 0) {
13567
13780
  return null;
13568
13781
  }
13569
- return /* @__PURE__ */ import_react39.default.createElement(
13782
+ return /* @__PURE__ */ import_react42.default.createElement(
13570
13783
  "div",
13571
13784
  {
13572
13785
  className: (0, import_clsx9.default)(`str-chat__message-${theme}__actions str-chat__message-options`, {
13573
13786
  "str-chat__message-options--active": dropdownDialogIsOpen || reactionSelectorDialogIsOpen
13574
13787
  })
13575
13788
  },
13576
- dropdownActionSet.length > 0 && /* @__PURE__ */ import_react39.default.createElement(MessageActionsWrapper, { inline: false, toggleOpen: dialog?.toggle }, /* @__PURE__ */ import_react39.default.createElement(
13789
+ dropdownActionSet.length > 0 && /* @__PURE__ */ import_react42.default.createElement(MessageActionsWrapper, { inline: false, toggleOpen: dialog?.toggle }, /* @__PURE__ */ import_react42.default.createElement(
13577
13790
  "button",
13578
13791
  {
13579
13792
  "aria-expanded": dropdownDialogIsOpen,
@@ -13583,8 +13796,8 @@ var MessageActions = ({
13583
13796
  "data-testid": "message-actions-toggle-button",
13584
13797
  ref: setActionsBoxButtonElement
13585
13798
  },
13586
- /* @__PURE__ */ import_react39.default.createElement(ActionsIcon, { className: "str-chat__message-action-icon" })
13587
- ), /* @__PURE__ */ import_react39.default.createElement(
13799
+ /* @__PURE__ */ import_react42.default.createElement(ActionsIcon, { className: "str-chat__message-action-icon" })
13800
+ ), /* @__PURE__ */ import_react42.default.createElement(
13588
13801
  DialogAnchor,
13589
13802
  {
13590
13803
  id: dropdownDialogId,
@@ -13593,21 +13806,21 @@ var MessageActions = ({
13593
13806
  tabIndex: -1,
13594
13807
  trapFocus: true
13595
13808
  },
13596
- /* @__PURE__ */ import_react39.default.createElement(DropdownBox, { open: dropdownDialogIsOpen }, dropdownActionSet.map(({ Component: DropdownActionComponent, type }) => /* @__PURE__ */ import_react39.default.createElement(DropdownActionComponent, { key: type })))
13809
+ /* @__PURE__ */ import_react42.default.createElement(DropdownBox, { open: dropdownDialogIsOpen }, dropdownActionSet.map(({ Component: DropdownActionComponent, type }) => /* @__PURE__ */ import_react42.default.createElement(DropdownActionComponent, { key: type })))
13597
13810
  )),
13598
- quickActionSet.map(({ Component: QuickActionComponent, type }) => /* @__PURE__ */ import_react39.default.createElement(QuickActionComponent, { key: type }))
13811
+ quickActionSet.map(({ Component: QuickActionComponent, type }) => /* @__PURE__ */ import_react42.default.createElement(QuickActionComponent, { key: type }))
13599
13812
  );
13600
13813
  };
13601
13814
  var DropdownBox = ({ children, open }) => {
13602
13815
  const { t } = useTranslationContext();
13603
- return /* @__PURE__ */ import_react39.default.createElement(
13816
+ return /* @__PURE__ */ import_react42.default.createElement(
13604
13817
  "div",
13605
13818
  {
13606
13819
  className: (0, import_clsx9.default)("str-chat__message-actions-box", {
13607
13820
  "str-chat__message-actions-box--open": open
13608
13821
  })
13609
13822
  },
13610
- /* @__PURE__ */ import_react39.default.createElement(
13823
+ /* @__PURE__ */ import_react42.default.createElement(
13611
13824
  "div",
13612
13825
  {
13613
13826
  "aria-label": t("aria/Message Options"),
@@ -13621,21 +13834,21 @@ var DropdownBox = ({ children, open }) => {
13621
13834
 
13622
13835
  // src/experimental/Search/Search.tsx
13623
13836
  var import_clsx12 = __toESM(require("clsx"));
13624
- var import_react52 = __toESM(require("react"));
13837
+ var import_react55 = __toESM(require("react"));
13625
13838
 
13626
13839
  // src/experimental/Search/SearchBar/SearchBar.tsx
13627
13840
  var import_clsx10 = __toESM(require("clsx"));
13628
- var import_react41 = __toESM(require("react"));
13841
+ var import_react44 = __toESM(require("react"));
13629
13842
 
13630
13843
  // src/experimental/Search/SearchContext.tsx
13631
- var import_react40 = __toESM(require("react"));
13632
- var SearchContext = (0, import_react40.createContext)(void 0);
13844
+ var import_react43 = __toESM(require("react"));
13845
+ var SearchContext = (0, import_react43.createContext)(void 0);
13633
13846
  var SearchContextProvider = ({
13634
13847
  children,
13635
13848
  value
13636
- }) => /* @__PURE__ */ import_react40.default.createElement(SearchContext.Provider, { value }, children);
13849
+ }) => /* @__PURE__ */ import_react43.default.createElement(SearchContext.Provider, { value }, children);
13637
13850
  var useSearchContext = () => {
13638
- const contextValue = (0, import_react40.useContext)(SearchContext);
13851
+ const contextValue = (0, import_react43.useContext)(SearchContext);
13639
13852
  return contextValue;
13640
13853
  };
13641
13854
 
@@ -13648,12 +13861,12 @@ var SearchBar = () => {
13648
13861
  const { t } = useTranslationContext();
13649
13862
  const { disabled, exitSearchOnInputBlur, placeholder, searchController } = useSearchContext();
13650
13863
  const queriesInProgress = useSearchQueriesInProgress(searchController);
13651
- const [input, setInput] = (0, import_react41.useState)(null);
13864
+ const [input, setInput] = (0, import_react44.useState)(null);
13652
13865
  const { isActive, searchQuery } = useStateStore(
13653
13866
  searchController.state,
13654
13867
  searchControllerStateSelector2
13655
13868
  );
13656
- (0, import_react41.useEffect)(() => {
13869
+ (0, import_react44.useEffect)(() => {
13657
13870
  if (!input) return;
13658
13871
  const handleKeyDown = (event) => {
13659
13872
  if (event.key === "Escape") {
@@ -13666,15 +13879,15 @@ var SearchBar = () => {
13666
13879
  document.removeEventListener("keydown", handleKeyDown);
13667
13880
  };
13668
13881
  }, [searchController, input]);
13669
- return /* @__PURE__ */ import_react41.default.createElement("div", { className: "str-chat__search-bar", "data-testid": "search-bar" }, /* @__PURE__ */ import_react41.default.createElement(
13882
+ return /* @__PURE__ */ import_react44.default.createElement("div", { className: "str-chat__search-bar", "data-testid": "search-bar" }, /* @__PURE__ */ import_react44.default.createElement(
13670
13883
  "div",
13671
13884
  {
13672
13885
  className: (0, import_clsx10.default)("str-chat__search-input--wrapper", {
13673
13886
  "str-chat__search-input--wrapper-active": isActive
13674
13887
  })
13675
13888
  },
13676
- /* @__PURE__ */ import_react41.default.createElement("div", { className: "str-chat__search-input--icon" }),
13677
- /* @__PURE__ */ import_react41.default.createElement(
13889
+ /* @__PURE__ */ import_react44.default.createElement("div", { className: "str-chat__search-input--icon" }),
13890
+ /* @__PURE__ */ import_react44.default.createElement(
13678
13891
  "input",
13679
13892
  {
13680
13893
  className: "str-chat__search-input",
@@ -13697,7 +13910,7 @@ var SearchBar = () => {
13697
13910
  value: searchQuery
13698
13911
  }
13699
13912
  ),
13700
- searchQuery && /* @__PURE__ */ import_react41.default.createElement(
13913
+ searchQuery && /* @__PURE__ */ import_react44.default.createElement(
13701
13914
  "button",
13702
13915
  {
13703
13916
  className: "str-chat__search-input--clear-button",
@@ -13708,9 +13921,9 @@ var SearchBar = () => {
13708
13921
  input?.focus();
13709
13922
  }
13710
13923
  },
13711
- /* @__PURE__ */ import_react41.default.createElement("div", { className: "str-chat__search-input--clear-button-icon" })
13924
+ /* @__PURE__ */ import_react44.default.createElement("div", { className: "str-chat__search-input--clear-button-icon" })
13712
13925
  )
13713
- ), isActive ? /* @__PURE__ */ import_react41.default.createElement(
13926
+ ), isActive ? /* @__PURE__ */ import_react44.default.createElement(
13714
13927
  "button",
13715
13928
  {
13716
13929
  className: (0, import_clsx10.default)(
@@ -13727,25 +13940,25 @@ var SearchBar = () => {
13727
13940
  };
13728
13941
 
13729
13942
  // src/experimental/Search/SearchResults/SearchResults.tsx
13730
- var import_react51 = __toESM(require("react"));
13943
+ var import_react54 = __toESM(require("react"));
13731
13944
 
13732
13945
  // src/experimental/Search/SearchResults/SearchSourceResults.tsx
13733
- var import_react48 = __toESM(require("react"));
13946
+ var import_react51 = __toESM(require("react"));
13734
13947
 
13735
13948
  // src/experimental/Search/SearchResults/SearchSourceResultList.tsx
13736
- var import_react46 = __toESM(require("react"));
13949
+ var import_react49 = __toESM(require("react"));
13737
13950
 
13738
13951
  // src/experimental/Search/SearchResults/SearchResultItem.tsx
13739
- var import_react42 = __toESM(require("react"));
13952
+ var import_react45 = __toESM(require("react"));
13740
13953
  var import_lodash3 = __toESM(require("lodash.uniqby"));
13741
13954
  var ChannelSearchResultItem = ({ item }) => {
13742
13955
  const { setActiveChannel } = useChatContext();
13743
13956
  const { setChannels } = useChannelListContext();
13744
- const onSelect = (0, import_react42.useCallback)(() => {
13957
+ const onSelect = (0, import_react45.useCallback)(() => {
13745
13958
  setActiveChannel(item);
13746
13959
  setChannels?.((channels) => (0, import_lodash3.default)([item, ...channels], "cid"));
13747
13960
  }, [item, setActiveChannel, setChannels]);
13748
- return /* @__PURE__ */ import_react42.default.createElement(
13961
+ return /* @__PURE__ */ import_react45.default.createElement(
13749
13962
  ChannelPreview,
13750
13963
  {
13751
13964
  channel: item,
@@ -13764,13 +13977,13 @@ var MessageSearchResultItem = ({
13764
13977
  setActiveChannel
13765
13978
  } = useChatContext();
13766
13979
  const { setChannels } = useChannelListContext();
13767
- const channel = (0, import_react42.useMemo)(() => {
13980
+ const channel = (0, import_react45.useMemo)(() => {
13768
13981
  const { channel: channelData } = item;
13769
13982
  const type = channelData?.type ?? "unknown";
13770
13983
  const id = channelData?.id ?? "unknown";
13771
13984
  return client.channel(type, id);
13772
13985
  }, [client, item]);
13773
- const onSelect = (0, import_react42.useCallback)(async () => {
13986
+ const onSelect = (0, import_react45.useCallback)(async () => {
13774
13987
  if (!channel) return;
13775
13988
  await channel.state.loadMessageIntoState(
13776
13989
  item.id,
@@ -13781,9 +13994,9 @@ var MessageSearchResultItem = ({
13781
13994
  setActiveChannel(channel);
13782
13995
  setChannels?.((channels) => (0, import_lodash3.default)([channel, ...channels], "cid"));
13783
13996
  }, [channel, item, searchController, setActiveChannel, setChannels]);
13784
- const getLatestMessagePreview2 = (0, import_react42.useCallback)(() => item.text, [item]);
13997
+ const getLatestMessagePreview2 = (0, import_react45.useCallback)(() => item.text, [item]);
13785
13998
  if (!channel) return;
13786
- return /* @__PURE__ */ import_react42.default.createElement(
13999
+ return /* @__PURE__ */ import_react45.default.createElement(
13787
14000
  ChannelPreview,
13788
14001
  {
13789
14002
  active: channel.cid === activeChannel?.cid && item.id === searchController._internalState.getLatestValue().focusedMessage?.id,
@@ -13798,7 +14011,7 @@ var UserSearchResultItem = ({ item }) => {
13798
14011
  const { client, setActiveChannel } = useChatContext();
13799
14012
  const { setChannels } = useChannelListContext();
13800
14013
  const { directMessagingChannelType } = useSearchContext();
13801
- const onClick = (0, import_react42.useCallback)(() => {
14014
+ const onClick = (0, import_react45.useCallback)(() => {
13802
14015
  const newChannel = client.channel(directMessagingChannelType, {
13803
14016
  members: [client.userID, item.id]
13804
14017
  });
@@ -13806,7 +14019,7 @@ var UserSearchResultItem = ({ item }) => {
13806
14019
  setActiveChannel(newChannel);
13807
14020
  setChannels?.((channels) => (0, import_lodash3.default)([newChannel, ...channels], "cid"));
13808
14021
  }, [client, item, setActiveChannel, setChannels, directMessagingChannelType]);
13809
- return /* @__PURE__ */ import_react42.default.createElement(
14022
+ return /* @__PURE__ */ import_react45.default.createElement(
13810
14023
  "button",
13811
14024
  {
13812
14025
  "aria-label": `Select User Channel: ${item.name || ""}`,
@@ -13815,7 +14028,7 @@ var UserSearchResultItem = ({ item }) => {
13815
14028
  onClick,
13816
14029
  role: "option"
13817
14030
  },
13818
- /* @__PURE__ */ import_react42.default.createElement(
14031
+ /* @__PURE__ */ import_react45.default.createElement(
13819
14032
  Avatar,
13820
14033
  {
13821
14034
  className: "str-chat__avatar--channel-preview",
@@ -13824,7 +14037,7 @@ var UserSearchResultItem = ({ item }) => {
13824
14037
  user: item
13825
14038
  }
13826
14039
  ),
13827
- /* @__PURE__ */ import_react42.default.createElement("div", { className: "str-chat__search-result--display-name" }, item.name || item.id)
14040
+ /* @__PURE__ */ import_react45.default.createElement("div", { className: "str-chat__search-result--display-name" }, item.name || item.id)
13828
14041
  );
13829
14042
  };
13830
14043
  var DefaultSearchResultItems = {
@@ -13834,18 +14047,18 @@ var DefaultSearchResultItems = {
13834
14047
  };
13835
14048
 
13836
14049
  // src/experimental/Search/SearchResults/SearchSourceResultListFooter.tsx
13837
- var import_react45 = __toESM(require("react"));
14050
+ var import_react48 = __toESM(require("react"));
13838
14051
 
13839
14052
  // src/experimental/Search/SearchResults/SearchSourceResultsLoadingIndicator.tsx
13840
- var import_react44 = __toESM(require("react"));
14053
+ var import_react47 = __toESM(require("react"));
13841
14054
 
13842
14055
  // src/experimental/Search/SearchSourceResultsContext.tsx
13843
- var import_react43 = __toESM(require("react"));
13844
- var SearchSourceResultsContext = (0, import_react43.createContext)(void 0);
14056
+ var import_react46 = __toESM(require("react"));
14057
+ var SearchSourceResultsContext = (0, import_react46.createContext)(void 0);
13845
14058
  var SearchSourceResultsContextProvider = ({
13846
14059
  children,
13847
14060
  value
13848
- }) => /* @__PURE__ */ import_react43.default.createElement(
14061
+ }) => /* @__PURE__ */ import_react46.default.createElement(
13849
14062
  SearchSourceResultsContext.Provider,
13850
14063
  {
13851
14064
  value
@@ -13853,7 +14066,7 @@ var SearchSourceResultsContextProvider = ({
13853
14066
  children
13854
14067
  );
13855
14068
  var useSearchSourceResultsContext = () => {
13856
- const contextValue = (0, import_react43.useContext)(SearchSourceResultsContext);
14069
+ const contextValue = (0, import_react46.useContext)(SearchSourceResultsContext);
13857
14070
  return contextValue;
13858
14071
  };
13859
14072
 
@@ -13861,7 +14074,7 @@ var useSearchSourceResultsContext = () => {
13861
14074
  var SearchSourceResultsLoadingIndicator = () => {
13862
14075
  const { t } = useTranslationContext();
13863
14076
  const { searchSource } = useSearchSourceResultsContext();
13864
- return /* @__PURE__ */ import_react44.default.createElement(
14077
+ return /* @__PURE__ */ import_react47.default.createElement(
13865
14078
  "div",
13866
14079
  {
13867
14080
  className: "str-chat__search-source-results__loading-indicator",
@@ -13886,13 +14099,13 @@ var SearchSourceResultListFooter = () => {
13886
14099
  searchSource.state,
13887
14100
  searchSourceStateSelector
13888
14101
  );
13889
- return /* @__PURE__ */ import_react45.default.createElement(
14102
+ return /* @__PURE__ */ import_react48.default.createElement(
13890
14103
  "div",
13891
14104
  {
13892
14105
  className: "str-chat__search-source-result-list__footer",
13893
14106
  "data-testid": "search-footer"
13894
14107
  },
13895
- isLoading ? /* @__PURE__ */ import_react45.default.createElement(SearchSourceResultsLoadingIndicator2, null) : !hasNext ? /* @__PURE__ */ import_react45.default.createElement("div", { className: "str-chat__search-source-results---empty" }, t("All results loaded")) : null
14108
+ 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
13896
14109
  );
13897
14110
  };
13898
14111
 
@@ -13910,36 +14123,36 @@ var SearchSourceResultList = ({
13910
14123
  const { items } = useStateStore(searchSource.state, searchSourceStateSelector2);
13911
14124
  const SearchResultItem = SearchResultItems[searchSource.type];
13912
14125
  if (!SearchResultItem) return null;
13913
- return /* @__PURE__ */ import_react46.default.createElement(
14126
+ return /* @__PURE__ */ import_react49.default.createElement(
13914
14127
  "div",
13915
14128
  {
13916
14129
  className: "str-chat__search-source-result-list",
13917
14130
  "data-testid": "search-source-result-list"
13918
14131
  },
13919
- /* @__PURE__ */ import_react46.default.createElement(
14132
+ /* @__PURE__ */ import_react49.default.createElement(
13920
14133
  InfiniteScrollPaginator,
13921
14134
  {
13922
14135
  loadNextDebounceMs: loadMoreDebounceMs,
13923
14136
  loadNextOnScrollToBottom: searchSource.search,
13924
14137
  threshold: loadMoreThresholdPx
13925
14138
  },
13926
- items?.map((item, i) => /* @__PURE__ */ import_react46.default.createElement(
14139
+ items?.map((item, i) => /* @__PURE__ */ import_react49.default.createElement(
13927
14140
  SearchResultItem,
13928
14141
  {
13929
14142
  item,
13930
14143
  key: `source-search-result-${searchSource.type}-${i}`
13931
14144
  }
13932
14145
  )),
13933
- /* @__PURE__ */ import_react46.default.createElement(SearchSourceResultListFooter2, null)
14146
+ /* @__PURE__ */ import_react49.default.createElement(SearchSourceResultListFooter2, null)
13934
14147
  )
13935
14148
  );
13936
14149
  };
13937
14150
 
13938
14151
  // src/experimental/Search/SearchResults/SearchSourceResultsEmpty.tsx
13939
- var import_react47 = __toESM(require("react"));
14152
+ var import_react50 = __toESM(require("react"));
13940
14153
  var SearchSourceResultsEmpty = () => {
13941
14154
  const { t } = useTranslationContext();
13942
- return /* @__PURE__ */ import_react47.default.createElement("div", { className: "str-chat__search-source-results-empty" }, t("No results found"));
14155
+ return /* @__PURE__ */ import_react50.default.createElement("div", { className: "str-chat__search-source-results-empty" }, t("No results found"));
13943
14156
  };
13944
14157
 
13945
14158
  // src/experimental/Search/SearchResults/SearchSourceResultsHeader.tsx
@@ -13961,20 +14174,20 @@ var SearchSourceResults = ({ searchSource }) => {
13961
14174
  searchSourceStateSelector3
13962
14175
  );
13963
14176
  if (!items && !isLoading) return null;
13964
- return /* @__PURE__ */ import_react48.default.createElement(SearchSourceResultsContextProvider, { value: { searchSource } }, /* @__PURE__ */ import_react48.default.createElement(
14177
+ return /* @__PURE__ */ import_react51.default.createElement(SearchSourceResultsContextProvider, { value: { searchSource } }, /* @__PURE__ */ import_react51.default.createElement(
13965
14178
  "div",
13966
14179
  {
13967
14180
  className: "str-chat__search-source-results",
13968
14181
  "data-testid": "search-source-results"
13969
14182
  },
13970
- /* @__PURE__ */ import_react48.default.createElement(SearchSourceResultsHeader2, null),
13971
- items?.length || isLoading ? /* @__PURE__ */ import_react48.default.createElement(SearchSourceResultList2, null) : /* @__PURE__ */ import_react48.default.createElement(SearchSourceResultsEmpty2, null)
14183
+ /* @__PURE__ */ import_react51.default.createElement(SearchSourceResultsHeader2, null),
14184
+ items?.length || isLoading ? /* @__PURE__ */ import_react51.default.createElement(SearchSourceResultList2, null) : /* @__PURE__ */ import_react51.default.createElement(SearchSourceResultsEmpty2, null)
13972
14185
  ));
13973
14186
  };
13974
14187
 
13975
14188
  // src/experimental/Search/SearchResults/SearchResultsHeader.tsx
13976
14189
  var import_clsx11 = __toESM(require("clsx"));
13977
- var import_react49 = __toESM(require("react"));
14190
+ var import_react52 = __toESM(require("react"));
13978
14191
  var searchSourceStateSelector4 = (nextValue) => ({
13979
14192
  isActive: nextValue.isActive
13980
14193
  });
@@ -13983,7 +14196,7 @@ var SearchSourceFilterButton = ({ source }) => {
13983
14196
  const { searchController } = useSearchContext();
13984
14197
  const { isActive } = useStateStore(source.state, searchSourceStateSelector4);
13985
14198
  const label = `search-results-header-filter-source-button-label--${source.type}`;
13986
- return /* @__PURE__ */ import_react49.default.createElement(
14199
+ return /* @__PURE__ */ import_react52.default.createElement(
13987
14200
  "button",
13988
14201
  {
13989
14202
  "aria-label": t("aria/Search results header filter button"),
@@ -14006,13 +14219,13 @@ var SearchSourceFilterButton = ({ source }) => {
14006
14219
  };
14007
14220
  var SearchResultsHeader = () => {
14008
14221
  const { searchController } = useSearchContext();
14009
- return /* @__PURE__ */ import_react49.default.createElement("div", { className: "str-chat__search-results-header", "data-testid": "search-results-header" }, /* @__PURE__ */ import_react49.default.createElement(
14222
+ return /* @__PURE__ */ import_react52.default.createElement("div", { className: "str-chat__search-results-header", "data-testid": "search-results-header" }, /* @__PURE__ */ import_react52.default.createElement(
14010
14223
  "div",
14011
14224
  {
14012
14225
  className: "str-chat__search-results-header__filter-source-buttons",
14013
14226
  "data-testid": "filter-source-buttons"
14014
14227
  },
14015
- searchController.sources.map((source) => /* @__PURE__ */ import_react49.default.createElement(
14228
+ searchController.sources.map((source) => /* @__PURE__ */ import_react52.default.createElement(
14016
14229
  SearchSourceFilterButton,
14017
14230
  {
14018
14231
  key: `search-source-filter-button-${source.type}`,
@@ -14023,10 +14236,10 @@ var SearchResultsHeader = () => {
14023
14236
  };
14024
14237
 
14025
14238
  // src/experimental/Search/SearchResults/SearchResultsPresearch.tsx
14026
- var import_react50 = __toESM(require("react"));
14239
+ var import_react53 = __toESM(require("react"));
14027
14240
  var SearchResultsPresearch = () => {
14028
14241
  const { t } = useTranslationContext();
14029
- return /* @__PURE__ */ import_react50.default.createElement("div", { className: "str-chat__search-results-presearch" }, t("Start typing to search"));
14242
+ return /* @__PURE__ */ import_react53.default.createElement("div", { className: "str-chat__search-results-presearch" }, t("Start typing to search"));
14030
14243
  };
14031
14244
 
14032
14245
  // src/experimental/Search/SearchResults/SearchResults.tsx
@@ -14047,7 +14260,7 @@ var SearchResults = () => {
14047
14260
  searchController.state,
14048
14261
  searchControllerStateSelector3
14049
14262
  );
14050
- return !isActive ? null : /* @__PURE__ */ import_react51.default.createElement("div", { "aria-label": t("aria/Search results"), className: "str-chat__search-results" }, /* @__PURE__ */ import_react51.default.createElement(SearchResultsHeader2, null), !searchQuery ? /* @__PURE__ */ import_react51.default.createElement(SearchResultsPresearch2, { activeSources }) : activeSources.map((source) => /* @__PURE__ */ import_react51.default.createElement(SearchSourceResults2, { key: source.type, searchSource: source })));
14263
+ 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 })));
14051
14264
  };
14052
14265
 
14053
14266
  // src/experimental/Search/Search.tsx
@@ -14061,7 +14274,7 @@ var Search = ({
14061
14274
  const { SearchBar: SearchBar2 = SearchBar, SearchResults: SearchResults2 = SearchResults } = useComponentContext();
14062
14275
  const { searchController } = useChatContext();
14063
14276
  const { isActive } = useStateStore(searchController.state, searchControllerStateSelector4);
14064
- return /* @__PURE__ */ import_react52.default.createElement(
14277
+ return /* @__PURE__ */ import_react55.default.createElement(
14065
14278
  SearchContextProvider,
14066
14279
  {
14067
14280
  value: {
@@ -14072,7 +14285,7 @@ var Search = ({
14072
14285
  searchController
14073
14286
  }
14074
14287
  },
14075
- /* @__PURE__ */ import_react52.default.createElement(
14288
+ /* @__PURE__ */ import_react55.default.createElement(
14076
14289
  "div",
14077
14290
  {
14078
14291
  className: (0, import_clsx12.default)("str-chat__search", {
@@ -14080,8 +14293,8 @@ var Search = ({
14080
14293
  }),
14081
14294
  "data-testid": "search"
14082
14295
  },
14083
- /* @__PURE__ */ import_react52.default.createElement(SearchBar2, null),
14084
- /* @__PURE__ */ import_react52.default.createElement(SearchResults2, null)
14296
+ /* @__PURE__ */ import_react55.default.createElement(SearchBar2, null),
14297
+ /* @__PURE__ */ import_react55.default.createElement(SearchResults2, null)
14085
14298
  )
14086
14299
  );
14087
14300
  };