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
@@ -10787,9 +10787,10 @@ var ChannelPreview = (props) => {
10787
10787
  );
10788
10788
  };
10789
10789
 
10790
- // src/components/Thread/Thread.tsx
10791
- var import_react33 = __toESM(require("react"));
10792
- var import_clsx8 = __toESM(require("clsx"));
10790
+ // src/components/Thread/LegacyThreadContext.ts
10791
+ var import_react24 = __toESM(require("react"));
10792
+ var LegacyThreadContext = import_react24.default.createContext({ legacyThread: void 0 });
10793
+ var useLegacyThreadContext = () => (0, import_react24.useContext)(LegacyThreadContext);
10793
10794
 
10794
10795
  // src/components/Message/utils.tsx
10795
10796
  var import_react_fast_compare = __toESM(require("react-fast-compare"));
@@ -10808,7 +10809,9 @@ var MESSAGE_ACTIONS = {
10808
10809
  pin: "pin",
10809
10810
  quote: "quote",
10810
10811
  react: "react",
10811
- reply: "reply"
10812
+ remindMe: "remindMe",
10813
+ reply: "reply",
10814
+ saveForLater: "saveForLater"
10812
10815
  };
10813
10816
  var ACTIONS_NOT_WORKING_IN_THREAD = [
10814
10817
  MESSAGE_ACTIONS.pin,
@@ -10848,13 +10851,34 @@ var useUserRole = (message, onlySenderCanEdit, disableQuotedMessages) => {
10848
10851
  };
10849
10852
  };
10850
10853
 
10854
+ // src/components/Message/hooks/useMessageReminder.ts
10855
+ var import_react25 = require("react");
10856
+ var useMessageReminder = (messageId) => {
10857
+ const { client } = useChatContext();
10858
+ const reminderSelector = (0, import_react25.useCallback)(
10859
+ (state) => ({
10860
+ reminder: state.reminders.get(messageId)
10861
+ }),
10862
+ [messageId]
10863
+ );
10864
+ const { reminder } = useStateStore(client.reminders.state, reminderSelector);
10865
+ return reminder;
10866
+ };
10867
+
10851
10868
  // src/components/MessageActions/MessageActions.tsx
10869
+ var import_clsx6 = __toESM(require("clsx"));
10870
+ var import_react30 = __toESM(require("react"));
10871
+
10872
+ // src/components/MessageActions/RemindMeSubmenu.tsx
10873
+ var import_react28 = __toESM(require("react"));
10874
+
10875
+ // src/components/Dialog/ButtonWithSubmenu.tsx
10852
10876
  var import_clsx5 = __toESM(require("clsx"));
10853
- var import_react26 = __toESM(require("react"));
10877
+ var import_react27 = __toESM(require("react"));
10854
10878
 
10855
10879
  // src/components/Dialog/DialogAnchor.tsx
10856
10880
  var import_clsx4 = __toESM(require("clsx"));
10857
- var import_react24 = __toESM(require("react"));
10881
+ var import_react26 = __toESM(require("react"));
10858
10882
  var import_focus = require("@react-aria/focus");
10859
10883
  var import_react_popper = require("react-popper");
