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.
- package/dist/components/Channel/Channel.d.ts +1 -1
- package/dist/components/Channel/Channel.js +7 -0
- package/dist/components/ChannelList/hooks/useChannelListShape.js +3 -3
- package/dist/components/Chat/hooks/useChat.js +7 -3
- package/dist/components/Dialog/ButtonWithSubmenu.d.ts +11 -0
- package/dist/components/Dialog/ButtonWithSubmenu.js +88 -0
- package/dist/components/Dialog/index.d.ts +1 -0
- package/dist/components/Dialog/index.js +1 -0
- package/dist/components/Loading/LoadingErrorIndicator.js +1 -1
- package/dist/components/Message/Message.js +3 -2
- package/dist/components/Message/MessageIsThreadReplyInChannelButtonIndicator.d.ts +2 -0
- package/dist/components/Message/MessageIsThreadReplyInChannelButtonIndicator.js +63 -0
- package/dist/components/Message/MessageSimple.js +11 -4
- package/dist/components/Message/ReminderNotification.d.ts +6 -0
- package/dist/components/Message/ReminderNotification.js +30 -0
- package/dist/components/Message/hooks/index.d.ts +1 -0
- package/dist/components/Message/hooks/index.js +1 -0
- package/dist/components/Message/hooks/useMessageReminder.d.ts +1 -0
- package/dist/components/Message/hooks/useMessageReminder.js +11 -0
- package/dist/components/Message/index.d.ts +1 -0
- package/dist/components/Message/index.js +1 -0
- package/dist/components/Message/utils.d.ts +4 -2
- package/dist/components/Message/utils.js +11 -1
- package/dist/components/MessageActions/MessageActionsBox.js +12 -6
- package/dist/components/MessageActions/RemindMeSubmenu.d.ts +6 -0
- package/dist/components/MessageActions/RemindMeSubmenu.js +18 -0
- package/dist/components/MessageInput/MessageInputFlat.js +5 -3
- package/dist/components/MessageInput/SendToChannelCheckbox.d.ts +2 -0
- package/dist/components/MessageInput/SendToChannelCheckbox.js +20 -0
- package/dist/components/MessageList/MessageListNotifications.js +8 -3
- package/dist/components/MessageList/VirtualizedMessageListComponents.d.ts +1 -1
- package/dist/components/MessageList/VirtualizedMessageListComponents.js +4 -0
- package/dist/components/Notifications/hooks/index.d.ts +1 -0
- package/dist/components/Notifications/hooks/index.js +1 -0
- package/dist/components/Notifications/hooks/useNotifications.d.ts +2 -0
- package/dist/components/Notifications/hooks/useNotifications.js +10 -0
- package/dist/components/Notifications/index.d.ts +1 -0
- package/dist/components/Notifications/index.js +1 -0
- package/dist/components/TextareaComposer/TextareaComposer.js +4 -0
- package/dist/components/Thread/LegacyThreadContext.d.ts +8 -0
- package/dist/components/Thread/LegacyThreadContext.js +3 -0
- package/dist/components/Thread/Thread.d.ts +0 -4
- package/dist/components/Thread/Thread.js +2 -3
- package/dist/components/Thread/index.d.ts +1 -0
- package/dist/components/Thread/index.js +1 -0
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.js +1 -0
- package/dist/context/ComponentContext.d.ts +7 -1
- package/dist/css/v2/index.css +1 -1
- package/dist/css/v2/index.layout.css +1 -1
- package/dist/experimental/MessageActions/defaults.d.ts +1 -1
- package/dist/experimental/MessageActions/defaults.js +27 -4
- package/dist/experimental/index.browser.cjs +382 -169
- package/dist/experimental/index.browser.cjs.map +4 -4
- package/dist/experimental/index.node.cjs +382 -169
- package/dist/experimental/index.node.cjs.map +4 -4
- package/dist/i18n/Streami18n.d.ts +32 -3
- package/dist/i18n/Streami18n.js +34 -5
- package/dist/i18n/TranslationBuilder/TranslationBuilder.d.ts +35 -0
- package/dist/i18n/TranslationBuilder/TranslationBuilder.js +92 -0
- package/dist/i18n/TranslationBuilder/index.d.ts +2 -0
- package/dist/i18n/TranslationBuilder/index.js +2 -0
- package/dist/i18n/TranslationBuilder/notifications/NotificationTranslationTopic.d.ts +11 -0
- package/dist/i18n/TranslationBuilder/notifications/NotificationTranslationTopic.js +27 -0
- package/dist/i18n/TranslationBuilder/notifications/attachmentUpload.d.ts +4 -0
- package/dist/i18n/TranslationBuilder/notifications/attachmentUpload.js +32 -0
- package/dist/i18n/TranslationBuilder/notifications/index.d.ts +2 -0
- package/dist/i18n/TranslationBuilder/notifications/index.js +2 -0
- package/dist/i18n/TranslationBuilder/notifications/pollComposition.d.ts +3 -0
- package/dist/i18n/TranslationBuilder/notifications/pollComposition.js +9 -0
- package/dist/i18n/TranslationBuilder/notifications/types.d.ts +4 -0
- package/dist/i18n/TranslationBuilder/notifications/types.js +1 -0
- package/dist/i18n/de.json +23 -0
- package/dist/i18n/en.json +23 -0
- package/dist/i18n/es.json +23 -0
- package/dist/i18n/fr.json +23 -0
- package/dist/i18n/hi.json +23 -0
- package/dist/i18n/index.d.ts +1 -0
- package/dist/i18n/index.js +1 -0
- package/dist/i18n/it.json +23 -0
- package/dist/i18n/ja.json +23 -0
- package/dist/i18n/ko.json +23 -0
- package/dist/i18n/nl.json +23 -0
- package/dist/i18n/pt.json +23 -0
- package/dist/i18n/ru.json +23 -0
- package/dist/i18n/tr.json +23 -0
- package/dist/i18n/types.d.ts +54 -0
- package/dist/i18n/utils.d.ts +1 -1
- package/dist/i18n/utils.js +8 -2
- package/dist/index.browser.cjs +3617 -2162
- package/dist/index.browser.cjs.map +4 -4
- package/dist/index.node.cjs +3674 -2156
- package/dist/index.node.cjs.map +4 -4
- package/dist/plugins/Emojis/index.browser.cjs +1 -2
- package/dist/plugins/Emojis/index.browser.cjs.map +3 -3
- package/dist/plugins/Emojis/index.node.cjs +1 -2
- package/dist/plugins/Emojis/index.node.cjs.map +3 -3
- package/dist/scss/v2/Message/Message-layout.scss +11 -1
- package/dist/scss/v2/Message/Message-theme.scss +31 -1
- package/dist/scss/v2/MessageActionsBox/MessageActionsBox-theme.scss +8 -0
- package/dist/scss/v2/MessageInput/MessageInput-layout.scss +19 -0
- package/dist/scss/v2/MessageInput/MessageInput-theme.scss +11 -0
- 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
|
|
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
|
|
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/
|
|
10791
|
-
var
|
|
10792
|
-
var
|
|
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
|
-
|
|
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
|
|
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
|
|
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,
|
|
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,
|
|
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,
|
|
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__ */
|
|
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
|
|
10943
|
-
var ActionsIcon = ({ className = "" }) => /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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,
|
|
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__ */
|
|
10993
|
-
return /* @__PURE__ */
|
|
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
|
|
11180
|
+
var import_react35 = __toESM(require("react"));
|
|
10998
11181
|
|
|
10999
11182
|
// src/components/Reactions/ReactionSelector.tsx
|
|
11000
|
-
var
|
|
11001
|
-
var
|
|
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
|
|
11187
|
+
var import_react33 = __toESM(require("react"));
|
|
11005
11188
|
|
|
11006
11189
|
// src/components/Reactions/StreamEmoji.tsx
|
|
11007
|
-
var
|
|
11190
|
+
var import_react32 = __toESM(require("react"));
|
|
11008
11191
|
|
|
11009
11192
|
// src/components/Reactions/SpriteImage.tsx
|
|
11010
|
-
var
|
|
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,
|
|
11046
|
-
(0,
|
|
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__ */
|
|
11051
|
-
return /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
11301
|
+
Component: () => /* @__PURE__ */ import_react33.default.createElement(StreamEmoji, { fallback: "\u2764\uFE0F", type: "love" }),
|
|
11119
11302
|
name: "Heart"
|
|
11120
11303
|
},
|
|
11121
|
-
{ type: "sad", Component: () => /* @__PURE__ */
|
|
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__ */
|
|
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,
|
|
11159
|
-
const [tooltipPositions, setTooltipPositions] = (0,
|
|
11160
|
-
const rootRef = (0,
|
|
11161
|
-
const targetRef = (0,
|
|
11162
|
-
const tooltipRef = (0,
|
|
11163
|
-
const showTooltip = (0,
|
|
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,
|
|
11353
|
+
const hideTooltip = (0, import_react34.useCallback)(() => {
|
|
11171
11354
|
setTooltipReactionType(null);
|
|
11172
11355
|
setTooltipPositions(null);
|
|
11173
11356
|
}, []);
|
|
11174
|
-
(0,
|
|
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__ */
|
|
11378
|
+
return /* @__PURE__ */ import_react34.default.createElement(
|
|
11196
11379
|
"div",
|
|
11197
11380
|
{
|
|
11198
|
-
className: (0,
|
|
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__ */
|
|
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__ */
|
|
11218
|
-
getUsersPerReactionType(tooltipReactionType)?.map((user, i, users) => /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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,
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
11441
|
+
) : /* @__PURE__ */ import_react34.default.createElement("div", { className: "latest-user-not-found" })
|
|
11259
11442
|
),
|
|
11260
|
-
/* @__PURE__ */
|
|
11261
|
-
Boolean(count) && detailedView && /* @__PURE__ */
|
|
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 =
|
|
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,
|
|
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__ */
|
|
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__ */
|
|
11290
|
-
), /* @__PURE__ */
|
|
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__ */
|
|
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
|
|
11488
|
+
var import_clsx8 = __toESM(require("clsx"));
|
|
11306
11489
|
var import_lodash2 = __toESM(require("lodash.debounce"));
|
|
11307
|
-
var
|
|
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,
|
|
11326
|
-
const childRef = (0,
|
|
11327
|
-
const scrollListener = (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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__ */
|
|
11565
|
+
return /* @__PURE__ */ import_react36.default.createElement(
|
|
11383
11566
|
"div",
|
|
11384
11567
|
{
|
|
11385
11568
|
...componentProps,
|
|
11386
|
-
className: (0,
|
|
11569
|
+
className: (0, import_clsx8.default)("str-chat__infinite-scroll-paginator", className),
|
|
11387
11570
|
ref: rootRef
|
|
11388
11571
|
},
|
|
11389
|
-
/* @__PURE__ */
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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
|
|
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,
|
|
11647
|
+
const [queriesInProgress, setQueriesInProgress] = (0, import_react38.useState)([]);
|
|
11469
11648
|
const { sources } = useStateStore(
|
|
11470
11649
|
searchController.state,
|
|
11471
11650
|
searchControllerStateSelector
|
|
11472
11651
|
);
|
|
11473
|
-
(0,
|
|
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
|
|
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,
|
|
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
|
|
11539
|
-
var useSplitMessageActionSet = (messageActionSet) => (0,
|
|
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
|
|
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 =
|
|
11734
|
+
className = msgActionsBoxButtonClassName,
|
|
11555
11735
|
role = "option",
|
|
11556
11736
|
...rest
|
|
11557
|
-
}) => /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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,
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
11717
|
-
), /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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
|
|
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
|
|
11971
|
+
var import_react44 = __toESM(require("react"));
|
|
11759
11972
|
|
|
11760
11973
|
// src/experimental/Search/SearchContext.tsx
|
|
11761
|
-
var
|
|
11762
|
-
var SearchContext = (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__ */
|
|
11979
|
+
}) => /* @__PURE__ */ import_react43.default.createElement(SearchContext.Provider, { value }, children);
|
|
11767
11980
|
var useSearchContext = () => {
|
|
11768
|
-
const contextValue = (0,
|
|
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,
|
|
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,
|
|
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__ */
|
|
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__ */
|
|
11807
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
12054
|
+
/* @__PURE__ */ import_react44.default.createElement("div", { className: "str-chat__search-input--clear-button-icon" })
|
|
11842
12055
|
)
|
|
11843
|
-
), isActive ? /* @__PURE__ */
|
|
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
|
|
12073
|
+
var import_react54 = __toESM(require("react"));
|
|
11861
12074
|
|
|
11862
12075
|
// src/experimental/Search/SearchResults/SearchSourceResults.tsx
|
|
11863
|
-
var
|
|
12076
|
+
var import_react51 = __toESM(require("react"));
|
|
11864
12077
|
|
|
11865
12078
|
// src/experimental/Search/SearchResults/SearchSourceResultList.tsx
|
|
11866
|
-
var
|
|
12079
|
+
var import_react49 = __toESM(require("react"));
|
|
11867
12080
|
|
|
11868
12081
|
// src/experimental/Search/SearchResults/SearchResultItem.tsx
|
|
11869
|
-
var
|
|
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,
|
|
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__ */
|
|
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,
|
|
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,
|
|
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,
|
|
12127
|
+
const getLatestMessagePreview2 = (0, import_react45.useCallback)(() => item.text, [item]);
|
|
11915
12128
|
if (!channel) return;
|
|
11916
|
-
return /* @__PURE__ */
|
|
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,
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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
|
|
12180
|
+
var import_react48 = __toESM(require("react"));
|
|
11968
12181
|
|
|
11969
12182
|
// src/experimental/Search/SearchResults/SearchSourceResultsLoadingIndicator.tsx
|
|
11970
|
-
var
|
|
12183
|
+
var import_react47 = __toESM(require("react"));
|
|
11971
12184
|
|
|
11972
12185
|
// src/experimental/Search/SearchSourceResultsContext.tsx
|
|
11973
|
-
var
|
|
11974
|
-
var SearchSourceResultsContext = (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__ */
|
|
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,
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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
|
|
12282
|
+
var import_react50 = __toESM(require("react"));
|
|
12070
12283
|
var SearchSourceResultsEmpty = () => {
|
|
12071
12284
|
const { t } = useTranslationContext();
|
|
12072
|
-
return /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
12101
|
-
items?.length || isLoading ? /* @__PURE__ */
|
|
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
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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
|
|
12369
|
+
var import_react53 = __toESM(require("react"));
|
|
12157
12370
|
var SearchResultsPresearch = () => {
|
|
12158
12371
|
const { t } = useTranslationContext();
|
|
12159
|
-
return /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
12214
|
-
/* @__PURE__ */
|
|
12426
|
+
/* @__PURE__ */ import_react55.default.createElement(SearchBar2, null),
|
|
12427
|
+
/* @__PURE__ */ import_react55.default.createElement(SearchResults2, null)
|
|
12215
12428
|
)
|
|
12216
12429
|
);
|
|
12217
12430
|
};
|