@natoe/colab 0.1.23 → 0.1.26

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/index.mjs CHANGED
@@ -1942,6 +1942,20 @@ function MoreIcon({ size = 18, color = "currentColor" }) {
1942
1942
  }
1943
1943
  );
1944
1944
  }
1945
+ function AlertIcon({ size = 14, color = "currentColor" }) {
1946
+ return /* @__PURE__ */ jsx(
1947
+ "svg",
1948
+ {
1949
+ xmlns: "http://www.w3.org/2000/svg",
1950
+ width: size,
1951
+ height: size,
1952
+ viewBox: "0 0 24 24",
1953
+ fill: color,
1954
+ "aria-hidden": "true",
1955
+ children: /* @__PURE__ */ jsx("path", { d: "M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z" })
1956
+ }
1957
+ );
1958
+ }
1945
1959
  var VIEWPORT_MARGIN = 8;
1946
1960
  var TRIGGER_GAP = 4;
1947
1961
  function MessageActionsMenu({
@@ -1950,6 +1964,9 @@ function MessageActionsMenu({
1950
1964
  onPin,
1951
1965
  onUnpin,
1952
1966
  onCopy,
1967
+ onReport,
1968
+ onBlock,
1969
+ canModerate = false,
1953
1970
  pinDisabled = false,
1954
1971
  anchorRight = false,
1955
1972
  className
@@ -2088,6 +2105,36 @@ function MessageActionsMenu({
2088
2105
  /* @__PURE__ */ jsx("span", { children: "Copy text" })
2089
2106
  ]
2090
2107
  }
2108
+ ),
2109
+ canModerate && (onReport || onBlock) && /* @__PURE__ */ jsx("div", { style: styles4.divider }),
2110
+ canModerate && onReport && /* @__PURE__ */ jsxs(
2111
+ "button",
2112
+ {
2113
+ type: "button",
2114
+ role: "menuitem",
2115
+ onClick: () => run(() => onReport(message)),
2116
+ style: styles4.item,
2117
+ children: [
2118
+ /* @__PURE__ */ jsx(AlertIcon, { size: 16, color: COLOR.neutral700 }),
2119
+ /* @__PURE__ */ jsx("span", { children: "Report message" })
2120
+ ]
2121
+ }
2122
+ ),
2123
+ canModerate && onBlock && /* @__PURE__ */ jsxs(
2124
+ "button",
2125
+ {
2126
+ type: "button",
2127
+ role: "menuitem",
2128
+ onClick: () => run(() => onBlock(message)),
2129
+ style: { ...styles4.item, ...styles4.itemDanger },
2130
+ children: [
2131
+ /* @__PURE__ */ jsx(AlertIcon, { size: 16, color: "#c0392b" }),
2132
+ /* @__PURE__ */ jsxs("span", { children: [
2133
+ "Block ",
2134
+ message.senderName
2135
+ ] })
2136
+ ]
2137
+ }
2091
2138
  )
2092
2139
  ]
2093
2140
  }
@@ -2166,6 +2213,14 @@ var styles4 = {
2166
2213
  itemDisabled: {
2167
2214
  color: COLOR.neutral400,
2168
2215
  cursor: "not-allowed"
2216
+ },
2217
+ itemDanger: {
2218
+ color: "#c0392b"
2219
+ },
2220
+ divider: {
2221
+ height: "1px",
2222
+ backgroundColor: COLOR.neutral200,
2223
+ margin: "4px 0"
2169
2224
  }
2170
2225
  };
2171
2226
  function FileIcon({ size = 18, color = "currentColor" }) {
@@ -2182,20 +2237,6 @@ function FileIcon({ size = 18, color = "currentColor" }) {
2182
2237
  }
2183
2238
  );
2184
2239
  }