10860
10884
  function useDialogAnchor({
@@ -10862,7 +10886,7 @@ function useDialogAnchor({
10862
10886
  placement,
10863
10887
  referenceElement
10864
10888
  }) {
10865
- const [popperElement, setPopperElement] = (0, import_react24.useState)(null);
10889
+ const [popperElement, setPopperElement] = (0, import_react26.useState)(null);
10866
10890
  const { attributes, styles, update } = (0, import_react_popper.usePopper)(referenceElement, popperElement, {
10867
10891
  modifiers: [
10868
10892
  {
@@ -10877,7 +10901,7 @@ function useDialogAnchor({
10877
10901
  ],
10878
10902
  placement
10879
10903
  });
10880
- (0, import_react24.useEffect)(() => {
10904
+ (0, import_react26.useEffect)(() => {
10881
10905
  if (open && popperElement) {
10882
10906
  update?.();
10883
10907
  }
@@ -10909,7 +10933,7 @@ var DialogAnchor = ({
10909
10933
  placement,
10910
10934
  referenceElement
10911
10935
  });
10912
- (0, import_react24.useEffect)(() => {
10936
+ (0, import_react26.useEffect)(() => {
10913
10937
  if (!open) return;
10914
10938
  const hideOnEscape = (event) => {
10915
10939
  if (event.key !== "Escape") return;
@@ -10923,7 +10947,7 @@ var DialogAnchor = ({
10923
10947
  if (!open) {
10924
10948
  return null;
10925
10949
  }
10926
- 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(
10950
+ 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(
10927
10951
  "div",
10928
10952
  {
10929
10953
  ...restDivProps,
@@ -10938,9 +10962,168 @@ var DialogAnchor = ({
10938
10962
  )));
10939
10963
  };
10940
10964
 
10965
+ // src/components/Dialog/ButtonWithSubmenu.tsx
10966
+ var ButtonWithSubmenu = ({
10967
+ children,
10968
+ className,
10969
+ placement,
10970
+ Submenu,
10971
+ submenuContainerProps,
10972
+ ...buttonProps
10973
+ }) => {
10974
+ const buttonRef = (0, import_react27.useRef)(null);
10975
+ const [dialogContainer, setDialogContainer] = (0, import_react27.useState)(null);
10976
+ const keepSubmenuOpen = (0, import_react27.useRef)(false);
10977
+ const dialogCloseTimeout = (0, import_react27.useRef)(null);
10978
+ const dialogId = (0, import_react27.useMemo)(() => `submenu-${Math.random().toString(36).slice(2)}`, []);
10979
+ const dialog = useDialog({ id: dialogId });
10980
+ const dialogIsOpen = useDialogIsOpen(dialogId);
10981
+ const { attributes, setPopperElement, styles } = useDialogAnchor({
10982
+ open: dialogIsOpen,
10983
+ placement,
10984
+ referenceElement: buttonRef.current
10985
+ });
10986
+ const closeDialogLazily = (0, import_react27.useCallback)(() => {
10987
+ if (dialogCloseTimeout.current) clearTimeout(dialogCloseTimeout.current);
10988
+ dialogCloseTimeout.current = setTimeout(() => {
10989
+ if (keepSubmenuOpen.current) return;
10990
+ dialog.close();
10991
+ }, 100);
10992
+ }, [dialog]);
10993
+ const handleClose = (0, import_react27.useCallback)(
10994
+ (event) => {
10995
+ const parentButton = buttonRef.current;
10996
+ if (!dialogIsOpen || !parentButton) return;
10997
+ event.stopPropagation();
10998
+ closeDialogLazily();
10999
+ parentButton.focus();
11000
+ },
11001
+ [closeDialogLazily, dialogIsOpen, buttonRef]
11002
+ );
11003
+ const handleFocusParentButton = () => {
11004
+ if (dialogIsOpen) return;
11005
+ dialog.open();
11006
+ keepSubmenuOpen.current = true;
11007
+ };
11008
+ (0, import_react27.useEffect)(() => {
11009
+ const parentButton = buttonRef.current;
11010
+ if (!dialogIsOpen || !parentButton) return;
11011
+ const hideOnEscape = (event) => {
11012
+ if (event.key !== "Escape") return;
11013
+ handleClose(event);
11014
+ keepSubmenuOpen.current = false;
11015
+ };
11016
+ document.addEventListener("keyup", hideOnEscape, { capture: true });
11017
+ return () => {
11018
+ document.removeEventListener("keyup", hideOnEscape, { capture: true });
11019
+ };
11020
+ }, [dialogIsOpen, handleClose]);
11021
+ return /* @__PURE__ */ import_react27.default.createElement(import_react27.default.Fragment, null, /* @__PURE__ */ import_react27.default.createElement(
11022
+ "button",
11023
+ {
11024
+ "aria-selected": "false",
11025
+ className: (0, import_clsx5.default)(className, "str_chat__button-with-submenu", {
11026
+ "str_chat__button-with-submenu--submenu-open": dialogIsOpen
11027
+ }),
11028
+ onBlur: () => {
11029
+ keepSubmenuOpen.current = false;
11030
+ closeDialogLazily();
11031
+ },
11032
+ onClick: (event) => {
11033
+ event.stopPropagation();
11034
+ dialog.toggle();
11035
+ },
11036
+ onFocus: handleFocusParentButton,
11037
+ onMouseEnter: handleFocusParentButton,
11038
+ onMouseLeave: () => {
11039
+ keepSubmenuOpen.current = false;
11040
+ closeDialogLazily();
11041
+ },
11042
+ ref: buttonRef,
11043
+ role: "option",
11044
+ ...buttonProps
11045
+ },
11046
+ children
11047
+ ), dialogIsOpen && /* @__PURE__ */ import_react27.default.createElement(
11048
+ "div",
11049
+ {
11050
+ ...attributes.popper,
11051
+ onBlur: (event) => {
11052
+ const isBlurredDescendant = event.relatedTarget instanceof Node && dialogContainer?.contains(event.relatedTarget);
11053
+ if (isBlurredDescendant) return;
11054
+ keepSubmenuOpen.current = false;
11055
+ closeDialogLazily();
11056
+ },
11057
+ onFocus: () => {
11058
+ keepSubmenuOpen.current = true;
11059
+ },
11060
+ onMouseEnter: () => {
11061
+ keepSubmenuOpen.current = true;
11062
+ },
11063
+ onMouseLeave: () => {
11064
+ keepSubmenuOpen.current = false;
11065
+ closeDialogLazily();
11066
+ },
11067
+ ref: (element3) => {
11068
+ setPopperElement(element3);
11069
+ setDialogContainer(element3);
11070
+ },
11071
+ style: styles.popper,
11072
+ tabIndex: -1,
11073
+ ...submenuContainerProps
11074
+ },
11075
+ /* @__PURE__ */ import_react27.default.createElement(Submenu, null)
11076
+ ));
11077
+ };
11078
+
11079
+ // src/components/MessageActions/RemindMeSubmenu.tsx
11080
+ var RemindMeActionButton = ({
11081
+ className,
11082
+ isMine
11083
+ }) => {
11084
+ const { t } = useTranslationContext();
11085
+ return /* @__PURE__ */ import_react28.default.createElement(
11086
+ ButtonWithSubmenu,
11087
+ {
11088
+ "aria-selected": "false",
11089
+ className,
11090
+ placement: isMine ? "left-start" : "right-start",
11091
+ Submenu: RemindMeSubmenu
11092
+ },
11093
+ t("Remind Me")
11094
+ );
11095
+ };
11096
+ var RemindMeSubmenu = () => {
11097
+ const { t } = useTranslationContext();
11098
+ const { client } = useChatContext();
11099
+ const { message } = useMessageContext();
11100
+ return /* @__PURE__ */ import_react28.default.createElement(
11101
+ "div",
11102
+ {
11103
+ "aria-label": t("aria/Remind Me Options"),
11104
+ className: "str-chat__message-actions-box__submenu",
11105
+ role: "listbox"
11106
+ },
11107
+ client.reminders.scheduledOffsetsMs.map((offsetMs) => /* @__PURE__ */ import_react28.default.createElement(
11108
+ "button",
11109
+ {
11110
+ className: "str-chat__message-actions-list-item-button",
11111
+ key: `reminder-offset-option--${offsetMs}`,
11112
+ onClick: () => {
11113
+ client.reminders.upsertReminder({
11114
+ messageId: message.id,
11115
+ remind_at: new Date((/* @__PURE__ */ new Date()).getTime() + offsetMs).toISOString()
11116
+ });
11117
+ }
11118
+ },
11119
+ t("duration/Remind Me", { milliseconds: offsetMs })
11120
+ ))
11121
+ );
11122
+ };
11123
+
10941
11124
  // src/components/Message/icons.tsx
10942
- var import_react25 = __toESM(require("react"));
10943
- var ActionsIcon = ({ className = "" }) => /* @__PURE__ */ import_react25.default.createElement(
11125
+ var import_react29 = __toESM(require("react"));
11126
+ var ActionsIcon = ({ className = "" }) => /* @__PURE__ */ import_react29.default.createElement(
10944
11127
  "svg",
10945
11128
  {
10946
11129
  className,
@@ -10949,7 +11132,7 @@ var ActionsIcon = ({ className = "" }) => /* @__PURE__ */ import_react25.default
10949
11132
  width: "11",
10950
11133
  xmlns: "http://www.w3.org/2000/svg"
10951
11134
  },
10952
- /* @__PURE__ */ import_react25.default.createElement(
11135
+ /* @__PURE__ */ import_react29.default.createElement(
10953
11136
  "path",
10954
11137
  {
10955
11138
  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",
@@ -10957,7 +11140,7 @@ var ActionsIcon = ({ className = "" }) => /* @__PURE__ */ import_react25.default
10957
11140
  }
10958
11141
  )
10959
11142
  );
10960
- var ReactionIcon = ({ className = "" }) => /* @__PURE__ */ import_react25.default.createElement(
11143
+ var ReactionIcon = ({ className = "" }) => /* @__PURE__ */ import_react29.default.createElement(
10961
11144
  "svg",
10962
11145
  {
10963
11146
  className,
@@ -10966,9 +11149,9 @@ var ReactionIcon = ({ className = "" }) => /* @__PURE__ */ import_react25.defaul
10966
11149
  width: "12",
10967
11150
  xmlns: "http://www.w3.org/2000/svg"
10968
11151
  },
10969
- /* @__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" }))
11152
+ /* @__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" }))
10970
11153
  );
10971
- 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(
11154
+ 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(
10972
11155
  "path",
10973
11156
  {
10974
11157
  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",
@@ -10979,7 +11162,7 @@ var ThreadIcon = ({ className = "" }) => /* @__PURE__ */ import_react25.default.
10979
11162
  // src/components/MessageActions/MessageActions.tsx
10980
11163
  var MessageActionsWrapper = (props) => {
10981
11164
  const { children, customWrapperClass, inline, toggleOpen } = props;
10982
- const defaultWrapperClass = (0, import_clsx5.default)(
11165
+ const defaultWrapperClass = (0, import_clsx6.default)(
10983
11166
  "str-chat__message-simple__actions__action",
10984
11167
  "str-chat__message-simple__actions__action--options",
10985
11168
  "str-chat__message-actions-container"
@@ -10989,25 +11172,25 @@ var MessageActionsWrapper = (props) => {
10989
11172
  "data-testid": "message-actions",
10990
11173
  onClick: toggleOpen
10991
11174
  };
10992
- if (inline) return /* @__PURE__ */ import_react26.default.createElement("span", { ...wrapperProps }, children);
10993
- return /* @__PURE__ */ import_react26.default.createElement("div", { ...wrapperProps }, children);
11175
+ if (inline) return /* @__PURE__ */ import_react30.default.createElement("span", { ...wrapperProps }, children);
11176
+ return /* @__PURE__ */ import_react30.default.createElement("div", { ...wrapperProps }, children);
10994
11177
  };
10995
11178
 
10996
11179
  // src/components/Reactions/ReactionSelectorWithButton.tsx
10997
- var import_react31 = __toESM(require("react"));
11180
+ var import_react35 = __toESM(require("react"));
10998
11181
 
10999
11182
  // src/components/Reactions/ReactionSelector.tsx
11000
- var import_react30 = __toESM(require("react"));
11001
- var import_clsx6 = __toESM(require("clsx"));
11183
+ var import_react34 = __toESM(require("react"));
11184
+ var import_clsx7 = __toESM(require("clsx"));
11002
11185
 
11003
11186
  // src/components/Reactions/reactionOptions.tsx
11004
- var import_react29 = __toESM(require("react"));
11187
+ var import_react33 = __toESM(require("react"));
11005
11188
 
11006
11189
  // src/components/Reactions/StreamEmoji.tsx
11007
- var import_react28 = __toESM(require("react"));
11190
+ var import_react32 = __toESM(require("react"));
11008
11191
 
11009
11192
  // src/components/Reactions/SpriteImage.tsx
11010
- var import_react27 = __toESM(require("react"));
11193
+ var import_react31 = __toESM(require("react"));
11011
11194
 
11012
11195
  // src/components/Reactions/utils/utils.ts
11013
11196
  var isMutableRef = (ref) => {
@@ -11042,13 +11225,13 @@ var SpriteImage = ({
11042
11225
  style,
11043
11226
  width
11044
11227
  }) => {
11045
- const [[spriteWidth, spriteHeight], setSpriteDimensions] = (0, import_react27.useState)([0, 0]);
11046
- (0, import_react27.useEffect)(() => {
11228
+ const [[spriteWidth, spriteHeight], setSpriteDimensions] = (0, import_react31.useState)([0, 0]);
11229
+ (0, import_react31.useEffect)(() => {
11047
11230
  getImageDimensions(spriteUrl).then(setSpriteDimensions).catch(console.error);
11048
11231
  }, [spriteUrl]);
11049
11232
  const [x, y] = position4;
11050
- if (!spriteHeight || !spriteWidth) return /* @__PURE__ */ import_react27.default.createElement(import_react27.default.Fragment, null, fallback);
11051
- return /* @__PURE__ */ import_react27.default.createElement(
11233
+ if (!spriteHeight || !spriteWidth) return /* @__PURE__ */ import_react31.default.createElement(import_react31.default.Fragment, null, fallback);
11234
+ return /* @__PURE__ */ import_react31.default.createElement(
11052
11235
  "div",
11053
11236
  {
11054
11237
  "data-testid": "sprite-image",
@@ -11086,7 +11269,7 @@ var StreamEmoji = ({
11086
11269
  type
11087
11270
  }) => {
11088
11271
  const position4 = StreamSpriteEmojiPositions[type];
11089
- return /* @__PURE__ */ import_react28.default.createElement(
11272
+ return /* @__PURE__ */ import_react32.default.createElement(
11090
11273
  SpriteImage,
11091
11274
  {
11092
11275
  columns: 2,
@@ -11105,23 +11288,23 @@ var StreamEmoji = ({
11105
11288
  var defaultReactionOptions = [
11106
11289
  {
11107
11290
  type: "haha",
11108
- Component: () => /* @__PURE__ */ import_react29.default.createElement(StreamEmoji, { fallback: "\u{1F602}", type: "haha" }),
11291
+ Component: () => /* @__PURE__ */ import_react33.default.createElement(StreamEmoji, { fallback: "\u{1F602}", type: "haha" }),
11109
11292
  name: "Joy"
11110
11293
  },
11111
11294
  {
11112
11295
  type: "like",
11113
- Component: () => /* @__PURE__ */ import_react29.default.createElement(StreamEmoji, { fallback: "\u{1F44D}", type: "like" }),
11296
+ Component: () => /* @__PURE__ */ import_react33.default.createElement(StreamEmoji, { fallback: "\u{1F44D}", type: "like" }),
11114
11297
  name: "Thumbs up"
11115
11298
  },
11116
11299
  {
11117
11300
  type: "love",
11118
- Component: () => /* @__PURE__ */ import_react29.default.createElement(StreamEmoji, { fallback: "\u2764\uFE0F", type: "love" }),
11301
+ Component: () => /* @__PURE__ */ import_react33.default.createElement(StreamEmoji, { fallback: "\u2764\uFE0F", type: "love" }),
11119
11302
  name: "Heart"
11120
11303
  },
11121
- { type: "sad", Component: () => /* @__PURE__ */ import_react29.default.createElement(StreamEmoji, { fallback: "\u{1F614}", type: "sad" }), name: "Sad" },
11304
+ { type: "sad", Component: () => /* @__PURE__ */ import_react33.default.createElement(StreamEmoji, { fallback: "\u{1F614}", type: "sad" }), name: "Sad" },
11122
11305
  {
11123
11306
  type: "wow",
11124
- Component: () => /* @__PURE__ */ import_react29.default.createElement(StreamEmoji, { fallback: "\u{1F632}", type: "wow" }),
11307
+ Component: () => /* @__PURE__ */ import_react33.default.createElement(StreamEmoji, { fallback: "\u{1F632}", type: "wow" }),
11125
11308
  name: "Astonished"
11126
11309
  }
11127
11310
  ];
@@ -11155,23 +11338,23 @@ var UnMemoizedReactionSelector = (props) => {
11155
11338
  const latestReactions = propLatestReactions || message?.latest_reactions || [];
11156
11339
  const ownReactions = propOwnReactions || message?.own_reactions || [];
11157
11340
  const reactionGroups = propReactionGroups || message?.reaction_groups || {};
11158
- const [tooltipReactionType, setTooltipReactionType] = (0, import_react30.useState)(null);
11159
- const [tooltipPositions, setTooltipPositions] = (0, import_react30.useState)(null);
11160
- const rootRef = (0, import_react30.useRef)(null);
11161
- const targetRef = (0, import_react30.useRef)(null);
11162
- const tooltipRef = (0, import_react30.useRef)(null);
11163
- const showTooltip = (0, import_react30.useCallback)(
11341
+ const [tooltipReactionType, setTooltipReactionType] = (0, import_react34.useState)(null);
11342
+ const [tooltipPositions, setTooltipPositions] = (0, import_react34.useState)(null);
11343
+ const rootRef = (0, import_react34.useRef)(null);
11344
+ const targetRef = (0, import_react34.useRef)(null);
11345
+ const tooltipRef = (0, import_react34.useRef)(null);
11346
+ const showTooltip = (0, import_react34.useCallback)(
11164
11347
  (event, reactionType) => {
11165
11348
  targetRef.current = event.currentTarget;
11166
11349
  setTooltipReactionType(reactionType);
11167
11350
  },
11168
11351
  []
11169
11352
  );
11170
- const hideTooltip = (0, import_react30.useCallback)(() => {
11353
+ const hideTooltip = (0, import_react34.useCallback)(() => {
11171
11354
  setTooltipReactionType(null);
11172
11355
  setTooltipPositions(null);
11173
11356
  }, []);
11174
- (0, import_react30.useEffect)(() => {
11357
+ (0, import_react34.useEffect)(() => {
11175
11358
  if (!tooltipReactionType || !rootRef.current) return;
11176
11359
  const tooltip = tooltipRef.current?.getBoundingClientRect();
11177
11360
  const target = targetRef.current?.getBoundingClientRect();
@@ -11192,10 +11375,10 @@ var UnMemoizedReactionSelector = (props) => {
11192
11375
  }).filter(Boolean);
11193
11376
  const iHaveReactedWithReaction = (reactionType) => ownReactions.find((reaction) => reaction.type === reactionType);
11194
11377
  const getLatestUserForReactionType = (type) => latestReactions.find((reaction) => reaction.type === type && !!reaction.user)?.user || void 0;
11195
- return /* @__PURE__ */ import_react30.default.createElement(
11378
+ return /* @__PURE__ */ import_react34.default.createElement(
11196
11379
  "div",
11197
11380
  {
11198
- className: (0, import_clsx6.default)(
11381
+ className: (0, import_clsx7.default)(
11199
11382
  "str-chat__reaction-selector str-chat__message-reaction-selector str-chat-react__message-reaction-selector",
11200
11383
  {
11201
11384
  "str-chat__reaction-selector--reverse": reverse
@@ -11204,7 +11387,7 @@ var UnMemoizedReactionSelector = (props) => {
11204
11387
  "data-testid": "reaction-selector",
11205
11388
  ref: rootRef
11206
11389
  },
11207
- !!tooltipReactionType && detailedView && /* @__PURE__ */ import_react30.default.createElement(
11390
+ !!tooltipReactionType && detailedView && /* @__PURE__ */ import_react34.default.createElement(
11208
11391
  "div",
11209
11392
  {
11210
11393
  className: "str-chat__reaction-selector-tooltip",
@@ -11214,17 +11397,17 @@ var UnMemoizedReactionSelector = (props) => {
11214
11397
  visibility: tooltipPositions ? "visible" : "hidden"
11215
11398
  }
11216
11399
  },
11217
- /* @__PURE__ */ import_react30.default.createElement("div", { className: "arrow", style: { left: tooltipPositions?.arrow } }),
11218
- 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 ? ", " : ""}`))
11400
+ /* @__PURE__ */ import_react34.default.createElement("div", { className: "arrow", style: { left: tooltipPositions?.arrow } }),
11401
+ 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 ? ", " : ""}`))
11219
11402
  ),
11220
- /* @__PURE__ */ import_react30.default.createElement("ul", { className: "str-chat__message-reactions-list str-chat__message-reactions-options" }, reactionOptions.map(({ Component, name: reactionName, type: reactionType }) => {
11403
+ /* @__PURE__ */ import_react34.default.createElement("ul", { className: "str-chat__message-reactions-list str-chat__message-reactions-options" }, reactionOptions.map(({ Component, name: reactionName, type: reactionType }) => {
11221
11404
  const latestUser = getLatestUserForReactionType(reactionType);
11222
11405
  const count = reactionGroups[reactionType]?.count ?? 0;
11223
- return /* @__PURE__ */ import_react30.default.createElement("li", { key: reactionType }, /* @__PURE__ */ import_react30.default.createElement(
11406
+ return /* @__PURE__ */ import_react34.default.createElement("li", { key: reactionType }, /* @__PURE__ */ import_react34.default.createElement(
11224
11407
  "button",
11225
11408
  {
11226
11409
  "aria-label": `Select Reaction: ${reactionName || reactionType}`,
11227
- className: (0, import_clsx6.default)(
11410
+ className: (0, import_clsx7.default)(
11228
11411
  "str-chat__message-reactions-list-item str-chat__message-reactions-option",
11229
11412
  {
11230
11413
  "str-chat__message-reactions-option-selected": iHaveReactedWithReaction(reactionType)
@@ -11239,7 +11422,7 @@ var UnMemoizedReactionSelector = (props) => {
11239
11422
  }
11240
11423
  }
11241
11424
  },
11242
- !!count && detailedView && /* @__PURE__ */ import_react30.default.createElement(
11425
+ !!count && detailedView && /* @__PURE__ */ import_react34.default.createElement(
11243
11426
  "div",
11244
11427
  {
11245
11428
  className: "latest-user str-chat__message-reactions-last-user",
@@ -11247,7 +11430,7 @@ var UnMemoizedReactionSelector = (props) => {
11247
11430
  onMouseEnter: (e) => showTooltip(e, reactionType),
11248
11431
  onMouseLeave: hideTooltip
11249
11432
  },
11250
- latestUser ? /* @__PURE__ */ import_react30.default.createElement(
11433
+ latestUser ? /* @__PURE__ */ import_react34.default.createElement(
11251
11434
  Avatar2,
11252
11435
  {
11253
11436
  image: latestUser.image,
@@ -11255,15 +11438,15 @@ var UnMemoizedReactionSelector = (props) => {
11255
11438
  size: 20,
11256
11439
  user: latestUser
11257
11440
  }
11258
- ) : /* @__PURE__ */ import_react30.default.createElement("div", { className: "latest-user-not-found" })
11441
+ ) : /* @__PURE__ */ import_react34.default.createElement("div", { className: "latest-user-not-found" })
11259
11442
  ),
11260
- /* @__PURE__ */ import_react30.default.createElement("span", { className: "str-chat__message-reaction-emoji" }, /* @__PURE__ */ import_react30.default.createElement(Component, null)),
11261
- Boolean(count) && detailedView && /* @__PURE__ */ import_react30.default.createElement("span", { className: "str-chat__message-reactions-list-item__count" }, count || "")
11443
+ /* @__PURE__ */ import_react34.default.createElement("span", { className: "str-chat__message-reaction-emoji" }, /* @__PURE__ */ import_react34.default.createElement(Component, null)),
11444
+ Boolean(count) && detailedView && /* @__PURE__ */ import_react34.default.createElement("span", { className: "str-chat__message-reactions-list-item__count" }, count || "")
11262
11445
  ));
11263
11446
  }))
11264
11447
  );
11265
11448
  };
11266
- var ReactionSelector = import_react30.default.memo(
11449
+ var ReactionSelector = import_react34.default.memo(
11267
11450
  UnMemoizedReactionSelector
11268
11451
  );
11269
11452
 
@@ -11274,11 +11457,11 @@ var ReactionSelectorWithButton = ({
11274
11457
  const { t } = useTranslationContext("ReactionSelectorWithButton");
11275
11458
  const { isMyMessage, message } = useMessageContext("MessageOptions");
11276
11459
  const { ReactionSelector: ReactionSelector2 = ReactionSelector } = useComponentContext("MessageOptions");
11277
- const buttonRef = (0, import_react31.useRef)(null);
11460
+ const buttonRef = (0, import_react35.useRef)(null);
11278
11461
  const dialogId = `reaction-selector--${message.id}`;
11279
11462
  const dialog = useDialog({ id: dialogId });
11280
11463
  const dialogIsOpen = useDialogIsOpen(dialogId);
11281
- return /* @__PURE__ */ import_react31.default.createElement(import_react31.default.Fragment, null, /* @__PURE__ */ import_react31.default.createElement(
11464
+ return /* @__PURE__ */ import_react35.default.createElement(import_react35.default.Fragment, null, /* @__PURE__ */ import_react35.default.createElement(
11282
11465
  DialogAnchor,
11283
11466
  {
11284
11467
  id: dialogId,
@@ -11286,8 +11469,8 @@ var ReactionSelectorWithButton = ({
11286
11469
  referenceElement: buttonRef.current,
11287
11470
  trapFocus: true
11288
11471
  },
11289
- /* @__PURE__ */ import_react31.default.createElement(ReactionSelector2, null)
11290
- ), /* @__PURE__ */ import_react31.default.createElement(
11472
+ /* @__PURE__ */ import_react35.default.createElement(ReactionSelector2, null)
11473
+ ), /* @__PURE__ */ import_react35.default.createElement(
11291
11474
  "button",
11292
11475
  {
11293
11476
  "aria-expanded": dialogIsOpen,
@@ -11297,14 +11480,14 @@ var ReactionSelectorWithButton = ({
11297
11480
  onClick: () => dialog?.toggle(),
11298
11481
  ref: buttonRef
11299
11482
  },
11300
- /* @__PURE__ */ import_react31.default.createElement(ReactionIcon2, { className: "str-chat__message-action-icon" })
11483
+ /* @__PURE__ */ import_react35.default.createElement(ReactionIcon2, { className: "str-chat__message-action-icon" })
11301
11484
  ));
11302
11485
  };
11303
11486
 
11304
11487
  // src/components/InfiniteScrollPaginator/InfiniteScrollPaginator.tsx
11305
- var import_clsx7 = __toESM(require("clsx"));
11488
+ var import_clsx8 = __toESM(require("clsx"));
11306
11489
  var import_lodash2 = __toESM(require("lodash.debounce"));
11307
- var import_react32 = __toESM(require("react"));
11490
+ var import_react36 = __toESM(require("react"));
11308
11491
  var mousewheelListener = (event) => {
11309
11492
  if (event instanceof WheelEvent && event.deltaY === 1) {
11310
11493
  event.preventDefault();
@@ -11322,9 +11505,9 @@ var InfiniteScrollPaginator = (props) => {
11322
11505
  useCapture = false,
11323
11506
  ...componentProps
11324
11507
  } = props;
11325
- const rootRef = (0, import_react32.useRef)(null);
11326
- const childRef = (0, import_react32.useRef)(null);
11327
- const scrollListener = (0, import_react32.useMemo)(
11508
+ const rootRef = (0, import_react36.useRef)(null);
11509
+ const childRef = (0, import_react36.useRef)(null);
11510
+ const scrollListener = (0, import_react36.useMemo)(
11328
11511
  () => (0, import_lodash2.default)(() => {
11329
11512
  const root3 = rootRef.current;
11330
11513
  const child = childRef.current;
@@ -11351,7 +11534,7 @@ var InfiniteScrollPaginator = (props) => {
11351
11534
  threshold
11352
11535
  ]
11353
11536
  );
11354
- (0, import_react32.useEffect)(() => {
11537
+ (0, import_react36.useEffect)(() => {
11355
11538
  const scrollElement = rootRef.current;
11356
11539
  if (!scrollElement) return;
11357
11540
  scrollElement.addEventListener("scroll", scrollListener, useCapture);
@@ -11359,7 +11542,7 @@ var InfiniteScrollPaginator = (props) => {
11359
11542
  scrollElement.removeEventListener("scroll", scrollListener, useCapture);
11360
11543
  };
11361
11544
  }, [scrollListener, useCapture]);
11362
- (0, import_react32.useEffect)(() => {
11545
+ (0, import_react36.useEffect)(() => {
11363
11546
  const root3 = rootRef.current;
11364
11547
  if (!root3 || typeof ResizeObserver === "undefined" || !scrollListener) return;
11365
11548
  const observer = new ResizeObserver(scrollListener);
@@ -11368,7 +11551,7 @@ var InfiniteScrollPaginator = (props) => {
11368
11551
  observer.disconnect();
11369
11552
  };
11370
11553
  }, [scrollListener]);
11371
- (0, import_react32.useEffect)(() => {
11554
+ (0, import_react36.useEffect)(() => {
11372
11555
  const root3 = rootRef.current;
11373
11556
  if (root3) {
11374
11557
  root3.addEventListener("wheel", mousewheelListener, { passive: false });
@@ -11379,21 +11562,17 @@ var InfiniteScrollPaginator = (props) => {
11379
11562
  }
11380
11563
  };
11381
11564
  }, [useCapture]);
11382
- return /* @__PURE__ */ import_react32.default.createElement(
11565
+ return /* @__PURE__ */ import_react36.default.createElement(
11383
11566
  "div",
11384
11567
  {
11385
11568
  ...componentProps,
11386
- className: (0, import_clsx7.default)("str-chat__infinite-scroll-paginator", className),
11569
+ className: (0, import_clsx8.default)("str-chat__infinite-scroll-paginator", className),
11387
11570
  ref: rootRef
11388
11571
  },
11389
- /* @__PURE__ */ import_react32.default.createElement("div", { className: "str-chat__infinite-scroll-paginator__content", ref: childRef }, children)
11572
+ /* @__PURE__ */ import_react36.default.createElement("div", { className: "str-chat__infinite-scroll-paginator__content", ref: childRef }, children)
11390
11573
  );
11391
11574
  };
11392
11575
 
11393
- // src/components/Thread/Thread.tsx
11394
- var LegacyThreadContext = import_react33.default.createContext({ legacyThread: void 0 });
11395
- var useLegacyThreadContext = () => (0, import_react33.useContext)(LegacyThreadContext);
11396
-
11397
11576
  // src/components/MessageInput/hooks/useMessageComposer.ts
11398
11577
  var queueCache = new import_stream_chat.FixedSizeQueueCache(64);
11399
11578
  var useMessageComposer = () => {
@@ -11402,15 +11581,15 @@ var useMessageComposer = () => {
11402
11581
  const { editing, message: editedMessage } = useMessageContext();
11403
11582
  const { legacyThread: parentMessage } = useLegacyThreadContext();
11404
11583
  const threadInstance = useThreadContext();
11405
- const cachedEditedMessage = (0, import_react34.useMemo)(() => {
11584
+ const cachedEditedMessage = (0, import_react37.useMemo)(() => {
11406
11585
  if (!editedMessage) return void 0;
11407
11586
  return editedMessage;
11408
11587
  }, [editedMessage?.id]);
11409
- const cachedParentMessage = (0, import_react34.useMemo)(() => {
11588
+ const cachedParentMessage = (0, import_react37.useMemo)(() => {
11410
11589
  if (!parentMessage) return void 0;
11411
11590
  return parentMessage;
11412
11591
  }, [parentMessage?.id]);
11413
- const messageComposer = (0, import_react34.useMemo)(() => {
11592
+ const messageComposer = (0, import_react37.useMemo)(() => {
11414
11593
  if (editing && cachedEditedMessage) {
11415
11594
  const tag = import_stream_chat.MessageComposer.constructTag(cachedEditedMessage);
11416
11595
  const cachedComposer = queueCache.get(tag);
@@ -11450,7 +11629,7 @@ var useMessageComposer = () => {
11450
11629
  ) && !queueCache.peek(messageComposer.tag)) {
11451
11630
  queueCache.add(messageComposer.tag, messageComposer);
11452
11631
  }
11453
- (0, import_react34.useEffect)(() => {
11632
+ (0, import_react37.useEffect)(() => {
11454
11633
  const unsubscribe = messageComposer.registerSubscriptions();
11455
11634
  return () => {
11456
11635
  unsubscribe();
@@ -11460,17 +11639,17 @@ var useMessageComposer = () => {
11460
11639
  };
11461
11640
 
11462
11641
  // src/experimental/Search/hooks/useSearchQueriesInProgress.ts
11463
- var import_react35 = require("react");
11642
+ var import_react38 = require("react");
11464
11643
  var searchControllerStateSelector = (value) => ({
11465
11644
  sources: value.sources
11466
11645
  });
11467
11646
  var useSearchQueriesInProgress = (searchController) => {
11468
- const [queriesInProgress, setQueriesInProgress] = (0, import_react35.useState)([]);
11647
+ const [queriesInProgress, setQueriesInProgress] = (0, import_react38.useState)([]);
11469
11648
  const { sources } = useStateStore(
11470
11649
  searchController.state,
11471
11650
  searchControllerStateSelector
11472
11651
  );
11473
- (0, import_react35.useEffect)(() => {
11652
+ (0, import_react38.useEffect)(() => {
11474
11653
  const subscriptions = sources.map(
11475
11654
  (source) => source.state.subscribeWithSelector(
11476
11655
  (value) => ({ isLoading: value.isLoading }),
@@ -11490,7 +11669,7 @@ var useSearchQueriesInProgress = (searchController) => {
11490
11669
  };
11491
11670
 
11492
11671
  // src/experimental/MessageActions/hooks/useBaseMessageActionSetFilter.ts
11493
- var import_react36 = require("react");
11672
+ var import_react39 = require("react");
11494
11673
  var useBaseMessageActionSetFilter = (messageActionSet, disable2 = false) => {
11495
11674
  const { initialMessage: isInitialMessage, message } = useMessageContext();
11496
11675
  const {
@@ -11504,7 +11683,7 @@ var useBaseMessageActionSetFilter = (messageActionSet, disable2 = false) => {
11504
11683
  canReply
11505
11684
  } = useUserRole(message);
11506
11685
  const isMessageThreadReply = typeof message.parent_id === "string";
11507
- return (0, import_react36.useMemo)(() => {
11686
+ return (0, import_react39.useMemo)(() => {
11508
11687
  if (disable2) return messageActionSet;
11509
11688
  if (isInitialMessage || // not sure whether this thing even works anymore
11510
11689
  !message.type || message.type === "error" || message.type === "system" || message.type === "ephemeral" || message.status === "failed" || message.status === "sending")
@@ -11535,8 +11714,8 @@ var useBaseMessageActionSetFilter = (messageActionSet, disable2 = false) => {
11535
11714
  };
11536
11715
 
11537
11716
  // src/experimental/MessageActions/hooks/useSplitMessageActionSet.ts
11538
- var import_react37 = require("react");
11539
- var useSplitMessageActionSet = (messageActionSet) => (0, import_react37.useMemo)(() => {
11717
+ var import_react40 = require("react");
11718
+ var useSplitMessageActionSet = (messageActionSet) => (0, import_react40.useMemo)(() => {
11540
11719
  const quickActionSet = [];
11541
11720
  const dropdownActionSet = [];
11542
11721
  for (const action of messageActionSet) {
@@ -11547,14 +11726,15 @@ var useSplitMessageActionSet = (messageActionSet) => (0, import_react37.useMemo)
11547
11726
  }, [messageActionSet]);
11548
11727
 
11549
11728
  // src/experimental/MessageActions/defaults.tsx
11550
- var import_react38 = __toESM(require("react"));
11729
+ var import_react41 = __toESM(require("react"));
11730
+ var msgActionsBoxButtonClassName = "str-chat__message-actions-list-item-button";
11551
11731
  var DefaultDropdownActionButton = ({
11552
11732
  "aria-selected": ariaSelected = "false",
11553
11733
  children,
11554
- className = "str-chat__message-actions-list-item-button",
11734
+ className = msgActionsBoxButtonClassName,
11555
11735
  role = "option",
11556
11736
  ...rest
11557
- }) => /* @__PURE__ */ import_react38.default.createElement("button", { "aria-selected": ariaSelected, className, role, ...rest }, children);
11737
+ }) => /* @__PURE__ */ import_react41.default.createElement("button", { "aria-selected": ariaSelected, className, role, ...rest }, children);
11558
11738
  var DefaultMessageActionComponents = {
11559
11739
  dropdown: {
11560
11740
  Quote() {
@@ -11569,48 +11749,71 @@ var DefaultMessageActionComponents = {
11569
11749
  textarea.focus();
11570
11750
  }
11571
11751
  };
11572
- return /* @__PURE__ */ import_react38.default.createElement(DefaultDropdownActionButton, { onClick: handleQuote }, t("Quote"));
11752
+ return /* @__PURE__ */ import_react41.default.createElement(DefaultDropdownActionButton, { onClick: handleQuote }, t("Quote"));
11573
11753
  },
11574
11754
  Pin() {
11575
11755
  const { handlePin, message } = useMessageContext();
11576
11756
  const { t } = useTranslationContext();
11577
- return /* @__PURE__ */ import_react38.default.createElement(DefaultDropdownActionButton, { onClick: handlePin }, !message.pinned ? t("Pin") : t("Unpin"));
11757
+ return /* @__PURE__ */ import_react41.default.createElement(DefaultDropdownActionButton, { onClick: handlePin }, !message.pinned ? t("Pin") : t("Unpin"));
11578
11758
  },
11579
11759
  MarkUnread() {
11580
11760
  const { handleMarkUnread } = useMessageContext();
11581
11761
  const { t } = useTranslationContext();
11582
- return /* @__PURE__ */ import_react38.default.createElement(DefaultDropdownActionButton, { onClick: handleMarkUnread }, t("Mark as unread"));
11762
+ return /* @__PURE__ */ import_react41.default.createElement(DefaultDropdownActionButton, { onClick: handleMarkUnread }, t("Mark as unread"));
11583
11763
  },
11584
11764
  Flag() {
11585
11765
  const { handleFlag } = useMessageContext();
11586
11766
  const { t } = useTranslationContext();
11587
- return /* @__PURE__ */ import_react38.default.createElement(DefaultDropdownActionButton, { onClick: handleFlag }, t("Flag"));
11767
+ return /* @__PURE__ */ import_react41.default.createElement(DefaultDropdownActionButton, { onClick: handleFlag }, t("Flag"));
11588
11768
  },
11589
11769
  Mute() {
11590
11770
  const { handleMute, message } = useMessageContext();
11591
11771
  const { mutes } = useChatContext();
11592
11772
  const { t } = useTranslationContext();
11593
- return /* @__PURE__ */ import_react38.default.createElement(DefaultDropdownActionButton, { onClick: handleMute }, isUserMuted(message, mutes) ? t("Unmute") : t("Mute"));
11773
+ return /* @__PURE__ */ import_react41.default.createElement(DefaultDropdownActionButton, { onClick: handleMute }, isUserMuted(message, mutes) ? t("Unmute") : t("Mute"));
11594
11774
  },
11595
11775
  Edit() {
11596
11776
  const { handleEdit } = useMessageContext();
11597
11777
  const { t } = useTranslationContext();
11598
- return /* @__PURE__ */ import_react38.default.createElement(DefaultDropdownActionButton, { onClick: handleEdit }, t("Edit Message"));
11778
+ return /* @__PURE__ */ import_react41.default.createElement(DefaultDropdownActionButton, { onClick: handleEdit }, t("Edit Message"));
11599
11779
  },
11600
11780
  Delete() {
11601
11781
  const { handleDelete } = useMessageContext();
11602
11782
  const { t } = useTranslationContext();
11603
- return /* @__PURE__ */ import_react38.default.createElement(DefaultDropdownActionButton, { onClick: handleDelete }, t("Delete"));
11783
+ return /* @__PURE__ */ import_react41.default.createElement(DefaultDropdownActionButton, { onClick: handleDelete }, t("Delete"));
11784
+ },
11785
+ RemindMe() {
11786
+ const { isMyMessage } = useMessageContext();
11787
+ return /* @__PURE__ */ import_react41.default.createElement(
11788
+ RemindMeActionButton,
11789
+ {
11790
+ className: msgActionsBoxButtonClassName,
11791
+ isMine: isMyMessage()
11792
+ }
11793
+ );
11794
+ },
11795
+ SaveForLater() {
11796
+ const { client } = useChatContext();
11797
+ const { message } = useMessageContext();
11798
+ const { t } = useTranslationContext();
11799
+ const reminder = useMessageReminder(message.id);
11800
+ return /* @__PURE__ */ import_react41.default.createElement(
11801
+ DefaultDropdownActionButton,
11802
+ {
11803
+ onClick: () => reminder ? client.reminders.deleteReminder(reminder.id) : client.reminders.createReminder({ messageId: message.id })
11804
+ },
11805
+ reminder ? t("Remove reminder") : t("Save for later")
11806
+ );
11604
11807
  }
11605
11808
  },
11606
11809
  quick: {
11607
11810
  React() {
11608
- return /* @__PURE__ */ import_react38.default.createElement(ReactionSelectorWithButton, { ReactionIcon });
11811
+ return /* @__PURE__ */ import_react41.default.createElement(ReactionSelectorWithButton, { ReactionIcon });
11609
11812
  },
11610
11813
  Reply() {
11611
11814
  const { handleOpenThread } = useMessageContext();
11612
11815
  const { t } = useTranslationContext();
11613
- return /* @__PURE__ */ import_react38.default.createElement(
11816
+ return /* @__PURE__ */ import_react41.default.createElement(
11614
11817
  "button",
11615
11818
  {
11616
11819
  "aria-label": t("aria/Open Thread"),
@@ -11618,7 +11821,7 @@ var DefaultMessageActionComponents = {
11618
11821
  "data-testid": "thread-action",
11619
11822
  onClick: handleOpenThread
11620
11823
  },
11621
- /* @__PURE__ */ import_react38.default.createElement(ThreadIcon, { className: "str-chat__message-action-icon" })
11824
+ /* @__PURE__ */ import_react41.default.createElement(ThreadIcon, { className: "str-chat__message-action-icon" })
11622
11825
  );
11623
11826
  }
11624
11827
  }
@@ -11669,6 +11872,16 @@ var defaultMessageActionSet = [
11669
11872
  Component: DefaultMessageActionComponents.dropdown.MarkUnread,
11670
11873
  placement: "dropdown",
11671
11874
  type: "markUnread"
11875
+ },
11876
+ {
11877
+ Component: DefaultMessageActionComponents.dropdown.RemindMe,
11878
+ placement: "dropdown",
11879
+ type: "remindMe"
11880
+ },
11881
+ {
11882
+ Component: DefaultMessageActionComponents.dropdown.SaveForLater,
11883
+ placement: "dropdown",
11884
+ type: "saveForLater"
11672
11885
  }
11673
11886
  ];
11674
11887
 
@@ -11680,7 +11893,7 @@ var MessageActions = ({
11680
11893
  const { theme } = useChatContext();
11681
11894
  const { isMyMessage, message } = useMessageContext();
11682
11895
  const { t } = useTranslationContext();
11683
- const [actionsBoxButtonElement, setActionsBoxButtonElement] = (0, import_react39.useState)(null);
11896
+ const [actionsBoxButtonElement, setActionsBoxButtonElement] = (0, import_react42.useState)(null);
11684
11897
  const filteredMessageActionSet = useBaseMessageActionSetFilter(
11685
11898
  messageActionSet,
11686
11899
  disableBaseMessageActionSetFilter
@@ -11696,14 +11909,14 @@ var MessageActions = ({
11696
11909
  if (dropdownActionSet.length + quickActionSet.length === 0) {
11697
11910
  return null;
11698
11911
  }
11699
- return /* @__PURE__ */ import_react39.default.createElement(
11912
+ return /* @__PURE__ */ import_react42.default.createElement(
11700
11913
  "div",
11701
11914
  {
11702
11915
  className: (0, import_clsx9.default)(`str-chat__message-${theme}__actions str-chat__message-options`, {
11703
11916
  "str-chat__message-options--active": dropdownDialogIsOpen || reactionSelectorDialogIsOpen
11704
11917
  })
11705
11918
  },
11706
- dropdownActionSet.length > 0 && /* @__PURE__ */ import_react39.default.createElement(MessageActionsWrapper, { inline: false, toggleOpen: dialog?.toggle }, /* @__PURE__ */ import_react39.default.createElement(
11919
+ dropdownActionSet.length > 0 && /* @__PURE__ */ import_react42.default.createElement(MessageActionsWrapper, { inline: false, toggleOpen: dialog?.toggle }, /* @__PURE__ */ import_react42.default.createElement(
11707
11920
  "button",
11708
11921
  {
11709
11922
  "aria-expanded": dropdownDialogIsOpen,
@@ -11713,8 +11926,8 @@ var MessageActions = ({
11713
11926
  "data-testid": "message-actions-toggle-button",
11714
11927
  ref: setActionsBoxButtonElement
11715
11928
  },
11716
- /* @__PURE__ */ import_react39.default.createElement(ActionsIcon, { className: "str-chat__message-action-icon" })
11717
- ), /* @__PURE__ */ import_react39.default.createElement(
11929
+ /* @__PURE__ */ import_react42.default.createElement(ActionsIcon, { className: "str-chat__message-action-icon" })
11930
+ ), /* @__PURE__ */ import_react42.default.createElement(
11718
11931
  DialogAnchor,
11719
11932
  {
11720
11933
  id: dropdownDialogId,
@@ -11723,21 +11936,21 @@ var MessageActions = ({
11723
11936
  tabIndex: -1,
11724
11937
  trapFocus: true
11725
11938
  },
11726
- /* @__PURE__ */ import_react39.default.createElement(DropdownBox, { open: dropdownDialogIsOpen }, dropdownActionSet.map(({ Component: DropdownActionComponent, type }) => /* @__PURE__ */ import_react39.default.createElement(DropdownActionComponent, { key: type })))
11939
+ /* @__PURE__ */ import_react42.default.createElement(DropdownBox, { open: dropdownDialogIsOpen }, dropdownActionSet.map(({ Component: DropdownActionComponent, type }) => /* @__PURE__ */ import_react42.default.createElement(DropdownActionComponent, { key: type })))
11727
11940
  )),
11728
- quickActionSet.map(({ Component: QuickActionComponent, type }) => /* @__PURE__ */ import_react39.default.createElement(QuickActionComponent, { key: type }))
11941
+ quickActionSet.map(({ Component: QuickActionComponent, type }) => /* @__PURE__ */ import_react42.default.createElement(QuickActionComponent, { key: type }))
11729
11942
  );
11730
11943
  };
11731
11944
  var DropdownBox = ({ children, open }) => {
11732
11945
  const { t } = useTranslationContext();
11733
- return /* @__PURE__ */ import_react39.default.createElement(
11946
+ return /* @__PURE__ */ import_react42.default.createElement(
11734
11947
  "div",
11735
11948
  {
11736
11949
  className: (0, import_clsx9.default)("str-chat__message-actions-box", {
11737
11950
  "str-chat__message-actions-box--open": open
11738
11951
  })
11739
11952
  },
11740
- /* @__PURE__ */ import_react39.default.createElement(
11953
+ /* @__PURE__ */ import_react42.default.createElement(
11741
11954
  "div",
11742
11955
  {
11743
11956
  "aria-label": t("aria/Message Options"),
@@ -11751,21 +11964,21 @@ var DropdownBox = ({ children, open }) => {
11751
11964
 
11752
11965
  // src/experimental/Search/Search.tsx
11753
11966
  var import_clsx12 = __toESM(require("clsx"));
11754
- var import_react52 = __toESM(require("react"));
11967
+ var import_react55 = __toESM(require("react"));
11755
11968
 
11756
11969
  // src/experimental/Search/SearchBar/SearchBar.tsx
11757
11970
  var import_clsx10 = __toESM(require("clsx"));
11758
- var import_react41 = __toESM(require("react"));
11971
+ var import_react44 = __toESM(require("react"));
11759
11972
 
11760
11973
  // src/experimental/Search/SearchContext.tsx
11761
- var import_react40 = __toESM(require("react"));
11762
- var SearchContext = (0, import_react40.createContext)(void 0);
11974
+ var import_react43 = __toESM(require("react"));
11975
+ var SearchContext = (0, import_react43.createContext)(void 0);
11763
11976
  var SearchContextProvider = ({
11764
11977
  children,
11765
11978
  value
11766
- }) => /* @__PURE__ */ import_react40.default.createElement(SearchContext.Provider, { value }, children);
11979
+ }) => /* @__PURE__ */ import_react43.default.createElement(SearchContext.Provider, { value }, children);
11767
11980
  var useSearchContext = () => {
11768
- const contextValue = (0, import_react40.useContext)(SearchContext);
11981
+ const contextValue = (0, import_react43.useContext)(SearchContext);
11769
11982
  return contextValue;
11770
11983
  };
11771
11984
 
@@ -11778,12 +11991,12 @@ var SearchBar = () => {
11778
11991
  const { t } = useTranslationContext();
11779
11992
  const { disabled, exitSearchOnInputBlur, placeholder, searchController } = useSearchContext();
11780
11993
  const queriesInProgress = useSearchQueriesInProgress(searchController);
11781
- const [input, setInput] = (0, import_react41.useState)(null);
11994
+ const [input, setInput] = (0, import_react44.useState)(null);
11782
11995
  const { isActive, searchQuery } = useStateStore(
11783
11996
  searchController.state,
11784
11997
  searchControllerStateSelector2
11785
11998
  );
11786
- (0, import_react41.useEffect)(() => {
11999
+ (0, import_react44.useEffect)(() => {
11787
12000
  if (!input) return;
11788
12001
  const handleKeyDown = (event) => {
11789
12002
  if (event.key === "Escape") {
@@ -11796,15 +12009,15 @@ var SearchBar = () => {
11796
12009
  document.removeEventListener("keydown", handleKeyDown);
11797
12010
  };
11798
12011
  }, [searchController, input]);
11799
- return /* @__PURE__ */ import_react41.default.createElement("div", { className: "str-chat__search-bar", "data-testid": "search-bar" }, /* @__PURE__ */ import_react41.default.createElement(
12012
+ return /* @__PURE__ */ import_react44.default.createElement("div", { className: "str-chat__search-bar", "data-testid": "search-bar" }, /* @__PURE__ */ import_react44.default.createElement(
11800
12013
  "div",
11801
12014
  {
11802
12015
  className: (0, import_clsx10.default)("str-chat__search-input--wrapper", {
11803
12016
  "str-chat__search-input--wrapper-active": isActive
11804
12017
  })
11805
12018
  },
11806
- /* @__PURE__ */ import_react41.default.createElement("div", { className: "str-chat__search-input--icon" }),
11807
- /* @__PURE__ */ import_react41.default.createElement(
12019
+ /* @__PURE__ */ import_react44.default.createElement("div", { className: "str-chat__search-input--icon" }),
12020
+ /* @__PURE__ */ import_react44.default.createElement(
11808
12021
  "input",
11809
12022
  {
11810
12023
  className: "str-chat__search-input",
@@ -11827,7 +12040,7 @@ var SearchBar = () => {
11827
12040
  value: searchQuery
11828
12041
  }
11829
12042
  ),
11830
- searchQuery && /* @__PURE__ */ import_react41.default.createElement(
12043
+ searchQuery && /* @__PURE__ */ import_react44.default.createElement(
11831
12044
  "button",
11832
12045
  {
11833
12046
  className: "str-chat__search-input--clear-button",
@@ -11838,9 +12051,9 @@ var SearchBar = () => {
11838
12051
  input?.focus();
11839
12052
  }
11840
12053
  },
11841
- /* @__PURE__ */ import_react41.default.createElement("div", { className: "str-chat__search-input--clear-button-icon" })
12054
+ /* @__PURE__ */ import_react44.default.createElement("div", { className: "str-chat__search-input--clear-button-icon" })
11842
12055
  )
11843
- ), isActive ? /* @__PURE__ */ import_react41.default.createElement(
12056
+ ), isActive ? /* @__PURE__ */ import_react44.default.createElement(
11844
12057
  "button",
11845
12058
  {
11846
12059
  className: (0, import_clsx10.default)(
@@ -11857,25 +12070,25 @@ var SearchBar = () => {
11857
12070
  };
11858
12071
 
11859
12072
  // src/experimental/Search/SearchResults/SearchResults.tsx
11860
- var import_react51 = __toESM(require("react"));
12073
+ var import_react54 = __toESM(require("react"));
11861
12074
 
11862
12075
  // src/experimental/Search/SearchResults/SearchSourceResults.tsx
11863
- var import_react48 = __toESM(require("react"));
12076
+ var import_react51 = __toESM(require("react"));
11864
12077
 
11865
12078
  // src/experimental/Search/SearchResults/SearchSourceResultList.tsx
11866
- var import_react46 = __toESM(require("react"));
12079
+ var import_react49 = __toESM(require("react"));
11867
12080
 
11868
12081
  // src/experimental/Search/SearchResults/SearchResultItem.tsx
11869
- var import_react42 = __toESM(require("react"));
12082
+ var import_react45 = __toESM(require("react"));
11870
12083
  var import_lodash3 = __toESM(require("lodash.uniqby"));
11871
12084
  var ChannelSearchResultItem = ({ item }) => {
11872
12085
  const { setActiveChannel } = useChatContext();
11873
12086
  const { setChannels } = useChannelListContext();
11874
- const onSelect = (0, import_react42.useCallback)(() => {
12087
+ const onSelect = (0, import_react45.useCallback)(() => {
11875
12088
  setActiveChannel(item);
11876
12089
  setChannels?.((channels) => (0, import_lodash3.default)([item, ...channels], "cid"));
11877
12090
  }, [item, setActiveChannel, setChannels]);
11878
- return /* @__PURE__ */ import_react42.default.createElement(
12091
+ return /* @__PURE__ */ import_react45.default.createElement(
11879
12092
  ChannelPreview,
11880
12093
  {
11881
12094
  channel: item,
@@ -11894,13 +12107,13 @@ var MessageSearchResultItem = ({
11894
12107
  setActiveChannel
11895
12108
  } = useChatContext();
11896
12109
  const { setChannels } = useChannelListContext();
11897
- const channel = (0, import_react42.useMemo)(() => {
12110
+ const channel = (0, import_react45.useMemo)(() => {
11898
12111
  const { channel: channelData } = item;
11899
12112
  const type = channelData?.type ?? "unknown";
11900
12113
  const id = channelData?.id ?? "unknown";
11901
12114
  return client.channel(type, id);
11902
12115
  }, [client, item]);
11903
- const onSelect = (0, import_react42.useCallback)(async () => {
12116
+ const onSelect = (0, import_react45.useCallback)(async () => {
11904
12117
  if (!channel) return;
11905
12118
  await channel.state.loadMessageIntoState(
11906
12119
  item.id,
@@ -11911,9 +12124,9 @@ var MessageSearchResultItem = ({
11911
12124
  setActiveChannel(channel);
11912
12125
  setChannels?.((channels) => (0, import_lodash3.default)([channel, ...channels], "cid"));
11913
12126
  }, [channel, item, searchController, setActiveChannel, setChannels]);
11914
- const getLatestMessagePreview2 = (0, import_react42.useCallback)(() => item.text, [item]);
12127
+ const getLatestMessagePreview2 = (0, import_react45.useCallback)(() => item.text, [item]);
11915
12128
  if (!channel) return;
11916
- return /* @__PURE__ */ import_react42.default.createElement(
12129
+ return /* @__PURE__ */ import_react45.default.createElement(
11917
12130
  ChannelPreview,
11918
12131
  {
11919
12132
  active: channel.cid === activeChannel?.cid && item.id === searchController._internalState.getLatestValue().focusedMessage?.id,
@@ -11928,7 +12141,7 @@ var UserSearchResultItem = ({ item }) => {
11928
12141
  const { client, setActiveChannel } = useChatContext();
11929
12142
  const { setChannels } = useChannelListContext();
11930
12143
  const { directMessagingChannelType } = useSearchContext();
11931
- const onClick = (0, import_react42.useCallback)(() => {
12144
+ const onClick = (0, import_react45.useCallback)(() => {
11932
12145
  const newChannel = client.channel(directMessagingChannelType, {
11933
12146
  members: [client.userID, item.id]
11934
12147
  });
@@ -11936,7 +12149,7 @@ var UserSearchResultItem = ({ item }) => {
11936
12149
  setActiveChannel(newChannel);
11937
12150
  setChannels?.((channels) => (0, import_lodash3.default)([newChannel, ...channels], "cid"));
11938
12151
  }, [client, item, setActiveChannel, setChannels, directMessagingChannelType]);
11939
- return /* @__PURE__ */ import_react42.default.createElement(
12152
+ return /* @__PURE__ */ import_react45.default.createElement(
11940
12153
  "button",
11941
12154
  {
11942
12155
  "aria-label": `Select User Channel: ${item.name || ""}`,
@@ -11945,7 +12158,7 @@ var UserSearchResultItem = ({ item }) => {
11945
12158
  onClick,
11946
12159
  role: "option"
11947
12160
  },
11948
- /* @__PURE__ */ import_react42.default.createElement(
12161
+ /* @__PURE__ */ import_react45.default.createElement(
11949
12162
  Avatar,
11950
12163
  {
11951
12164
  className: "str-chat__avatar--channel-preview",
@@ -11954,7 +12167,7 @@ var UserSearchResultItem = ({ item }) => {
11954
12167
  user: item
11955
12168
  }
11956
12169
  ),
11957
- /* @__PURE__ */ import_react42.default.createElement("div", { className: "str-chat__search-result--display-name" }, item.name || item.id)
12170
+ /* @__PURE__ */ import_react45.default.createElement("div", { className: "str-chat__search-result--display-name" }, item.name || item.id)
11958
12171
  );
11959
12172
  };
11960
12173
  var DefaultSearchResultItems = {
@@ -11964,18 +12177,18 @@ var DefaultSearchResultItems = {
11964
12177
  };
11965
12178
 
11966
12179
  // src/experimental/Search/SearchResults/SearchSourceResultListFooter.tsx
11967
- var import_react45 = __toESM(require("react"));
12180
+ var import_react48 = __toESM(require("react"));
11968
12181
 
11969
12182
  // src/experimental/Search/SearchResults/SearchSourceResultsLoadingIndicator.tsx
11970
- var import_react44 = __toESM(require("react"));
12183
+ var import_react47 = __toESM(require("react"));
11971
12184
 
11972
12185
  // src/experimental/Search/SearchSourceResultsContext.tsx
11973
- var import_react43 = __toESM(require("react"));
11974
- var SearchSourceResultsContext = (0, import_react43.createContext)(void 0);
12186
+ var import_react46 = __toESM(require("react"));
12187
+ var SearchSourceResultsContext = (0, import_react46.createContext)(void 0);
11975
12188
  var SearchSourceResultsContextProvider = ({
11976
12189
  children,
11977
12190
  value
11978
- }) => /* @__PURE__ */ import_react43.default.createElement(
12191
+ }) => /* @__PURE__ */ import_react46.default.createElement(
11979
12192
  SearchSourceResultsContext.Provider,
11980
12193
  {
11981
12194
  value
@@ -11983,7 +12196,7 @@ var SearchSourceResultsContextProvider = ({
11983
12196
  children
11984
12197
  );
11985
12198
  var useSearchSourceResultsContext = () => {
11986
- const contextValue = (0, import_react43.useContext)(SearchSourceResultsContext);
12199
+ const contextValue = (0, import_react46.useContext)(SearchSourceResultsContext);
11987
12200
  return contextValue;
11988
12201
  };
11989
12202
 
@@ -11991,7 +12204,7 @@ var useSearchSourceResultsContext = () => {
11991
12204
  var SearchSourceResultsLoadingIndicator = () => {
11992
12205
  const { t } = useTranslationContext();
11993
12206
  const { searchSource } = useSearchSourceResultsContext();
11994
- return /* @__PURE__ */ import_react44.default.createElement(
12207
+ return /* @__PURE__ */ import_react47.default.createElement(
11995
12208
  "div",
11996
12209
  {
11997
12210
  className: "str-chat__search-source-results__loading-indicator",
@@ -12016,13 +12229,13 @@ var SearchSourceResultListFooter = () => {
12016
12229
  searchSource.state,
12017
12230
  searchSourceStateSelector
12018
12231
  );
12019
- return /* @__PURE__ */ import_react45.default.createElement(
12232
+ return /* @__PURE__ */ import_react48.default.createElement(
12020
12233
  "div",
12021
12234
  {
12022
12235
  className: "str-chat__search-source-result-list__footer",
12023
12236
  "data-testid": "search-footer"
12024
12237
  },
12025
- 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
12238
+ 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
12026
12239
  );
12027
12240
  };
12028
12241
 
@@ -12040,36 +12253,36 @@ var SearchSourceResultList = ({
12040
12253
  const { items } = useStateStore(searchSource.state, searchSourceStateSelector2);
12041
12254
  const SearchResultItem = SearchResultItems[searchSource.type];
12042
12255
  if (!SearchResultItem) return null;
12043
- return /* @__PURE__ */ import_react46.default.createElement(
12256
+ return /* @__PURE__ */ import_react49.default.createElement(
12044
12257
  "div",
12045
12258
  {
12046
12259
  className: "str-chat__search-source-result-list",
12047
12260
  "data-testid": "search-source-result-list"
12048
12261
  },
12049
- /* @__PURE__ */ import_react46.default.createElement(
12262
+ /* @__PURE__ */ import_react49.default.createElement(
12050
12263
  InfiniteScrollPaginator,
12051
12264
  {
12052
12265
  loadNextDebounceMs: loadMoreDebounceMs,
12053
12266
  loadNextOnScrollToBottom: searchSource.search,
12054
12267
  threshold: loadMoreThresholdPx
12055
12268
  },
12056
- items?.map((item, i) => /* @__PURE__ */ import_react46.default.createElement(
12269
+ items?.map((item, i) => /* @__PURE__ */ import_react49.default.createElement(
12057
12270
  SearchResultItem,
12058
12271
  {
12059
12272
  item,
12060
12273
  key: `source-search-result-${searchSource.type}-${i}`
12061
12274
  }
12062
12275
  )),
12063
- /* @__PURE__ */ import_react46.default.createElement(SearchSourceResultListFooter2, null)
12276
+ /* @__PURE__ */ import_react49.default.createElement(SearchSourceResultListFooter2, null)
12064
12277
  )
12065
12278
  );
12066
12279
  };
12067
12280
 
12068
12281
  // src/experimental/Search/SearchResults/SearchSourceResultsEmpty.tsx
12069
- var import_react47 = __toESM(require("react"));
12282
+ var import_react50 = __toESM(require("react"));
12070
12283
  var SearchSourceResultsEmpty = () => {
12071
12284
  const { t } = useTranslationContext();
12072
- return /* @__PURE__ */ import_react47.default.createElement("div", { className: "str-chat__search-source-results-empty" }, t("No results found"));
12285
+ return /* @__PURE__ */ import_react50.default.createElement("div", { className: "str-chat__search-source-results-empty" }, t("No results found"));
12073
12286
  };
12074
12287
 
12075
12288
  // src/experimental/Search/SearchResults/SearchSourceResultsHeader.tsx
@@ -12091,20 +12304,20 @@ var SearchSourceResults = ({ searchSource }) => {
12091
12304
  searchSourceStateSelector3
12092
12305
  );
12093
12306
  if (!items && !isLoading) return null;
12094
- return /* @__PURE__ */ import_react48.default.createElement(SearchSourceResultsContextProvider, { value: { searchSource } }, /* @__PURE__ */ import_react48.default.createElement(
12307
+ return /* @__PURE__ */ import_react51.default.createElement(SearchSourceResultsContextProvider, { value: { searchSource } }, /* @__PURE__ */ import_react51.default.createElement(
12095
12308
  "div",
12096
12309
  {
12097
12310
  className: "str-chat__search-source-results",
12098
12311
  "data-testid": "search-source-results"
12099
12312
  },
12100
- /* @__PURE__ */ import_react48.default.createElement(SearchSourceResultsHeader2, null),
12101
- items?.length || isLoading ? /* @__PURE__ */ import_react48.default.createElement(SearchSourceResultList2, null) : /* @__PURE__ */ import_react48.default.createElement(SearchSourceResultsEmpty2, null)
12313
+ /* @__PURE__ */ import_react51.default.createElement(SearchSourceResultsHeader2, null),
12314
+ items?.length || isLoading ? /* @__PURE__ */ import_react51.default.createElement(SearchSourceResultList2, null) : /* @__PURE__ */ import_react51.default.createElement(SearchSourceResultsEmpty2, null)
12102
12315
  ));
12103
12316
  };
12104
12317
 
12105
12318
  // src/experimental/Search/SearchResults/SearchResultsHeader.tsx
12106
12319
  var import_clsx11 = __toESM(require("clsx"));
12107
- var import_react49 = __toESM(require("react"));
12320
+ var import_react52 = __toESM(require("react"));
12108
12321
  var searchSourceStateSelector4 = (nextValue) => ({
12109
12322
  isActive: nextValue.isActive
12110
12323
  });
@@ -12113,7 +12326,7 @@ var SearchSourceFilterButton = ({ source }) => {
12113
12326
  const { searchController } = useSearchContext();
12114
12327
  const { isActive } = useStateStore(source.state, searchSourceStateSelector4);
12115
12328
  const label = `search-results-header-filter-source-button-label--${source.type}`;
12116
- return /* @__PURE__ */ import_react49.default.createElement(
12329
+ return /* @__PURE__ */ import_react52.default.createElement(
12117
12330
  "button",
12118
12331
  {
12119
12332
  "aria-label": t("aria/Search results header filter button"),
@@ -12136,13 +12349,13 @@ var SearchSourceFilterButton = ({ source }) => {
12136
12349
  };
12137
12350
  var SearchResultsHeader = () => {
12138
12351
  const { searchController } = useSearchContext();
12139
- return /* @__PURE__ */ import_react49.default.createElement("div", { className: "str-chat__search-results-header", "data-testid": "search-results-header" }, /* @__PURE__ */ import_react49.default.createElement(
12352
+ return /* @__PURE__ */ import_react52.default.createElement("div", { className: "str-chat__search-results-header", "data-testid": "search-results-header" }, /* @__PURE__ */ import_react52.default.createElement(
12140
12353
  "div",
12141
12354
  {
12142
12355
  className: "str-chat__search-results-header__filter-source-buttons",
12143
12356
  "data-testid": "filter-source-buttons"
12144
12357
  },
12145
- searchController.sources.map((source) => /* @__PURE__ */ import_react49.default.createElement(
12358
+ searchController.sources.map((source) => /* @__PURE__ */ import_react52.default.createElement(
12146
12359
  SearchSourceFilterButton,
12147
12360
  {
12148
12361
  key: `search-source-filter-button-${source.type}`,
@@ -12153,10 +12366,10 @@ var SearchResultsHeader = () => {
12153
12366
  };
12154
12367
 
12155
12368
  // src/experimental/Search/SearchResults/SearchResultsPresearch.tsx
12156
- var import_react50 = __toESM(require("react"));
12369
+ var import_react53 = __toESM(require("react"));
12157
12370
  var SearchResultsPresearch = () => {
12158
12371
  const { t } = useTranslationContext();
12159
- return /* @__PURE__ */ import_react50.default.createElement("div", { className: "str-chat__search-results-presearch" }, t("Start typing to search"));
12372
+ return /* @__PURE__ */ import_react53.default.createElement("div", { className: "str-chat__search-results-presearch" }, t("Start typing to search"));
12160
12373
  };
12161
12374
 
12162
12375
  // src/experimental/Search/SearchResults/SearchResults.tsx
@@ -12177,7 +12390,7 @@ var SearchResults = () => {
12177
12390
  searchController.state,
12178
12391
  searchControllerStateSelector3
12179
12392
  );
12180
- 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 })));
12393
+ 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 })));
12181
12394
  };
12182
12395
 
12183
12396
  // src/experimental/Search/Search.tsx
@@ -12191,7 +12404,7 @@ var Search = ({
12191
12404
  const { SearchBar: SearchBar2 = SearchBar, SearchResults: SearchResults2 = SearchResults } = useComponentContext();
12192
12405
  const { searchController } = useChatContext();
12193
12406
  const { isActive } = useStateStore(searchController.state, searchControllerStateSelector4);
12194
- return /* @__PURE__ */ import_react52.default.createElement(
12407
+ return /* @__PURE__ */ import_react55.default.createElement(
12195
12408
  SearchContextProvider,
12196
12409
  {
12197
12410
  value: {
@@ -12202,7 +12415,7 @@ var Search = ({
12202
12415
  searchController
12203
12416
  }
12204
12417
  },
12205
- /* @__PURE__ */ import_react52.default.createElement(
12418
+ /* @__PURE__ */ import_react55.default.createElement(
12206
12419
  "div",
12207
12420
  {
12208
12421
  className: (0, import_clsx12.default)("str-chat__search", {
@@ -12210,8 +12423,8 @@ var Search = ({
12210
12423
  }),
12211
12424
  "data-testid": "search"
12212
12425
  },
12213
- /* @__PURE__ */ import_react52.default.createElement(SearchBar2, null),
12214
- /* @__PURE__ */ import_react52.default.createElement(SearchResults2, null)
12426
+ /* @__PURE__ */ import_react55.default.createElement(SearchBar2, null),
12427
+ /* @__PURE__ */ import_react55.default.createElement(SearchResults2, null)
12215
12428
  )
12216
12429
  );
12217
12430
  };