stream-chat-react 13.6.6 → 13.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -556,6 +556,7 @@ __export(src_exports, {
556
556
  hasNotMoreMessages: () => hasNotMoreMessages,
557
557
  hiTranslations: () => hi_default,
558
558
  htmlToTextPlugin: () => htmlToTextPlugin,
559
+ imageToLink: () => imageToLink,
559
560
  insertIntro: () => insertIntro,
560
561
  isChannel: () => isChannel,
561
562
  isChannelArchived: () => isChannelArchived,
@@ -597,6 +598,7 @@ __export(src_exports, {
597
598
  moveChannelUp: () => moveChannelUp,
598
599
  moveChannelUpwards: () => moveChannelUpwards,
599
600
  nlTranslations: () => nl_default,
601
+ plusPlusToEmphasis: () => plusPlusToEmphasis,
600
602
  processMessages: () => processMessages,
601
603
  ptTranslations: () => pt_default,
602
604
  reactionHandlerWarning: () => reactionHandlerWarning,
@@ -1537,10 +1539,10 @@ function WithComponents({
1537
1539
 
1538
1540
  // src/components/Attachment/AttachmentActions.tsx
1539
1541
  var UnMemoizedAttachmentActions = (props) => {
1540
- const { actionHandler, actions, id, text: text7 } = props;
1542
+ const { actionHandler, actions, id, text: text8 } = props;
1541
1543
  const { t } = useTranslationContext("UnMemoizedAttachmentActions");
1542
1544
  const handleActionClick = (event, name2, value) => actionHandler?.(name2, value, event);
1543
- return /* @__PURE__ */ import_react19.default.createElement("div", { className: "str-chat__message-attachment-actions" }, /* @__PURE__ */ import_react19.default.createElement("div", { className: "str-chat__message-attachment-actions-form" }, /* @__PURE__ */ import_react19.default.createElement("span", null, text7), actions.map((action) => /* @__PURE__ */ import_react19.default.createElement(
1545
+ return /* @__PURE__ */ import_react19.default.createElement("div", { className: "str-chat__message-attachment-actions" }, /* @__PURE__ */ import_react19.default.createElement("div", { className: "str-chat__message-attachment-actions-form" }, /* @__PURE__ */ import_react19.default.createElement("span", null, text8), actions.map((action) => /* @__PURE__ */ import_react19.default.createElement(
1544
1546
  "button",
1545
1547
  {
1546
1548
  className: `str-chat__message-attachment-actions-button str-chat__message-attachment-actions-button--${action.style}`,
@@ -4529,7 +4531,7 @@ var useChannelSearch = ({
4529
4531
  ]
4530
4532
  );
4531
4533
  const getChannels = (0, import_react48.useCallback)(
4532
- async (text7) => {
4534
+ async (text8) => {
4533
4535
  if (!searchForChannels && !searchForUsers) return;
4534
4536
  let results2 = [];
4535
4537
  const promises = [];
@@ -4539,7 +4541,7 @@ var useChannelSearch = ({
4539
4541
  client.queryChannels(
4540
4542
  {
4541
4543
  members: { $in: [client.userID] },
4542
- name: { $autocomplete: text7 },
4544
+ name: { $autocomplete: text8 },
4543
4545
  ...searchQueryParams?.channelFilters?.filters
4544
4546
  },
4545
4547
  searchQueryParams?.channelFilters?.sort || {},
@@ -4551,7 +4553,7 @@ var useChannelSearch = ({
4551
4553
  promises.push(
4552
4554
  client.queryUsers(
4553
4555
  {
4554
- $or: [{ id: { $autocomplete: text7 } }, { name: { $autocomplete: text7 } }],
4556
+ $or: [{ id: { $autocomplete: text8 } }, { name: { $autocomplete: text8 } }],
4555
4557
  ...searchQueryParams?.userFilters?.filters
4556
4558
  },
4557
4559
  { id: 1, ...searchQueryParams?.userFilters?.sort },
@@ -5131,12 +5133,12 @@ var UnMemoizedEmptyStateIndicator = (props) => {
5131
5133
  const { t } = useTranslationContext("EmptyStateIndicator");
5132
5134
  if (listType === "thread") return null;
5133
5135
  if (listType === "channel") {
5134
- const text7 = t("You have no channels currently");
5135
- return /* @__PURE__ */ import_react55.default.createElement(import_react55.default.Fragment, null, /* @__PURE__ */ import_react55.default.createElement("div", { className: "str-chat__channel-list-empty" }, /* @__PURE__ */ import_react55.default.createElement(ChatBubble, null), /* @__PURE__ */ import_react55.default.createElement("p", { role: "listitem" }, text7)));
5136
+ const text8 = t("You have no channels currently");
5137
+ return /* @__PURE__ */ import_react55.default.createElement(import_react55.default.Fragment, null, /* @__PURE__ */ import_react55.default.createElement("div", { className: "str-chat__channel-list-empty" }, /* @__PURE__ */ import_react55.default.createElement(ChatBubble, null), /* @__PURE__ */ import_react55.default.createElement("p", { role: "listitem" }, text8)));
5136
5138
  }
5137
5139
  if (listType === "message") {
5138
- const text7 = t("No chats here yet\u2026");
5139
- return /* @__PURE__ */ import_react55.default.createElement("div", { className: "str-chat__empty-channel" }, /* @__PURE__ */ import_react55.default.createElement(ChatBubble, null), /* @__PURE__ */ import_react55.default.createElement("p", { className: "str-chat__empty-channel-text", role: "listitem" }, text7));
5140
+ const text8 = t("No chats here yet\u2026");
5141
+ return /* @__PURE__ */ import_react55.default.createElement("div", { className: "str-chat__empty-channel" }, /* @__PURE__ */ import_react55.default.createElement(ChatBubble, null), /* @__PURE__ */ import_react55.default.createElement("p", { className: "str-chat__empty-channel-text", role: "listitem" }, text8));
5140
5142
  }
5141
5143
  return /* @__PURE__ */ import_react55.default.createElement("p", null, "No items exist");
5142
5144
  };
@@ -8346,7 +8348,7 @@ function resolveAllAttention(events, context) {
8346
8348
  let index2 = -1;
8347
8349
  let open;
8348
8350
  let group;
8349
- let text7;
8351
+ let text8;
8350
8352
  let openingSequence;
8351
8353
  let closingSequence;
8352
8354
  let use;
@@ -8384,7 +8386,7 @@ function resolveAllAttention(events, context) {
8384
8386
  },
8385
8387
  end
8386
8388
  };
8387
- text7 = {
8389
+ text8 = {
8388
8390
  type: use > 1 ? "strongText" : "emphasisText",
8389
8391
  start: {
8390
8392
  ...events[open][1].end
@@ -8412,9 +8414,9 @@ function resolveAllAttention(events, context) {
8412
8414
  if (events[open][1].end.offset - events[open][1].start.offset) {
8413
8415
  nextEvents = push(nextEvents, [["enter", events[open][1], context], ["exit", events[open][1], context]]);
8414
8416
  }
8415
- nextEvents = push(nextEvents, [["enter", group, context], ["enter", openingSequence, context], ["exit", openingSequence, context], ["enter", text7, context]]);
8417
+ nextEvents = push(nextEvents, [["enter", group, context], ["enter", openingSequence, context], ["exit", openingSequence, context], ["enter", text8, context]]);
8416
8418
  nextEvents = push(nextEvents, resolveAll(context.parser.constructs.insideSpan.null, events.slice(open + 1, index2), context));
8417
- nextEvents = push(nextEvents, [["exit", text7, context], ["enter", closingSequence, context], ["exit", closingSequence, context], ["exit", group, context]]);
8419
+ nextEvents = push(nextEvents, [["exit", text8, context], ["enter", closingSequence, context], ["exit", closingSequence, context], ["exit", group, context]]);
8418
8420
  if (events[index2][1].end.offset - events[index2][1].start.offset) {
8419
8421
  offset = 2;
8420
8422
  nextEvents = push(nextEvents, [["enter", events[index2][1], context], ["exit", events[index2][1], context]]);
@@ -9856,7 +9858,7 @@ function resolveHeadingAtx(events, context) {
9856
9858
  let contentEnd = events.length - 2;
9857
9859
  let contentStart = 3;
9858
9860
  let content3;
9859
- let text7;
9861
+ let text8;
9860
9862
  if (events[contentStart][1].type === "whitespace") {
9861
9863
  contentStart += 2;
9862
9864
  }
@@ -9872,13 +9874,13 @@ function resolveHeadingAtx(events, context) {
9872
9874
  start: events[contentStart][1].start,
9873
9875
  end: events[contentEnd][1].end
9874
9876
  };
9875
- text7 = {
9877
+ text8 = {
9876
9878
  type: "chunkText",
9877
9879
  start: events[contentStart][1].start,
9878
9880
  end: events[contentEnd][1].end,
9879
9881
  contentType: "text"
9880
9882
  };
9881
- splice(events, contentStart, contentEnd - contentStart + 1, [["enter", content3, context], ["enter", text7, context], ["exit", text7, context], ["exit", content3, context]]);
9883
+ splice(events, contentStart, contentEnd - contentStart + 1, [["enter", content3, context], ["enter", text8, context], ["exit", text8, context], ["exit", content3, context]]);
9882
9884
  }
9883
9885
  return events;
9884
9886
  }
@@ -10768,7 +10770,7 @@ function resolveToLabelEnd(events, context) {
10768
10770
  ...events[close][1].end
10769
10771
  }
10770
10772
  };
10771
- const text7 = {
10773
+ const text8 = {
10772
10774
  type: "labelText",
10773
10775
  start: {
10774
10776
  ...events[open + offset + 2][1].end
@@ -10779,9 +10781,9 @@ function resolveToLabelEnd(events, context) {
10779
10781
  };
10780
10782
  media = [["enter", group, context], ["enter", label, context]];
10781
10783
  media = push(media, events.slice(open + 1, open + offset + 3));
10782
- media = push(media, [["enter", text7, context]]);
10784
+ media = push(media, [["enter", text8, context]]);
10783
10785
  media = push(media, resolveAll(context.parser.constructs.insideSpan.null, events.slice(open + offset + 4, close - 3), context));
10784
- media = push(media, [["exit", text7, context], events[close - 2], events[close - 1], ["exit", label, context]]);
10786
+ media = push(media, [["exit", text8, context], events[close - 2], events[close - 1], ["exit", label, context]]);
10785
10787
  media = push(media, events.slice(close + 1));
10786
10788
  media = push(media, [["exit", group, context]]);
10787
10789
  splice(events, open, events.length, media);
@@ -11161,7 +11163,7 @@ var setextUnderline = {
11161
11163
  function resolveToSetextUnderline(events, context) {
11162
11164
  let index2 = events.length;
11163
11165
  let content3;
11164
- let text7;
11166
+ let text8;
11165
11167
  let definition3;
11166
11168
  while (index2--) {
11167
11169
  if (events[index2][0] === "enter") {
@@ -11170,7 +11172,7 @@ function resolveToSetextUnderline(events, context) {
11170
11172
  break;
11171
11173
  }
11172
11174
  if (events[index2][1].type === "paragraph") {
11173
- text7 = index2;
11175
+ text8 = index2;
11174
11176
  }
11175
11177
  } else {
11176
11178
  if (events[index2][1].type === "content") {
@@ -11184,15 +11186,15 @@ function resolveToSetextUnderline(events, context) {
11184
11186
  const heading3 = {
11185
11187
  type: "setextHeading",
11186
11188
  start: {
11187
- ...events[text7][1].start
11189
+ ...events[text8][1].start
11188
11190
  },
11189
11191
  end: {
11190
11192
  ...events[events.length - 1][1].end
11191
11193
  }
11192
11194
  };
11193
- events[text7][1].type = "setextHeadingText";
11195
+ events[text8][1].type = "setextHeadingText";
11194
11196
  if (definition3) {
11195
- events.splice(text7, 0, ["enter", heading3, context]);
11197
+ events.splice(text8, 0, ["enter", heading3, context]);
11196
11198
  events.splice(definition3 + 1, 0, ["exit", events[content3][1], context]);
11197
11199
  events[content3][1].end = {
11198
11200
  ...events[definition3][1].end
@@ -11296,10 +11298,10 @@ function initializeFactory(field) {
11296
11298
  function initializeText(effects) {
11297
11299
  const self2 = this;
11298
11300
  const constructs2 = this.parser.constructs[field];
11299
- const text7 = effects.attempt(constructs2, start2, notText);
11301
+ const text8 = effects.attempt(constructs2, start2, notText);
11300
11302
  return start2;
11301
11303
  function start2(code4) {
11302
- return atBreak(code4) ? text7(code4) : notText(code4);
11304
+ return atBreak(code4) ? text8(code4) : notText(code4);
11303
11305
  }
11304
11306
  function notText(code4) {
11305
11307
  if (code4 === null) {
@@ -11313,7 +11315,7 @@ function initializeFactory(field) {
11313
11315
  function data(code4) {
11314
11316
  if (atBreak(code4)) {
11315
11317
  effects.exit("data");
11316
- return text7(code4);
11318
+ return text8(code4);
11317
11319
  }
11318
11320
  effects.consume(code4);
11319
11321
  return data;
@@ -12332,7 +12334,7 @@ function compiler(options) {
12332
12334
  const siblings = node2.children;
12333
12335
  let tail = siblings[siblings.length - 1];
12334
12336
  if (!tail || tail.type !== "text") {
12335
- tail = text7();
12337
+ tail = text8();
12336
12338
  tail.position = {
12337
12339
  start: point3(token.start),
12338
12340
  // @ts-expect-error: we’ll add `end` later.
@@ -12577,7 +12579,7 @@ function compiler(options) {
12577
12579
  children: []
12578
12580
  };
12579
12581
  }
12580
- function text7() {
12582
+ function text8() {
12581
12583
  return {
12582
12584
  type: "text",
12583
12585
  value: ""
@@ -12859,13 +12861,13 @@ function image(state, node2) {
12859
12861
 
12860
12862
  // node_modules/mdast-util-to-hast/lib/handlers/inline-code.js
12861
12863
  function inlineCode(state, node2) {
12862
- const text7 = { type: "text", value: node2.value.replace(/\r?\n|\r/g, " ") };
12863
- state.patch(node2, text7);
12864
+ const text8 = { type: "text", value: node2.value.replace(/\r?\n|\r/g, " ") };
12865
+ state.patch(node2, text8);
12864
12866
  const result = {
12865
12867
  type: "element",
12866
12868
  tagName: "code",
12867
12869
  properties: {},
12868
- children: [text7]
12870
+ children: [text8]
12869
12871
  };
12870
12872
  state.patch(node2, result);
12871
12873
  return state.applyData(node2, result);
@@ -15844,9 +15846,9 @@ var getReadByTooltipText = (users, t, client, tooltipUserNameMapper) => {
15844
15846
  }
15845
15847
  return outStr;
15846
15848
  };
15847
- var isOnlyEmojis = (text7) => {
15848
- if (!text7) return false;
15849
- const noEmojis = text7.replace((0, import_emoji_regex.default)(), "");
15849
+ var isOnlyEmojis = (text8) => {
15850
+ if (!text8) return false;
15851
+ const noEmojis = text8.replace((0, import_emoji_regex.default)(), "");
15850
15852
  const noSpace = noEmojis.replace(/[\s\n]/gm, "");
15851
15853
  return !noSpace;
15852
15854
  };
@@ -16284,25 +16286,25 @@ var DEFAULT_RENDERING_LETTER_COUNT = 2;
16284
16286
  var useMessageTextStreaming = ({
16285
16287
  renderingLetterCount = DEFAULT_RENDERING_LETTER_COUNT,
16286
16288
  streamingLetterIntervalMs = DEFAULT_LETTER_INTERVAL,
16287
- text: text7
16289
+ text: text8
16288
16290
  }) => {
16289
- const [streamedMessageText, setStreamedMessageText] = (0, import_react79.useState)(text7);
16290
- const textCursor = (0, import_react79.useRef)(text7.length);
16291
+ const [streamedMessageText, setStreamedMessageText] = (0, import_react79.useState)(text8);
16292
+ const textCursor = (0, import_react79.useRef)(text8.length);
16291
16293
  (0, import_react79.useEffect)(() => {
16292
- const textLength = text7.length;
16294
+ const textLength = text8.length;
16293
16295
  const interval = setInterval(() => {
16294
- if (!text7 || textCursor.current >= textLength) {
16296
+ if (!text8 || textCursor.current >= textLength) {
16295
16297
  clearInterval(interval);
16296
16298
  }
16297
16299
  const newCursorValue = textCursor.current + renderingLetterCount;
16298
- const newText = text7.substring(0, newCursorValue);
16300
+ const newText = text8.substring(0, newCursorValue);
16299
16301
  textCursor.current += newText.length - textCursor.current;
16300
16302
  setStreamedMessageText(newText);
16301
16303
  }, streamingLetterIntervalMs);
16302
16304
  return () => {
16303
16305
  clearInterval(interval);
16304
16306
  };
16305
- }, [streamingLetterIntervalMs, renderingLetterCount, text7]);
16307
+ }, [streamingLetterIntervalMs, renderingLetterCount, text8]);
16306
16308
  return { streamedMessageText };
16307
16309
  };
16308
16310
 
@@ -17371,8 +17373,8 @@ var MessageActionsWrapper = (props) => {
17371
17373
  };
17372
17374
 
17373
17375
  // src/components/Message/renderText/regex.ts
17374
- function escapeRegExp(text7) {
17375
- return text7.replace(/[-[\]{}()*+?.,/\\^$|#]/g, "\\$&");
17376
+ function escapeRegExp(text8) {
17377
+ return text8.replace(/[-[\]{}()*+?.,/\\^$|#]/g, "\\$&");
17376
17378
  }
17377
17379
  var detectHttp = /(http(s?):\/\/)?(www\.)?/;
17378
17380
  var messageCodeBlocks = (message) => {
@@ -17650,6 +17652,26 @@ var transform = (tree) => {
17650
17652
  };
17651
17653
  var htmlToTextPlugin = () => transform;
17652
17654
 
17655
+ // src/components/Message/renderText/remarkPlugins/imageToLink.ts
17656
+ var text5 = (value) => ({ type: "text", value });
17657
+ function imageToLink({ getTextLabelFrom = "url" } = {}) {
17658
+ return (tree) => {
17659
+ const visitor3 = (node2, index2, parent) => {
17660
+ if (parent == null || index2 == null) return;
17661
+ const label = node2[getTextLabelFrom] ?? node2.url;
17662
+ const link3 = {
17663
+ children: [text5(label)],
17664
+ title: node2.title ?? node2.alt ?? node2.url,
17665
+ type: "link",
17666
+ url: node2.url
17667
+ };
17668
+ parent.children.splice(index2, 1, link3);
17669
+ return [SKIP, index2 + 1];
17670
+ };
17671
+ visit(tree, "image", visitor3);
17672
+ };
17673
+ }
17674
+
17653
17675
  // src/components/Message/renderText/remarkPlugins/keepLineBreaksPlugin.ts
17654
17676
  var visitor2 = (node2, index2, parent) => {
17655
17677
  if (!(index2 && parent && node2.position)) return;
@@ -17676,6 +17698,45 @@ var transform2 = (tree) => {
17676
17698
  };
17677
17699
  var keepLineBreaksPlugin = () => transform2;
17678
17700
 
17701
+ // src/components/Message/renderText/remarkPlugins/plusPlusToEmphasis.ts
17702
+ var INS_REGEX = /\+\+(\S(?:[\s\S]*?\S)?)\+\+/g;
17703
+ var IGNORE_NODE_TYPES = /* @__PURE__ */ new Set([
17704
+ "code",
17705
+ "inlineCode",
17706
+ "link",
17707
+ "linkReference",
17708
+ "definition",
17709
+ "math",
17710
+ "inlineMath"
17711
+ ]);
17712
+ var plusPlusToEmphasis = () => {
17713
+ const visitor3 = (node2, index2, parent) => {
17714
+ if (IGNORE_NODE_TYPES.has(node2.type)) return SKIP;
17715
+ if (node2.type !== "text" || parent == null || typeof index2 !== "number") return;
17716
+ const value = node2.value;
17717
+ INS_REGEX.lastIndex = 0;
17718
+ let match;
17719
+ let last = 0;
17720
+ const out = [];
17721
+ while (match = INS_REGEX.exec(value)) {
17722
+ const [full, inner] = match;
17723
+ const start2 = match.index;
17724
+ if (start2 > last) out.push({ type: "text", value: value.slice(last, start2) });
17725
+ out.push({
17726
+ children: [{ type: "text", value: inner }],
17727
+ data: { hName: "ins" },
17728
+ type: "emphasis"
17729
+ });
17730
+ last = start2 + full.length;
17731
+ }
17732
+ if (out.length === 0) return;
17733
+ if (last < value.length) out.push({ type: "text", value: value.slice(last) });
17734
+ parent.children.splice(index2, 1, ...out);
17735
+ return [SKIP, index2 + out.length];
17736
+ };
17737
+ return (tree) => visit(tree, visitor3);
17738
+ };
17739
+
17679
17740
  // src/components/Message/renderText/renderText.tsx
17680
17741
  var import_react103 = __toESM(require("react"));
17681
17742
  var import_linkifyjs = require("linkifyjs");
@@ -18868,12 +18929,12 @@ function linkReference2(node2, _, state, info) {
18868
18929
  let subexit = state.enter("label");
18869
18930
  const tracker = state.createTracker(info);
18870
18931
  let value = tracker.move("[");
18871
- const text7 = state.containerPhrasing(node2, {
18932
+ const text8 = state.containerPhrasing(node2, {
18872
18933
  before: value,
18873
18934
  after: "]",
18874
18935
  ...tracker.current()
18875
18936
  });
18876
- value += tracker.move(text7 + "][");
18937
+ value += tracker.move(text8 + "][");
18877
18938
  subexit();
18878
18939
  const stack = state.stack;
18879
18940
  state.stack = [];
@@ -18886,7 +18947,7 @@ function linkReference2(node2, _, state, info) {
18886
18947
  subexit();
18887
18948
  state.stack = stack;
18888
18949
  exit3();
18889
- if (type === "full" || !text7 || text7 !== reference) {
18950
+ if (type === "full" || !text8 || text8 !== reference) {
18890
18951
  value += tracker.move(reference + "]");
18891
18952
  } else if (type === "shortcut") {
18892
18953
  value = value.slice(0, -1);
@@ -19131,7 +19192,7 @@ function strongPeek(_, _1, state) {
19131
19192
  }
19132
19193
 
19133
19194
  // node_modules/mdast-util-to-markdown/lib/handle/text.js
19134
- function text5(node2, _, state, info) {
19195
+ function text6(node2, _, state, info) {
19135
19196
  return state.safe(node2.value, info);
19136
19197
  }
19137
19198
 
@@ -19172,7 +19233,7 @@ var handle = {
19172
19233
  paragraph: paragraph2,
19173
19234
  root: root3,
19174
19235
  strong: strong2,
19175
- text: text5,
19236
+ text: text6,
19176
19237
  thematicBreak: thematicBreak3
19177
19238
  };
19178
19239
 
@@ -19460,27 +19521,27 @@ var emailAutolink = {
19460
19521
  tokenize: tokenizeEmailAutolink,
19461
19522
  previous: previousEmail
19462
19523
  };
19463
- var text6 = {};
19524
+ var text7 = {};
19464
19525
  function gfmAutolinkLiteral() {
19465
19526
  return {
19466
- text: text6
19527
+ text: text7
19467
19528
  };
19468
19529
  }
19469
19530
  var code3 = 48;
19470
19531
  while (code3 < 123) {
19471
- text6[code3] = emailAutolink;
19532
+ text7[code3] = emailAutolink;
19472
19533
  code3++;
19473
19534
  if (code3 === 58) code3 = 65;
19474
19535
  else if (code3 === 91) code3 = 97;
19475
19536
  }
19476
- text6[43] = emailAutolink;
19477
- text6[45] = emailAutolink;
19478
- text6[46] = emailAutolink;
19479
- text6[95] = emailAutolink;
19480
- text6[72] = [emailAutolink, protocolAutolink];
19481
- text6[104] = [emailAutolink, protocolAutolink];
19482
- text6[87] = [emailAutolink, wwwAutolink];
19483
- text6[119] = [emailAutolink, wwwAutolink];
19537
+ text7[43] = emailAutolink;
19538
+ text7[45] = emailAutolink;
19539
+ text7[46] = emailAutolink;
19540
+ text7[95] = emailAutolink;
19541
+ text7[72] = [emailAutolink, protocolAutolink];
19542
+ text7[104] = [emailAutolink, protocolAutolink];
19543
+ text7[87] = [emailAutolink, wwwAutolink];
19544
+ text7[119] = [emailAutolink, wwwAutolink];
19484
19545
  function tokenizeEmailAutolink(effects, ok3, nok) {
19485
19546
  const self2 = this;
19486
19547
  let dot;
@@ -20079,17 +20140,17 @@ function gfmStrikethrough(options) {
20079
20140
  start: Object.assign({}, events[open][1].start),
20080
20141
  end: Object.assign({}, events[index2][1].end)
20081
20142
  };
20082
- const text7 = {
20143
+ const text8 = {
20083
20144
  type: "strikethroughText",
20084
20145
  start: Object.assign({}, events[open][1].end),
20085
20146
  end: Object.assign({}, events[index2][1].start)
20086
20147
  };
20087
- const nextEvents = [["enter", strikethrough2, context], ["enter", events[open][1], context], ["exit", events[open][1], context], ["enter", text7, context]];
20148
+ const nextEvents = [["enter", strikethrough2, context], ["enter", events[open][1], context], ["exit", events[open][1], context], ["enter", text8, context]];
20088
20149
  const insideSpan2 = context.parser.constructs.insideSpan.null;
20089
20150
  if (insideSpan2) {
20090
20151
  splice(nextEvents, nextEvents.length, 0, resolveAll(insideSpan2, events.slice(open + 1, index2), context));
20091
20152
  }
20092
- splice(nextEvents, nextEvents.length, 0, [["exit", text7, context], ["enter", events[index2][1], context], ["exit", events[index2][1], context], ["exit", strikethrough2, context]]);
20153
+ splice(nextEvents, nextEvents.length, 0, [["exit", text8, context], ["enter", events[index2][1], context], ["exit", events[index2][1], context], ["exit", strikethrough2, context]]);
20093
20154
  splice(events, open - 1, index2 - open + 3, nextEvents);
20094
20155
  index2 = open + nextEvents.length - 2;
20095
20156
  break;
@@ -20787,7 +20848,8 @@ var defaultAllowedTagNames = [
20787
20848
  "h3",
20788
20849
  "h4",
20789
20850
  "h5",
20790
- "h6"
20851
+ "h6",
20852
+ "ins"
20791
20853
  ];
20792
20854
  function formatUrlForDisplay(url) {
20793
20855
  try {
@@ -20810,24 +20872,24 @@ var markDownRenderers = {
20810
20872
  emoji: Emoji,
20811
20873
  mention: Mention
20812
20874
  };
20813
- var renderText = (text7, mentionedUsers, {
20875
+ var renderText = (text8, mentionedUsers, {
20814
20876
  allowedTagNames = defaultAllowedTagNames,
20815
20877
  customMarkDownRenderers,
20816
20878
  getRehypePlugins = getPluginsForward,
20817
20879
  getRemarkPlugins = getPluginsForward
20818
20880
  } = {}) => {
20819
- if (!text7) return null;
20820
- if (text7.trim().length === 1) return /* @__PURE__ */ import_react103.default.createElement(import_react103.default.Fragment, null, text7);
20821
- let newText = text7;
20881
+ if (!text8) return null;
20882
+ if (text8.trim().length === 1) return /* @__PURE__ */ import_react103.default.createElement(import_react103.default.Fragment, null, text8);
20883
+ let newText = text8;
20822
20884
  const markdownLinks = matchMarkdownLinks(newText);
20823
20885
  const codeBlocks = messageCodeBlocks(newText);
20824
20886
  const links = [...(0, import_linkifyjs.find)(newText, "email"), ...(0, import_linkifyjs.find)(newText, "url")];
20825
20887
  for (let i = links.length - 1; i >= 0; i--) {
20826
20888
  const { end, href, start: start2, type, value } = links[i];
20827
20889
  const linkIsInBlock = codeBlocks.some((block) => block?.includes(value));
20828
- const noParsingNeeded = markdownLinks && markdownLinks.filter((text8) => {
20890
+ const noParsingNeeded = markdownLinks && markdownLinks.filter((text9) => {
20829
20891
  const strippedHref = href?.replace(detectHttp, "");
20830
- const strippedText = text8?.replace(detectHttp, "");
20892
+ const strippedText = text9?.replace(detectHttp, "");
20831
20893
  if (!strippedHref || !strippedText) return false;
20832
20894
  return strippedHref.includes(strippedText) || strippedText.includes(strippedHref);
20833
20895
  });
@@ -20849,13 +20911,15 @@ var renderText = (text7, mentionedUsers, {
20849
20911
  const remarkPlugins2 = [
20850
20912
  htmlToTextPlugin,
20851
20913
  keepLineBreaksPlugin,
20852
- [remarkGfm, { singleTilde: false }]
20914
+ [remarkGfm, { singleTilde: false }],
20915
+ plusPlusToEmphasis,
20916
+ imageToLink
20853
20917
  ];
20854
20918
  const rehypePlugins = [emojiMarkdownPlugin];
20855
20919
  if (mentionedUsers?.length) {
20856
20920
  rehypePlugins.push(mentionsMarkdownPlugin(mentionedUsers));
20857
20921
  }
20858
- return /* @__PURE__ */ import_react103.default.createElement(ErrorBoundary, { fallback: /* @__PURE__ */ import_react103.default.createElement(import_react103.default.Fragment, null, text7) }, /* @__PURE__ */ import_react103.default.createElement(
20922
+ return /* @__PURE__ */ import_react103.default.createElement(ErrorBoundary, { fallback: /* @__PURE__ */ import_react103.default.createElement(import_react103.default.Fragment, null, text8) }, /* @__PURE__ */ import_react103.default.createElement(
20859
20923
  Markdown,
20860
20924
  {
20861
20925
  allowedElements: allowedTagNames,
@@ -21625,7 +21689,7 @@ var import_clsx27 = __toESM(require("clsx"));
21625
21689
  // src/components/Form/FieldError.tsx
21626
21690
  var import_clsx26 = __toESM(require("clsx"));
21627
21691
  var import_react119 = __toESM(require("react"));
21628
- var FieldError = ({ className, text: text7, ...props }) => /* @__PURE__ */ import_react119.default.createElement("div", { ...props, className: (0, import_clsx26.default)("str-chat__form-field-error", className) }, text7);
21692
+ var FieldError = ({ className, text: text8, ...props }) => /* @__PURE__ */ import_react119.default.createElement("div", { ...props, className: (0, import_clsx26.default)("str-chat__form-field-error", className) }, text8);
21629
21693
 
21630
21694
  // src/components/Dialog/FormDialog.tsx
21631
21695
  var FormDialog = ({
@@ -23226,11 +23290,11 @@ var StreamedMessageText = (props) => {
23226
23290
  } = props;
23227
23291
  const { message: messageFromContext } = useMessageContext("StreamedMessageText");
23228
23292
  const message = messageFromProps || messageFromContext;
23229
- const { text: text7 = "" } = message;
23293
+ const { text: text8 = "" } = message;
23230
23294
  const { streamedMessageText } = useMessageTextStreaming({
23231
23295
  renderingLetterCount,
23232
23296
  streamingLetterIntervalMs,
23233
- text: text7
23297
+ text: text8
23234
23298
  });
23235
23299
  return /* @__PURE__ */ import_react155.default.createElement(
23236
23300
  MessageText,
@@ -28015,10 +28079,10 @@ var import_react175 = __toESM(require("react"));
28015
28079
  var UnMemoizedEventComponent = (props) => {
28016
28080
  const { Avatar: Avatar2 = Avatar, calendar: calendar3, calendarFormats, format, message } = props;
28017
28081
  const { t, tDateTimeParser } = useTranslationContext("EventComponent");
28018
- const { created_at = "", event, text: text7, type } = message;
28082
+ const { created_at = "", event, text: text8, type } = message;
28019
28083
  const getDateOptions = { messageCreatedAt: created_at.toString(), tDateTimeParser };
28020
28084
  if (type === "system")
28021
- return /* @__PURE__ */ import_react175.default.createElement("div", { className: "str-chat__message--system", "data-testid": "message-system" }, /* @__PURE__ */ import_react175.default.createElement("div", { className: "str-chat__message--system__text" }, /* @__PURE__ */ import_react175.default.createElement("div", { className: "str-chat__message--system__line" }), /* @__PURE__ */ import_react175.default.createElement("p", null, text7), /* @__PURE__ */ import_react175.default.createElement("div", { className: "str-chat__message--system__line" })), /* @__PURE__ */ import_react175.default.createElement("div", { className: "str-chat__message--system__date" }, /* @__PURE__ */ import_react175.default.createElement("strong", null, getDateString({
28085
+ return /* @__PURE__ */ import_react175.default.createElement("div", { className: "str-chat__message--system", "data-testid": "message-system" }, /* @__PURE__ */ import_react175.default.createElement("div", { className: "str-chat__message--system__text" }, /* @__PURE__ */ import_react175.default.createElement("div", { className: "str-chat__message--system__line" }), /* @__PURE__ */ import_react175.default.createElement("p", null, text8), /* @__PURE__ */ import_react175.default.createElement("div", { className: "str-chat__message--system__line" })), /* @__PURE__ */ import_react175.default.createElement("div", { className: "str-chat__message--system__date" }, /* @__PURE__ */ import_react175.default.createElement("strong", null, getDateString({
28022
28086
  ...getDateOptions,
28023
28087
  calendar: calendar3,
28024
28088
  calendarFormats,
@@ -30019,9 +30083,11 @@ var Message = (props) => {
30019
30083
  // src/components/ChannelPreview/utils.tsx
30020
30084
  var remarkPlugins = [
30021
30085
  htmlToTextPlugin,
30022
- [remarkGfm, { singleTilde: false }]
30086
+ [remarkGfm, { singleTilde: false }],
30087
+ plusPlusToEmphasis,
30088
+ imageToLink
30023
30089
  ];
30024
- var renderPreviewText = (text7) => /* @__PURE__ */ import_react200.default.createElement(Markdown, { remarkPlugins, skipHtml: true }, text7);
30090
+ var renderPreviewText = (text8) => /* @__PURE__ */ import_react200.default.createElement(Markdown, { remarkPlugins, skipHtml: true }, text8);
30025
30091
  var getLatestPollVote = (latestVotesByOption) => {
30026
30092
  let latestVote;
30027
30093
  for (const optionVotes of Object.values(latestVotesByOption)) {
@@ -33388,7 +33454,7 @@ var TextareaComposer = ({
33388
33454
  const shouldSubmit = shouldSubmitProp ?? shouldSubmitContext ?? defaultShouldSubmit;
33389
33455
  const messageComposer = useMessageComposer();
33390
33456
  const { textComposer } = messageComposer;
33391
- const { selection, suggestions, text: text7 } = useStateStore(
33457
+ const { selection, suggestions, text: text8 } = useStateStore(
33392
33458
  textComposer.state,
33393
33459
  textComposerStateSelector2
33394
33460
  );
@@ -33515,15 +33581,15 @@ var TextareaComposer = ({
33515
33581
  (0, import_react256.useLayoutEffect)(() => {
33516
33582
  const textarea = textareaRef.current;
33517
33583
  if (!textarea || isComposing) return;
33518
- if (textarea.value !== text7) {
33519
- textarea.value = text7;
33584
+ if (textarea.value !== text8) {
33585
+ textarea.value = text8;
33520
33586
  }
33521
33587
  const length = textarea.value.length;
33522
33588
  const start2 = Math.max(0, Math.min(selection.start, length));
33523
33589
  const end = Math.max(start2, Math.min(selection.end, length));
33524
33590
  if (textarea.selectionStart === start2 && textarea.selectionEnd === end) return;
33525
33591
  textarea.setSelectionRange(start2, end, "forward");
33526
- }, [text7, selection.start, selection.end, isComposing, textareaRef]);
33592
+ }, [text8, selection.start, selection.end, isComposing, textareaRef]);
33527
33593
  return /* @__PURE__ */ import_react256.default.createElement(
33528
33594
  "div",
33529
33595
  {
@@ -34175,12 +34241,12 @@ var CardHeader = (props) => {
34175
34241
  ) : null;
34176
34242
  };
34177
34243
  var CardContent = (props) => {
34178
- const { author_name, og_scrape_url, text: text7, title, title_link, type } = props;
34244
+ const { author_name, og_scrape_url, text: text8, title, title_link, type } = props;
34179
34245
  const url = title_link || og_scrape_url;
34180
- return /* @__PURE__ */ import_react266.default.createElement("div", { className: "str-chat__message-attachment-card--content" }, type === "audio" ? /* @__PURE__ */ import_react266.default.createElement(CardAudio, { og: props }) : /* @__PURE__ */ import_react266.default.createElement("div", { className: "str-chat__message-attachment-card--flex" }, url && /* @__PURE__ */ import_react266.default.createElement(SourceLink, { author_name, url }), title && /* @__PURE__ */ import_react266.default.createElement("div", { className: "str-chat__message-attachment-card--title" }, title), text7 && /* @__PURE__ */ import_react266.default.createElement("div", { className: "str-chat__message-attachment-card--text" }, text7)));
34246
+ return /* @__PURE__ */ import_react266.default.createElement("div", { className: "str-chat__message-attachment-card--content" }, type === "audio" ? /* @__PURE__ */ import_react266.default.createElement(CardAudio, { og: props }) : /* @__PURE__ */ import_react266.default.createElement("div", { className: "str-chat__message-attachment-card--flex" }, url && /* @__PURE__ */ import_react266.default.createElement(SourceLink, { author_name, url }), title && /* @__PURE__ */ import_react266.default.createElement("div", { className: "str-chat__message-attachment-card--title" }, title), text8 && /* @__PURE__ */ import_react266.default.createElement("div", { className: "str-chat__message-attachment-card--text" }, text8)));
34181
34247
  };
34182
34248
  var CardAudio = ({
34183
- og: { asset_url, author_name, mime_type, og_scrape_url, text: text7, title, title_link }
34249
+ og: { asset_url, author_name, mime_type, og_scrape_url, text: text8, title, title_link }
34184
34250
  }) => {
34185
34251
  const { audioRef, isPlaying, progress, seek, togglePlay } = useAudioController({
34186
34252
  mimeType: mime_type
@@ -34188,7 +34254,7 @@ var CardAudio = ({
34188
34254
  const url = title_link || og_scrape_url;
34189
34255
  const dataTestId = "card-audio-widget";
34190
34256
  const rootClassName2 = "str-chat__message-attachment-card-audio-widget";
34191
- return /* @__PURE__ */ import_react266.default.createElement("div", { className: rootClassName2, "data-testid": dataTestId }, asset_url && /* @__PURE__ */ import_react266.default.createElement(import_react266.default.Fragment, null, /* @__PURE__ */ import_react266.default.createElement("audio", { ref: audioRef }, /* @__PURE__ */ import_react266.default.createElement("source", { "data-testid": "audio-source", src: asset_url, type: "audio/mp3" })), /* @__PURE__ */ import_react266.default.createElement("div", { className: "str-chat__message-attachment-card-audio-widget--first-row" }, /* @__PURE__ */ import_react266.default.createElement("div", { className: "str-chat__message-attachment-audio-widget--play-controls" }, /* @__PURE__ */ import_react266.default.createElement(PlayButton, { isPlaying, onClick: togglePlay })), /* @__PURE__ */ import_react266.default.createElement(ProgressBar, { onClick: seek, progress }))), /* @__PURE__ */ import_react266.default.createElement("div", { className: "str-chat__message-attachment-audio-widget--second-row" }, url && /* @__PURE__ */ import_react266.default.createElement(SourceLink, { author_name, url }), title && /* @__PURE__ */ import_react266.default.createElement("div", { className: "str-chat__message-attachment-audio-widget--title" }, title), text7 && /* @__PURE__ */ import_react266.default.createElement("div", { className: "str-chat__message-attachment-audio-widget--description" }, text7)));
34257
+ return /* @__PURE__ */ import_react266.default.createElement("div", { className: rootClassName2, "data-testid": dataTestId }, asset_url && /* @__PURE__ */ import_react266.default.createElement(import_react266.default.Fragment, null, /* @__PURE__ */ import_react266.default.createElement("audio", { ref: audioRef }, /* @__PURE__ */ import_react266.default.createElement("source", { "data-testid": "audio-source", src: asset_url, type: "audio/mp3" })), /* @__PURE__ */ import_react266.default.createElement("div", { className: "str-chat__message-attachment-card-audio-widget--first-row" }, /* @__PURE__ */ import_react266.default.createElement("div", { className: "str-chat__message-attachment-audio-widget--play-controls" }, /* @__PURE__ */ import_react266.default.createElement(PlayButton, { isPlaying, onClick: togglePlay })), /* @__PURE__ */ import_react266.default.createElement(ProgressBar, { onClick: seek, progress }))), /* @__PURE__ */ import_react266.default.createElement("div", { className: "str-chat__message-attachment-audio-widget--second-row" }, url && /* @__PURE__ */ import_react266.default.createElement(SourceLink, { author_name, url }), title && /* @__PURE__ */ import_react266.default.createElement("div", { className: "str-chat__message-attachment-audio-widget--title" }, title), text8 && /* @__PURE__ */ import_react266.default.createElement("div", { className: "str-chat__message-attachment-audio-widget--description" }, text8)));
34192
34258
  };
34193
34259
  var UnMemoizedCard = (props) => {
34194
34260
  const { asset_url, giphy, image_url, thumb_url, title, title_link, type } = props;
@@ -35051,12 +35117,12 @@ var useChannelContainerClasses = ({
35051
35117
 
35052
35118
  // src/components/Channel/utils.ts
35053
35119
  var import_nanoid7 = require("nanoid");
35054
- var makeAddNotifications = (setNotifications, notificationTimeouts) => (text7, type) => {
35055
- if (typeof text7 !== "string" || type !== "success" && type !== "error") {
35120
+ var makeAddNotifications = (setNotifications, notificationTimeouts) => (text8, type) => {
35121
+ if (typeof text8 !== "string" || type !== "success" && type !== "error") {
35056
35122
  return;
35057
35123
  }
35058
35124
  const id = (0, import_nanoid7.nanoid)();
35059
- setNotifications((prevNotifications) => [...prevNotifications, { id, text: text7, type }]);
35125
+ setNotifications((prevNotifications) => [...prevNotifications, { id, text: text8, type }]);
35060
35126
  const timeout = setTimeout(
35061
35127
  () => setNotifications(
35062
35128
  (prevNotifications) => prevNotifications.filter((notification) => notification.id !== id)
@@ -36171,7 +36237,7 @@ var useChat = ({
36171
36237
  };
36172
36238
  (0, import_react282.useEffect)(() => {
36173
36239
  if (!client) return;
36174
- const version = "13.6.6";
36240
+ const version = "13.7.0";
36175
36241
  const userAgent = client.getUserAgent();
36176
36242
  if (!userAgent.includes("stream-chat-react")) {
36177
36243
  client.setUserAgent(`stream-chat-react-${version}-${userAgent}`);