2185
- function AlertIcon({ size = 14, color = "currentColor" }) {
2186
- return /* @__PURE__ */ jsx(
2187
- "svg",
2188
- {
2189
- xmlns: "http://www.w3.org/2000/svg",
2190
- width: size,
2191
- height: size,
2192
- viewBox: "0 0 24 24",
2193
- fill: color,
2194
- "aria-hidden": "true",
2195
- children: /* @__PURE__ */ jsx("path", { d: "M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z" })
2196
- }
2197
- );
2198
- }
2199
2240
  function RoleAvatarIcon({
2200
2241
  role,
2201
2242
  size = 18,
@@ -2297,6 +2338,8 @@ function MessageBubble({
2297
2338
  onPin,
2298
2339
  onUnpin,
2299
2340
  onCopy,
2341
+ onReport,
2342
+ onBlock,
2300
2343
  onReplyJumpTo,
2301
2344
  onRetry,
2302
2345
  pinDisabled = false,
@@ -2305,7 +2348,8 @@ function MessageBubble({
2305
2348
  if (message.type === "system") {
2306
2349
  return /* @__PURE__ */ jsx(SystemBubble, { message });
2307
2350
  }
2308
- const hasActions = !!(onReply || onPin || onUnpin || onCopy);
2351
+ const canModerate = !isOwn && !!(onReport || onBlock);
2352
+ const hasActions = !!(onReply || onPin || onUnpin || onCopy) || canModerate;
2309
2353
  const actionsSlot = hasActions ? /* @__PURE__ */ jsx("div", { style: styles5.actionsSlot, children: /* @__PURE__ */ jsx(
2310
2354
  MessageActionsMenu,
2311
2355
  {
@@ -2317,6 +2361,9 @@ function MessageBubble({
2317
2361
  onUnpin: onUnpin ?? (() => {
2318
2362
  }),
2319
2363
  onCopy,
2364
+ onReport,
2365
+ onBlock,
2366
+ canModerate,
2320
2367
  pinDisabled,
2321
2368
  anchorRight: !isOwn
2322
2369
  }
@@ -2853,6 +2900,9 @@ var MessageList = forwardRef(function MessageList2({
2853
2900
  onPin,
2854
2901
  onUnpin,
2855
2902
  onCopy,
2903
+ onReport,
2904
+ onBlock,
2905
+ blockedUserIds,
2856
2906
  onRetry,
2857
2907
  pinDisabled,
2858
2908
  className
@@ -2956,7 +3006,7 @@ var MessageList = forwardRef(function MessageList2({
2956
3006
  messages.length === 0 && isLoading && /* @__PURE__ */ jsx("div", { style: styles6.firstLoad, children: /* @__PURE__ */ jsx(Spinner, { size: 20 }) }),
2957
3007
  (() => {
2958
3008
  let lastValidBucket = null;
2959
- return messages.map((message) => {
3009
+ return messages.filter((m) => !blockedUserIds?.includes(m.senderId)).map((message) => {
2960
3010
  const currentBucket = dayBucketKey(message.insertedAt);
2961
3011
  const showDivider = !!currentBucket && currentBucket !== lastValidBucket;
2962
3012
  if (currentBucket) lastValidBucket = currentBucket;
@@ -2979,6 +3029,8 @@ var MessageList = forwardRef(function MessageList2({
2979
3029
  onPin,
2980
3030
  onUnpin,
2981
3031
  onCopy,
3032
+ onReport,
3033
+ onBlock,
2982
3034
  onRetry,
2983
3035
  pinDisabled
2984
3036
  }
@@ -4598,6 +4650,9 @@ function CollabPanel({
4598
4650
  onPin: handlePin,
4599
4651
  onUnpin: handleUnpin,
4600
4652
  onCopy: handleCopy,
4653
+ onReport: config.onReportMessage ? (m) => config.onReportMessage(m) : void 0,
4654
+ onBlock: config.onBlockUser ? (m) => config.onBlockUser(m.senderId, m.senderName) : void 0,
4655
+ blockedUserIds: config.blockedUserIds,
4601
4656
  onRetry: retryMessage,
4602
4657
  pinDisabled
4603
4658
  }
@@ -5553,7 +5608,7 @@ var styles14 = {
5553
5608
  },
5554
5609
  messageRow: {
5555
5610
  display: "flex",
5556
- alignItems: "center",
5611
+ alignItems: "flex-start",
5557
5612
  gap: SPACE.S2,
5558
5613
  fontSize: FONT_SIZE.xs,
5559
5614
  lineHeight: LINE_HEIGHT.normal,
@@ -5563,7 +5618,8 @@ var styles14 = {
5563
5618
  flexShrink: 0,
5564
5619
  width: "6px",
5565
5620
  height: "6px",
5566
- borderRadius: RADIUS.full
5621
+ borderRadius: RADIUS.full,
5622
+ marginTop: "7px"
5567
5623
  },
5568
5624
  senderName: {
5569
5625
  flexShrink: 0,
@@ -5572,9 +5628,11 @@ var styles14 = {
5572
5628
  },
5573
5629
  messageText: {
5574
5630
  color: COLOR.neutral600,
5631
+ display: "-webkit-box",
5632
+ WebkitLineClamp: 2,
5633
+ WebkitBoxOrient: "vertical",
5575
5634
  overflow: "hidden",
5576
- textOverflow: "ellipsis",
5577
- whiteSpace: "nowrap",
5635
+ wordBreak: "break-word",
5578
5636
  minWidth: 0,
5579
5637
  flex: 1
5580
5638
  },