@liveblocks/react-ui 2.18.3 → 2.18.4-uns1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (675) hide show
  1. package/dist/_private/index.cjs +118 -0
  2. package/dist/_private/index.cjs.map +1 -0
  3. package/dist/_private/index.js +54 -117
  4. package/dist/_private/index.js.map +1 -1
  5. package/dist/components/{Comment.mjs → Comment.cjs} +196 -169
  6. package/dist/components/{Comment.mjs.map → Comment.cjs.map} +1 -1
  7. package/dist/components/Comment.js +168 -195
  8. package/dist/components/Comment.js.map +1 -1
  9. package/dist/components/{Composer.mjs → Composer.cjs} +151 -148
  10. package/dist/components/{Composer.mjs.map → Composer.cjs.map} +1 -1
  11. package/dist/components/Composer.js +147 -150
  12. package/dist/components/Composer.js.map +1 -1
  13. package/dist/components/HistoryVersionSummary.cjs +45 -0
  14. package/dist/components/{HistoryVersionSummary.mjs.map → HistoryVersionSummary.cjs.map} +1 -1
  15. package/dist/components/HistoryVersionSummary.js +17 -19
  16. package/dist/components/HistoryVersionSummary.js.map +1 -1
  17. package/dist/components/HistoryVersionSummaryList.cjs +25 -0
  18. package/dist/components/{HistoryVersionSummaryList.mjs.map → HistoryVersionSummaryList.cjs.map} +1 -1
  19. package/dist/components/HistoryVersionSummaryList.js +8 -10
  20. package/dist/components/HistoryVersionSummaryList.js.map +1 -1
  21. package/dist/components/{InboxNotification.mjs → InboxNotification.cjs} +124 -122
  22. package/dist/components/{InboxNotification.mjs.map → InboxNotification.cjs.map} +1 -1
  23. package/dist/components/InboxNotification.js +121 -123
  24. package/dist/components/InboxNotification.js.map +1 -1
  25. package/dist/components/InboxNotificationList.cjs +42 -0
  26. package/dist/components/{InboxNotificationList.mjs.map → InboxNotificationList.cjs.map} +1 -1
  27. package/dist/components/InboxNotificationList.js +14 -16
  28. package/dist/components/InboxNotificationList.js.map +1 -1
  29. package/dist/components/{Thread.mjs → Thread.cjs} +70 -49
  30. package/dist/components/{Thread.mjs.map → Thread.cjs.map} +1 -1
  31. package/dist/components/Thread.js +48 -69
  32. package/dist/components/Thread.js.map +1 -1
  33. package/dist/components/internal/{Attachment.mjs → Attachment.cjs} +82 -78
  34. package/dist/components/internal/{Attachment.mjs.map → Attachment.cjs.map} +1 -1
  35. package/dist/components/internal/Attachment.js +77 -81
  36. package/dist/components/internal/Attachment.js.map +1 -1
  37. package/dist/components/internal/{Attribution.mjs → Attribution.cjs} +10 -8
  38. package/dist/components/internal/{Attribution.mjs.map → Attribution.cjs.map} +1 -1
  39. package/dist/components/internal/Attribution.js +7 -9
  40. package/dist/components/internal/Attribution.js.map +1 -1
  41. package/dist/components/internal/Avatar.cjs +48 -0
  42. package/dist/components/internal/{Avatar.mjs.map → Avatar.cjs.map} +1 -1
  43. package/dist/components/internal/Avatar.js +18 -20
  44. package/dist/components/internal/Avatar.js.map +1 -1
  45. package/dist/components/internal/Button.cjs +80 -0
  46. package/dist/components/internal/{Button.mjs.map → Button.cjs.map} +1 -1
  47. package/dist/components/internal/Button.js +19 -23
  48. package/dist/components/internal/Button.js.map +1 -1
  49. package/dist/components/internal/Dropdown.cjs +92 -0
  50. package/dist/components/internal/{Dropdown.mjs.map → Dropdown.cjs.map} +1 -1
  51. package/dist/components/internal/Dropdown.js +22 -47
  52. package/dist/components/internal/Dropdown.js.map +1 -1
  53. package/dist/components/internal/Emoji.cjs +19 -0
  54. package/dist/components/internal/{Emoji.mjs.map → Emoji.cjs.map} +1 -1
  55. package/dist/components/internal/Emoji.js +8 -10
  56. package/dist/components/internal/Emoji.js.map +1 -1
  57. package/dist/components/internal/EmojiPicker.cjs +208 -0
  58. package/dist/components/internal/{EmojiPicker.mjs.map → EmojiPicker.cjs.map} +1 -1
  59. package/dist/components/internal/EmojiPicker.js +52 -76
  60. package/dist/components/internal/EmojiPicker.js.map +1 -1
  61. package/dist/components/internal/{Icon.mjs → Icon.cjs} +10 -6
  62. package/dist/components/internal/{Icon.mjs.map → Icon.cjs.map} +1 -1
  63. package/dist/components/internal/Icon.js +5 -9
  64. package/dist/components/internal/Icon.js.map +1 -1
  65. package/dist/components/internal/{InboxNotificationThread.mjs → InboxNotificationThread.cjs} +34 -30
  66. package/dist/components/internal/{InboxNotificationThread.mjs.map → InboxNotificationThread.cjs.map} +1 -1
  67. package/dist/components/internal/InboxNotificationThread.js +29 -33
  68. package/dist/components/internal/InboxNotificationThread.js.map +1 -1
  69. package/dist/components/internal/List.cjs +36 -0
  70. package/dist/components/internal/{List.mjs.map → List.cjs.map} +1 -1
  71. package/dist/components/internal/List.js +14 -16
  72. package/dist/components/internal/List.js.map +1 -1
  73. package/dist/components/internal/Room.cjs +24 -0
  74. package/dist/components/internal/{Room.mjs.map → Room.cjs.map} +1 -1
  75. package/dist/components/internal/Room.js +9 -11
  76. package/dist/components/internal/Room.js.map +1 -1
  77. package/dist/components/internal/Tooltip.cjs +134 -0
  78. package/dist/components/internal/{Tooltip.mjs.map → Tooltip.cjs.map} +1 -1
  79. package/dist/components/internal/Tooltip.js +29 -54
  80. package/dist/components/internal/Tooltip.js.map +1 -1
  81. package/dist/components/internal/User.cjs +28 -0
  82. package/dist/components/internal/{User.mjs.map → User.cjs.map} +1 -1
  83. package/dist/components/internal/User.js +13 -15
  84. package/dist/components/internal/User.js.map +1 -1
  85. package/dist/components.cjs +48 -0
  86. package/dist/{components.mjs.map → components.cjs.map} +1 -1
  87. package/dist/components.js +9 -14
  88. package/dist/components.js.map +1 -1
  89. package/dist/config.cjs +39 -0
  90. package/dist/{config.mjs.map → config.cjs.map} +1 -1
  91. package/dist/config.js +15 -18
  92. package/dist/config.js.map +1 -1
  93. package/dist/{constants.mjs → constants.cjs} +6 -2
  94. package/dist/{constants.mjs.map → constants.cjs.map} +1 -1
  95. package/dist/constants.js +1 -5
  96. package/dist/constants.js.map +1 -1
  97. package/dist/icon.cjs +69 -0
  98. package/dist/icon.cjs.map +1 -0
  99. package/dist/icon.js +32 -68
  100. package/dist/icon.js.map +1 -1
  101. package/dist/icons/ArrowCornerDownRight.cjs +16 -0
  102. package/dist/icons/{ArrowCornerDownRight.mjs.map → ArrowCornerDownRight.cjs.map} +1 -1
  103. package/dist/icons/ArrowCornerDownRight.js +5 -7
  104. package/dist/icons/ArrowCornerDownRight.js.map +1 -1
  105. package/dist/icons/ArrowCornerUpRight.cjs +16 -0
  106. package/dist/icons/ArrowCornerUpRight.cjs.map +1 -0
  107. package/dist/icons/ArrowCornerUpRight.js +5 -7
  108. package/dist/icons/ArrowCornerUpRight.js.map +1 -1
  109. package/dist/icons/ArrowDown.cjs +16 -0
  110. package/dist/icons/ArrowDown.cjs.map +1 -0
  111. package/dist/icons/ArrowDown.js +5 -7
  112. package/dist/icons/ArrowDown.js.map +1 -1
  113. package/dist/icons/ArrowUp.cjs +16 -0
  114. package/dist/icons/ArrowUp.cjs.map +1 -0
  115. package/dist/icons/ArrowUp.js +5 -7
  116. package/dist/icons/ArrowUp.js.map +1 -1
  117. package/dist/icons/{Attachment.mjs → Attachment.cjs} +8 -6
  118. package/dist/icons/{Attachment.mjs.map → Attachment.cjs.map} +1 -1
  119. package/dist/icons/Attachment.js +5 -7
  120. package/dist/icons/Attachment.js.map +1 -1
  121. package/dist/icons/Blockquote.cjs +16 -0
  122. package/dist/icons/Blockquote.cjs.map +1 -0
  123. package/dist/icons/Blockquote.js +5 -7
  124. package/dist/icons/Blockquote.js.map +1 -1
  125. package/dist/icons/Bold.cjs +16 -0
  126. package/dist/icons/{Bold.mjs.map → Bold.cjs.map} +1 -1
  127. package/dist/icons/Bold.js +5 -7
  128. package/dist/icons/Bold.js.map +1 -1
  129. package/dist/icons/Check.cjs +16 -0
  130. package/dist/icons/Check.cjs.map +1 -0
  131. package/dist/icons/Check.js +5 -7
  132. package/dist/icons/Check.js.map +1 -1
  133. package/dist/icons/ChevronDown.cjs +16 -0
  134. package/dist/icons/{ChevronDown.mjs.map → ChevronDown.cjs.map} +1 -1
  135. package/dist/icons/ChevronDown.js +5 -7
  136. package/dist/icons/ChevronDown.js.map +1 -1
  137. package/dist/icons/ChevronLeft.cjs +16 -0
  138. package/dist/icons/{ChevronLeft.mjs.map → ChevronLeft.cjs.map} +1 -1
  139. package/dist/icons/ChevronLeft.js +5 -7
  140. package/dist/icons/ChevronLeft.js.map +1 -1
  141. package/dist/icons/ChevronRight.cjs +16 -0
  142. package/dist/icons/{ChevronRight.mjs.map → ChevronRight.cjs.map} +1 -1
  143. package/dist/icons/ChevronRight.js +5 -7
  144. package/dist/icons/ChevronRight.js.map +1 -1
  145. package/dist/icons/ChevronUp.cjs +16 -0
  146. package/dist/icons/{ChevronUp.mjs.map → ChevronUp.cjs.map} +1 -1
  147. package/dist/icons/ChevronUp.js +5 -7
  148. package/dist/icons/ChevronUp.js.map +1 -1
  149. package/dist/icons/Code.cjs +16 -0
  150. package/dist/icons/Code.cjs.map +1 -0
  151. package/dist/icons/Code.js +5 -7
  152. package/dist/icons/Code.js.map +1 -1
  153. package/dist/icons/Comment.cjs +16 -0
  154. package/dist/icons/{Comment.mjs.map → Comment.cjs.map} +1 -1
  155. package/dist/icons/Comment.js +5 -7
  156. package/dist/icons/Comment.js.map +1 -1
  157. package/dist/icons/Cross.cjs +21 -0
  158. package/dist/icons/Cross.cjs.map +1 -0
  159. package/dist/icons/Cross.js +6 -8
  160. package/dist/icons/Cross.js.map +1 -1
  161. package/dist/icons/Delete.cjs +16 -0
  162. package/dist/icons/{Delete.mjs.map → Delete.cjs.map} +1 -1
  163. package/dist/icons/Delete.js +5 -7
  164. package/dist/icons/Delete.js.map +1 -1
  165. package/dist/icons/Edit.cjs +16 -0
  166. package/dist/icons/{Edit.mjs.map → Edit.cjs.map} +1 -1
  167. package/dist/icons/Edit.js +5 -7
  168. package/dist/icons/Edit.js.map +1 -1
  169. package/dist/icons/Ellipsis.cjs +31 -0
  170. package/dist/icons/Ellipsis.cjs.map +1 -0
  171. package/dist/icons/Ellipsis.js +7 -9
  172. package/dist/icons/Ellipsis.js.map +1 -1
  173. package/dist/icons/Emoji.cjs +34 -0
  174. package/dist/icons/Emoji.cjs.map +1 -0
  175. package/dist/icons/Emoji.js +9 -11
  176. package/dist/icons/Emoji.js.map +1 -1
  177. package/dist/icons/EmojiAdd.cjs +37 -0
  178. package/dist/icons/EmojiAdd.cjs.map +1 -0
  179. package/dist/icons/EmojiAdd.js +10 -12
  180. package/dist/icons/EmojiAdd.js.map +1 -1
  181. package/dist/icons/H1.cjs +16 -0
  182. package/dist/icons/{H1.mjs.map → H1.cjs.map} +1 -1
  183. package/dist/icons/H1.js +5 -7
  184. package/dist/icons/H1.js.map +1 -1
  185. package/dist/icons/H2.cjs +16 -0
  186. package/dist/icons/H2.cjs.map +1 -0
  187. package/dist/icons/H2.js +5 -7
  188. package/dist/icons/H2.js.map +1 -1
  189. package/dist/icons/H3.cjs +16 -0
  190. package/dist/icons/{H3.mjs.map → H3.cjs.map} +1 -1
  191. package/dist/icons/H3.js +5 -7
  192. package/dist/icons/H3.js.map +1 -1
  193. package/dist/icons/Italic.cjs +16 -0
  194. package/dist/icons/{Italic.mjs.map → Italic.cjs.map} +1 -1
  195. package/dist/icons/Italic.js +5 -7
  196. package/dist/icons/Italic.js.map +1 -1
  197. package/dist/icons/Lengthen.cjs +16 -0
  198. package/dist/icons/Lengthen.cjs.map +1 -0
  199. package/dist/icons/Lengthen.js +5 -7
  200. package/dist/icons/Lengthen.js.map +1 -1
  201. package/dist/icons/ListOrdered.cjs +16 -0
  202. package/dist/icons/{ListOrdered.mjs.map → ListOrdered.cjs.map} +1 -1
  203. package/dist/icons/ListOrdered.js +5 -7
  204. package/dist/icons/ListOrdered.js.map +1 -1
  205. package/dist/icons/ListUnordered.cjs +39 -0
  206. package/dist/icons/ListUnordered.cjs.map +1 -0
  207. package/dist/icons/ListUnordered.js +10 -12
  208. package/dist/icons/ListUnordered.js.map +1 -1
  209. package/dist/icons/Mention.cjs +21 -0
  210. package/dist/icons/Mention.cjs.map +1 -0
  211. package/dist/icons/Mention.js +6 -8
  212. package/dist/icons/Mention.js.map +1 -1
  213. package/dist/icons/QuestionMark.cjs +26 -0
  214. package/dist/icons/QuestionMark.cjs.map +1 -0
  215. package/dist/icons/QuestionMark.js +7 -9
  216. package/dist/icons/QuestionMark.js.map +1 -1
  217. package/dist/icons/Redo.cjs +21 -0
  218. package/dist/icons/Redo.cjs.map +1 -0
  219. package/dist/icons/Redo.js +6 -8
  220. package/dist/icons/Redo.js.map +1 -1
  221. package/dist/icons/Resolve.cjs +23 -0
  222. package/dist/icons/Resolve.cjs.map +1 -0
  223. package/dist/icons/Resolve.js +6 -8
  224. package/dist/icons/Resolve.js.map +1 -1
  225. package/dist/icons/Resolved.cjs +25 -0
  226. package/dist/icons/Resolved.cjs.map +1 -0
  227. package/dist/icons/Resolved.js +6 -8
  228. package/dist/icons/Resolved.js.map +1 -1
  229. package/dist/icons/Restore.cjs +21 -0
  230. package/dist/icons/Restore.cjs.map +1 -0
  231. package/dist/icons/Restore.js +6 -8
  232. package/dist/icons/Restore.js.map +1 -1
  233. package/dist/icons/Search.cjs +16 -0
  234. package/dist/icons/{Search.mjs.map → Search.cjs.map} +1 -1
  235. package/dist/icons/Search.js +5 -7
  236. package/dist/icons/Search.js.map +1 -1
  237. package/dist/icons/Send.cjs +16 -0
  238. package/dist/icons/Send.cjs.map +1 -0
  239. package/dist/icons/Send.js +5 -7
  240. package/dist/icons/Send.js.map +1 -1
  241. package/dist/icons/Shorten.cjs +16 -0
  242. package/dist/icons/{Shorten.mjs.map → Shorten.cjs.map} +1 -1
  243. package/dist/icons/Shorten.js +5 -7
  244. package/dist/icons/Shorten.js.map +1 -1
  245. package/dist/icons/{Sparkles.mjs → Sparkles.cjs} +8 -6
  246. package/dist/icons/{Sparkles.mjs.map → Sparkles.cjs.map} +1 -1
  247. package/dist/icons/Sparkles.js +5 -7
  248. package/dist/icons/Sparkles.js.map +1 -1
  249. package/dist/icons/SparklesText.cjs +21 -0
  250. package/dist/icons/{SparklesText.mjs.map → SparklesText.cjs.map} +1 -1
  251. package/dist/icons/SparklesText.js +6 -8
  252. package/dist/icons/SparklesText.js.map +1 -1
  253. package/dist/icons/Spinner.cjs +17 -0
  254. package/dist/icons/Spinner.cjs.map +1 -0
  255. package/dist/icons/Spinner.js +5 -7
  256. package/dist/icons/Spinner.js.map +1 -1
  257. package/dist/icons/Strikethrough.cjs +16 -0
  258. package/dist/icons/{Strikethrough.mjs.map → Strikethrough.cjs.map} +1 -1
  259. package/dist/icons/Strikethrough.js +5 -7
  260. package/dist/icons/Strikethrough.js.map +1 -1
  261. package/dist/icons/Text.cjs +16 -0
  262. package/dist/icons/{Text.mjs.map → Text.cjs.map} +1 -1
  263. package/dist/icons/Text.js +5 -7
  264. package/dist/icons/Text.js.map +1 -1
  265. package/dist/icons/Translate.cjs +21 -0
  266. package/dist/icons/{Translate.mjs.map → Translate.cjs.map} +1 -1
  267. package/dist/icons/Translate.js +6 -8
  268. package/dist/icons/Translate.js.map +1 -1
  269. package/dist/icons/Underline.cjs +16 -0
  270. package/dist/icons/Underline.cjs.map +1 -0
  271. package/dist/icons/Underline.js +5 -7
  272. package/dist/icons/Underline.js.map +1 -1
  273. package/dist/icons/Undo.cjs +21 -0
  274. package/dist/icons/Undo.cjs.map +1 -0
  275. package/dist/icons/Undo.js +6 -8
  276. package/dist/icons/Undo.js.map +1 -1
  277. package/dist/icons/Warning.cjs +23 -0
  278. package/dist/icons/Warning.cjs.map +1 -0
  279. package/dist/icons/Warning.js +6 -8
  280. package/dist/icons/Warning.js.map +1 -1
  281. package/dist/icons/index.cjs +96 -0
  282. package/dist/icons/index.cjs.map +1 -0
  283. package/dist/icons/index.js +45 -95
  284. package/dist/icons/index.js.map +1 -1
  285. package/dist/index.cjs +28 -0
  286. package/dist/{index.mjs.map → index.cjs.map} +1 -1
  287. package/dist/index.js +14 -26
  288. package/dist/index.js.map +1 -1
  289. package/dist/{overrides.mjs → overrides.cjs} +32 -27
  290. package/dist/{overrides.mjs.map → overrides.cjs.map} +1 -1
  291. package/dist/overrides.js +26 -31
  292. package/dist/overrides.js.map +1 -1
  293. package/dist/primitives/Comment/{index.mjs → index.cjs} +35 -31
  294. package/dist/primitives/Comment/{index.mjs.map → index.cjs.map} +1 -1
  295. package/dist/primitives/Comment/index.js +30 -34
  296. package/dist/primitives/Comment/index.js.map +1 -1
  297. package/dist/primitives/Comment/{utils.mjs → utils.cjs} +7 -2
  298. package/dist/primitives/Comment/{utils.mjs.map → utils.cjs.map} +1 -1
  299. package/dist/primitives/Comment/utils.js +1 -6
  300. package/dist/primitives/Comment/utils.js.map +1 -1
  301. package/dist/primitives/Composer/contexts.cjs +60 -0
  302. package/dist/primitives/Composer/{contexts.mjs.map → contexts.cjs.map} +1 -1
  303. package/dist/primitives/Composer/contexts.js +18 -30
  304. package/dist/primitives/Composer/contexts.js.map +1 -1
  305. package/dist/primitives/Composer/{index.mjs → index.cjs} +305 -273
  306. package/dist/primitives/Composer/{index.mjs.map → index.cjs.map} +1 -1
  307. package/dist/primitives/Composer/index.js +272 -304
  308. package/dist/primitives/Composer/index.js.map +1 -1
  309. package/dist/primitives/Composer/{utils.mjs → utils.cjs} +79 -64
  310. package/dist/primitives/Composer/{utils.mjs.map → utils.cjs.map} +1 -1
  311. package/dist/primitives/Composer/utils.js +63 -78
  312. package/dist/primitives/Composer/utils.js.map +1 -1
  313. package/dist/primitives/EmojiPicker/contexts.cjs +19 -0
  314. package/dist/primitives/EmojiPicker/{contexts.mjs.map → contexts.cjs.map} +1 -1
  315. package/dist/primitives/EmojiPicker/contexts.js +6 -9
  316. package/dist/primitives/EmojiPicker/contexts.js.map +1 -1
  317. package/dist/primitives/EmojiPicker/{index.mjs → index.cjs} +96 -92
  318. package/dist/primitives/EmojiPicker/{index.mjs.map → index.cjs.map} +1 -1
  319. package/dist/primitives/EmojiPicker/index.js +91 -95
  320. package/dist/primitives/EmojiPicker/index.js.map +1 -1
  321. package/dist/primitives/EmojiPicker/{utils.mjs → utils.cjs} +14 -10
  322. package/dist/primitives/EmojiPicker/{utils.mjs.map → utils.cjs.map} +1 -1
  323. package/dist/primitives/EmojiPicker/utils.js +9 -13
  324. package/dist/primitives/EmojiPicker/utils.js.map +1 -1
  325. package/dist/primitives/FileSize.cjs +36 -0
  326. package/dist/primitives/{FileSize.mjs.map → FileSize.cjs.map} +1 -1
  327. package/dist/primitives/FileSize.js +10 -12
  328. package/dist/primitives/FileSize.js.map +1 -1
  329. package/dist/primitives/{Timestamp.mjs → Timestamp.cjs} +27 -25
  330. package/dist/primitives/{Timestamp.mjs.map → Timestamp.cjs.map} +1 -1
  331. package/dist/primitives/Timestamp.js +24 -26
  332. package/dist/primitives/Timestamp.js.map +1 -1
  333. package/dist/primitives/index.cjs +20 -0
  334. package/dist/primitives/index.cjs.map +1 -0
  335. package/dist/primitives/index.js +10 -19
  336. package/dist/primitives/index.js.map +1 -1
  337. package/dist/primitives/internal/Emoji.cjs +32 -0
  338. package/dist/primitives/internal/{Emoji.mjs.map → Emoji.cjs.map} +1 -1
  339. package/dist/primitives/internal/Emoji.js +9 -11
  340. package/dist/primitives/internal/Emoji.js.map +1 -1
  341. package/dist/shared.cjs +13 -0
  342. package/dist/{shared.mjs.map → shared.cjs.map} +1 -1
  343. package/dist/shared.js +6 -8
  344. package/dist/shared.js.map +1 -1
  345. package/dist/slate/plugins/{auto-formatting.mjs → auto-formatting.cjs} +18 -16
  346. package/dist/slate/plugins/{auto-formatting.mjs.map → auto-formatting.cjs.map} +1 -1
  347. package/dist/slate/plugins/auto-formatting.js +15 -17
  348. package/dist/slate/plugins/auto-formatting.js.map +1 -1
  349. package/dist/slate/plugins/{auto-links.mjs → auto-links.cjs} +43 -40
  350. package/dist/slate/plugins/{auto-links.mjs.map → auto-links.cjs.map} +1 -1
  351. package/dist/slate/plugins/auto-links.js +39 -42
  352. package/dist/slate/plugins/auto-links.js.map +1 -1
  353. package/dist/slate/plugins/{custom-links.mjs → custom-links.cjs} +19 -16
  354. package/dist/slate/plugins/{custom-links.mjs.map → custom-links.cjs.map} +1 -1
  355. package/dist/slate/plugins/custom-links.js +15 -18
  356. package/dist/slate/plugins/custom-links.js.map +1 -1
  357. package/dist/slate/plugins/empty-clear-formatting.cjs +18 -0
  358. package/dist/slate/plugins/{empty-clear-formatting.mjs.map → empty-clear-formatting.cjs.map} +1 -1
  359. package/dist/slate/plugins/empty-clear-formatting.js +5 -7
  360. package/dist/slate/plugins/empty-clear-formatting.js.map +1 -1
  361. package/dist/slate/plugins/mentions.cjs +129 -0
  362. package/dist/slate/plugins/{mentions.mjs.map → mentions.cjs.map} +1 -1
  363. package/dist/slate/plugins/mentions.js +35 -42
  364. package/dist/slate/plugins/mentions.js.map +1 -1
  365. package/dist/slate/plugins/normalize.cjs +28 -0
  366. package/dist/slate/plugins/normalize.cjs.map +1 -0
  367. package/dist/slate/plugins/normalize.js +8 -10
  368. package/dist/slate/plugins/normalize.js.map +1 -1
  369. package/dist/slate/plugins/{paste.mjs → paste.cjs} +14 -12
  370. package/dist/slate/plugins/{paste.mjs.map → paste.cjs.map} +1 -1
  371. package/dist/slate/plugins/paste.js +11 -13
  372. package/dist/slate/plugins/paste.js.map +1 -1
  373. package/dist/slate/utils/get-character.cjs +50 -0
  374. package/dist/slate/utils/{get-character.mjs.map → get-character.cjs.map} +1 -1
  375. package/dist/slate/utils/get-character.js +10 -13
  376. package/dist/slate/utils/get-character.js.map +1 -1
  377. package/dist/slate/utils/get-dom-range.cjs +17 -0
  378. package/dist/slate/utils/{get-dom-range.mjs.map → get-dom-range.cjs.map} +1 -1
  379. package/dist/slate/utils/get-dom-range.js +3 -5
  380. package/dist/slate/utils/get-dom-range.js.map +1 -1
  381. package/dist/slate/utils/{get-match-range.mjs → get-match-range.cjs} +14 -12
  382. package/dist/slate/utils/{get-match-range.mjs.map → get-match-range.cjs.map} +1 -1
  383. package/dist/slate/utils/get-match-range.js +11 -13
  384. package/dist/slate/utils/get-match-range.js.map +1 -1
  385. package/dist/slate/utils/is-empty-string.cjs +8 -0
  386. package/dist/slate/utils/is-empty-string.cjs.map +1 -0
  387. package/dist/slate/utils/is-empty-string.js +1 -3
  388. package/dist/slate/utils/is-empty-string.js.map +1 -1
  389. package/dist/slate/utils/is-empty.cjs +27 -0
  390. package/dist/slate/utils/{is-empty.mjs.map → is-empty.cjs.map} +1 -1
  391. package/dist/slate/utils/is-empty.js +8 -10
  392. package/dist/slate/utils/is-empty.js.map +1 -1
  393. package/dist/slate/utils/{is-text.mjs → is-text.cjs} +5 -2
  394. package/dist/slate/utils/{is-text.mjs.map → is-text.cjs.map} +1 -1
  395. package/dist/slate/utils/is-text.js +1 -4
  396. package/dist/slate/utils/is-text.js.map +1 -1
  397. package/dist/slate/utils/{is-whitespace-character.mjs → is-whitespace-character.cjs} +4 -2
  398. package/dist/slate/utils/{is-whitespace-character.mjs.map → is-whitespace-character.cjs.map} +1 -1
  399. package/dist/slate/utils/is-whitespace-character.js +1 -3
  400. package/dist/slate/utils/is-whitespace-character.js.map +1 -1
  401. package/dist/slate/utils/marks.cjs +62 -0
  402. package/dist/slate/utils/{marks.mjs.map → marks.cjs.map} +1 -1
  403. package/dist/slate/utils/marks.js +12 -19
  404. package/dist/slate/utils/marks.js.map +1 -1
  405. package/dist/slate/utils/selection-contains-inlines.cjs +36 -0
  406. package/dist/slate/utils/selection-contains-inlines.cjs.map +1 -0
  407. package/dist/slate/utils/selection-contains-inlines.js +7 -9
  408. package/dist/slate/utils/selection-contains-inlines.js.map +1 -1
  409. package/dist/utils/{Persist.mjs → Persist.cjs} +26 -22
  410. package/dist/utils/{Persist.mjs.map → Persist.cjs.map} +1 -1
  411. package/dist/utils/Persist.js +21 -25
  412. package/dist/utils/Persist.js.map +1 -1
  413. package/dist/utils/Portal.cjs +29 -0
  414. package/dist/utils/{Portal.mjs.map → Portal.cjs.map} +1 -1
  415. package/dist/utils/Portal.js +9 -11
  416. package/dist/utils/Portal.js.map +1 -1
  417. package/dist/utils/{capitalize.mjs → capitalize.cjs} +4 -2
  418. package/dist/utils/capitalize.cjs.map +1 -0
  419. package/dist/utils/capitalize.js +1 -3
  420. package/dist/utils/capitalize.js.map +1 -1
  421. package/dist/utils/{clamp.mjs → clamp.cjs} +4 -2
  422. package/dist/utils/clamp.cjs.map +1 -0
  423. package/dist/utils/clamp.js +1 -3
  424. package/dist/utils/clamp.js.map +1 -1
  425. package/dist/utils/{class-names.mjs → class-names.cjs} +4 -2
  426. package/dist/utils/{class-names.mjs.map → class-names.cjs.map} +1 -1
  427. package/dist/utils/class-names.js +1 -3
  428. package/dist/utils/class-names.js.map +1 -1
  429. package/dist/utils/{data-transfer.mjs → data-transfer.cjs} +6 -4
  430. package/dist/utils/{data-transfer.mjs.map → data-transfer.cjs.map} +1 -1
  431. package/dist/utils/data-transfer.js +3 -5
  432. package/dist/utils/data-transfer.js.map +1 -1
  433. package/dist/utils/{download.mjs → download.cjs} +4 -2
  434. package/dist/utils/download.cjs.map +1 -0
  435. package/dist/utils/download.js +1 -3
  436. package/dist/utils/download.js.map +1 -1
  437. package/dist/utils/exists.cjs +8 -0
  438. package/dist/utils/exists.cjs.map +1 -0
  439. package/dist/utils/exists.js +1 -3
  440. package/dist/utils/exists.js.map +1 -1
  441. package/dist/utils/{find-last-index.mjs → find-last-index.cjs} +4 -2
  442. package/dist/utils/find-last-index.cjs.map +1 -0
  443. package/dist/utils/find-last-index.js +1 -3
  444. package/dist/utils/find-last-index.js.map +1 -1
  445. package/dist/utils/{format-file-size.mjs → format-file-size.cjs} +6 -4
  446. package/dist/utils/format-file-size.cjs.map +1 -0
  447. package/dist/utils/format-file-size.js +3 -5
  448. package/dist/utils/format-file-size.js.map +1 -1
  449. package/dist/utils/{get-initials.mjs → get-initials.cjs} +4 -2
  450. package/dist/utils/get-initials.cjs.map +1 -0
  451. package/dist/utils/get-initials.js +1 -3
  452. package/dist/utils/get-initials.js.map +1 -1
  453. package/dist/utils/intl.cjs +30 -0
  454. package/dist/utils/{intl.mjs.map → intl.cjs.map} +1 -1
  455. package/dist/utils/intl.js +6 -11
  456. package/dist/utils/intl.js.map +1 -1
  457. package/dist/utils/{is-apple.mjs → is-apple.cjs} +4 -2
  458. package/dist/utils/is-apple.cjs.map +1 -0
  459. package/dist/utils/is-apple.js +1 -3
  460. package/dist/utils/is-apple.js.map +1 -1
  461. package/dist/utils/{is-key.mjs → is-key.cjs} +6 -4
  462. package/dist/utils/{is-key.mjs.map → is-key.cjs.map} +1 -1
  463. package/dist/utils/is-key.js +3 -5
  464. package/dist/utils/is-key.js.map +1 -1
  465. package/dist/utils/{memoize.mjs → memoize.cjs} +6 -4
  466. package/dist/utils/memoize.cjs.map +1 -0
  467. package/dist/utils/memoize.js +3 -5
  468. package/dist/utils/memoize.js.map +1 -1
  469. package/dist/utils/{pluralize.mjs → pluralize.cjs} +4 -2
  470. package/dist/utils/pluralize.cjs.map +1 -0
  471. package/dist/utils/pluralize.js +1 -3
  472. package/dist/utils/pluralize.js.map +1 -1
  473. package/dist/utils/{request-idle-callback.mjs → request-idle-callback.cjs} +5 -2
  474. package/dist/utils/{request-idle-callback.mjs.map → request-idle-callback.cjs.map} +1 -1
  475. package/dist/utils/request-idle-callback.js +1 -4
  476. package/dist/utils/request-idle-callback.js.map +1 -1
  477. package/dist/utils/{request-submit.mjs → request-submit.cjs} +4 -2
  478. package/dist/utils/request-submit.cjs.map +1 -0
  479. package/dist/utils/request-submit.js +1 -3
  480. package/dist/utils/request-submit.js.map +1 -1
  481. package/dist/utils/{url.mjs → url.cjs} +4 -2
  482. package/dist/utils/url.cjs.map +1 -0
  483. package/dist/utils/url.js +1 -3
  484. package/dist/utils/url.js.map +1 -1
  485. package/dist/utils/{use-controllable-state.mjs → use-controllable-state.cjs} +11 -9
  486. package/dist/utils/{use-controllable-state.mjs.map → use-controllable-state.cjs.map} +1 -1
  487. package/dist/utils/use-controllable-state.js +8 -10
  488. package/dist/utils/use-controllable-state.js.map +1 -1
  489. package/dist/utils/use-index.cjs +32 -0
  490. package/dist/utils/{use-index.mjs.map → use-index.cjs.map} +1 -1
  491. package/dist/utils/use-index.js +11 -13
  492. package/dist/utils/use-index.js.map +1 -1
  493. package/dist/utils/use-initial.cjs +11 -0
  494. package/dist/utils/{use-initial.mjs.map → use-initial.cjs.map} +1 -1
  495. package/dist/utils/use-initial.js +3 -5
  496. package/dist/utils/use-initial.js.map +1 -1
  497. package/dist/utils/{use-interval.mjs → use-interval.cjs} +8 -6
  498. package/dist/utils/use-interval.cjs.map +1 -0
  499. package/dist/utils/use-interval.js +5 -7
  500. package/dist/utils/use-interval.js.map +1 -1
  501. package/dist/utils/use-latest.cjs +14 -0
  502. package/dist/utils/{use-latest.mjs.map → use-latest.cjs.map} +1 -1
  503. package/dist/utils/use-latest.js +4 -6
  504. package/dist/utils/use-latest.js.map +1 -1
  505. package/dist/utils/use-observable.cjs +15 -0
  506. package/dist/utils/{use-observable.mjs.map → use-observable.cjs.map} +1 -1
  507. package/dist/utils/use-observable.js +5 -7
  508. package/dist/utils/use-observable.js.map +1 -1
  509. package/dist/utils/{use-refs.mjs → use-refs.cjs} +6 -4
  510. package/dist/utils/{use-refs.mjs.map → use-refs.cjs.map} +1 -1
  511. package/dist/utils/use-refs.js +3 -5
  512. package/dist/utils/use-refs.js.map +1 -1
  513. package/dist/utils/use-rerender.cjs +14 -0
  514. package/dist/utils/{use-rerender.mjs.map → use-rerender.cjs.map} +1 -1
  515. package/dist/utils/use-rerender.js +3 -5
  516. package/dist/utils/use-rerender.js.map +1 -1
  517. package/dist/utils/{use-visible.mjs → use-visible.cjs} +11 -8
  518. package/dist/utils/{use-visible.mjs.map → use-visible.cjs.map} +1 -1
  519. package/dist/utils/use-visible.js +7 -10
  520. package/dist/utils/use-visible.js.map +1 -1
  521. package/dist/utils/{use-window-focus.mjs → use-window-focus.cjs} +6 -4
  522. package/dist/utils/use-window-focus.cjs.map +1 -0
  523. package/dist/utils/use-window-focus.js +3 -5
  524. package/dist/utils/use-window-focus.js.map +1 -1
  525. package/dist/utils/{visually-hidden.mjs → visually-hidden.cjs} +4 -2
  526. package/dist/utils/visually-hidden.cjs.map +1 -0
  527. package/dist/utils/visually-hidden.js +1 -3
  528. package/dist/utils/visually-hidden.js.map +1 -1
  529. package/dist/utils/{wrap.mjs → wrap.cjs} +4 -2
  530. package/dist/utils/wrap.cjs.map +1 -0
  531. package/dist/utils/wrap.js +1 -3
  532. package/dist/utils/wrap.js.map +1 -1
  533. package/dist/version.cjs +10 -0
  534. package/dist/{version.mjs.map → version.cjs.map} +1 -1
  535. package/dist/version.js +3 -7
  536. package/dist/version.js.map +1 -1
  537. package/package.json +28 -27
  538. package/styles/dark/attributes.css.d.cts +1 -0
  539. package/styles/dark/media-query.css.d.cts +1 -0
  540. package/styles.css.d.cts +1 -0
  541. package/dist/_private/index.mjs +0 -55
  542. package/dist/_private/index.mjs.map +0 -1
  543. package/dist/components/HistoryVersionSummary.mjs +0 -43
  544. package/dist/components/HistoryVersionSummaryList.mjs +0 -23
  545. package/dist/components/InboxNotificationList.mjs +0 -40
  546. package/dist/components/internal/Avatar.mjs +0 -46
  547. package/dist/components/internal/Button.mjs +0 -76
  548. package/dist/components/internal/Dropdown.mjs +0 -67
  549. package/dist/components/internal/Emoji.mjs +0 -17
  550. package/dist/components/internal/EmojiPicker.mjs +0 -184
  551. package/dist/components/internal/List.mjs +0 -34
  552. package/dist/components/internal/Room.mjs +0 -22
  553. package/dist/components/internal/Tooltip.mjs +0 -109
  554. package/dist/components/internal/User.mjs +0 -26
  555. package/dist/components.mjs +0 -43
  556. package/dist/config.mjs +0 -36
  557. package/dist/icon.mjs +0 -33
  558. package/dist/icon.mjs.map +0 -1
  559. package/dist/icons/ArrowCornerDownRight.mjs +0 -14
  560. package/dist/icons/ArrowCornerUpRight.mjs +0 -14
  561. package/dist/icons/ArrowCornerUpRight.mjs.map +0 -1
  562. package/dist/icons/ArrowDown.mjs +0 -14
  563. package/dist/icons/ArrowDown.mjs.map +0 -1
  564. package/dist/icons/ArrowUp.mjs +0 -14
  565. package/dist/icons/ArrowUp.mjs.map +0 -1
  566. package/dist/icons/Blockquote.mjs +0 -14
  567. package/dist/icons/Blockquote.mjs.map +0 -1
  568. package/dist/icons/Bold.mjs +0 -14
  569. package/dist/icons/Check.mjs +0 -14
  570. package/dist/icons/Check.mjs.map +0 -1
  571. package/dist/icons/ChevronDown.mjs +0 -14
  572. package/dist/icons/ChevronLeft.mjs +0 -14
  573. package/dist/icons/ChevronRight.mjs +0 -14
  574. package/dist/icons/ChevronUp.mjs +0 -14
  575. package/dist/icons/Code.mjs +0 -14
  576. package/dist/icons/Code.mjs.map +0 -1
  577. package/dist/icons/Comment.mjs +0 -14
  578. package/dist/icons/Cross.mjs +0 -19
  579. package/dist/icons/Cross.mjs.map +0 -1
  580. package/dist/icons/Delete.mjs +0 -14
  581. package/dist/icons/Edit.mjs +0 -14
  582. package/dist/icons/Ellipsis.mjs +0 -29
  583. package/dist/icons/Ellipsis.mjs.map +0 -1
  584. package/dist/icons/Emoji.mjs +0 -32
  585. package/dist/icons/Emoji.mjs.map +0 -1
  586. package/dist/icons/EmojiAdd.mjs +0 -35
  587. package/dist/icons/EmojiAdd.mjs.map +0 -1
  588. package/dist/icons/H1.mjs +0 -14
  589. package/dist/icons/H2.mjs +0 -14
  590. package/dist/icons/H2.mjs.map +0 -1
  591. package/dist/icons/H3.mjs +0 -14
  592. package/dist/icons/Italic.mjs +0 -14
  593. package/dist/icons/Lengthen.mjs +0 -14
  594. package/dist/icons/Lengthen.mjs.map +0 -1
  595. package/dist/icons/ListOrdered.mjs +0 -14
  596. package/dist/icons/ListUnordered.mjs +0 -37
  597. package/dist/icons/ListUnordered.mjs.map +0 -1
  598. package/dist/icons/Mention.mjs +0 -19
  599. package/dist/icons/Mention.mjs.map +0 -1
  600. package/dist/icons/QuestionMark.mjs +0 -24
  601. package/dist/icons/QuestionMark.mjs.map +0 -1
  602. package/dist/icons/Redo.mjs +0 -19
  603. package/dist/icons/Redo.mjs.map +0 -1
  604. package/dist/icons/Resolve.mjs +0 -21
  605. package/dist/icons/Resolve.mjs.map +0 -1
  606. package/dist/icons/Resolved.mjs +0 -23
  607. package/dist/icons/Resolved.mjs.map +0 -1
  608. package/dist/icons/Restore.mjs +0 -19
  609. package/dist/icons/Restore.mjs.map +0 -1
  610. package/dist/icons/Search.mjs +0 -14
  611. package/dist/icons/Send.mjs +0 -14
  612. package/dist/icons/Send.mjs.map +0 -1
  613. package/dist/icons/Shorten.mjs +0 -14
  614. package/dist/icons/SparklesText.mjs +0 -19
  615. package/dist/icons/Spinner.mjs +0 -15
  616. package/dist/icons/Spinner.mjs.map +0 -1
  617. package/dist/icons/Strikethrough.mjs +0 -14
  618. package/dist/icons/Text.mjs +0 -14
  619. package/dist/icons/Translate.mjs +0 -19
  620. package/dist/icons/Underline.mjs +0 -14
  621. package/dist/icons/Underline.mjs.map +0 -1
  622. package/dist/icons/Undo.mjs +0 -19
  623. package/dist/icons/Undo.mjs.map +0 -1
  624. package/dist/icons/Warning.mjs +0 -21
  625. package/dist/icons/Warning.mjs.map +0 -1
  626. package/dist/icons/index.mjs +0 -46
  627. package/dist/icons/index.mjs.map +0 -1
  628. package/dist/index.mjs +0 -16
  629. package/dist/primitives/Composer/contexts.mjs +0 -48
  630. package/dist/primitives/EmojiPicker/contexts.mjs +0 -16
  631. package/dist/primitives/FileSize.mjs +0 -34
  632. package/dist/primitives/index.mjs +0 -11
  633. package/dist/primitives/index.mjs.map +0 -1
  634. package/dist/primitives/internal/Emoji.mjs +0 -30
  635. package/dist/shared.mjs +0 -11
  636. package/dist/slate/plugins/empty-clear-formatting.mjs +0 -16
  637. package/dist/slate/plugins/mentions.mjs +0 -122
  638. package/dist/slate/plugins/normalize.mjs +0 -26
  639. package/dist/slate/plugins/normalize.mjs.map +0 -1
  640. package/dist/slate/utils/get-character.mjs +0 -47
  641. package/dist/slate/utils/get-dom-range.mjs +0 -15
  642. package/dist/slate/utils/is-empty-string.mjs +0 -6
  643. package/dist/slate/utils/is-empty-string.mjs.map +0 -1
  644. package/dist/slate/utils/is-empty.mjs +0 -25
  645. package/dist/slate/utils/marks.mjs +0 -55
  646. package/dist/slate/utils/selection-contains-inlines.mjs +0 -34
  647. package/dist/slate/utils/selection-contains-inlines.mjs.map +0 -1
  648. package/dist/utils/Portal.mjs +0 -27
  649. package/dist/utils/capitalize.mjs.map +0 -1
  650. package/dist/utils/clamp.mjs.map +0 -1
  651. package/dist/utils/download.mjs.map +0 -1
  652. package/dist/utils/exists.mjs +0 -6
  653. package/dist/utils/exists.mjs.map +0 -1
  654. package/dist/utils/find-last-index.mjs.map +0 -1
  655. package/dist/utils/format-file-size.mjs.map +0 -1
  656. package/dist/utils/get-initials.mjs.map +0 -1
  657. package/dist/utils/intl.mjs +0 -25
  658. package/dist/utils/is-apple.mjs.map +0 -1
  659. package/dist/utils/memoize.mjs.map +0 -1
  660. package/dist/utils/pluralize.mjs.map +0 -1
  661. package/dist/utils/request-submit.mjs.map +0 -1
  662. package/dist/utils/url.mjs.map +0 -1
  663. package/dist/utils/use-index.mjs +0 -30
  664. package/dist/utils/use-initial.mjs +0 -9
  665. package/dist/utils/use-interval.mjs.map +0 -1
  666. package/dist/utils/use-latest.mjs +0 -12
  667. package/dist/utils/use-observable.mjs +0 -13
  668. package/dist/utils/use-rerender.mjs +0 -12
  669. package/dist/utils/use-window-focus.mjs.map +0 -1
  670. package/dist/utils/visually-hidden.mjs.map +0 -1
  671. package/dist/utils/wrap.mjs.map +0 -1
  672. package/dist/version.mjs +0 -6
  673. /package/dist/_private/{index.d.mts → index.d.cts} +0 -0
  674. /package/dist/{index.d.mts → index.d.cts} +0 -0
  675. /package/dist/primitives/{index.d.mts → index.d.cts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"InboxNotification.js","sources":["../../src/components/InboxNotification.tsx"],"sourcesContent":["\"use client\";\n\nimport type {\n InboxNotificationCustomData,\n InboxNotificationData,\n InboxNotificationTextMentionData,\n InboxNotificationThreadData,\n KDAD,\n} from \"@liveblocks/core\";\nimport { assertNever, console } from \"@liveblocks/core\";\nimport {\n useDeleteInboxNotification,\n useInboxNotificationThread,\n useMarkInboxNotificationAsRead,\n useRoomInfo,\n} from \"@liveblocks/react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { TooltipProvider } from \"@radix-ui/react-tooltip\";\nimport type {\n ComponentProps,\n ComponentPropsWithoutRef,\n ComponentType,\n MouseEvent as ReactMouseEvent,\n ReactNode,\n SyntheticEvent,\n} from \"react\";\nimport { forwardRef, useCallback, useMemo, useState } from \"react\";\n\nimport type { GlobalComponents } from \"../components\";\nimport { useComponents } from \"../components\";\nimport { CheckIcon } from \"../icons/Check\";\nimport { DeleteIcon } from \"../icons/Delete\";\nimport { EllipsisIcon } from \"../icons/Ellipsis\";\nimport { WarningIcon } from \"../icons/Warning\";\nimport type {\n CommentOverrides,\n GlobalOverrides,\n InboxNotificationOverrides,\n} from \"../overrides\";\nimport { useOverrides } from \"../overrides\";\nimport { Timestamp } from \"../primitives/Timestamp\";\nimport { useCurrentUserId } from \"../shared\";\nimport type { SlotProp } from \"../types\";\nimport { classNames } from \"../utils/class-names\";\nimport { generateURL } from \"../utils/url\";\nimport { Avatar, type AvatarProps } from \"./internal/Avatar\";\nimport { Button } from \"./internal/Button\";\nimport { Dropdown, DropdownItem, DropdownTrigger } from \"./internal/Dropdown\";\nimport {\n generateInboxNotificationThreadContents,\n INBOX_NOTIFICATION_THREAD_MAX_COMMENTS,\n InboxNotificationComment,\n} from \"./internal/InboxNotificationThread\";\nimport { List } from \"./internal/List\";\nimport { Room } from \"./internal/Room\";\nimport { Tooltip } from \"./internal/Tooltip\";\nimport { User } from \"./internal/User\";\n\ntype ComponentTypeWithRef<\n T extends keyof JSX.IntrinsicElements,\n P,\n> = ComponentType<P & Pick<ComponentProps<T>, \"ref\">>;\n\ntype InboxNotificationKinds<KS extends KDAD = KDAD> = {\n // For some reason, we cannot directly use KDAD in the mapped type line\n // below, because it will result in '{}' rather than picking up the\n // definition from the user-provided 'ActivitiesData'. Might be an internal\n // TS optimization, so we're making it a param to defer the resolution.\n [K in KS]: ComponentTypeWithRef<\"a\", InboxNotificationCustomKindProps<K>>;\n} & {\n thread: ComponentTypeWithRef<\"a\", InboxNotificationThreadKindProps>;\n textMention: ComponentTypeWithRef<\"a\", InboxNotificationTextMentionKindProps>;\n};\n\ninterface InboxNotificationSharedProps {\n /**\n * How to show or hide the actions.\n */\n showActions?: boolean | \"hover\";\n}\n\nexport interface InboxNotificationProps\n extends Omit<ComponentPropsWithoutRef<\"a\">, \"title\">,\n InboxNotificationSharedProps {\n /**\n * The inbox notification to display.\n */\n inboxNotification: InboxNotificationData;\n\n /**\n * Override specific kinds of inbox notifications.\n */\n kinds?: Partial<InboxNotificationKinds>;\n\n /**\n * Override the component's strings.\n */\n overrides?: Partial<\n GlobalOverrides & InboxNotificationOverrides & CommentOverrides\n >;\n\n /**\n * Override the component's components.\n */\n components?: Partial<GlobalComponents>;\n}\n\nexport interface InboxNotificationThreadProps\n extends Omit<InboxNotificationProps, \"kinds\" | \"children\">,\n InboxNotificationSharedProps {\n /**\n * The inbox notification to display.\n */\n inboxNotification: InboxNotificationThreadData;\n\n /**\n * Whether to show the room name in the title.\n */\n showRoomName?: boolean;\n\n /**\n * Whether to show reactions.\n */\n showReactions?: boolean;\n\n /**\n * Whether to show attachments.\n */\n showAttachments?: boolean;\n}\n\nexport interface InboxNotificationTextMentionProps\n extends Omit<InboxNotificationProps, \"kinds\">,\n InboxNotificationSharedProps {\n /**\n * The inbox notification to display.\n */\n inboxNotification: InboxNotificationTextMentionData;\n\n /**\n * Whether to show the room name in the title.\n */\n showRoomName?: boolean;\n}\n\nexport interface InboxNotificationCustomProps\n extends Omit<InboxNotificationProps, \"kinds\">,\n InboxNotificationSharedProps,\n SlotProp {\n /**\n * The inbox notification to display.\n */\n inboxNotification: InboxNotificationCustomData;\n\n /**\n * The inbox notification's content.\n */\n children: ReactNode;\n\n /**\n * The inbox notification's title.\n */\n title: ReactNode;\n\n /**\n * The inbox notification's aside content.\n * Can be combined with `InboxNotification.Icon` or `InboxNotification.Avatar` to easily follow default styles.\n */\n aside?: ReactNode;\n\n /**\n * Whether to mark the inbox notification as read when clicked.\n */\n markAsReadOnClick?: boolean;\n}\n\nexport type InboxNotificationThreadKindProps = Omit<\n InboxNotificationProps,\n \"kinds\"\n> & {\n inboxNotification: InboxNotificationThreadData;\n};\n\nexport type InboxNotificationTextMentionKindProps = Omit<\n InboxNotificationProps,\n \"kinds\"\n> & {\n inboxNotification: InboxNotificationTextMentionData;\n};\n\nexport type InboxNotificationCustomKindProps<K extends KDAD = KDAD> = Omit<\n InboxNotificationProps,\n \"kinds\"\n> & {\n inboxNotification: InboxNotificationCustomData<K>;\n};\n\ninterface InboxNotificationLayoutProps\n extends Omit<ComponentPropsWithoutRef<\"a\">, \"title\">,\n InboxNotificationSharedProps,\n SlotProp {\n inboxNotification: InboxNotificationData;\n aside: ReactNode;\n title: ReactNode;\n date: Date | string | number;\n unread?: boolean;\n overrides?: Partial<GlobalOverrides & InboxNotificationOverrides>;\n components?: Partial<GlobalComponents>;\n markAsReadOnClick?: boolean;\n}\n\nexport type InboxNotificationIconProps = ComponentProps<\"div\">;\n\nexport type InboxNotificationAvatarProps = AvatarProps;\n\nconst InboxNotificationLayout = forwardRef<\n HTMLAnchorElement,\n InboxNotificationLayoutProps\n>(\n (\n {\n inboxNotification,\n children,\n aside,\n title,\n date,\n unread,\n markAsReadOnClick,\n onClick,\n href,\n showActions,\n overrides,\n components,\n className,\n asChild,\n ...props\n },\n forwardedRef\n ) => {\n const $ = useOverrides(overrides);\n const { Anchor } = useComponents(components);\n const Component = asChild ? Slot : Anchor;\n const [isMoreActionOpen, setMoreActionOpen] = useState(false);\n const markInboxNotificationAsRead = useMarkInboxNotificationAsRead();\n const deleteInboxNotification = useDeleteInboxNotification();\n\n const handleClick = useCallback(\n (event: ReactMouseEvent<HTMLAnchorElement, MouseEvent>) => {\n onClick?.(event);\n\n const shouldMarkAsReadOnClick = markAsReadOnClick ?? Boolean(href);\n\n if (unread && shouldMarkAsReadOnClick) {\n markInboxNotificationAsRead(inboxNotification.id);\n }\n },\n [\n href,\n inboxNotification.id,\n markAsReadOnClick,\n markInboxNotificationAsRead,\n onClick,\n unread,\n ]\n );\n\n const stopPropagation = useCallback((event: SyntheticEvent) => {\n event.stopPropagation();\n }, []);\n\n const preventDefaultAndStopPropagation = useCallback(\n (event: SyntheticEvent) => {\n event.preventDefault();\n event.stopPropagation();\n },\n []\n );\n\n const handleMoreClick = useCallback((event: ReactMouseEvent) => {\n event.preventDefault();\n event.stopPropagation();\n setMoreActionOpen((open) => !open);\n }, []);\n\n const handleMarkAsRead = useCallback(() => {\n markInboxNotificationAsRead(inboxNotification.id);\n }, [inboxNotification.id, markInboxNotificationAsRead]);\n\n const handleDelete = useCallback(() => {\n deleteInboxNotification(inboxNotification.id);\n }, [inboxNotification.id, deleteInboxNotification]);\n\n return (\n <TooltipProvider>\n <Component\n className={classNames(\n \"lb-root lb-inbox-notification\",\n showActions === \"hover\" &&\n \"lb-inbox-notification:show-actions-hover\",\n isMoreActionOpen && \"lb-inbox-notification:action-open\",\n className\n )}\n dir={$.dir}\n data-unread={unread ? \"\" : undefined}\n data-kind={inboxNotification.kind}\n onClick={handleClick}\n href={href}\n {...props}\n ref={forwardedRef}\n >\n {aside && <div className=\"lb-inbox-notification-aside\">{aside}</div>}\n <div className=\"lb-inbox-notification-content\">\n <div className=\"lb-inbox-notification-header\">\n <span className=\"lb-inbox-notification-title\">{title}</span>\n <div className=\"lb-inbox-notification-details\">\n <span className=\"lb-inbox-notification-details-labels\">\n <Timestamp\n locale={$.locale}\n date={date}\n className=\"lb-date lb-inbox-notification-date\"\n />\n {unread && (\n <span\n className=\"lb-inbox-notification-unread-indicator\"\n role=\"presentation\"\n />\n )}\n </span>\n </div>\n {showActions && (\n <div className=\"lb-inbox-notification-actions\">\n <Dropdown\n open={isMoreActionOpen}\n onOpenChange={setMoreActionOpen}\n align=\"end\"\n content={\n <>\n {unread ? (\n <DropdownItem\n onSelect={handleMarkAsRead}\n onClick={stopPropagation}\n icon={<CheckIcon />}\n >\n {$.INBOX_NOTIFICATION_MARK_AS_READ}\n </DropdownItem>\n ) : null}\n <DropdownItem\n onSelect={handleDelete}\n onClick={stopPropagation}\n icon={<DeleteIcon />}\n >\n {$.INBOX_NOTIFICATION_DELETE}\n </DropdownItem>\n </>\n }\n >\n <Tooltip content={$.INBOX_NOTIFICATION_MORE}>\n <DropdownTrigger asChild>\n <Button\n className=\"lb-inbox-notification-action\"\n onClick={handleMoreClick}\n onPointerDown={preventDefaultAndStopPropagation}\n onPointerUp={preventDefaultAndStopPropagation}\n aria-label={$.INBOX_NOTIFICATION_MORE}\n icon={<EllipsisIcon />}\n />\n </DropdownTrigger>\n </Tooltip>\n </Dropdown>\n </div>\n )}\n </div>\n <div className=\"lb-inbox-notification-body\">{children}</div>\n </div>\n </Component>\n </TooltipProvider>\n );\n }\n);\n\nfunction InboxNotificationIcon({\n className,\n ...props\n}: InboxNotificationIconProps) {\n return (\n <div\n className={classNames(\"lb-inbox-notification-icon\", className)}\n {...props}\n />\n );\n}\n\nfunction InboxNotificationAvatar({\n className,\n ...props\n}: InboxNotificationAvatarProps) {\n return (\n <Avatar\n className={classNames(\"lb-inbox-notification-avatar\", className)}\n {...props}\n />\n );\n}\n\n/**\n * Displays a thread inbox notification.\n */\nconst InboxNotificationThread = forwardRef<\n HTMLAnchorElement,\n InboxNotificationThreadProps\n>(\n (\n {\n inboxNotification,\n href,\n showRoomName = true,\n showReactions = true,\n showAttachments = true,\n showActions = \"hover\",\n overrides,\n ...props\n },\n forwardedRef\n ) => {\n const $ = useOverrides(overrides);\n const thread = useInboxNotificationThread(inboxNotification.id);\n const currentUserId = useCurrentUserId();\n // TODO: If you provide `href` (or plan to), we shouldn't run this hook. We should find a way to conditionally run it.\n // Because of batching and the fact that the same hook will be called within <Room /> in the notification's title,\n // it's not a big deal, the only scenario where it would be superfluous would be if the user provides their own\n // `href` AND disables room names in the title via `showRoomName={false}`.\n const { info } = useRoomInfo(inboxNotification.roomId);\n const contents = useMemo(() => {\n const contents = generateInboxNotificationThreadContents(\n inboxNotification,\n thread,\n currentUserId ?? \"\"\n );\n\n if (contents.comments.length === 0 || contents.userIds.length === 0) {\n return null;\n }\n\n switch (contents.type) {\n case \"comments\": {\n const reversedUserIds = [...contents.userIds].reverse();\n const firstUserId = reversedUserIds[0]!;\n\n const aside = <InboxNotificationAvatar userId={firstUserId} />;\n const title = $.INBOX_NOTIFICATION_THREAD_COMMENTS_LIST(\n <List\n values={reversedUserIds.map((userId) => (\n <User key={userId} userId={userId} replaceSelf />\n ))}\n formatRemaining={$.LIST_REMAINING_USERS}\n truncate={INBOX_NOTIFICATION_THREAD_MAX_COMMENTS - 1}\n locale={$.locale}\n />,\n showRoomName ? <Room roomId={thread.roomId} /> : undefined,\n reversedUserIds.length\n );\n const content = (\n <div className=\"lb-inbox-notification-comments\">\n {contents.comments.map((comment) => (\n <InboxNotificationComment\n key={comment.id}\n comment={comment}\n showHeader={contents.comments.length > 1}\n showAttachments={showAttachments}\n showReactions={showReactions}\n overrides={overrides}\n />\n ))}\n </div>\n );\n\n return {\n unread: contents.unread,\n date: contents.date,\n aside,\n title,\n content,\n threadId: thread.id,\n commentId: contents.comments[contents.comments.length - 1]!.id,\n };\n }\n\n case \"mention\": {\n const mentionUserId = contents.userIds[0]!;\n const mentionComment = contents.comments[0]!;\n\n const aside = <InboxNotificationAvatar userId={mentionUserId} />;\n const title = $.INBOX_NOTIFICATION_THREAD_MENTION(\n <User key={mentionUserId} userId={mentionUserId} />,\n showRoomName ? <Room roomId={thread.roomId} /> : undefined\n );\n const content = (\n <div className=\"lb-inbox-notification-comments\">\n <InboxNotificationComment\n key={mentionComment.id}\n comment={mentionComment}\n showHeader={false}\n showAttachments={showAttachments}\n showReactions={showReactions}\n overrides={overrides}\n />\n </div>\n );\n\n return {\n unread: contents.unread,\n date: contents.date,\n aside,\n title,\n content,\n threadId: thread.id,\n commentId: mentionComment.id,\n };\n }\n\n default:\n return assertNever(\n contents,\n \"Unexpected thread inbox notification type\"\n );\n }\n }, [\n $,\n currentUserId,\n inboxNotification,\n overrides,\n showRoomName,\n showAttachments,\n showReactions,\n thread,\n ]);\n // Add the thread ID and comment ID to the `href`.\n // And use URL from `resolveRoomsInfo` if `href` isn't set.\n const resolvedHref = useMemo(() => {\n const resolvedHref = href ?? info?.url;\n\n return resolvedHref\n ? generateURL(resolvedHref, undefined, contents?.commentId)\n : undefined;\n }, [contents?.commentId, href, info?.url]);\n\n if (!contents) {\n return null;\n }\n\n const { aside, title, content, date, unread } = contents;\n\n return (\n <InboxNotificationLayout\n inboxNotification={inboxNotification}\n aside={aside}\n title={title}\n date={date}\n unread={unread}\n overrides={overrides}\n href={resolvedHref}\n showActions={showActions}\n markAsReadOnClick={false}\n {...props}\n ref={forwardedRef}\n >\n {content}\n </InboxNotificationLayout>\n );\n }\n);\n\n/**\n * Displays a text mention notification kind.\n */\nconst InboxNotificationTextMention = forwardRef<\n HTMLAnchorElement,\n InboxNotificationTextMentionProps\n>(\n (\n {\n inboxNotification,\n showActions = \"hover\",\n showRoomName = true,\n overrides,\n ...props\n },\n ref\n ) => {\n const $ = useOverrides(overrides);\n\n const unread = useMemo(() => {\n return (\n !inboxNotification.readAt ||\n inboxNotification.notifiedAt > inboxNotification.readAt\n );\n }, [inboxNotification.notifiedAt, inboxNotification.readAt]);\n\n return (\n <InboxNotificationLayout\n inboxNotification={inboxNotification}\n aside={<InboxNotificationAvatar userId={inboxNotification.createdBy} />}\n title={$.INBOX_NOTIFICATION_TEXT_MENTION(\n <User\n key={inboxNotification.createdBy}\n userId={inboxNotification.createdBy}\n />,\n showRoomName ? <Room roomId={inboxNotification.roomId} /> : undefined\n )}\n date={inboxNotification.notifiedAt}\n unread={unread}\n overrides={overrides}\n showActions={showActions}\n {...props}\n ref={ref}\n />\n );\n }\n);\n\n/**\n * Displays a custom notification kind.\n */\nconst InboxNotificationCustom = forwardRef<\n HTMLAnchorElement,\n InboxNotificationCustomProps\n>(\n (\n {\n inboxNotification,\n showActions = \"hover\",\n title,\n aside,\n children,\n overrides,\n ...props\n },\n forwardedRef\n ) => {\n const unread = useMemo(() => {\n return (\n !inboxNotification.readAt ||\n inboxNotification.notifiedAt > inboxNotification.readAt\n );\n }, [inboxNotification.notifiedAt, inboxNotification.readAt]);\n\n return (\n <InboxNotificationLayout\n inboxNotification={inboxNotification}\n aside={aside}\n title={title}\n date={inboxNotification.notifiedAt}\n unread={unread}\n overrides={overrides}\n showActions={showActions}\n {...props}\n ref={forwardedRef}\n >\n {children}\n </InboxNotificationLayout>\n );\n }\n);\n\nconst InboxNotificationCustomMissing = forwardRef<\n HTMLAnchorElement,\n Omit<InboxNotificationCustomProps, \"children\" | \"title\" | \"aside\">\n>(({ inboxNotification, ...props }, forwardedRef) => {\n return (\n <InboxNotificationCustom\n inboxNotification={inboxNotification}\n {...props}\n title={\n <>\n Custom notification kind <code>{inboxNotification.kind}</code> is not\n handled\n </>\n }\n aside={\n <InboxNotificationIcon>\n <WarningIcon />\n </InboxNotificationIcon>\n }\n ref={forwardedRef}\n data-missing=\"\"\n >\n {/* TODO: Add link to the docs */}\n Notifications of this kind won’t be displayed in production. Use the{\" \"}\n <code>kinds</code> prop to define how they should be rendered.\n </InboxNotificationCustom>\n );\n});\n\n// Keeps track of which inbox notification kinds it has warned about already.\nconst inboxNotificationKindsWarnings: Set<string> = new Set();\n\n/**\n * Displays a single inbox notification.\n *\n * @example\n * <>\n * {inboxNotifications.map((inboxNotification) => (\n * <InboxNotification\n * key={inboxNotification.id}\n * inboxNotification={inboxNotification}\n * href={`/rooms/${inboxNotification.roomId}`\n * />\n * ))}\n * </>\n */\nexport const InboxNotification = Object.assign(\n forwardRef<HTMLAnchorElement, InboxNotificationProps>(\n ({ inboxNotification, kinds, ...props }, forwardedRef) => {\n switch (inboxNotification.kind) {\n case \"thread\": {\n const ResolvedInboxNotificationThread =\n kinds?.thread ?? InboxNotificationThread;\n\n return (\n <ResolvedInboxNotificationThread\n inboxNotification={inboxNotification}\n {...props}\n ref={forwardedRef}\n />\n );\n }\n\n case \"textMention\": {\n const ResolvedInboxNotificationTextMention =\n kinds?.textMention ?? InboxNotificationTextMention;\n\n return (\n <ResolvedInboxNotificationTextMention\n inboxNotification={inboxNotification}\n {...props}\n ref={forwardedRef}\n />\n );\n }\n\n default: {\n const ResolvedInboxNotificationCustom =\n kinds?.[inboxNotification.kind];\n\n if (!ResolvedInboxNotificationCustom) {\n if (process.env.NODE_ENV !== \"production\") {\n if (!inboxNotificationKindsWarnings.has(inboxNotification.kind)) {\n inboxNotificationKindsWarnings.add(inboxNotification.kind);\n // TODO: Add link to the docs\n console.warn(\n `Custom notification kind \"${inboxNotification.kind}\" is not handled so notifications of this kind will not be displayed in production. Use the kinds prop to define how they should be rendered.`\n );\n }\n\n return (\n <InboxNotificationCustomMissing\n inboxNotification={inboxNotification}\n {...props}\n ref={forwardedRef}\n />\n );\n } else {\n // Don't render anything in production if this inbox notification kind is not defined.\n return null;\n }\n }\n\n return (\n <ResolvedInboxNotificationCustom\n inboxNotification={inboxNotification}\n {...props}\n ref={forwardedRef}\n />\n );\n }\n }\n }\n ),\n {\n Thread: InboxNotificationThread,\n TextMention: InboxNotificationTextMention,\n Custom: InboxNotificationCustom,\n Icon: InboxNotificationIcon,\n Avatar: InboxNotificationAvatar,\n }\n);\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAuNA;AAAgC;AAK5B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACG;AAIL;AACA;AACA;AACA;AACA;AACA;AAEA;AAAoB;AAEhB;AAEA;AAEA;AACE;AAAgD;AAClD;AACF;AACA;AACE;AACkB;AAClB;AACA;AACA;AACA;AACF;AAGF;AACE;AAAsB;AAGxB;AAAyC;AAErC;AACA;AAAsB;AACxB;AACC;AAGH;AACE;AACA;AACA;AAAiC;AAGnC;AACE;AAAgD;AAGlD;AACE;AAA4C;AAG9C;AACG;AACE;AACY;AACT;AAEE;AACkB;AACpB;AACF;AACO;AACoB;AACE;AACpB;AACT;AACI;AACC;AAEJ;AAAU;AAAc;AAA+B;AAAM;AAC7D;AAAc;AACb;AAAC;AAAc;AACb;AAAC;AAAe;AAA+B;AAAM;AACpD;AAAc;AACZ;AAAe;AACd;AAAC;AACW;AACV;AACU;AACZ;AAEG;AACW;AACL;AACP;AAAA;AAEJ;AACF;AAEG;AAAc;AACZ;AACO;AACQ;AACR;AAEJ;AACG;AACE;AACW;AACD;AACQ;AAEd;AAEH;AACH;AACW;AACD;AACS;AAEf;AACL;AAAA;AACF;AAGD;AAAmB;AACjB;AAAuB;AACrB;AACW;AACD;AACM;AACF;AACC;AACM;AACtB;AACF;AACF;AACF;AACF;AAAA;AAEJ;AACC;AAAc;AAA8B;AAAS;AAAA;AACxD;AAAA;AACF;AACF;AAGN;AAEA;AAA+B;AAC7B;AAEF;AACE;AACG;AAC8D;AACzD;AAGV;AAEA;AAAiC;AAC/B;AAEF;AACE;AACG;AACgE;AAC3D;AAGV;AAKA;AAAgC;AAK5B;AACE;AACA;AACe;AACC;AACE;AACJ;AACd;AACG;AAIL;AACA;AACA;AAKA;AACA;AACE;AAAiB;AACf;AACA;AACiB;AAGnB;AACE;AAAO;AAGT;AAAuB;AAEnB;AACA;AAEA;AAAe;AAAgC;AAC/C;AAAgB;AACb;AAEI;AAAkB;AAA2B;AAC/C;AACkB;AACgC;AACzC;AACZ;AACgB;AAAoB;AAAa;AACjC;AAElB;AACG;AAAc;AAEV;AAEC;AACuC;AACvC;AACA;AACA;AAEH;AAIL;AAAO;AACY;AACF;AACf;AACA;AACA;AACiB;AAC2C;AAC9D;AACF;AAGE;AACA;AAEA;AAAe;AAAgC;AAC/C;AAAgB;AACb;AAAiC;AAAe;AACjC;AAAoB;AAAa;AAEnD;AACG;AAAc;AACZ;AAEU;AACG;AACZ;AACA;AACA;AACF;AAIJ;AAAO;AACY;AACF;AACf;AACA;AACA;AACiB;AACS;AAC5B;AACF;AAGE;AAAO;AACL;AACA;AACF;AACJ;AACC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIF;AACE;AAEA;AAEI;AAGN;AACE;AAAO;AAGT;AAEA;AACG;AACC;AACA;AACA;AACA;AACA;AACA;AACM;AACN;AACmB;AACf;AACC;AAEJ;AACH;AAGN;AAKA;AAAqC;AAKjC;AACE;AACc;AACC;AACf;AACG;AAIL;AAEA;AACE;AAEmD;AAIrD;AACG;AACC;AACQ;AAAkD;AAAW;AAC5D;AACN;AAE2B;AAC5B;AACgB;AAA+B;AAAa;AAC9D;AACwB;AACxB;AACA;AACA;AACI;AACJ;AACF;AAGN;AAKA;AAAgC;AAK5B;AACE;AACc;AACd;AACA;AACA;AACA;AACG;AAIL;AACE;AAEmD;AAIrD;AACG;AACC;AACA;AACA;AACwB;AACxB;AACA;AACA;AACI;AACC;AAEJ;AACH;AAGN;AAEA;AAIE;AACG;AACC;AACI;AAEF;AAAE;AAAA;AAC0B;AAAwB;AAAK;AAAO;AAAA;AAEhE;AAGC;AACc;AACf;AAEG;AACQ;AAEqB;AAAA;AACmC;AACpE;AAAK;AAAK;AAAO;AAAA;AAGxB;AAGA;AAgBO;AAAiC;AACtC;AAEI;AAAgC;AAE5B;AAGA;AACG;AACC;AACI;AACC;AACP;AAEJ;AAGE;AAGA;AACG;AACC;AACI;AACC;AACP;AAEJ;AAGE;AAGA;AACE;AACE;AACE;AAEA;AAAQ;AACyC;AACjD;AAGF;AACG;AACC;AACI;AACC;AACP;AAIF;AAAO;AACT;AAGF;AACG;AACC;AACI;AACC;AACP;AAEJ;AACF;AACF;AACF;AACA;AACU;AACK;AACL;AACF;AACE;AAEZ;;"}
1
+ {"version":3,"file":"InboxNotification.js","sources":["../../src/components/InboxNotification.tsx"],"sourcesContent":["\"use client\";\n\nimport type {\n InboxNotificationCustomData,\n InboxNotificationData,\n InboxNotificationTextMentionData,\n InboxNotificationThreadData,\n KDAD,\n} from \"@liveblocks/core\";\nimport { assertNever, console } from \"@liveblocks/core\";\nimport {\n useDeleteInboxNotification,\n useInboxNotificationThread,\n useMarkInboxNotificationAsRead,\n useRoomInfo,\n} from \"@liveblocks/react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { TooltipProvider } from \"@radix-ui/react-tooltip\";\nimport type {\n ComponentProps,\n ComponentPropsWithoutRef,\n ComponentType,\n MouseEvent as ReactMouseEvent,\n ReactNode,\n SyntheticEvent,\n} from \"react\";\nimport { forwardRef, useCallback, useMemo, useState } from \"react\";\n\nimport type { GlobalComponents } from \"../components\";\nimport { useComponents } from \"../components\";\nimport { CheckIcon } from \"../icons/Check\";\nimport { DeleteIcon } from \"../icons/Delete\";\nimport { EllipsisIcon } from \"../icons/Ellipsis\";\nimport { WarningIcon } from \"../icons/Warning\";\nimport type {\n CommentOverrides,\n GlobalOverrides,\n InboxNotificationOverrides,\n} from \"../overrides\";\nimport { useOverrides } from \"../overrides\";\nimport { Timestamp } from \"../primitives/Timestamp\";\nimport { useCurrentUserId } from \"../shared\";\nimport type { SlotProp } from \"../types\";\nimport { classNames } from \"../utils/class-names\";\nimport { generateURL } from \"../utils/url\";\nimport { Avatar, type AvatarProps } from \"./internal/Avatar\";\nimport { Button } from \"./internal/Button\";\nimport { Dropdown, DropdownItem, DropdownTrigger } from \"./internal/Dropdown\";\nimport {\n generateInboxNotificationThreadContents,\n INBOX_NOTIFICATION_THREAD_MAX_COMMENTS,\n InboxNotificationComment,\n} from \"./internal/InboxNotificationThread\";\nimport { List } from \"./internal/List\";\nimport { Room } from \"./internal/Room\";\nimport { Tooltip } from \"./internal/Tooltip\";\nimport { User } from \"./internal/User\";\n\ntype ComponentTypeWithRef<\n T extends keyof JSX.IntrinsicElements,\n P,\n> = ComponentType<P & Pick<ComponentProps<T>, \"ref\">>;\n\ntype InboxNotificationKinds<KS extends KDAD = KDAD> = {\n // For some reason, we cannot directly use KDAD in the mapped type line\n // below, because it will result in '{}' rather than picking up the\n // definition from the user-provided 'ActivitiesData'. Might be an internal\n // TS optimization, so we're making it a param to defer the resolution.\n [K in KS]: ComponentTypeWithRef<\"a\", InboxNotificationCustomKindProps<K>>;\n} & {\n thread: ComponentTypeWithRef<\"a\", InboxNotificationThreadKindProps>;\n textMention: ComponentTypeWithRef<\"a\", InboxNotificationTextMentionKindProps>;\n};\n\ninterface InboxNotificationSharedProps {\n /**\n * How to show or hide the actions.\n */\n showActions?: boolean | \"hover\";\n}\n\nexport interface InboxNotificationProps\n extends Omit<ComponentPropsWithoutRef<\"a\">, \"title\">,\n InboxNotificationSharedProps {\n /**\n * The inbox notification to display.\n */\n inboxNotification: InboxNotificationData;\n\n /**\n * Override specific kinds of inbox notifications.\n */\n kinds?: Partial<InboxNotificationKinds>;\n\n /**\n * Override the component's strings.\n */\n overrides?: Partial<\n GlobalOverrides & InboxNotificationOverrides & CommentOverrides\n >;\n\n /**\n * Override the component's components.\n */\n components?: Partial<GlobalComponents>;\n}\n\nexport interface InboxNotificationThreadProps\n extends Omit<InboxNotificationProps, \"kinds\" | \"children\">,\n InboxNotificationSharedProps {\n /**\n * The inbox notification to display.\n */\n inboxNotification: InboxNotificationThreadData;\n\n /**\n * Whether to show the room name in the title.\n */\n showRoomName?: boolean;\n\n /**\n * Whether to show reactions.\n */\n showReactions?: boolean;\n\n /**\n * Whether to show attachments.\n */\n showAttachments?: boolean;\n}\n\nexport interface InboxNotificationTextMentionProps\n extends Omit<InboxNotificationProps, \"kinds\">,\n InboxNotificationSharedProps {\n /**\n * The inbox notification to display.\n */\n inboxNotification: InboxNotificationTextMentionData;\n\n /**\n * Whether to show the room name in the title.\n */\n showRoomName?: boolean;\n}\n\nexport interface InboxNotificationCustomProps\n extends Omit<InboxNotificationProps, \"kinds\">,\n InboxNotificationSharedProps,\n SlotProp {\n /**\n * The inbox notification to display.\n */\n inboxNotification: InboxNotificationCustomData;\n\n /**\n * The inbox notification's content.\n */\n children: ReactNode;\n\n /**\n * The inbox notification's title.\n */\n title: ReactNode;\n\n /**\n * The inbox notification's aside content.\n * Can be combined with `InboxNotification.Icon` or `InboxNotification.Avatar` to easily follow default styles.\n */\n aside?: ReactNode;\n\n /**\n * Whether to mark the inbox notification as read when clicked.\n */\n markAsReadOnClick?: boolean;\n}\n\nexport type InboxNotificationThreadKindProps = Omit<\n InboxNotificationProps,\n \"kinds\"\n> & {\n inboxNotification: InboxNotificationThreadData;\n};\n\nexport type InboxNotificationTextMentionKindProps = Omit<\n InboxNotificationProps,\n \"kinds\"\n> & {\n inboxNotification: InboxNotificationTextMentionData;\n};\n\nexport type InboxNotificationCustomKindProps<K extends KDAD = KDAD> = Omit<\n InboxNotificationProps,\n \"kinds\"\n> & {\n inboxNotification: InboxNotificationCustomData<K>;\n};\n\ninterface InboxNotificationLayoutProps\n extends Omit<ComponentPropsWithoutRef<\"a\">, \"title\">,\n InboxNotificationSharedProps,\n SlotProp {\n inboxNotification: InboxNotificationData;\n aside: ReactNode;\n title: ReactNode;\n date: Date | string | number;\n unread?: boolean;\n overrides?: Partial<GlobalOverrides & InboxNotificationOverrides>;\n components?: Partial<GlobalComponents>;\n markAsReadOnClick?: boolean;\n}\n\nexport type InboxNotificationIconProps = ComponentProps<\"div\">;\n\nexport type InboxNotificationAvatarProps = AvatarProps;\n\nconst InboxNotificationLayout = forwardRef<\n HTMLAnchorElement,\n InboxNotificationLayoutProps\n>(\n (\n {\n inboxNotification,\n children,\n aside,\n title,\n date,\n unread,\n markAsReadOnClick,\n onClick,\n href,\n showActions,\n overrides,\n components,\n className,\n asChild,\n ...props\n },\n forwardedRef\n ) => {\n const $ = useOverrides(overrides);\n const { Anchor } = useComponents(components);\n const Component = asChild ? Slot : Anchor;\n const [isMoreActionOpen, setMoreActionOpen] = useState(false);\n const markInboxNotificationAsRead = useMarkInboxNotificationAsRead();\n const deleteInboxNotification = useDeleteInboxNotification();\n\n const handleClick = useCallback(\n (event: ReactMouseEvent<HTMLAnchorElement, MouseEvent>) => {\n onClick?.(event);\n\n const shouldMarkAsReadOnClick = markAsReadOnClick ?? Boolean(href);\n\n if (unread && shouldMarkAsReadOnClick) {\n markInboxNotificationAsRead(inboxNotification.id);\n }\n },\n [\n href,\n inboxNotification.id,\n markAsReadOnClick,\n markInboxNotificationAsRead,\n onClick,\n unread,\n ]\n );\n\n const stopPropagation = useCallback((event: SyntheticEvent) => {\n event.stopPropagation();\n }, []);\n\n const preventDefaultAndStopPropagation = useCallback(\n (event: SyntheticEvent) => {\n event.preventDefault();\n event.stopPropagation();\n },\n []\n );\n\n const handleMoreClick = useCallback((event: ReactMouseEvent) => {\n event.preventDefault();\n event.stopPropagation();\n setMoreActionOpen((open) => !open);\n }, []);\n\n const handleMarkAsRead = useCallback(() => {\n markInboxNotificationAsRead(inboxNotification.id);\n }, [inboxNotification.id, markInboxNotificationAsRead]);\n\n const handleDelete = useCallback(() => {\n deleteInboxNotification(inboxNotification.id);\n }, [inboxNotification.id, deleteInboxNotification]);\n\n return (\n <TooltipProvider>\n <Component\n className={classNames(\n \"lb-root lb-inbox-notification\",\n showActions === \"hover\" &&\n \"lb-inbox-notification:show-actions-hover\",\n isMoreActionOpen && \"lb-inbox-notification:action-open\",\n className\n )}\n dir={$.dir}\n data-unread={unread ? \"\" : undefined}\n data-kind={inboxNotification.kind}\n onClick={handleClick}\n href={href}\n {...props}\n ref={forwardedRef}\n >\n {aside && <div className=\"lb-inbox-notification-aside\">{aside}</div>}\n <div className=\"lb-inbox-notification-content\">\n <div className=\"lb-inbox-notification-header\">\n <span className=\"lb-inbox-notification-title\">{title}</span>\n <div className=\"lb-inbox-notification-details\">\n <span className=\"lb-inbox-notification-details-labels\">\n <Timestamp\n locale={$.locale}\n date={date}\n className=\"lb-date lb-inbox-notification-date\"\n />\n {unread && (\n <span\n className=\"lb-inbox-notification-unread-indicator\"\n role=\"presentation\"\n />\n )}\n </span>\n </div>\n {showActions && (\n <div className=\"lb-inbox-notification-actions\">\n <Dropdown\n open={isMoreActionOpen}\n onOpenChange={setMoreActionOpen}\n align=\"end\"\n content={\n <>\n {unread ? (\n <DropdownItem\n onSelect={handleMarkAsRead}\n onClick={stopPropagation}\n icon={<CheckIcon />}\n >\n {$.INBOX_NOTIFICATION_MARK_AS_READ}\n </DropdownItem>\n ) : null}\n <DropdownItem\n onSelect={handleDelete}\n onClick={stopPropagation}\n icon={<DeleteIcon />}\n >\n {$.INBOX_NOTIFICATION_DELETE}\n </DropdownItem>\n </>\n }\n >\n <Tooltip content={$.INBOX_NOTIFICATION_MORE}>\n <DropdownTrigger asChild>\n <Button\n className=\"lb-inbox-notification-action\"\n onClick={handleMoreClick}\n onPointerDown={preventDefaultAndStopPropagation}\n onPointerUp={preventDefaultAndStopPropagation}\n aria-label={$.INBOX_NOTIFICATION_MORE}\n icon={<EllipsisIcon />}\n />\n </DropdownTrigger>\n </Tooltip>\n </Dropdown>\n </div>\n )}\n </div>\n <div className=\"lb-inbox-notification-body\">{children}</div>\n </div>\n </Component>\n </TooltipProvider>\n );\n }\n);\n\nfunction InboxNotificationIcon({\n className,\n ...props\n}: InboxNotificationIconProps) {\n return (\n <div\n className={classNames(\"lb-inbox-notification-icon\", className)}\n {...props}\n />\n );\n}\n\nfunction InboxNotificationAvatar({\n className,\n ...props\n}: InboxNotificationAvatarProps) {\n return (\n <Avatar\n className={classNames(\"lb-inbox-notification-avatar\", className)}\n {...props}\n />\n );\n}\n\n/**\n * Displays a thread inbox notification.\n */\nconst InboxNotificationThread = forwardRef<\n HTMLAnchorElement,\n InboxNotificationThreadProps\n>(\n (\n {\n inboxNotification,\n href,\n showRoomName = true,\n showReactions = true,\n showAttachments = true,\n showActions = \"hover\",\n overrides,\n ...props\n },\n forwardedRef\n ) => {\n const $ = useOverrides(overrides);\n const thread = useInboxNotificationThread(inboxNotification.id);\n const currentUserId = useCurrentUserId();\n // TODO: If you provide `href` (or plan to), we shouldn't run this hook. We should find a way to conditionally run it.\n // Because of batching and the fact that the same hook will be called within <Room /> in the notification's title,\n // it's not a big deal, the only scenario where it would be superfluous would be if the user provides their own\n // `href` AND disables room names in the title via `showRoomName={false}`.\n const { info } = useRoomInfo(inboxNotification.roomId);\n const contents = useMemo(() => {\n const contents = generateInboxNotificationThreadContents(\n inboxNotification,\n thread,\n currentUserId ?? \"\"\n );\n\n if (contents.comments.length === 0 || contents.userIds.length === 0) {\n return null;\n }\n\n switch (contents.type) {\n case \"comments\": {\n const reversedUserIds = [...contents.userIds].reverse();\n const firstUserId = reversedUserIds[0]!;\n\n const aside = <InboxNotificationAvatar userId={firstUserId} />;\n const title = $.INBOX_NOTIFICATION_THREAD_COMMENTS_LIST(\n <List\n values={reversedUserIds.map((userId) => (\n <User key={userId} userId={userId} replaceSelf />\n ))}\n formatRemaining={$.LIST_REMAINING_USERS}\n truncate={INBOX_NOTIFICATION_THREAD_MAX_COMMENTS - 1}\n locale={$.locale}\n />,\n showRoomName ? <Room roomId={thread.roomId} /> : undefined,\n reversedUserIds.length\n );\n const content = (\n <div className=\"lb-inbox-notification-comments\">\n {contents.comments.map((comment) => (\n <InboxNotificationComment\n key={comment.id}\n comment={comment}\n showHeader={contents.comments.length > 1}\n showAttachments={showAttachments}\n showReactions={showReactions}\n overrides={overrides}\n />\n ))}\n </div>\n );\n\n return {\n unread: contents.unread,\n date: contents.date,\n aside,\n title,\n content,\n threadId: thread.id,\n commentId: contents.comments[contents.comments.length - 1]!.id,\n };\n }\n\n case \"mention\": {\n const mentionUserId = contents.userIds[0]!;\n const mentionComment = contents.comments[0]!;\n\n const aside = <InboxNotificationAvatar userId={mentionUserId} />;\n const title = $.INBOX_NOTIFICATION_THREAD_MENTION(\n <User key={mentionUserId} userId={mentionUserId} />,\n showRoomName ? <Room roomId={thread.roomId} /> : undefined\n );\n const content = (\n <div className=\"lb-inbox-notification-comments\">\n <InboxNotificationComment\n key={mentionComment.id}\n comment={mentionComment}\n showHeader={false}\n showAttachments={showAttachments}\n showReactions={showReactions}\n overrides={overrides}\n />\n </div>\n );\n\n return {\n unread: contents.unread,\n date: contents.date,\n aside,\n title,\n content,\n threadId: thread.id,\n commentId: mentionComment.id,\n };\n }\n\n default:\n return assertNever(\n contents,\n \"Unexpected thread inbox notification type\"\n );\n }\n }, [\n $,\n currentUserId,\n inboxNotification,\n overrides,\n showRoomName,\n showAttachments,\n showReactions,\n thread,\n ]);\n // Add the thread ID and comment ID to the `href`.\n // And use URL from `resolveRoomsInfo` if `href` isn't set.\n const resolvedHref = useMemo(() => {\n const resolvedHref = href ?? info?.url;\n\n return resolvedHref\n ? generateURL(resolvedHref, undefined, contents?.commentId)\n : undefined;\n }, [contents?.commentId, href, info?.url]);\n\n if (!contents) {\n return null;\n }\n\n const { aside, title, content, date, unread } = contents;\n\n return (\n <InboxNotificationLayout\n inboxNotification={inboxNotification}\n aside={aside}\n title={title}\n date={date}\n unread={unread}\n overrides={overrides}\n href={resolvedHref}\n showActions={showActions}\n markAsReadOnClick={false}\n {...props}\n ref={forwardedRef}\n >\n {content}\n </InboxNotificationLayout>\n );\n }\n);\n\n/**\n * Displays a text mention notification kind.\n */\nconst InboxNotificationTextMention = forwardRef<\n HTMLAnchorElement,\n InboxNotificationTextMentionProps\n>(\n (\n {\n inboxNotification,\n showActions = \"hover\",\n showRoomName = true,\n overrides,\n ...props\n },\n ref\n ) => {\n const $ = useOverrides(overrides);\n\n const unread = useMemo(() => {\n return (\n !inboxNotification.readAt ||\n inboxNotification.notifiedAt > inboxNotification.readAt\n );\n }, [inboxNotification.notifiedAt, inboxNotification.readAt]);\n\n return (\n <InboxNotificationLayout\n inboxNotification={inboxNotification}\n aside={<InboxNotificationAvatar userId={inboxNotification.createdBy} />}\n title={$.INBOX_NOTIFICATION_TEXT_MENTION(\n <User\n key={inboxNotification.createdBy}\n userId={inboxNotification.createdBy}\n />,\n showRoomName ? <Room roomId={inboxNotification.roomId} /> : undefined\n )}\n date={inboxNotification.notifiedAt}\n unread={unread}\n overrides={overrides}\n showActions={showActions}\n {...props}\n ref={ref}\n />\n );\n }\n);\n\n/**\n * Displays a custom notification kind.\n */\nconst InboxNotificationCustom = forwardRef<\n HTMLAnchorElement,\n InboxNotificationCustomProps\n>(\n (\n {\n inboxNotification,\n showActions = \"hover\",\n title,\n aside,\n children,\n overrides,\n ...props\n },\n forwardedRef\n ) => {\n const unread = useMemo(() => {\n return (\n !inboxNotification.readAt ||\n inboxNotification.notifiedAt > inboxNotification.readAt\n );\n }, [inboxNotification.notifiedAt, inboxNotification.readAt]);\n\n return (\n <InboxNotificationLayout\n inboxNotification={inboxNotification}\n aside={aside}\n title={title}\n date={inboxNotification.notifiedAt}\n unread={unread}\n overrides={overrides}\n showActions={showActions}\n {...props}\n ref={forwardedRef}\n >\n {children}\n </InboxNotificationLayout>\n );\n }\n);\n\nconst InboxNotificationCustomMissing = forwardRef<\n HTMLAnchorElement,\n Omit<InboxNotificationCustomProps, \"children\" | \"title\" | \"aside\">\n>(({ inboxNotification, ...props }, forwardedRef) => {\n return (\n <InboxNotificationCustom\n inboxNotification={inboxNotification}\n {...props}\n title={\n <>\n Custom notification kind <code>{inboxNotification.kind}</code> is not\n handled\n </>\n }\n aside={\n <InboxNotificationIcon>\n <WarningIcon />\n </InboxNotificationIcon>\n }\n ref={forwardedRef}\n data-missing=\"\"\n >\n {/* TODO: Add link to the docs */}\n Notifications of this kind won’t be displayed in production. Use the{\" \"}\n <code>kinds</code> prop to define how they should be rendered.\n </InboxNotificationCustom>\n );\n});\n\n// Keeps track of which inbox notification kinds it has warned about already.\nconst inboxNotificationKindsWarnings: Set<string> = new Set();\n\n/**\n * Displays a single inbox notification.\n *\n * @example\n * <>\n * {inboxNotifications.map((inboxNotification) => (\n * <InboxNotification\n * key={inboxNotification.id}\n * inboxNotification={inboxNotification}\n * href={`/rooms/${inboxNotification.roomId}`\n * />\n * ))}\n * </>\n */\nexport const InboxNotification = Object.assign(\n forwardRef<HTMLAnchorElement, InboxNotificationProps>(\n ({ inboxNotification, kinds, ...props }, forwardedRef) => {\n switch (inboxNotification.kind) {\n case \"thread\": {\n const ResolvedInboxNotificationThread =\n kinds?.thread ?? InboxNotificationThread;\n\n return (\n <ResolvedInboxNotificationThread\n inboxNotification={inboxNotification}\n {...props}\n ref={forwardedRef}\n />\n );\n }\n\n case \"textMention\": {\n const ResolvedInboxNotificationTextMention =\n kinds?.textMention ?? InboxNotificationTextMention;\n\n return (\n <ResolvedInboxNotificationTextMention\n inboxNotification={inboxNotification}\n {...props}\n ref={forwardedRef}\n />\n );\n }\n\n default: {\n const ResolvedInboxNotificationCustom =\n kinds?.[inboxNotification.kind];\n\n if (!ResolvedInboxNotificationCustom) {\n if (process.env.NODE_ENV !== \"production\") {\n if (!inboxNotificationKindsWarnings.has(inboxNotification.kind)) {\n inboxNotificationKindsWarnings.add(inboxNotification.kind);\n // TODO: Add link to the docs\n console.warn(\n `Custom notification kind \"${inboxNotification.kind}\" is not handled so notifications of this kind will not be displayed in production. Use the kinds prop to define how they should be rendered.`\n );\n }\n\n return (\n <InboxNotificationCustomMissing\n inboxNotification={inboxNotification}\n {...props}\n ref={forwardedRef}\n />\n );\n } else {\n // Don't render anything in production if this inbox notification kind is not defined.\n return null;\n }\n }\n\n return (\n <ResolvedInboxNotificationCustom\n inboxNotification={inboxNotification}\n {...props}\n ref={forwardedRef}\n />\n );\n }\n }\n }\n ),\n {\n Thread: InboxNotificationThread,\n TextMention: InboxNotificationTextMention,\n Custom: InboxNotificationCustom,\n Icon: InboxNotificationIcon,\n Avatar: InboxNotificationAvatar,\n }\n);\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAuNA;AAAgC;AAK5B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACG;AAIL;AACA;AACA;AACA;AACA;AACA;AAEA;AAAoB;AAEhB;AAEA;AAEA;AACE;AAAgD;AAClD;AACF;AACA;AACE;AACkB;AAClB;AACA;AACA;AACA;AACF;AAGF;AACE;AAAsB;AAGxB;AAAyC;AAErC;AACA;AAAsB;AACxB;AACC;AAGH;AACE;AACA;AACA;AAAiC;AAGnC;AACE;AAAgD;AAGlD;AACE;AAA4C;AAG9C;AACG;AACE;AACY;AACT;AAEE;AACkB;AACpB;AACF;AACO;AACoB;AACE;AACpB;AACT;AACI;AACC;AAEJ;AAAU;AAAc;AAA+B;AAAM;AAC7D;AAAc;AACb;AAAC;AAAc;AACb;AAAC;AAAe;AAA+B;AAAM;AACpD;AAAc;AACZ;AAAe;AACd;AAAC;AACW;AACV;AACU;AACZ;AAEG;AACW;AACL;AACP;AAAA;AAEJ;AACF;AAEG;AAAc;AACZ;AACO;AACQ;AACR;AAEJ;AACG;AACE;AACW;AACD;AACQ;AAEd;AAEH;AACH;AACW;AACD;AACS;AAEf;AACL;AAAA;AACF;AAGD;AAAmB;AACjB;AAAuB;AACrB;AACW;AACD;AACM;AACF;AACC;AACM;AACtB;AACF;AACF;AACF;AACF;AAAA;AAEJ;AACC;AAAc;AAA8B;AAAS;AAAA;AACxD;AAAA;AACF;AACF;AAGN;AAEA;AAA+B;AAC7B;AAEF;AACE;AACG;AAC8D;AACzD;AAGV;AAEA;AAAiC;AAC/B;AAEF;AACE;AACG;AACgE;AAC3D;AAGV;AAKA;AAAgC;AAK5B;AACE;AACA;AACe;AACC;AACE;AACJ;AACd;AACG;AAIL;AACA;AACA;AAKA;AACA;AACE;AAAiB;AACf;AACA;AACiB;AAGnB;AACE;AAAO;AAGT;AAAuB;AAEnB;AACA;AAEA;AAAe;AAAgC;AAC/C;AAAgB;AACb;AAEI;AAAkB;AAA2B;AAC/C;AACkB;AACgC;AACzC;AACZ;AACgB;AAAoB;AAAa;AACjC;AAElB;AACG;AAAc;AAEV;AAEC;AACuC;AACvC;AACA;AACA;AAEH;AAIL;AAAO;AACY;AACF;AACf;AACA;AACA;AACiB;AAC2C;AAC9D;AACF;AAGE;AACA;AAEA;AAAe;AAAgC;AAC/C;AAAgB;AACb;AAAiC;AAAe;AACjC;AAAoB;AAAa;AAEnD;AACG;AAAc;AACZ;AAEU;AACG;AACZ;AACA;AACA;AACF;AAIJ;AAAO;AACY;AACF;AACf;AACA;AACA;AACiB;AACS;AAC5B;AACF;AAGE;AAAO;AACL;AACA;AACF;AACJ;AACC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIF;AACE;AAEA;AAEI;AAGN;AACE;AAAO;AAGT;AAEA;AACG;AACC;AACA;AACA;AACA;AACA;AACA;AACM;AACN;AACmB;AACf;AACC;AAEJ;AACH;AAGN;AAKA;AAAqC;AAKjC;AACE;AACc;AACC;AACf;AACG;AAIL;AAEA;AACE;AAEmD;AAIrD;AACG;AACC;AACQ;AAAkD;AAAW;AAC5D;AACN;AAE2B;AAC5B;AACgB;AAA+B;AAAa;AAC9D;AACwB;AACxB;AACA;AACA;AACI;AACJ;AACF;AAGN;AAKA;AAAgC;AAK5B;AACE;AACc;AACd;AACA;AACA;AACA;AACG;AAIL;AACE;AAEmD;AAIrD;AACG;AACC;AACA;AACA;AACwB;AACxB;AACA;AACA;AACI;AACC;AAEJ;AACH;AAGN;AAEA;AAIE;AACG;AACC;AACI;AAEF;AAAE;AAAA;AAC0B;AAAwB;AAAK;AAAO;AAAA;AAEhE;AAGC;AACc;AACf;AAEG;AACQ;AAEqB;AAAA;AACmC;AACpE;AAAK;AAAK;AAAO;AAAA;AAGxB;AAGA;AAgBO;AAAiC;AACtC;AAEI;AAAgC;AAE5B;AAGA;AACG;AACC;AACI;AACC;AACP;AAEJ;AAGE;AAGA;AACG;AACC;AACI;AACC;AACP;AAEJ;AAGE;AAGA;AACE;AACE;AACE;AAEA;AAAQ;AACyC;AACjD;AAGF;AACG;AACC;AACI;AACC;AACP;AAIF;AAAO;AACT;AAGF;AACG;AACC;AACI;AACC;AACP;AAEJ;AACF;AACF;AACF;AACA;AACU;AACK;AACL;AACF;AACE;AAEZ;;"}
@@ -0,0 +1,42 @@
1
+ "use client";
2
+ 'use strict';
3
+
4
+ var jsxRuntime = require('react/jsx-runtime');
5
+ var react = require('react');
6
+ var classNames = require('../utils/class-names.cjs');
7
+ var useVisible = require('../utils/use-visible.cjs');
8
+
9
+
10
+ function ReachEndMarker({
11
+ enabled,
12
+ onReachEnd
13
+ }) {
14
+ const markerRef = react.useRef(null);
15
+ useVisible.useVisibleCallback(markerRef, onReachEnd, {
16
+ enabled
17
+ });
18
+ return /* @__PURE__ */ jsxRuntime.jsx("div", {
19
+ ref: markerRef,
20
+ style: { height: 0 }
21
+ });
22
+ }
23
+ const InboxNotificationList = react.forwardRef(({ onReachEnd, children, className, ...props }, forwardedRef) => {
24
+ return /* @__PURE__ */ jsxRuntime.jsxs("ol", {
25
+ className: classNames.classNames("lb-root lb-inbox-notification-list", className),
26
+ ...props,
27
+ ref: forwardedRef,
28
+ children: [
29
+ react.Children.map(children, (child, index) => /* @__PURE__ */ jsxRuntime.jsx("li", {
30
+ className: "lb-inbox-notification-list-item",
31
+ children: child
32
+ }, index)),
33
+ onReachEnd && /* @__PURE__ */ jsxRuntime.jsx(ReachEndMarker, {
34
+ onReachEnd,
35
+ enabled: react.Children.count(children) > 0
36
+ })
37
+ ]
38
+ });
39
+ });
40
+
41
+ exports.InboxNotificationList = InboxNotificationList;
42
+ //# sourceMappingURL=InboxNotificationList.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"InboxNotificationList.mjs","sources":["../../src/components/InboxNotificationList.tsx"],"sourcesContent":["\"use client\";\n\nimport type { ComponentPropsWithoutRef } from \"react\";\nimport { Children, forwardRef, useRef } from \"react\";\n\nimport { classNames } from \"../utils/class-names\";\nimport { useVisibleCallback } from \"../utils/use-visible\";\n\nexport interface InboxNotificationListProps\n extends ComponentPropsWithoutRef<\"ol\"> {\n /**\n * This API is *EXPERIMENTAL* and likely not going to be the final API. Do\n * not rely on it.\n *\n * @private\n */\n onReachEnd?: () => void;\n}\n\nfunction ReachEndMarker({\n enabled,\n onReachEnd,\n}: {\n enabled: boolean;\n onReachEnd: () => void;\n}) {\n const markerRef = useRef<HTMLDivElement>(null);\n\n useVisibleCallback(markerRef, onReachEnd, {\n enabled,\n });\n\n return <div ref={markerRef} style={{ height: 0 }} />;\n}\n\n/**\n * Displays inbox notifications as a list.\n *\n * @example\n * <InboxNotificationList>\n * {inboxNotifications.map((inboxNotification) => (\n * <InboxNotification key={inboxNotification.id} inboxNotification={inboxNotification} />\n * ))}\n * </InboxNotificationList>\n */\nexport const InboxNotificationList = forwardRef<\n HTMLOListElement,\n InboxNotificationListProps\n>(({ onReachEnd, children, className, ...props }, forwardedRef) => {\n return (\n <ol\n className={classNames(\"lb-root lb-inbox-notification-list\", className)}\n {...props}\n ref={forwardedRef}\n >\n {Children.map(children, (child, index) => (\n <li key={index} className=\"lb-inbox-notification-list-item\">\n {child}\n </li>\n ))}\n {/* Render an invisible marker at the end which is tied to an IntersectionObserver to be alerted when the end of the list has been reached */}\n {onReachEnd && (\n <ReachEndMarker\n onReachEnd={onReachEnd}\n enabled={Children.count(children) > 0}\n />\n )}\n </ol>\n );\n});\n"],"names":[],"mappings":";;;;;;AAAA;AAmBA;AAAwB;AACtB;AAEF;AAIE;AAEA;AAA0C;AACxC;AAGF;AAAQ;AAAS;AAA8B;AACjD;AAYa;AAIX;AACG;AACsE;AACjE;AACC;AAEJ;AACE;AAAyB;AACvB;AAEJ;AAGE;AACC;AACoC;AACtC;AAAA;AAIR;;"}
1
+ {"version":3,"file":"InboxNotificationList.cjs","sources":["../../src/components/InboxNotificationList.tsx"],"sourcesContent":["\"use client\";\n\nimport type { ComponentPropsWithoutRef } from \"react\";\nimport { Children, forwardRef, useRef } from \"react\";\n\nimport { classNames } from \"../utils/class-names\";\nimport { useVisibleCallback } from \"../utils/use-visible\";\n\nexport interface InboxNotificationListProps\n extends ComponentPropsWithoutRef<\"ol\"> {\n /**\n * This API is *EXPERIMENTAL* and likely not going to be the final API. Do\n * not rely on it.\n *\n * @private\n */\n onReachEnd?: () => void;\n}\n\nfunction ReachEndMarker({\n enabled,\n onReachEnd,\n}: {\n enabled: boolean;\n onReachEnd: () => void;\n}) {\n const markerRef = useRef<HTMLDivElement>(null);\n\n useVisibleCallback(markerRef, onReachEnd, {\n enabled,\n });\n\n return <div ref={markerRef} style={{ height: 0 }} />;\n}\n\n/**\n * Displays inbox notifications as a list.\n *\n * @example\n * <InboxNotificationList>\n * {inboxNotifications.map((inboxNotification) => (\n * <InboxNotification key={inboxNotification.id} inboxNotification={inboxNotification} />\n * ))}\n * </InboxNotificationList>\n */\nexport const InboxNotificationList = forwardRef<\n HTMLOListElement,\n InboxNotificationListProps\n>(({ onReachEnd, children, className, ...props }, forwardedRef) => {\n return (\n <ol\n className={classNames(\"lb-root lb-inbox-notification-list\", className)}\n {...props}\n ref={forwardedRef}\n >\n {Children.map(children, (child, index) => (\n <li key={index} className=\"lb-inbox-notification-list-item\">\n {child}\n </li>\n ))}\n {/* Render an invisible marker at the end which is tied to an IntersectionObserver to be alerted when the end of the list has been reached */}\n {onReachEnd && (\n <ReachEndMarker\n onReachEnd={onReachEnd}\n enabled={Children.count(children) > 0}\n />\n )}\n </ol>\n );\n});\n"],"names":[],"mappings":";;;;;;;;AAAA;AAmBA;AAAwB;AACtB;AAEF;AAIE;AAEA;AAA0C;AACxC;AAGF;AAAQ;AAAS;AAA8B;AACjD;AAYa;AAIX;AACG;AACsE;AACjE;AACC;AAEJ;AACE;AAAyB;AACvB;AAEJ;AAGE;AACC;AACoC;AACtC;AAAA;AAIR;;"}
@@ -1,42 +1,40 @@
1
1
  "use client";
2
- 'use strict';
3
-
4
- var jsxRuntime = require('react/jsx-runtime');
5
- var react = require('react');
6
- var classNames = require('../utils/class-names.js');
7
- var useVisible = require('../utils/use-visible.js');
2
+ import { jsx, jsxs } from 'react/jsx-runtime';
3
+ import { useRef, forwardRef, Children } from 'react';
4
+ import { classNames } from '../utils/class-names.js';
5
+ import { useVisibleCallback } from '../utils/use-visible.js';
8
6
 
9
7
 
10
8
  function ReachEndMarker({
11
9
  enabled,
12
10
  onReachEnd
13
11
  }) {
14
- const markerRef = react.useRef(null);
15
- useVisible.useVisibleCallback(markerRef, onReachEnd, {
12
+ const markerRef = useRef(null);
13
+ useVisibleCallback(markerRef, onReachEnd, {
16
14
  enabled
17
15
  });
18
- return /* @__PURE__ */ jsxRuntime.jsx("div", {
16
+ return /* @__PURE__ */ jsx("div", {
19
17
  ref: markerRef,
20
18
  style: { height: 0 }
21
19
  });
22
20
  }
23
- const InboxNotificationList = react.forwardRef(({ onReachEnd, children, className, ...props }, forwardedRef) => {
24
- return /* @__PURE__ */ jsxRuntime.jsxs("ol", {
25
- className: classNames.classNames("lb-root lb-inbox-notification-list", className),
21
+ const InboxNotificationList = forwardRef(({ onReachEnd, children, className, ...props }, forwardedRef) => {
22
+ return /* @__PURE__ */ jsxs("ol", {
23
+ className: classNames("lb-root lb-inbox-notification-list", className),
26
24
  ...props,
27
25
  ref: forwardedRef,
28
26
  children: [
29
- react.Children.map(children, (child, index) => /* @__PURE__ */ jsxRuntime.jsx("li", {
27
+ Children.map(children, (child, index) => /* @__PURE__ */ jsx("li", {
30
28
  className: "lb-inbox-notification-list-item",
31
29
  children: child
32
30
  }, index)),
33
- onReachEnd && /* @__PURE__ */ jsxRuntime.jsx(ReachEndMarker, {
31
+ onReachEnd && /* @__PURE__ */ jsx(ReachEndMarker, {
34
32
  onReachEnd,
35
- enabled: react.Children.count(children) > 0
33
+ enabled: Children.count(children) > 0
36
34
  })
37
35
  ]
38
36
  });
39
37
  });
40
38
 
41
- exports.InboxNotificationList = InboxNotificationList;
39
+ export { InboxNotificationList };
42
40
  //# sourceMappingURL=InboxNotificationList.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"InboxNotificationList.js","sources":["../../src/components/InboxNotificationList.tsx"],"sourcesContent":["\"use client\";\n\nimport type { ComponentPropsWithoutRef } from \"react\";\nimport { Children, forwardRef, useRef } from \"react\";\n\nimport { classNames } from \"../utils/class-names\";\nimport { useVisibleCallback } from \"../utils/use-visible\";\n\nexport interface InboxNotificationListProps\n extends ComponentPropsWithoutRef<\"ol\"> {\n /**\n * This API is *EXPERIMENTAL* and likely not going to be the final API. Do\n * not rely on it.\n *\n * @private\n */\n onReachEnd?: () => void;\n}\n\nfunction ReachEndMarker({\n enabled,\n onReachEnd,\n}: {\n enabled: boolean;\n onReachEnd: () => void;\n}) {\n const markerRef = useRef<HTMLDivElement>(null);\n\n useVisibleCallback(markerRef, onReachEnd, {\n enabled,\n });\n\n return <div ref={markerRef} style={{ height: 0 }} />;\n}\n\n/**\n * Displays inbox notifications as a list.\n *\n * @example\n * <InboxNotificationList>\n * {inboxNotifications.map((inboxNotification) => (\n * <InboxNotification key={inboxNotification.id} inboxNotification={inboxNotification} />\n * ))}\n * </InboxNotificationList>\n */\nexport const InboxNotificationList = forwardRef<\n HTMLOListElement,\n InboxNotificationListProps\n>(({ onReachEnd, children, className, ...props }, forwardedRef) => {\n return (\n <ol\n className={classNames(\"lb-root lb-inbox-notification-list\", className)}\n {...props}\n ref={forwardedRef}\n >\n {Children.map(children, (child, index) => (\n <li key={index} className=\"lb-inbox-notification-list-item\">\n {child}\n </li>\n ))}\n {/* Render an invisible marker at the end which is tied to an IntersectionObserver to be alerted when the end of the list has been reached */}\n {onReachEnd && (\n <ReachEndMarker\n onReachEnd={onReachEnd}\n enabled={Children.count(children) > 0}\n />\n )}\n </ol>\n );\n});\n"],"names":[],"mappings":";;;;;;;;AAAA;AAmBA;AAAwB;AACtB;AAEF;AAIE;AAEA;AAA0C;AACxC;AAGF;AAAQ;AAAS;AAA8B;AACjD;AAYa;AAIX;AACG;AACsE;AACjE;AACC;AAEJ;AACE;AAAyB;AACvB;AAEJ;AAGE;AACC;AACoC;AACtC;AAAA;AAIR;;"}
1
+ {"version":3,"file":"InboxNotificationList.js","sources":["../../src/components/InboxNotificationList.tsx"],"sourcesContent":["\"use client\";\n\nimport type { ComponentPropsWithoutRef } from \"react\";\nimport { Children, forwardRef, useRef } from \"react\";\n\nimport { classNames } from \"../utils/class-names\";\nimport { useVisibleCallback } from \"../utils/use-visible\";\n\nexport interface InboxNotificationListProps\n extends ComponentPropsWithoutRef<\"ol\"> {\n /**\n * This API is *EXPERIMENTAL* and likely not going to be the final API. Do\n * not rely on it.\n *\n * @private\n */\n onReachEnd?: () => void;\n}\n\nfunction ReachEndMarker({\n enabled,\n onReachEnd,\n}: {\n enabled: boolean;\n onReachEnd: () => void;\n}) {\n const markerRef = useRef<HTMLDivElement>(null);\n\n useVisibleCallback(markerRef, onReachEnd, {\n enabled,\n });\n\n return <div ref={markerRef} style={{ height: 0 }} />;\n}\n\n/**\n * Displays inbox notifications as a list.\n *\n * @example\n * <InboxNotificationList>\n * {inboxNotifications.map((inboxNotification) => (\n * <InboxNotification key={inboxNotification.id} inboxNotification={inboxNotification} />\n * ))}\n * </InboxNotificationList>\n */\nexport const InboxNotificationList = forwardRef<\n HTMLOListElement,\n InboxNotificationListProps\n>(({ onReachEnd, children, className, ...props }, forwardedRef) => {\n return (\n <ol\n className={classNames(\"lb-root lb-inbox-notification-list\", className)}\n {...props}\n ref={forwardedRef}\n >\n {Children.map(children, (child, index) => (\n <li key={index} className=\"lb-inbox-notification-list-item\">\n {child}\n </li>\n ))}\n {/* Render an invisible marker at the end which is tied to an IntersectionObserver to be alerted when the end of the list has been reached */}\n {onReachEnd && (\n <ReachEndMarker\n onReachEnd={onReachEnd}\n enabled={Children.count(children) > 0}\n />\n )}\n </ol>\n );\n});\n"],"names":[],"mappings":";;;;;;AAAA;AAmBA;AAAwB;AACtB;AAEF;AAIE;AAEA;AAA0C;AACxC;AAGF;AAAQ;AAAS;AAA8B;AACjD;AAYa;AAIX;AACG;AACsE;AACjE;AACC;AAEJ;AACE;AAAyB;AACvB;AAEJ;AAGE;AACC;AACoC;AACtC;AAAA;AAIR;;"}
@@ -1,23 +1,44 @@
1
1
  "use client";
2
- import { jsx, jsxs } from 'react/jsx-runtime';
3
- import { useThreadSubscription } from '@liveblocks/react';
4
- import { useMarkRoomThreadAsResolved, useMarkRoomThreadAsUnresolved } from '@liveblocks/react/_private';
5
- import * as TogglePrimitive from '@radix-ui/react-toggle';
6
- import { forwardRef, useMemo, useState, useEffect, useCallback, Fragment } from 'react';
7
- import { ArrowDownIcon } from '../icons/ArrowDown.mjs';
8
- import { ResolveIcon } from '../icons/Resolve.mjs';
9
- import { ResolvedIcon } from '../icons/Resolved.mjs';
10
- import { useOverrides } from '../overrides.mjs';
11
- import { classNames } from '../utils/class-names.mjs';
12
- import { findLastIndex } from '../utils/find-last-index.mjs';
13
- import { Comment } from './Comment.mjs';
14
- import { Composer } from './Composer.mjs';
15
- import { Button } from './internal/Button.mjs';
16
- import { Tooltip } from './internal/Tooltip.mjs';
17
- import { TooltipProvider } from '@radix-ui/react-tooltip';
2
+ 'use strict';
18
3
 
4
+ var jsxRuntime = require('react/jsx-runtime');
5
+ var react$1 = require('@liveblocks/react');
6
+ var _private = require('@liveblocks/react/_private');
7
+ var TogglePrimitive = require('@radix-ui/react-toggle');
8
+ var react = require('react');
9
+ var ArrowDown = require('../icons/ArrowDown.cjs');
10
+ var Resolve = require('../icons/Resolve.cjs');
11
+ var Resolved = require('../icons/Resolved.cjs');
12
+ var overrides = require('../overrides.cjs');
13
+ var classNames = require('../utils/class-names.cjs');
14
+ var findLastIndex = require('../utils/find-last-index.cjs');
15
+ var Comment = require('./Comment.cjs');
16
+ var Composer = require('./Composer.cjs');
17
+ var Button = require('./internal/Button.cjs');
18
+ var Tooltip = require('./internal/Tooltip.cjs');
19
+ var TooltipPrimitive = require('@radix-ui/react-tooltip');
19
20
 
20
- const Thread = forwardRef(
21
+ function _interopNamespaceDefault(e) {
22
+ var n = Object.create(null);
23
+ if (e) {
24
+ Object.keys(e).forEach(function (k) {
25
+ if (k !== 'default') {
26
+ var d = Object.getOwnPropertyDescriptor(e, k);
27
+ Object.defineProperty(n, k, d.get ? d : {
28
+ enumerable: true,
29
+ get: function () { return e[k]; }
30
+ });
31
+ }
32
+ });
33
+ }
34
+ n.default = e;
35
+ return Object.freeze(n);
36
+ }
37
+
38
+ var TogglePrimitive__namespace = /*#__PURE__*/_interopNamespaceDefault(TogglePrimitive);
39
+
40
+
41
+ const Thread = react.forwardRef(
21
42
  ({
22
43
  thread,
23
44
  indentCommentContent = true,
@@ -36,23 +57,23 @@ const Thread = forwardRef(
36
57
  onMentionClick,
37
58
  onAttachmentClick,
38
59
  onComposerSubmit,
39
- overrides,
60
+ overrides: overrides$1,
40
61
  className,
41
62
  ...props
42
63
  }, forwardedRef) => {
43
- const markThreadAsResolved = useMarkRoomThreadAsResolved(thread.roomId);
44
- const markThreadAsUnresolved = useMarkRoomThreadAsUnresolved(thread.roomId);
45
- const $ = useOverrides(overrides);
46
- const firstCommentIndex = useMemo(() => {
64
+ const markThreadAsResolved = _private.useMarkRoomThreadAsResolved(thread.roomId);
65
+ const markThreadAsUnresolved = _private.useMarkRoomThreadAsUnresolved(thread.roomId);
66
+ const $ = overrides.useOverrides(overrides$1);
67
+ const firstCommentIndex = react.useMemo(() => {
47
68
  return showDeletedComments ? 0 : thread.comments.findIndex((comment) => comment.body);
48
69
  }, [showDeletedComments, thread.comments]);
49
- const lastCommentIndex = useMemo(() => {
50
- return showDeletedComments ? thread.comments.length - 1 : findLastIndex(thread.comments, (comment) => comment.body);
70
+ const lastCommentIndex = react.useMemo(() => {
71
+ return showDeletedComments ? thread.comments.length - 1 : findLastIndex.findLastIndex(thread.comments, (comment) => comment.body);
51
72
  }, [showDeletedComments, thread.comments]);
52
- const { status: subscriptionStatus, unreadSince } = useThreadSubscription(
73
+ const { status: subscriptionStatus, unreadSince } = react$1.useThreadSubscription(
53
74
  thread.id
54
75
  );
55
- const unreadIndex = useMemo(() => {
76
+ const unreadIndex = react.useMemo(() => {
56
77
  if (subscriptionStatus !== "subscribed") {
57
78
  return;
58
79
  }
@@ -70,19 +91,19 @@ const Thread = forwardRef(
70
91
  thread.comments,
71
92
  unreadSince
72
93
  ]);
73
- const [newIndex, setNewIndex] = useState();
94
+ const [newIndex, setNewIndex] = react.useState();
74
95
  const newIndicatorIndex = newIndex === void 0 ? unreadIndex : newIndex;
75
- useEffect(() => {
96
+ react.useEffect(() => {
76
97
  if (unreadIndex) {
77
98
  setNewIndex(
78
99
  (persistedUnreadIndex) => Math.min(persistedUnreadIndex ?? Infinity, unreadIndex)
79
100
  );
80
101
  }
81
102
  }, [unreadIndex]);
82
- const stopPropagation = useCallback((event) => {
103
+ const stopPropagation = react.useCallback((event) => {
83
104
  event.stopPropagation();
84
105
  }, []);
85
- const handleResolvedChange = useCallback(
106
+ const handleResolvedChange = react.useCallback(
86
107
  (resolved) => {
87
108
  onResolvedChange?.(resolved);
88
109
  if (resolved) {
@@ -98,7 +119,7 @@ const Thread = forwardRef(
98
119
  thread.id
99
120
  ]
100
121
  );
101
- const handleCommentDelete = useCallback(
122
+ const handleCommentDelete = react.useCallback(
102
123
  (comment) => {
103
124
  onCommentDelete?.(comment);
104
125
  const filteredComments = thread.comments.filter(
@@ -110,9 +131,9 @@ const Thread = forwardRef(
110
131
  },
111
132
  [onCommentDelete, onThreadDelete, thread]
112
133
  );
113
- return /* @__PURE__ */ jsx(TooltipProvider, {
114
- children: /* @__PURE__ */ jsxs("div", {
115
- className: classNames(
134
+ return /* @__PURE__ */ jsxRuntime.jsx(TooltipPrimitive.TooltipProvider, {
135
+ children: /* @__PURE__ */ jsxRuntime.jsxs("div", {
136
+ className: classNames.classNames(
116
137
  "lb-root lb-thread",
117
138
  showActions === "hover" && "lb-thread:show-actions-hover",
118
139
  className
@@ -123,13 +144,13 @@ const Thread = forwardRef(
123
144
  ...props,
124
145
  ref: forwardedRef,
125
146
  children: [
126
- /* @__PURE__ */ jsx("div", {
147
+ /* @__PURE__ */ jsxRuntime.jsx("div", {
127
148
  className: "lb-thread-comments",
128
149
  children: thread.comments.map((comment, index) => {
129
150
  const isFirstComment = index === firstCommentIndex;
130
151
  const isUnread = unreadIndex !== void 0 && index >= unreadIndex;
131
- const children = /* @__PURE__ */ jsx(Comment, {
132
- overrides,
152
+ const children = /* @__PURE__ */ jsxRuntime.jsx(Comment.Comment, {
153
+ overrides: overrides$1,
133
154
  className: "lb-thread-comment",
134
155
  "data-unread": isUnread ? "" : void 0,
135
156
  comment,
@@ -146,30 +167,30 @@ const Thread = forwardRef(
146
167
  onAttachmentClick,
147
168
  autoMarkReadThreadId: index === lastCommentIndex && isUnread ? thread.id : void 0,
148
169
  additionalActionsClassName: isFirstComment ? "lb-thread-actions" : void 0,
149
- additionalActions: isFirstComment && showResolveAction ? /* @__PURE__ */ jsx(Tooltip, {
170
+ additionalActions: isFirstComment && showResolveAction ? /* @__PURE__ */ jsxRuntime.jsx(Tooltip.Tooltip, {
150
171
  content: thread.resolved ? $.THREAD_UNRESOLVE : $.THREAD_RESOLVE,
151
- children: /* @__PURE__ */ jsx(TogglePrimitive.Root, {
172
+ children: /* @__PURE__ */ jsxRuntime.jsx(TogglePrimitive__namespace.Root, {
152
173
  pressed: thread.resolved,
153
174
  onPressedChange: handleResolvedChange,
154
175
  asChild: true,
155
- children: /* @__PURE__ */ jsx(Button, {
176
+ children: /* @__PURE__ */ jsxRuntime.jsx(Button.Button, {
156
177
  className: "lb-comment-action",
157
178
  onClick: stopPropagation,
158
179
  "aria-label": thread.resolved ? $.THREAD_UNRESOLVE : $.THREAD_RESOLVE,
159
- icon: thread.resolved ? /* @__PURE__ */ jsx(ResolvedIcon, {}) : /* @__PURE__ */ jsx(ResolveIcon, {})
180
+ icon: thread.resolved ? /* @__PURE__ */ jsxRuntime.jsx(Resolved.ResolvedIcon, {}) : /* @__PURE__ */ jsxRuntime.jsx(Resolve.ResolveIcon, {})
160
181
  })
161
182
  })
162
183
  }) : null
163
184
  }, comment.id);
164
- return index === newIndicatorIndex && newIndicatorIndex !== firstCommentIndex && newIndicatorIndex <= lastCommentIndex ? /* @__PURE__ */ jsxs(Fragment, {
185
+ return index === newIndicatorIndex && newIndicatorIndex !== firstCommentIndex && newIndicatorIndex <= lastCommentIndex ? /* @__PURE__ */ jsxRuntime.jsxs(react.Fragment, {
165
186
  children: [
166
- /* @__PURE__ */ jsx("div", {
187
+ /* @__PURE__ */ jsxRuntime.jsx("div", {
167
188
  className: "lb-thread-new-indicator",
168
189
  "aria-label": $.THREAD_NEW_INDICATOR_DESCRIPTION,
169
- children: /* @__PURE__ */ jsxs("span", {
190
+ children: /* @__PURE__ */ jsxRuntime.jsxs("span", {
170
191
  className: "lb-thread-new-indicator-label",
171
192
  children: [
172
- /* @__PURE__ */ jsx(ArrowDownIcon, {
193
+ /* @__PURE__ */ jsxRuntime.jsx(ArrowDown.ArrowDownIcon, {
173
194
  className: "lb-thread-new-indicator-label-icon"
174
195
  }),
175
196
  $.THREAD_NEW_INDICATOR
@@ -181,7 +202,7 @@ const Thread = forwardRef(
181
202
  }, comment.id) : children;
182
203
  })
183
204
  }),
184
- showComposer && /* @__PURE__ */ jsx(Composer, {
205
+ showComposer && /* @__PURE__ */ jsxRuntime.jsx(Composer.Composer, {
185
206
  className: "lb-thread-composer",
186
207
  threadId: thread.id,
187
208
  defaultCollapsed: showComposer === "collapsed" ? true : void 0,
@@ -191,7 +212,7 @@ const Thread = forwardRef(
191
212
  overrides: {
192
213
  COMPOSER_PLACEHOLDER: $.THREAD_COMPOSER_PLACEHOLDER,
193
214
  COMPOSER_SEND: $.THREAD_COMPOSER_SEND,
194
- ...overrides
215
+ ...overrides$1
195
216
  },
196
217
  roomId: thread.roomId
197
218
  })
@@ -201,5 +222,5 @@ const Thread = forwardRef(
201
222
  }
202
223
  );
203
224
 
204
- export { Thread };
205
- //# sourceMappingURL=Thread.mjs.map
225
+ exports.Thread = Thread;
226
+ //# sourceMappingURL=Thread.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Thread.mjs","sources":["../../src/components/Thread.tsx"],"sourcesContent":["\"use client\";\n\nimport type {\n BaseMetadata,\n CommentData,\n DM,\n ThreadData,\n} from \"@liveblocks/core\";\nimport { useThreadSubscription } from \"@liveblocks/react\";\nimport {\n useMarkRoomThreadAsResolved,\n useMarkRoomThreadAsUnresolved,\n} from \"@liveblocks/react/_private\";\nimport * as TogglePrimitive from \"@radix-ui/react-toggle\";\nimport type {\n ComponentPropsWithoutRef,\n ForwardedRef,\n RefAttributes,\n SyntheticEvent,\n} from \"react\";\nimport {\n forwardRef,\n Fragment,\n useCallback,\n useEffect,\n useMemo,\n useState,\n} from \"react\";\n\nimport { ArrowDownIcon } from \"../icons/ArrowDown\";\nimport { ResolveIcon } from \"../icons/Resolve\";\nimport { ResolvedIcon } from \"../icons/Resolved\";\nimport type {\n CommentOverrides,\n ComposerOverrides,\n GlobalOverrides,\n ThreadOverrides,\n} from \"../overrides\";\nimport { useOverrides } from \"../overrides\";\nimport { classNames } from \"../utils/class-names\";\nimport { findLastIndex } from \"../utils/find-last-index\";\nimport type { CommentProps } from \"./Comment\";\nimport { Comment } from \"./Comment\";\nimport type { ComposerProps } from \"./Composer\";\nimport { Composer } from \"./Composer\";\nimport { Button } from \"./internal/Button\";\nimport { Tooltip, TooltipProvider } from \"./internal/Tooltip\";\n\nexport interface ThreadProps<M extends BaseMetadata = DM>\n extends ComponentPropsWithoutRef<\"div\"> {\n /**\n * The thread to display.\n */\n thread: ThreadData<M>;\n\n /**\n * How to show or hide the composer to reply to the thread.\n */\n showComposer?: boolean | \"collapsed\";\n\n /**\n * Whether to show the action to resolve the thread.\n */\n showResolveAction?: boolean;\n\n /**\n * How to show or hide the actions.\n */\n showActions?: CommentProps[\"showActions\"];\n\n /**\n * Whether to show reactions.\n */\n showReactions?: CommentProps[\"showReactions\"];\n\n /**\n * Whether to show the composer's formatting controls.\n */\n showComposerFormattingControls?: ComposerProps[\"showFormattingControls\"];\n\n /**\n * Whether to indent the comments' content.\n */\n indentCommentContent?: CommentProps[\"indentContent\"];\n\n /**\n * Whether to show deleted comments.\n */\n showDeletedComments?: CommentProps[\"showDeleted\"];\n\n /**\n * Whether to show attachments.\n */\n showAttachments?: boolean;\n\n /**\n * The event handler called when changing the resolved status.\n */\n onResolvedChange?: (resolved: boolean) => void;\n\n /**\n * The event handler called when a comment is edited.\n */\n onCommentEdit?: CommentProps[\"onCommentEdit\"];\n\n /**\n * The event handler called when a comment is deleted.\n */\n onCommentDelete?: CommentProps[\"onCommentDelete\"];\n\n /**\n * The event handler called when the thread is deleted.\n * A thread is deleted when all its comments are deleted.\n */\n onThreadDelete?: (thread: ThreadData<M>) => void;\n\n /**\n * The event handler called when clicking on a comment's author.\n */\n onAuthorClick?: CommentProps[\"onAuthorClick\"];\n\n /**\n * The event handler called when clicking on a mention.\n */\n onMentionClick?: CommentProps[\"onMentionClick\"];\n\n /**\n * The event handler called when clicking on a comment's attachment.\n */\n onAttachmentClick?: CommentProps[\"onAttachmentClick\"];\n\n /**\n * The event handler called when the composer is submitted.\n */\n onComposerSubmit?: ComposerProps[\"onComposerSubmit\"];\n\n /**\n * Override the component's strings.\n */\n overrides?: Partial<\n GlobalOverrides & ThreadOverrides & CommentOverrides & ComposerOverrides\n >;\n}\n\n/**\n * Displays a thread of comments, with a composer to reply\n * to it.\n *\n * @example\n * <>\n * {threads.map((thread) => (\n * <Thread key={thread.id} thread={thread} />\n * ))}\n * </>\n */\nexport const Thread = forwardRef(\n <M extends BaseMetadata = DM>(\n {\n thread,\n indentCommentContent = true,\n showActions = \"hover\",\n showDeletedComments,\n showResolveAction = true,\n showReactions = true,\n showComposer = \"collapsed\",\n showAttachments = true,\n showComposerFormattingControls = true,\n onResolvedChange,\n onCommentEdit,\n onCommentDelete,\n onThreadDelete,\n onAuthorClick,\n onMentionClick,\n onAttachmentClick,\n onComposerSubmit,\n overrides,\n className,\n ...props\n }: ThreadProps<M>,\n forwardedRef: ForwardedRef<HTMLDivElement>\n ) => {\n const markThreadAsResolved = useMarkRoomThreadAsResolved(thread.roomId);\n const markThreadAsUnresolved = useMarkRoomThreadAsUnresolved(thread.roomId);\n const $ = useOverrides(overrides);\n const firstCommentIndex = useMemo(() => {\n return showDeletedComments\n ? 0\n : thread.comments.findIndex((comment) => comment.body);\n }, [showDeletedComments, thread.comments]);\n const lastCommentIndex = useMemo(() => {\n return showDeletedComments\n ? thread.comments.length - 1\n : findLastIndex(thread.comments, (comment) => comment.body);\n }, [showDeletedComments, thread.comments]);\n const { status: subscriptionStatus, unreadSince } = useThreadSubscription(\n thread.id\n );\n const unreadIndex = useMemo(() => {\n // The user is not subscribed to this thread.\n if (subscriptionStatus !== \"subscribed\") {\n return;\n }\n\n // The user hasn't read the thread yet, so all comments are unread.\n if (unreadSince === null) {\n return firstCommentIndex;\n }\n\n // The user has read the thread, so we find the first unread comment.\n const unreadIndex = thread.comments.findIndex(\n (comment) =>\n (showDeletedComments ? true : comment.body) &&\n comment.createdAt > unreadSince\n );\n\n return unreadIndex >= 0 && unreadIndex < thread.comments.length\n ? unreadIndex\n : undefined;\n }, [\n firstCommentIndex,\n showDeletedComments,\n subscriptionStatus,\n thread.comments,\n unreadSince,\n ]);\n const [newIndex, setNewIndex] = useState<number>();\n const newIndicatorIndex = newIndex === undefined ? unreadIndex : newIndex;\n\n useEffect(() => {\n if (unreadIndex) {\n // Keep the \"new\" indicator at the lowest unread index.\n setNewIndex((persistedUnreadIndex) =>\n Math.min(persistedUnreadIndex ?? Infinity, unreadIndex)\n );\n }\n }, [unreadIndex]);\n\n const stopPropagation = useCallback((event: SyntheticEvent) => {\n event.stopPropagation();\n }, []);\n\n const handleResolvedChange = useCallback(\n (resolved: boolean) => {\n onResolvedChange?.(resolved);\n\n if (resolved) {\n markThreadAsResolved(thread.id);\n } else {\n markThreadAsUnresolved(thread.id);\n }\n },\n [\n markThreadAsResolved,\n markThreadAsUnresolved,\n onResolvedChange,\n thread.id,\n ]\n );\n\n const handleCommentDelete = useCallback(\n (comment: CommentData) => {\n onCommentDelete?.(comment);\n\n const filteredComments = thread.comments.filter(\n (comment) => comment.body\n );\n\n if (filteredComments.length <= 1) {\n onThreadDelete?.(thread);\n }\n },\n [onCommentDelete, onThreadDelete, thread]\n );\n\n return (\n <TooltipProvider>\n <div\n className={classNames(\n \"lb-root lb-thread\",\n showActions === \"hover\" && \"lb-thread:show-actions-hover\",\n className\n )}\n data-resolved={thread.resolved ? \"\" : undefined}\n data-unread={unreadIndex !== undefined ? \"\" : undefined}\n dir={$.dir}\n {...props}\n ref={forwardedRef}\n >\n <div className=\"lb-thread-comments\">\n {thread.comments.map((comment, index) => {\n const isFirstComment = index === firstCommentIndex;\n const isUnread =\n unreadIndex !== undefined && index >= unreadIndex;\n\n const children = (\n <Comment\n key={comment.id}\n overrides={overrides}\n className=\"lb-thread-comment\"\n data-unread={isUnread ? \"\" : undefined}\n comment={comment}\n indentContent={indentCommentContent}\n showDeleted={showDeletedComments}\n showActions={showActions}\n showReactions={showReactions}\n showAttachments={showAttachments}\n showComposerFormattingControls={\n showComposerFormattingControls\n }\n onCommentEdit={onCommentEdit}\n onCommentDelete={handleCommentDelete}\n onAuthorClick={onAuthorClick}\n onMentionClick={onMentionClick}\n onAttachmentClick={onAttachmentClick}\n autoMarkReadThreadId={\n index === lastCommentIndex && isUnread\n ? thread.id\n : undefined\n }\n additionalActionsClassName={\n isFirstComment ? \"lb-thread-actions\" : undefined\n }\n additionalActions={\n isFirstComment && showResolveAction ? (\n <Tooltip\n content={\n thread.resolved\n ? $.THREAD_UNRESOLVE\n : $.THREAD_RESOLVE\n }\n >\n <TogglePrimitive.Root\n pressed={thread.resolved}\n onPressedChange={handleResolvedChange}\n asChild\n >\n <Button\n className=\"lb-comment-action\"\n onClick={stopPropagation}\n aria-label={\n thread.resolved\n ? $.THREAD_UNRESOLVE\n : $.THREAD_RESOLVE\n }\n icon={\n thread.resolved ? (\n <ResolvedIcon />\n ) : (\n <ResolveIcon />\n )\n }\n />\n </TogglePrimitive.Root>\n </Tooltip>\n ) : null\n }\n />\n );\n\n return index === newIndicatorIndex &&\n newIndicatorIndex !== firstCommentIndex &&\n newIndicatorIndex <= lastCommentIndex ? (\n <Fragment key={comment.id}>\n <div\n className=\"lb-thread-new-indicator\"\n aria-label={$.THREAD_NEW_INDICATOR_DESCRIPTION}\n >\n <span className=\"lb-thread-new-indicator-label\">\n <ArrowDownIcon className=\"lb-thread-new-indicator-label-icon\" />\n {$.THREAD_NEW_INDICATOR}\n </span>\n </div>\n {children}\n </Fragment>\n ) : (\n children\n );\n })}\n </div>\n {showComposer && (\n <Composer\n className=\"lb-thread-composer\"\n threadId={thread.id}\n defaultCollapsed={showComposer === \"collapsed\" ? true : undefined}\n showAttachments={showAttachments}\n showFormattingControls={showComposerFormattingControls}\n onComposerSubmit={onComposerSubmit}\n overrides={{\n COMPOSER_PLACEHOLDER: $.THREAD_COMPOSER_PLACEHOLDER,\n COMPOSER_SEND: $.THREAD_COMPOSER_SEND,\n ...overrides,\n }}\n roomId={thread.roomId}\n />\n )}\n </div>\n </TooltipProvider>\n );\n }\n) as <M extends BaseMetadata = DM>(\n props: ThreadProps<M> & RefAttributes<HTMLDivElement>\n) => JSX.Element;\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AA2JO;AAAe;AAElB;AACE;AACuB;AACT;AACd;AACoB;AACJ;AACD;AACG;AACe;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACG;AAIL;AACA;AACA;AACA;AACE;AAEuD;AAEzD;AACE;AAE4D;AAE9D;AAAoD;AAC3C;AAET;AAEE;AACE;AAAA;AAIF;AACE;AAAO;AAIT;AAAoC;AAGZ;AAGxB;AAEI;AACH;AACD;AACA;AACA;AACO;AACP;AAEF;AACA;AAEA;AACE;AAEE;AAAA;AACwD;AACxD;AACF;AAGF;AACE;AAAsB;AAGxB;AAA6B;AAEzB;AAEA;AACE;AAA8B;AAE9B;AAAgC;AAClC;AACF;AACA;AACE;AACA;AACA;AACO;AACT;AAGF;AAA4B;AAExB;AAEA;AAAyC;AAClB;AAGvB;AACE;AAAuB;AACzB;AACF;AACwC;AAG1C;AACG;AACE;AACY;AACT;AAC2B;AAC3B;AACF;AACsC;AACQ;AACvC;AACH;AACC;AAEL;AAAC;AAAc;AAEX;AACA;AAGA;AACG;AAEC;AACU;AACmB;AAC7B;AACe;AACF;AACb;AACA;AACA;AACA;AAGA;AACiB;AACjB;AACA;AACA;AAIM;AAGmC;AAIpC;AAIS;AAGP;AACiB;AACC;AACV;AAEN;AACW;AACD;AAID;AAMS;AAGnB;AACF;AAEA;AAKV;AAGG;AACC;AAAC;AACW;AACI;AAEb;AAAe;AACd;AAAC;AAAwB;AAAqC;AAC3D;AAAA;AACL;AACF;AACC;AAAA;AAGH;AAEH;AACH;AAEG;AACW;AACO;AACuC;AACxD;AACwB;AACxB;AACW;AACe;AACP;AACd;AACL;AACe;AACjB;AAAA;AAEJ;AACF;AAGN;;"}
1
+ {"version":3,"file":"Thread.cjs","sources":["../../src/components/Thread.tsx"],"sourcesContent":["\"use client\";\n\nimport type {\n BaseMetadata,\n CommentData,\n DM,\n ThreadData,\n} from \"@liveblocks/core\";\nimport { useThreadSubscription } from \"@liveblocks/react\";\nimport {\n useMarkRoomThreadAsResolved,\n useMarkRoomThreadAsUnresolved,\n} from \"@liveblocks/react/_private\";\nimport * as TogglePrimitive from \"@radix-ui/react-toggle\";\nimport type {\n ComponentPropsWithoutRef,\n ForwardedRef,\n RefAttributes,\n SyntheticEvent,\n} from \"react\";\nimport {\n forwardRef,\n Fragment,\n useCallback,\n useEffect,\n useMemo,\n useState,\n} from \"react\";\n\nimport { ArrowDownIcon } from \"../icons/ArrowDown\";\nimport { ResolveIcon } from \"../icons/Resolve\";\nimport { ResolvedIcon } from \"../icons/Resolved\";\nimport type {\n CommentOverrides,\n ComposerOverrides,\n GlobalOverrides,\n ThreadOverrides,\n} from \"../overrides\";\nimport { useOverrides } from \"../overrides\";\nimport { classNames } from \"../utils/class-names\";\nimport { findLastIndex } from \"../utils/find-last-index\";\nimport type { CommentProps } from \"./Comment\";\nimport { Comment } from \"./Comment\";\nimport type { ComposerProps } from \"./Composer\";\nimport { Composer } from \"./Composer\";\nimport { Button } from \"./internal/Button\";\nimport { Tooltip, TooltipProvider } from \"./internal/Tooltip\";\n\nexport interface ThreadProps<M extends BaseMetadata = DM>\n extends ComponentPropsWithoutRef<\"div\"> {\n /**\n * The thread to display.\n */\n thread: ThreadData<M>;\n\n /**\n * How to show or hide the composer to reply to the thread.\n */\n showComposer?: boolean | \"collapsed\";\n\n /**\n * Whether to show the action to resolve the thread.\n */\n showResolveAction?: boolean;\n\n /**\n * How to show or hide the actions.\n */\n showActions?: CommentProps[\"showActions\"];\n\n /**\n * Whether to show reactions.\n */\n showReactions?: CommentProps[\"showReactions\"];\n\n /**\n * Whether to show the composer's formatting controls.\n */\n showComposerFormattingControls?: ComposerProps[\"showFormattingControls\"];\n\n /**\n * Whether to indent the comments' content.\n */\n indentCommentContent?: CommentProps[\"indentContent\"];\n\n /**\n * Whether to show deleted comments.\n */\n showDeletedComments?: CommentProps[\"showDeleted\"];\n\n /**\n * Whether to show attachments.\n */\n showAttachments?: boolean;\n\n /**\n * The event handler called when changing the resolved status.\n */\n onResolvedChange?: (resolved: boolean) => void;\n\n /**\n * The event handler called when a comment is edited.\n */\n onCommentEdit?: CommentProps[\"onCommentEdit\"];\n\n /**\n * The event handler called when a comment is deleted.\n */\n onCommentDelete?: CommentProps[\"onCommentDelete\"];\n\n /**\n * The event handler called when the thread is deleted.\n * A thread is deleted when all its comments are deleted.\n */\n onThreadDelete?: (thread: ThreadData<M>) => void;\n\n /**\n * The event handler called when clicking on a comment's author.\n */\n onAuthorClick?: CommentProps[\"onAuthorClick\"];\n\n /**\n * The event handler called when clicking on a mention.\n */\n onMentionClick?: CommentProps[\"onMentionClick\"];\n\n /**\n * The event handler called when clicking on a comment's attachment.\n */\n onAttachmentClick?: CommentProps[\"onAttachmentClick\"];\n\n /**\n * The event handler called when the composer is submitted.\n */\n onComposerSubmit?: ComposerProps[\"onComposerSubmit\"];\n\n /**\n * Override the component's strings.\n */\n overrides?: Partial<\n GlobalOverrides & ThreadOverrides & CommentOverrides & ComposerOverrides\n >;\n}\n\n/**\n * Displays a thread of comments, with a composer to reply\n * to it.\n *\n * @example\n * <>\n * {threads.map((thread) => (\n * <Thread key={thread.id} thread={thread} />\n * ))}\n * </>\n */\nexport const Thread = forwardRef(\n <M extends BaseMetadata = DM>(\n {\n thread,\n indentCommentContent = true,\n showActions = \"hover\",\n showDeletedComments,\n showResolveAction = true,\n showReactions = true,\n showComposer = \"collapsed\",\n showAttachments = true,\n showComposerFormattingControls = true,\n onResolvedChange,\n onCommentEdit,\n onCommentDelete,\n onThreadDelete,\n onAuthorClick,\n onMentionClick,\n onAttachmentClick,\n onComposerSubmit,\n overrides,\n className,\n ...props\n }: ThreadProps<M>,\n forwardedRef: ForwardedRef<HTMLDivElement>\n ) => {\n const markThreadAsResolved = useMarkRoomThreadAsResolved(thread.roomId);\n const markThreadAsUnresolved = useMarkRoomThreadAsUnresolved(thread.roomId);\n const $ = useOverrides(overrides);\n const firstCommentIndex = useMemo(() => {\n return showDeletedComments\n ? 0\n : thread.comments.findIndex((comment) => comment.body);\n }, [showDeletedComments, thread.comments]);\n const lastCommentIndex = useMemo(() => {\n return showDeletedComments\n ? thread.comments.length - 1\n : findLastIndex(thread.comments, (comment) => comment.body);\n }, [showDeletedComments, thread.comments]);\n const { status: subscriptionStatus, unreadSince } = useThreadSubscription(\n thread.id\n );\n const unreadIndex = useMemo(() => {\n // The user is not subscribed to this thread.\n if (subscriptionStatus !== \"subscribed\") {\n return;\n }\n\n // The user hasn't read the thread yet, so all comments are unread.\n if (unreadSince === null) {\n return firstCommentIndex;\n }\n\n // The user has read the thread, so we find the first unread comment.\n const unreadIndex = thread.comments.findIndex(\n (comment) =>\n (showDeletedComments ? true : comment.body) &&\n comment.createdAt > unreadSince\n );\n\n return unreadIndex >= 0 && unreadIndex < thread.comments.length\n ? unreadIndex\n : undefined;\n }, [\n firstCommentIndex,\n showDeletedComments,\n subscriptionStatus,\n thread.comments,\n unreadSince,\n ]);\n const [newIndex, setNewIndex] = useState<number>();\n const newIndicatorIndex = newIndex === undefined ? unreadIndex : newIndex;\n\n useEffect(() => {\n if (unreadIndex) {\n // Keep the \"new\" indicator at the lowest unread index.\n setNewIndex((persistedUnreadIndex) =>\n Math.min(persistedUnreadIndex ?? Infinity, unreadIndex)\n );\n }\n }, [unreadIndex]);\n\n const stopPropagation = useCallback((event: SyntheticEvent) => {\n event.stopPropagation();\n }, []);\n\n const handleResolvedChange = useCallback(\n (resolved: boolean) => {\n onResolvedChange?.(resolved);\n\n if (resolved) {\n markThreadAsResolved(thread.id);\n } else {\n markThreadAsUnresolved(thread.id);\n }\n },\n [\n markThreadAsResolved,\n markThreadAsUnresolved,\n onResolvedChange,\n thread.id,\n ]\n );\n\n const handleCommentDelete = useCallback(\n (comment: CommentData) => {\n onCommentDelete?.(comment);\n\n const filteredComments = thread.comments.filter(\n (comment) => comment.body\n );\n\n if (filteredComments.length <= 1) {\n onThreadDelete?.(thread);\n }\n },\n [onCommentDelete, onThreadDelete, thread]\n );\n\n return (\n <TooltipProvider>\n <div\n className={classNames(\n \"lb-root lb-thread\",\n showActions === \"hover\" && \"lb-thread:show-actions-hover\",\n className\n )}\n data-resolved={thread.resolved ? \"\" : undefined}\n data-unread={unreadIndex !== undefined ? \"\" : undefined}\n dir={$.dir}\n {...props}\n ref={forwardedRef}\n >\n <div className=\"lb-thread-comments\">\n {thread.comments.map((comment, index) => {\n const isFirstComment = index === firstCommentIndex;\n const isUnread =\n unreadIndex !== undefined && index >= unreadIndex;\n\n const children = (\n <Comment\n key={comment.id}\n overrides={overrides}\n className=\"lb-thread-comment\"\n data-unread={isUnread ? \"\" : undefined}\n comment={comment}\n indentContent={indentCommentContent}\n showDeleted={showDeletedComments}\n showActions={showActions}\n showReactions={showReactions}\n showAttachments={showAttachments}\n showComposerFormattingControls={\n showComposerFormattingControls\n }\n onCommentEdit={onCommentEdit}\n onCommentDelete={handleCommentDelete}\n onAuthorClick={onAuthorClick}\n onMentionClick={onMentionClick}\n onAttachmentClick={onAttachmentClick}\n autoMarkReadThreadId={\n index === lastCommentIndex && isUnread\n ? thread.id\n : undefined\n }\n additionalActionsClassName={\n isFirstComment ? \"lb-thread-actions\" : undefined\n }\n additionalActions={\n isFirstComment && showResolveAction ? (\n <Tooltip\n content={\n thread.resolved\n ? $.THREAD_UNRESOLVE\n : $.THREAD_RESOLVE\n }\n >\n <TogglePrimitive.Root\n pressed={thread.resolved}\n onPressedChange={handleResolvedChange}\n asChild\n >\n <Button\n className=\"lb-comment-action\"\n onClick={stopPropagation}\n aria-label={\n thread.resolved\n ? $.THREAD_UNRESOLVE\n : $.THREAD_RESOLVE\n }\n icon={\n thread.resolved ? (\n <ResolvedIcon />\n ) : (\n <ResolveIcon />\n )\n }\n />\n </TogglePrimitive.Root>\n </Tooltip>\n ) : null\n }\n />\n );\n\n return index === newIndicatorIndex &&\n newIndicatorIndex !== firstCommentIndex &&\n newIndicatorIndex <= lastCommentIndex ? (\n <Fragment key={comment.id}>\n <div\n className=\"lb-thread-new-indicator\"\n aria-label={$.THREAD_NEW_INDICATOR_DESCRIPTION}\n >\n <span className=\"lb-thread-new-indicator-label\">\n <ArrowDownIcon className=\"lb-thread-new-indicator-label-icon\" />\n {$.THREAD_NEW_INDICATOR}\n </span>\n </div>\n {children}\n </Fragment>\n ) : (\n children\n );\n })}\n </div>\n {showComposer && (\n <Composer\n className=\"lb-thread-composer\"\n threadId={thread.id}\n defaultCollapsed={showComposer === \"collapsed\" ? true : undefined}\n showAttachments={showAttachments}\n showFormattingControls={showComposerFormattingControls}\n onComposerSubmit={onComposerSubmit}\n overrides={{\n COMPOSER_PLACEHOLDER: $.THREAD_COMPOSER_PLACEHOLDER,\n COMPOSER_SEND: $.THREAD_COMPOSER_SEND,\n ...overrides,\n }}\n roomId={thread.roomId}\n />\n )}\n </div>\n </TooltipProvider>\n );\n }\n) as <M extends BaseMetadata = DM>(\n props: ThreadProps<M> & RefAttributes<HTMLDivElement>\n) => JSX.Element;\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AA2JO;AAAe;AAElB;AACE;AACuB;AACT;AACd;AACoB;AACJ;AACD;AACG;AACe;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACG;AAIL;AACA;AACA;AACA;AACE;AAEuD;AAEzD;AACE;AAE4D;AAE9D;AAAoD;AAC3C;AAET;AAEE;AACE;AAAA;AAIF;AACE;AAAO;AAIT;AAAoC;AAGZ;AAGxB;AAEI;AACH;AACD;AACA;AACA;AACO;AACP;AAEF;AACA;AAEA;AACE;AAEE;AAAA;AACwD;AACxD;AACF;AAGF;AACE;AAAsB;AAGxB;AAA6B;AAEzB;AAEA;AACE;AAA8B;AAE9B;AAAgC;AAClC;AACF;AACA;AACE;AACA;AACA;AACO;AACT;AAGF;AAA4B;AAExB;AAEA;AAAyC;AAClB;AAGvB;AACE;AAAuB;AACzB;AACF;AACwC;AAG1C;AACG;AACE;AACY;AACT;AAC2B;AAC3B;AACF;AACsC;AACQ;AACvC;AACH;AACC;AAEL;AAAC;AAAc;AAEX;AACA;AAGA;AACG;AAEC;AACU;AACmB;AAC7B;AACe;AACF;AACb;AACA;AACA;AACA;AAGA;AACiB;AACjB;AACA;AACA;AAIM;AAGmC;AAIpC;AAIS;AAGP;AACiB;AACC;AACV;AAEN;AACW;AACD;AAID;AAMS;AAGnB;AACF;AAEA;AAKV;AAGG;AACC;AAAC;AACW;AACI;AAEb;AAAe;AACd;AAAC;AAAwB;AAAqC;AAC3D;AAAA;AACL;AACF;AACC;AAAA;AAGH;AAEH;AACH;AAEG;AACW;AACO;AACuC;AACxD;AACwB;AACxB;AACW;AACe;AACP;AACd;AACL;AACe;AACjB;AAAA;AAEJ;AACF;AAGN;;"}