@liveblocks/react-ui 1.12.0-initial1

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 (391) hide show
  1. package/README.md +65 -0
  2. package/dist/components/Comment.js +473 -0
  3. package/dist/components/Comment.js.map +1 -0
  4. package/dist/components/Comment.mjs +447 -0
  5. package/dist/components/Comment.mjs.map +1 -0
  6. package/dist/components/Composer.js +299 -0
  7. package/dist/components/Composer.js.map +1 -0
  8. package/dist/components/Composer.mjs +297 -0
  9. package/dist/components/Composer.mjs.map +1 -0
  10. package/dist/components/InboxNotification.js +374 -0
  11. package/dist/components/InboxNotification.js.map +1 -0
  12. package/dist/components/InboxNotification.mjs +372 -0
  13. package/dist/components/InboxNotification.mjs.map +1 -0
  14. package/dist/components/InboxNotificationList.js +19 -0
  15. package/dist/components/InboxNotificationList.js.map +1 -0
  16. package/dist/components/InboxNotificationList.mjs +17 -0
  17. package/dist/components/InboxNotificationList.mjs.map +1 -0
  18. package/dist/components/Thread.js +188 -0
  19. package/dist/components/Thread.js.map +1 -0
  20. package/dist/components/Thread.mjs +167 -0
  21. package/dist/components/Thread.mjs.map +1 -0
  22. package/dist/components/internal/Attribution.js +26 -0
  23. package/dist/components/internal/Attribution.js.map +1 -0
  24. package/dist/components/internal/Attribution.mjs +24 -0
  25. package/dist/components/internal/Attribution.mjs.map +1 -0
  26. package/dist/components/internal/Avatar.js +40 -0
  27. package/dist/components/internal/Avatar.js.map +1 -0
  28. package/dist/components/internal/Avatar.mjs +38 -0
  29. package/dist/components/internal/Avatar.mjs.map +1 -0
  30. package/dist/components/internal/Button.js +24 -0
  31. package/dist/components/internal/Button.js.map +1 -0
  32. package/dist/components/internal/Button.mjs +22 -0
  33. package/dist/components/internal/Button.mjs.map +1 -0
  34. package/dist/components/internal/Dropdown.js +72 -0
  35. package/dist/components/internal/Dropdown.js.map +1 -0
  36. package/dist/components/internal/Dropdown.mjs +47 -0
  37. package/dist/components/internal/Dropdown.mjs.map +1 -0
  38. package/dist/components/internal/Emoji.js +18 -0
  39. package/dist/components/internal/Emoji.js.map +1 -0
  40. package/dist/components/internal/Emoji.mjs +16 -0
  41. package/dist/components/internal/Emoji.mjs.map +1 -0
  42. package/dist/components/internal/EmojiPicker.js +186 -0
  43. package/dist/components/internal/EmojiPicker.js.map +1 -0
  44. package/dist/components/internal/EmojiPicker.mjs +162 -0
  45. package/dist/components/internal/EmojiPicker.mjs.map +1 -0
  46. package/dist/components/internal/Icon.js +28 -0
  47. package/dist/components/internal/Icon.js.map +1 -0
  48. package/dist/components/internal/Icon.mjs +24 -0
  49. package/dist/components/internal/Icon.mjs.map +1 -0
  50. package/dist/components/internal/InboxNotificationThread.js +116 -0
  51. package/dist/components/internal/InboxNotificationThread.js.map +1 -0
  52. package/dist/components/internal/InboxNotificationThread.mjs +112 -0
  53. package/dist/components/internal/InboxNotificationThread.mjs.map +1 -0
  54. package/dist/components/internal/List.js +34 -0
  55. package/dist/components/internal/List.js.map +1 -0
  56. package/dist/components/internal/List.mjs +32 -0
  57. package/dist/components/internal/List.mjs.map +1 -0
  58. package/dist/components/internal/Room.js +22 -0
  59. package/dist/components/internal/Room.js.map +1 -0
  60. package/dist/components/internal/Room.mjs +20 -0
  61. package/dist/components/internal/Room.mjs.map +1 -0
  62. package/dist/components/internal/Tooltip.js +91 -0
  63. package/dist/components/internal/Tooltip.js.map +1 -0
  64. package/dist/components/internal/Tooltip.mjs +65 -0
  65. package/dist/components/internal/Tooltip.mjs.map +1 -0
  66. package/dist/components/internal/User.js +41 -0
  67. package/dist/components/internal/User.js.map +1 -0
  68. package/dist/components/internal/User.mjs +39 -0
  69. package/dist/components/internal/User.mjs.map +1 -0
  70. package/dist/components.js +64 -0
  71. package/dist/components.js.map +1 -0
  72. package/dist/components.mjs +41 -0
  73. package/dist/components.mjs.map +1 -0
  74. package/dist/config.js +33 -0
  75. package/dist/config.js.map +1 -0
  76. package/dist/config.mjs +30 -0
  77. package/dist/config.mjs.map +1 -0
  78. package/dist/constants.js +10 -0
  79. package/dist/constants.js.map +1 -0
  80. package/dist/constants.mjs +6 -0
  81. package/dist/constants.mjs.map +1 -0
  82. package/dist/icons/ArrowDown.js +15 -0
  83. package/dist/icons/ArrowDown.js.map +1 -0
  84. package/dist/icons/ArrowDown.mjs +13 -0
  85. package/dist/icons/ArrowDown.mjs.map +1 -0
  86. package/dist/icons/Check.js +15 -0
  87. package/dist/icons/Check.js.map +1 -0
  88. package/dist/icons/Check.mjs +13 -0
  89. package/dist/icons/Check.mjs.map +1 -0
  90. package/dist/icons/Cross.js +17 -0
  91. package/dist/icons/Cross.js.map +1 -0
  92. package/dist/icons/Cross.mjs +15 -0
  93. package/dist/icons/Cross.mjs.map +1 -0
  94. package/dist/icons/Delete.js +15 -0
  95. package/dist/icons/Delete.js.map +1 -0
  96. package/dist/icons/Delete.mjs +13 -0
  97. package/dist/icons/Delete.mjs.map +1 -0
  98. package/dist/icons/Edit.js +15 -0
  99. package/dist/icons/Edit.js.map +1 -0
  100. package/dist/icons/Edit.mjs +13 -0
  101. package/dist/icons/Edit.mjs.map +1 -0
  102. package/dist/icons/Ellipsis.js +26 -0
  103. package/dist/icons/Ellipsis.js.map +1 -0
  104. package/dist/icons/Ellipsis.mjs +24 -0
  105. package/dist/icons/Ellipsis.mjs.map +1 -0
  106. package/dist/icons/Emoji.js +27 -0
  107. package/dist/icons/Emoji.js.map +1 -0
  108. package/dist/icons/Emoji.mjs +25 -0
  109. package/dist/icons/Emoji.mjs.map +1 -0
  110. package/dist/icons/EmojiAdd.js +29 -0
  111. package/dist/icons/EmojiAdd.js.map +1 -0
  112. package/dist/icons/EmojiAdd.mjs +27 -0
  113. package/dist/icons/EmojiAdd.mjs.map +1 -0
  114. package/dist/icons/Mention.js +17 -0
  115. package/dist/icons/Mention.js.map +1 -0
  116. package/dist/icons/Mention.mjs +15 -0
  117. package/dist/icons/Mention.mjs.map +1 -0
  118. package/dist/icons/Missing.js +19 -0
  119. package/dist/icons/Missing.js.map +1 -0
  120. package/dist/icons/Missing.mjs +17 -0
  121. package/dist/icons/Missing.mjs.map +1 -0
  122. package/dist/icons/Resolve.js +19 -0
  123. package/dist/icons/Resolve.js.map +1 -0
  124. package/dist/icons/Resolve.mjs +17 -0
  125. package/dist/icons/Resolve.mjs.map +1 -0
  126. package/dist/icons/Resolved.js +21 -0
  127. package/dist/icons/Resolved.js.map +1 -0
  128. package/dist/icons/Resolved.mjs +19 -0
  129. package/dist/icons/Resolved.mjs.map +1 -0
  130. package/dist/icons/Search.js +15 -0
  131. package/dist/icons/Search.js.map +1 -0
  132. package/dist/icons/Search.mjs +13 -0
  133. package/dist/icons/Search.mjs.map +1 -0
  134. package/dist/icons/Send.js +15 -0
  135. package/dist/icons/Send.js.map +1 -0
  136. package/dist/icons/Send.mjs +13 -0
  137. package/dist/icons/Send.mjs.map +1 -0
  138. package/dist/icons/Spinner.js +22 -0
  139. package/dist/icons/Spinner.js.map +1 -0
  140. package/dist/icons/Spinner.mjs +20 -0
  141. package/dist/icons/Spinner.mjs.map +1 -0
  142. package/dist/index.d.mts +476 -0
  143. package/dist/index.d.ts +476 -0
  144. package/dist/index.js +20 -0
  145. package/dist/index.js.map +1 -0
  146. package/dist/index.mjs +11 -0
  147. package/dist/index.mjs.map +1 -0
  148. package/dist/overrides.js +100 -0
  149. package/dist/overrides.js.map +1 -0
  150. package/dist/overrides.mjs +77 -0
  151. package/dist/overrides.mjs.map +1 -0
  152. package/dist/primitives/Comment/index.js +113 -0
  153. package/dist/primitives/Comment/index.js.map +1 -0
  154. package/dist/primitives/Comment/index.mjs +109 -0
  155. package/dist/primitives/Comment/index.mjs.map +1 -0
  156. package/dist/primitives/Comment/utils.js +25 -0
  157. package/dist/primitives/Comment/utils.js.map +1 -0
  158. package/dist/primitives/Comment/utils.mjs +20 -0
  159. package/dist/primitives/Comment/utils.mjs.map +1 -0
  160. package/dist/primitives/Composer/contexts.js +34 -0
  161. package/dist/primitives/Composer/contexts.js.map +1 -0
  162. package/dist/primitives/Composer/contexts.mjs +27 -0
  163. package/dist/primitives/Composer/contexts.mjs.map +1 -0
  164. package/dist/primitives/Composer/index.js +771 -0
  165. package/dist/primitives/Composer/index.js.map +1 -0
  166. package/dist/primitives/Composer/index.mjs +762 -0
  167. package/dist/primitives/Composer/index.mjs.map +1 -0
  168. package/dist/primitives/Composer/utils.js +102 -0
  169. package/dist/primitives/Composer/utils.js.map +1 -0
  170. package/dist/primitives/Composer/utils.mjs +93 -0
  171. package/dist/primitives/Composer/utils.mjs.map +1 -0
  172. package/dist/primitives/EmojiPicker/contexts.js +19 -0
  173. package/dist/primitives/EmojiPicker/contexts.js.map +1 -0
  174. package/dist/primitives/EmojiPicker/contexts.mjs +16 -0
  175. package/dist/primitives/EmojiPicker/contexts.mjs.map +1 -0
  176. package/dist/primitives/EmojiPicker/index.js +434 -0
  177. package/dist/primitives/EmojiPicker/index.js.map +1 -0
  178. package/dist/primitives/EmojiPicker/index.mjs +430 -0
  179. package/dist/primitives/EmojiPicker/index.mjs.map +1 -0
  180. package/dist/primitives/EmojiPicker/utils.js +329 -0
  181. package/dist/primitives/EmojiPicker/utils.js.map +1 -0
  182. package/dist/primitives/EmojiPicker/utils.mjs +325 -0
  183. package/dist/primitives/EmojiPicker/utils.mjs.map +1 -0
  184. package/dist/primitives/Timestamp.js +121 -0
  185. package/dist/primitives/Timestamp.js.map +1 -0
  186. package/dist/primitives/Timestamp.mjs +119 -0
  187. package/dist/primitives/Timestamp.mjs.map +1 -0
  188. package/dist/primitives/index.d.mts +502 -0
  189. package/dist/primitives/index.d.ts +502 -0
  190. package/dist/primitives/index.js +16 -0
  191. package/dist/primitives/index.js.map +1 -0
  192. package/dist/primitives/index.mjs +9 -0
  193. package/dist/primitives/index.mjs.map +1 -0
  194. package/dist/primitives/internal/Emoji.js +30 -0
  195. package/dist/primitives/internal/Emoji.js.map +1 -0
  196. package/dist/primitives/internal/Emoji.mjs +28 -0
  197. package/dist/primitives/internal/Emoji.mjs.map +1 -0
  198. package/dist/shared.js +21 -0
  199. package/dist/shared.js.map +1 -0
  200. package/dist/shared.mjs +19 -0
  201. package/dist/shared.mjs.map +1 -0
  202. package/dist/slate/plugins/auto-formatting.js +83 -0
  203. package/dist/slate/plugins/auto-formatting.js.map +1 -0
  204. package/dist/slate/plugins/auto-formatting.mjs +81 -0
  205. package/dist/slate/plugins/auto-formatting.mjs.map +1 -0
  206. package/dist/slate/plugins/auto-links.js +175 -0
  207. package/dist/slate/plugins/auto-links.js.map +1 -0
  208. package/dist/slate/plugins/auto-links.mjs +172 -0
  209. package/dist/slate/plugins/auto-links.mjs.map +1 -0
  210. package/dist/slate/plugins/empty-clear-formatting.js +18 -0
  211. package/dist/slate/plugins/empty-clear-formatting.js.map +1 -0
  212. package/dist/slate/plugins/empty-clear-formatting.mjs +16 -0
  213. package/dist/slate/plugins/empty-clear-formatting.mjs.map +1 -0
  214. package/dist/slate/plugins/mentions.js +112 -0
  215. package/dist/slate/plugins/mentions.js.map +1 -0
  216. package/dist/slate/plugins/mentions.mjs +105 -0
  217. package/dist/slate/plugins/mentions.mjs.map +1 -0
  218. package/dist/slate/utils/get-character.js +50 -0
  219. package/dist/slate/utils/get-character.js.map +1 -0
  220. package/dist/slate/utils/get-character.mjs +47 -0
  221. package/dist/slate/utils/get-character.mjs.map +1 -0
  222. package/dist/slate/utils/get-dom-range.js +17 -0
  223. package/dist/slate/utils/get-dom-range.js.map +1 -0
  224. package/dist/slate/utils/get-dom-range.mjs +15 -0
  225. package/dist/slate/utils/get-dom-range.mjs.map +1 -0
  226. package/dist/slate/utils/get-match-range.js +53 -0
  227. package/dist/slate/utils/get-match-range.js.map +1 -0
  228. package/dist/slate/utils/get-match-range.mjs +51 -0
  229. package/dist/slate/utils/get-match-range.mjs.map +1 -0
  230. package/dist/slate/utils/is-empty-string.js +8 -0
  231. package/dist/slate/utils/is-empty-string.js.map +1 -0
  232. package/dist/slate/utils/is-empty-string.mjs +6 -0
  233. package/dist/slate/utils/is-empty-string.mjs.map +1 -0
  234. package/dist/slate/utils/is-empty.js +10 -0
  235. package/dist/slate/utils/is-empty.js.map +1 -0
  236. package/dist/slate/utils/is-empty.mjs +8 -0
  237. package/dist/slate/utils/is-empty.mjs.map +1 -0
  238. package/dist/slate/utils/is-selection-collapsed.js +10 -0
  239. package/dist/slate/utils/is-selection-collapsed.js.map +1 -0
  240. package/dist/slate/utils/is-selection-collapsed.mjs +8 -0
  241. package/dist/slate/utils/is-selection-collapsed.mjs.map +1 -0
  242. package/dist/slate/utils/marks.js +43 -0
  243. package/dist/slate/utils/marks.js.map +1 -0
  244. package/dist/slate/utils/marks.mjs +38 -0
  245. package/dist/slate/utils/marks.mjs.map +1 -0
  246. package/dist/utils/Persist.js +85 -0
  247. package/dist/utils/Persist.js.map +1 -0
  248. package/dist/utils/Persist.mjs +81 -0
  249. package/dist/utils/Persist.mjs.map +1 -0
  250. package/dist/utils/Portal.js +27 -0
  251. package/dist/utils/Portal.js.map +1 -0
  252. package/dist/utils/Portal.mjs +25 -0
  253. package/dist/utils/Portal.mjs.map +1 -0
  254. package/dist/utils/capitalize.js +8 -0
  255. package/dist/utils/capitalize.js.map +1 -0
  256. package/dist/utils/capitalize.mjs +6 -0
  257. package/dist/utils/capitalize.mjs.map +1 -0
  258. package/dist/utils/chunk.js +12 -0
  259. package/dist/utils/chunk.js.map +1 -0
  260. package/dist/utils/chunk.mjs +10 -0
  261. package/dist/utils/chunk.mjs.map +1 -0
  262. package/dist/utils/clamp.js +8 -0
  263. package/dist/utils/clamp.js.map +1 -0
  264. package/dist/utils/clamp.mjs +6 -0
  265. package/dist/utils/clamp.mjs.map +1 -0
  266. package/dist/utils/class-names.js +8 -0
  267. package/dist/utils/class-names.js.map +1 -0
  268. package/dist/utils/class-names.mjs +6 -0
  269. package/dist/utils/class-names.mjs.map +1 -0
  270. package/dist/utils/exists.js +8 -0
  271. package/dist/utils/exists.js.map +1 -0
  272. package/dist/utils/exists.mjs +6 -0
  273. package/dist/utils/exists.mjs.map +1 -0
  274. package/dist/utils/find-last-index.js +15 -0
  275. package/dist/utils/find-last-index.js.map +1 -0
  276. package/dist/utils/find-last-index.mjs +13 -0
  277. package/dist/utils/find-last-index.mjs.map +1 -0
  278. package/dist/utils/flush-sync.js +12 -0
  279. package/dist/utils/flush-sync.js.map +1 -0
  280. package/dist/utils/flush-sync.mjs +10 -0
  281. package/dist/utils/flush-sync.mjs.map +1 -0
  282. package/dist/utils/get-initials.js +13 -0
  283. package/dist/utils/get-initials.js.map +1 -0
  284. package/dist/utils/get-initials.mjs +11 -0
  285. package/dist/utils/get-initials.mjs.map +1 -0
  286. package/dist/utils/intl.js +24 -0
  287. package/dist/utils/intl.js.map +1 -0
  288. package/dist/utils/intl.mjs +20 -0
  289. package/dist/utils/intl.mjs.map +1 -0
  290. package/dist/utils/is-apple.js +9 -0
  291. package/dist/utils/is-apple.js.map +1 -0
  292. package/dist/utils/is-apple.mjs +7 -0
  293. package/dist/utils/is-apple.mjs.map +1 -0
  294. package/dist/utils/is-key.js +26 -0
  295. package/dist/utils/is-key.js.map +1 -0
  296. package/dist/utils/is-key.mjs +24 -0
  297. package/dist/utils/is-key.mjs.map +1 -0
  298. package/dist/utils/memoize.js +19 -0
  299. package/dist/utils/memoize.js.map +1 -0
  300. package/dist/utils/memoize.mjs +17 -0
  301. package/dist/utils/memoize.mjs.map +1 -0
  302. package/dist/utils/pluralize.js +8 -0
  303. package/dist/utils/pluralize.js.map +1 -0
  304. package/dist/utils/pluralize.mjs +6 -0
  305. package/dist/utils/pluralize.mjs.map +1 -0
  306. package/dist/utils/request-idle-callback.js +15 -0
  307. package/dist/utils/request-idle-callback.js.map +1 -0
  308. package/dist/utils/request-idle-callback.mjs +12 -0
  309. package/dist/utils/request-idle-callback.mjs.map +1 -0
  310. package/dist/utils/request-submit.js +20 -0
  311. package/dist/utils/request-submit.js.map +1 -0
  312. package/dist/utils/request-submit.mjs +18 -0
  313. package/dist/utils/request-submit.mjs.map +1 -0
  314. package/dist/utils/url.js +22 -0
  315. package/dist/utils/url.js.map +1 -0
  316. package/dist/utils/url.mjs +20 -0
  317. package/dist/utils/url.mjs.map +1 -0
  318. package/dist/utils/use-controllable-state.js +34 -0
  319. package/dist/utils/use-controllable-state.js.map +1 -0
  320. package/dist/utils/use-controllable-state.mjs +32 -0
  321. package/dist/utils/use-controllable-state.mjs.map +1 -0
  322. package/dist/utils/use-id.js +29 -0
  323. package/dist/utils/use-id.js.map +1 -0
  324. package/dist/utils/use-id.mjs +27 -0
  325. package/dist/utils/use-id.mjs.map +1 -0
  326. package/dist/utils/use-index.js +32 -0
  327. package/dist/utils/use-index.js.map +1 -0
  328. package/dist/utils/use-index.mjs +30 -0
  329. package/dist/utils/use-index.mjs.map +1 -0
  330. package/dist/utils/use-initial.js +10 -0
  331. package/dist/utils/use-initial.js.map +1 -0
  332. package/dist/utils/use-initial.mjs +8 -0
  333. package/dist/utils/use-initial.mjs.map +1 -0
  334. package/dist/utils/use-interval.js +24 -0
  335. package/dist/utils/use-interval.js.map +1 -0
  336. package/dist/utils/use-interval.mjs +22 -0
  337. package/dist/utils/use-interval.mjs.map +1 -0
  338. package/dist/utils/use-latest.js +14 -0
  339. package/dist/utils/use-latest.js.map +1 -0
  340. package/dist/utils/use-latest.mjs +12 -0
  341. package/dist/utils/use-latest.mjs.map +1 -0
  342. package/dist/utils/use-layout-effect.js +8 -0
  343. package/dist/utils/use-layout-effect.js.map +1 -0
  344. package/dist/utils/use-layout-effect.mjs +6 -0
  345. package/dist/utils/use-layout-effect.mjs.map +1 -0
  346. package/dist/utils/use-refs.js +24 -0
  347. package/dist/utils/use-refs.js.map +1 -0
  348. package/dist/utils/use-refs.mjs +22 -0
  349. package/dist/utils/use-refs.mjs.map +1 -0
  350. package/dist/utils/use-rerender.js +14 -0
  351. package/dist/utils/use-rerender.js.map +1 -0
  352. package/dist/utils/use-rerender.mjs +12 -0
  353. package/dist/utils/use-rerender.mjs.map +1 -0
  354. package/dist/utils/use-transition.js +12 -0
  355. package/dist/utils/use-transition.js.map +1 -0
  356. package/dist/utils/use-transition.mjs +10 -0
  357. package/dist/utils/use-transition.mjs.map +1 -0
  358. package/dist/utils/use-visible.js +48 -0
  359. package/dist/utils/use-visible.js.map +1 -0
  360. package/dist/utils/use-visible.mjs +46 -0
  361. package/dist/utils/use-visible.mjs.map +1 -0
  362. package/dist/utils/visually-hidden.js +17 -0
  363. package/dist/utils/visually-hidden.js.map +1 -0
  364. package/dist/utils/visually-hidden.mjs +15 -0
  365. package/dist/utils/visually-hidden.mjs.map +1 -0
  366. package/dist/utils/wrap.js +9 -0
  367. package/dist/utils/wrap.js.map +1 -0
  368. package/dist/utils/wrap.mjs +7 -0
  369. package/dist/utils/wrap.mjs.map +1 -0
  370. package/dist/version.js +10 -0
  371. package/dist/version.js.map +1 -0
  372. package/dist/version.mjs +6 -0
  373. package/dist/version.mjs.map +1 -0
  374. package/package.json +142 -0
  375. package/primitives/README.md +5 -0
  376. package/primitives/package.json +4 -0
  377. package/src/styles/constants.css +17 -0
  378. package/src/styles/dark/attributes.css +8 -0
  379. package/src/styles/dark/index.css +29 -0
  380. package/src/styles/dark/media-query.css +7 -0
  381. package/src/styles/index.css +1437 -0
  382. package/src/styles/utils.css +36 -0
  383. package/styles/dark/attributes.css +1 -0
  384. package/styles/dark/attributes.css.d.ts +1 -0
  385. package/styles/dark/attributes.css.map +1 -0
  386. package/styles/dark/media-query.css +1 -0
  387. package/styles/dark/media-query.css.d.ts +1 -0
  388. package/styles/dark/media-query.css.map +1 -0
  389. package/styles.css +1 -0
  390. package/styles.css.d.ts +1 -0
  391. package/styles.css.map +1 -0
@@ -0,0 +1,77 @@
1
+ 'use client';
2
+ import * as React from 'react';
3
+ import { createContext, useContext, useMemo } from 'react';
4
+ import { Emoji } from './components/internal/Emoji.mjs';
5
+ import { pluralize } from './utils/pluralize.mjs';
6
+
7
+ const defaultOverrides = {
8
+ locale: "en",
9
+ dir: "ltr",
10
+ USER_SELF: "you",
11
+ USER_UNKNOWN: "Anonymous",
12
+ LIST_REMAINING: (count) => `${count} more`,
13
+ LIST_REMAINING_USERS: (count) => `${count} ${pluralize(count, "other")}`,
14
+ LIST_REMAINING_COMMENTS: (count) => `${count} more ${pluralize(count, "comment")}`,
15
+ EMOJI_PICKER_SEARCH_PLACEHOLDER: "Search\u2026",
16
+ EMOJI_PICKER_EMPTY: "No emoji found.",
17
+ EMOJI_PICKER_ERROR: () => "There was an error while getting the list of emoji.",
18
+ COMPOSER_INSERT_MENTION: "Mention someone",
19
+ COMPOSER_INSERT_EMOJI: "Add emoji",
20
+ COMPOSER_PLACEHOLDER: "Write a comment\u2026",
21
+ COMPOSER_SEND: "Send",
22
+ COMMENT_EDITED: "(edited)",
23
+ COMMENT_DELETED: "This comment has been deleted.",
24
+ COMMENT_MORE: "More",
25
+ COMMENT_EDIT: "Edit comment",
26
+ COMMENT_EDIT_COMPOSER_PLACEHOLDER: "Edit comment\u2026",
27
+ COMMENT_EDIT_COMPOSER_CANCEL: "Cancel",
28
+ COMMENT_EDIT_COMPOSER_SAVE: "Save",
29
+ COMMENT_DELETE: "Delete comment",
30
+ COMMENT_ADD_REACTION: "Add reaction",
31
+ COMMENT_REACTION_LIST: (list, emoji) => /* @__PURE__ */ React.createElement(React.Fragment, null, list, " reacted with ", /* @__PURE__ */ React.createElement(Emoji, {
32
+ emoji
33
+ })),
34
+ COMMENT_REACTION_DESCRIPTION: (emoji, count) => `${count} ${pluralize(count, "reaction")}, react with ${emoji}`,
35
+ THREAD_RESOLVE: "Resolve thread",
36
+ THREAD_UNRESOLVE: "Re-open thread",
37
+ THREAD_NEW_INDICATOR: "New",
38
+ THREAD_NEW_INDICATOR_DESCRIPTION: "New comments",
39
+ THREAD_COMPOSER_PLACEHOLDER: "Reply to thread\u2026",
40
+ THREAD_COMPOSER_SEND: "Reply",
41
+ INBOX_NOTIFICATION_MORE: "More",
42
+ INBOX_NOTIFICATION_MARK_AS_READ: "Mark as read",
43
+ INBOX_NOTIFICATION_THREAD_COMMENTS_LIST: (list, room) => /* @__PURE__ */ React.createElement(React.Fragment, null, list, " commented", room ? /* @__PURE__ */ React.createElement(React.Fragment, null, " in ", room) : /* @__PURE__ */ React.createElement(React.Fragment, null, " in a thread")),
44
+ INBOX_NOTIFICATION_THREAD_MENTION: (user, room) => /* @__PURE__ */ React.createElement(React.Fragment, null, user, " mentioned you", room ? /* @__PURE__ */ React.createElement(React.Fragment, null, " in ", room) : null)
45
+ };
46
+ const OverridesContext = createContext(void 0);
47
+ function useOverrides(overrides) {
48
+ const contextOverrides = useContext(OverridesContext);
49
+ return useMemo(
50
+ () => ({
51
+ ...defaultOverrides,
52
+ ...contextOverrides,
53
+ ...overrides
54
+ }),
55
+ [contextOverrides, overrides]
56
+ );
57
+ }
58
+ function OverridesProvider({
59
+ children,
60
+ overrides: providerOverrides
61
+ }) {
62
+ const contextOverrides = useContext(OverridesContext);
63
+ const overrides = useMemo(
64
+ () => ({
65
+ ...defaultOverrides,
66
+ ...contextOverrides,
67
+ ...providerOverrides
68
+ }),
69
+ [contextOverrides, providerOverrides]
70
+ );
71
+ return /* @__PURE__ */ React.createElement(OverridesContext.Provider, {
72
+ value: overrides
73
+ }, children);
74
+ }
75
+
76
+ export { OverridesContext, OverridesProvider, defaultOverrides, useOverrides };
77
+ //# sourceMappingURL=overrides.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overrides.mjs","sources":["../src/overrides.tsx"],"sourcesContent":["\"use client\";\n\nimport type { PropsWithChildren, ReactNode } from \"react\";\nimport { createContext, useContext, useMemo } from \"react\";\nimport * as React from \"react\";\n\nimport { Emoji } from \"./components/internal/Emoji\";\nimport type { Direction } from \"./types\";\nimport { pluralize } from \"./utils/pluralize\";\n\nexport interface LocalizationOverrides {\n locale: string;\n dir: Direction;\n}\n\nexport interface GlobalOverrides {\n USER_SELF: string;\n USER_UNKNOWN: string;\n LIST_REMAINING: (count: number) => string;\n LIST_REMAINING_USERS: (count: number) => string;\n LIST_REMAINING_COMMENTS: (count: number) => string;\n EMOJI_PICKER_SEARCH_PLACEHOLDER: string;\n EMOJI_PICKER_EMPTY: ReactNode;\n EMOJI_PICKER_ERROR: (error: Error) => ReactNode;\n}\n\nexport interface CommentOverrides {\n COMMENT_EDITED: ReactNode;\n COMMENT_DELETED: ReactNode;\n COMMENT_MORE: string;\n COMMENT_EDIT: string;\n COMMENT_EDIT_COMPOSER_PLACEHOLDER: string;\n COMMENT_EDIT_COMPOSER_CANCEL: string;\n COMMENT_EDIT_COMPOSER_SAVE: string;\n COMMENT_DELETE: string;\n COMMENT_ADD_REACTION: string;\n COMMENT_REACTION_LIST: (\n list: ReactNode,\n emoji: string,\n count: number\n ) => ReactNode;\n COMMENT_REACTION_DESCRIPTION: (emoji: string, count: number) => string;\n}\n\nexport interface ComposerOverrides {\n COMPOSER_INSERT_MENTION: string;\n COMPOSER_INSERT_EMOJI: string;\n COMPOSER_PLACEHOLDER: string;\n COMPOSER_SEND: string;\n}\n\nexport interface ThreadOverrides {\n THREAD_RESOLVE: string;\n THREAD_UNRESOLVE: string;\n THREAD_NEW_INDICATOR: string;\n THREAD_NEW_INDICATOR_DESCRIPTION: string;\n THREAD_COMPOSER_PLACEHOLDER: string;\n THREAD_COMPOSER_SEND: string;\n}\n\nexport interface InboxNotificationOverrides {\n INBOX_NOTIFICATION_MORE: string;\n INBOX_NOTIFICATION_MARK_AS_READ: string;\n INBOX_NOTIFICATION_THREAD_COMMENTS_LIST: (\n list: ReactNode,\n room: ReactNode | undefined,\n count: number\n ) => ReactNode;\n INBOX_NOTIFICATION_THREAD_MENTION: (\n user: ReactNode,\n room: ReactNode | undefined\n ) => ReactNode;\n}\n\nexport type Overrides = LocalizationOverrides &\n GlobalOverrides &\n ComposerOverrides &\n CommentOverrides &\n ThreadOverrides &\n InboxNotificationOverrides;\n\ntype OverridesProviderProps = PropsWithChildren<{\n overrides?: Partial<Overrides>;\n}>;\n\nexport const defaultOverrides: Overrides = {\n locale: \"en\",\n dir: \"ltr\",\n USER_SELF: \"you\",\n USER_UNKNOWN: \"Anonymous\",\n LIST_REMAINING: (count) => `${count} more`,\n LIST_REMAINING_USERS: (count) => `${count} ${pluralize(count, \"other\")}`,\n LIST_REMAINING_COMMENTS: (count) =>\n `${count} more ${pluralize(count, \"comment\")}`,\n EMOJI_PICKER_SEARCH_PLACEHOLDER: \"Search…\",\n EMOJI_PICKER_EMPTY: \"No emoji found.\",\n EMOJI_PICKER_ERROR: () =>\n \"There was an error while getting the list of emoji.\",\n COMPOSER_INSERT_MENTION: \"Mention someone\",\n COMPOSER_INSERT_EMOJI: \"Add emoji\",\n COMPOSER_PLACEHOLDER: \"Write a comment…\",\n COMPOSER_SEND: \"Send\",\n COMMENT_EDITED: \"(edited)\",\n COMMENT_DELETED: \"This comment has been deleted.\",\n COMMENT_MORE: \"More\",\n COMMENT_EDIT: \"Edit comment\",\n COMMENT_EDIT_COMPOSER_PLACEHOLDER: \"Edit comment…\",\n COMMENT_EDIT_COMPOSER_CANCEL: \"Cancel\",\n COMMENT_EDIT_COMPOSER_SAVE: \"Save\",\n COMMENT_DELETE: \"Delete comment\",\n COMMENT_ADD_REACTION: \"Add reaction\",\n COMMENT_REACTION_LIST: (list, emoji) => (\n <>\n {list} reacted with <Emoji emoji={emoji} />\n </>\n ),\n COMMENT_REACTION_DESCRIPTION: (emoji, count) =>\n `${count} ${pluralize(count, \"reaction\")}, react with ${emoji}`,\n THREAD_RESOLVE: \"Resolve thread\",\n THREAD_UNRESOLVE: \"Re-open thread\",\n THREAD_NEW_INDICATOR: \"New\",\n THREAD_NEW_INDICATOR_DESCRIPTION: \"New comments\",\n THREAD_COMPOSER_PLACEHOLDER: \"Reply to thread…\",\n THREAD_COMPOSER_SEND: \"Reply\",\n INBOX_NOTIFICATION_MORE: \"More\",\n INBOX_NOTIFICATION_MARK_AS_READ: \"Mark as read\",\n INBOX_NOTIFICATION_THREAD_COMMENTS_LIST: (\n list: ReactNode,\n room: ReactNode\n ) => (\n <>\n {list} commented\n {room ? <> in {room}</> : <> in a thread</>}\n </>\n ),\n INBOX_NOTIFICATION_THREAD_MENTION: (user: ReactNode, room: ReactNode) => (\n <>\n {user} mentioned you{room ? <> in {room}</> : null}\n </>\n ),\n};\n\nexport const OverridesContext = createContext<Overrides | undefined>(undefined);\n\nexport function useOverrides(overrides?: Partial<Overrides>): Overrides {\n const contextOverrides = useContext(OverridesContext);\n\n return useMemo(\n () => ({\n ...defaultOverrides,\n ...contextOverrides,\n ...overrides,\n }),\n [contextOverrides, overrides]\n );\n}\n\nexport function OverridesProvider({\n children,\n overrides: providerOverrides,\n}: OverridesProviderProps) {\n const contextOverrides = useContext(OverridesContext);\n const overrides = useMemo(\n () => ({\n ...defaultOverrides,\n ...contextOverrides,\n ...providerOverrides,\n }),\n [contextOverrides, providerOverrides]\n );\n\n return (\n <OverridesContext.Provider value={overrides}>\n {children}\n </OverridesContext.Provider>\n );\n}\n"],"names":[],"mappings":";;;;;;AAqFO;AAAoC;AACjC;AACH;AACM;AACG;AACgB;AACuC;AAExB;AACZ;AACb;AAElB;AACuB;AACF;AACD;AACP;AACC;AACC;AACH;AACA;AACqB;AACL;AACF;AACZ;AACM;AAGG;AAAM;AAC7B;AAGwD;AAC1C;AACE;AACI;AACY;AACL;AACP;AACG;AACQ;AAQ/B;AAOJ;AAEa;AAEN;AACL;AAEA;AAAO;AACE;AACF;AACA;AACA;AACL;AAC4B;AAEhC;AAEO;AAA2B;AAChC;AAEF;AACE;AACA;AAAkB;AACT;AACF;AACA;AACA;AACL;AACoC;AAGtC;AACG;AAAiC;AAItC;;"}
@@ -0,0 +1,113 @@
1
+ 'use strict';
2
+
3
+ var reactSlot = require('@radix-ui/react-slot');
4
+ var React = require('react');
5
+ var mentions = require('../../slate/plugins/mentions.js');
6
+ var utils = require('./utils.js');
7
+
8
+ const COMMENT_MENTION_NAME = "CommentMention";
9
+ const COMMENT_BODY_NAME = "CommentBody";
10
+ const COMMENT_LINK_NAME = "CommentLink";
11
+ const CommentMention = React.forwardRef(
12
+ ({ children, asChild, ...props }, forwardedRef) => {
13
+ const Component = asChild ? reactSlot.Slot : "span";
14
+ return /* @__PURE__ */ React.createElement(Component, {
15
+ ...props,
16
+ ref: forwardedRef
17
+ }, children);
18
+ }
19
+ );
20
+ const CommentLink = React.forwardRef(
21
+ ({ children, asChild, ...props }, forwardedRef) => {
22
+ const Component = asChild ? reactSlot.Slot : "a";
23
+ return /* @__PURE__ */ React.createElement(Component, {
24
+ target: "_blank",
25
+ rel: "noopener noreferrer nofollow",
26
+ ...props,
27
+ ref: forwardedRef
28
+ }, children);
29
+ }
30
+ );
31
+ const defaultBodyComponents = {
32
+ Mention: ({ userId }) => {
33
+ return /* @__PURE__ */ React.createElement(CommentMention, null, mentions.MENTION_CHARACTER, userId);
34
+ },
35
+ Link: ({ href, children }) => {
36
+ return /* @__PURE__ */ React.createElement(CommentLink, {
37
+ href
38
+ }, children);
39
+ }
40
+ };
41
+ const CommentBody = React.forwardRef(
42
+ ({ body, components, asChild, ...props }, forwardedRef) => {
43
+ const Component = asChild ? reactSlot.Slot : "div";
44
+ const { Mention, Link } = React.useMemo(
45
+ () => ({ ...defaultBodyComponents, ...components }),
46
+ [components]
47
+ );
48
+ if (!body || !body?.content) {
49
+ return null;
50
+ }
51
+ return /* @__PURE__ */ React.createElement(Component, {
52
+ ...props,
53
+ ref: forwardedRef
54
+ }, body.content.map((block, index) => {
55
+ switch (block.type) {
56
+ case "paragraph":
57
+ return /* @__PURE__ */ React.createElement("p", {
58
+ key: index
59
+ }, block.children.map((inline, index2) => {
60
+ if (utils.isCommentBodyMention(inline)) {
61
+ return inline.id ? /* @__PURE__ */ React.createElement(Mention, {
62
+ userId: inline.id,
63
+ key: index2
64
+ }) : null;
65
+ }
66
+ if (utils.isCommentBodyLink(inline)) {
67
+ const href = utils.toAbsoluteUrl(inline.url) ?? inline.url;
68
+ return /* @__PURE__ */ React.createElement(Link, {
69
+ href,
70
+ key: index2
71
+ }, inline.url);
72
+ }
73
+ let children = inline.text;
74
+ if (inline.bold) {
75
+ children = /* @__PURE__ */ React.createElement("strong", {
76
+ key: index2
77
+ }, children);
78
+ }
79
+ if (inline.italic) {
80
+ children = /* @__PURE__ */ React.createElement("em", {
81
+ key: index2
82
+ }, children);
83
+ }
84
+ if (inline.strikethrough) {
85
+ children = /* @__PURE__ */ React.createElement("s", {
86
+ key: index2
87
+ }, children);
88
+ }
89
+ if (inline.code) {
90
+ children = /* @__PURE__ */ React.createElement("code", {
91
+ key: index2
92
+ }, children);
93
+ }
94
+ return /* @__PURE__ */ React.createElement("span", {
95
+ key: index2
96
+ }, children);
97
+ }));
98
+ default:
99
+ return null;
100
+ }
101
+ }));
102
+ }
103
+ );
104
+ if (process.env.NODE_ENV !== "production") {
105
+ CommentBody.displayName = COMMENT_BODY_NAME;
106
+ CommentMention.displayName = COMMENT_MENTION_NAME;
107
+ CommentLink.displayName = COMMENT_LINK_NAME;
108
+ }
109
+
110
+ exports.Body = CommentBody;
111
+ exports.Link = CommentLink;
112
+ exports.Mention = CommentMention;
113
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../src/primitives/Comment/index.tsx"],"sourcesContent":["import { Slot } from \"@radix-ui/react-slot\";\nimport type { ReactNode } from \"react\";\nimport React, { forwardRef, useMemo } from \"react\";\n\nimport { MENTION_CHARACTER } from \"../../slate/plugins/mentions\";\nimport type {\n CommentBodyComponents,\n CommentBodyProps,\n CommentLinkProps,\n CommentMentionProps,\n} from \"./types\";\nimport {\n isCommentBodyLink,\n isCommentBodyMention,\n toAbsoluteUrl,\n} from \"./utils\";\n\nconst COMMENT_MENTION_NAME = \"CommentMention\";\nconst COMMENT_BODY_NAME = \"CommentBody\";\nconst COMMENT_LINK_NAME = \"CommentLink\";\n\n/**\n * Displays mentions within `Comment.Body`.\n *\n * @example\n * <Comment.Mention>@{userId}</Comment.Mention>\n */\nconst CommentMention = forwardRef<HTMLSpanElement, CommentMentionProps>(\n ({ children, asChild, ...props }, forwardedRef) => {\n const Component = asChild ? Slot : \"span\";\n\n return (\n <Component {...props} ref={forwardedRef}>\n {children}\n </Component>\n );\n }\n);\n\n/**\n * Displays links within `Comment.Body`.\n *\n * @example\n * <Comment.Link href={href}>{children}</Comment.Link>\n */\nconst CommentLink = forwardRef<HTMLAnchorElement, CommentLinkProps>(\n ({ children, asChild, ...props }, forwardedRef) => {\n const Component = asChild ? Slot : \"a\";\n\n return (\n <Component\n target=\"_blank\"\n rel=\"noopener noreferrer nofollow\"\n {...props}\n ref={forwardedRef}\n >\n {children}\n </Component>\n );\n }\n);\n\nconst defaultBodyComponents: CommentBodyComponents = {\n Mention: ({ userId }) => {\n return (\n <CommentMention>\n {MENTION_CHARACTER}\n {userId}\n </CommentMention>\n );\n },\n Link: ({ href, children }) => {\n return <CommentLink href={href}>{children}</CommentLink>;\n },\n};\n\n/**\n * Displays a comment body.\n *\n * @example\n * <Comment.Body body={comment.body} />\n */\nconst CommentBody = forwardRef<HTMLDivElement, CommentBodyProps>(\n ({ body, components, asChild, ...props }, forwardedRef) => {\n const Component = asChild ? Slot : \"div\";\n const { Mention, Link } = useMemo(\n () => ({ ...defaultBodyComponents, ...components }),\n [components]\n );\n\n if (!body || !body?.content) {\n return null;\n }\n\n return (\n <Component {...props} ref={forwardedRef}>\n {body.content.map((block, index) => {\n switch (block.type) {\n case \"paragraph\":\n return (\n <p key={index}>\n {block.children.map((inline, index) => {\n if (isCommentBodyMention(inline)) {\n return inline.id ? (\n <Mention userId={inline.id} key={index} />\n ) : null;\n }\n\n if (isCommentBodyLink(inline)) {\n const href = toAbsoluteUrl(inline.url) ?? inline.url;\n\n return (\n <Link href={href} key={index}>\n {inline.url}\n </Link>\n );\n }\n\n // <code><s><em><strong>text</strong></s></em></code>\n let children: ReactNode = inline.text;\n\n if (inline.bold) {\n children = <strong key={index}>{children}</strong>;\n }\n\n if (inline.italic) {\n children = <em key={index}>{children}</em>;\n }\n\n if (inline.strikethrough) {\n children = <s key={index}>{children}</s>;\n }\n\n if (inline.code) {\n children = <code key={index}>{children}</code>;\n }\n\n return <span key={index}>{children}</span>;\n })}\n </p>\n );\n default:\n return null;\n }\n })}\n </Component>\n );\n }\n);\n\nif (process.env.NODE_ENV !== \"production\") {\n CommentBody.displayName = COMMENT_BODY_NAME;\n CommentMention.displayName = COMMENT_MENTION_NAME;\n CommentLink.displayName = COMMENT_LINK_NAME;\n}\n\n// NOTE: Every export from this file will be available publicly as Comment.*\nexport { CommentBody as Body, CommentLink as Link, CommentMention as Mention };\n"],"names":["forwardRef","Slot","MENTION_CHARACTER","useMemo","index","isCommentBodyMention","isCommentBodyLink","toAbsoluteUrl"],"mappings":"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"}
@@ -0,0 +1,109 @@
1
+ import { Slot } from '@radix-ui/react-slot';
2
+ import React__default, { forwardRef, useMemo } from 'react';
3
+ import { MENTION_CHARACTER } from '../../slate/plugins/mentions.mjs';
4
+ import { isCommentBodyMention, isCommentBodyLink, toAbsoluteUrl } from './utils.mjs';
5
+
6
+ const COMMENT_MENTION_NAME = "CommentMention";
7
+ const COMMENT_BODY_NAME = "CommentBody";
8
+ const COMMENT_LINK_NAME = "CommentLink";
9
+ const CommentMention = forwardRef(
10
+ ({ children, asChild, ...props }, forwardedRef) => {
11
+ const Component = asChild ? Slot : "span";
12
+ return /* @__PURE__ */ React__default.createElement(Component, {
13
+ ...props,
14
+ ref: forwardedRef
15
+ }, children);
16
+ }
17
+ );
18
+ const CommentLink = forwardRef(
19
+ ({ children, asChild, ...props }, forwardedRef) => {
20
+ const Component = asChild ? Slot : "a";
21
+ return /* @__PURE__ */ React__default.createElement(Component, {
22
+ target: "_blank",
23
+ rel: "noopener noreferrer nofollow",
24
+ ...props,
25
+ ref: forwardedRef
26
+ }, children);
27
+ }
28
+ );
29
+ const defaultBodyComponents = {
30
+ Mention: ({ userId }) => {
31
+ return /* @__PURE__ */ React__default.createElement(CommentMention, null, MENTION_CHARACTER, userId);
32
+ },
33
+ Link: ({ href, children }) => {
34
+ return /* @__PURE__ */ React__default.createElement(CommentLink, {
35
+ href
36
+ }, children);
37
+ }
38
+ };
39
+ const CommentBody = forwardRef(
40
+ ({ body, components, asChild, ...props }, forwardedRef) => {
41
+ const Component = asChild ? Slot : "div";
42
+ const { Mention, Link } = useMemo(
43
+ () => ({ ...defaultBodyComponents, ...components }),
44
+ [components]
45
+ );
46
+ if (!body || !body?.content) {
47
+ return null;
48
+ }
49
+ return /* @__PURE__ */ React__default.createElement(Component, {
50
+ ...props,
51
+ ref: forwardedRef
52
+ }, body.content.map((block, index) => {
53
+ switch (block.type) {
54
+ case "paragraph":
55
+ return /* @__PURE__ */ React__default.createElement("p", {
56
+ key: index
57
+ }, block.children.map((inline, index2) => {
58
+ if (isCommentBodyMention(inline)) {
59
+ return inline.id ? /* @__PURE__ */ React__default.createElement(Mention, {
60
+ userId: inline.id,
61
+ key: index2
62
+ }) : null;
63
+ }
64
+ if (isCommentBodyLink(inline)) {
65
+ const href = toAbsoluteUrl(inline.url) ?? inline.url;
66
+ return /* @__PURE__ */ React__default.createElement(Link, {
67
+ href,
68
+ key: index2
69
+ }, inline.url);
70
+ }
71
+ let children = inline.text;
72
+ if (inline.bold) {
73
+ children = /* @__PURE__ */ React__default.createElement("strong", {
74
+ key: index2
75
+ }, children);
76
+ }
77
+ if (inline.italic) {
78
+ children = /* @__PURE__ */ React__default.createElement("em", {
79
+ key: index2
80
+ }, children);
81
+ }
82
+ if (inline.strikethrough) {
83
+ children = /* @__PURE__ */ React__default.createElement("s", {
84
+ key: index2
85
+ }, children);
86
+ }
87
+ if (inline.code) {
88
+ children = /* @__PURE__ */ React__default.createElement("code", {
89
+ key: index2
90
+ }, children);
91
+ }
92
+ return /* @__PURE__ */ React__default.createElement("span", {
93
+ key: index2
94
+ }, children);
95
+ }));
96
+ default:
97
+ return null;
98
+ }
99
+ }));
100
+ }
101
+ );
102
+ if (process.env.NODE_ENV !== "production") {
103
+ CommentBody.displayName = COMMENT_BODY_NAME;
104
+ CommentMention.displayName = COMMENT_MENTION_NAME;
105
+ CommentLink.displayName = COMMENT_LINK_NAME;
106
+ }
107
+
108
+ export { CommentBody as Body, CommentLink as Link, CommentMention as Mention };
109
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":["../../../src/primitives/Comment/index.tsx"],"sourcesContent":["import { Slot } from \"@radix-ui/react-slot\";\nimport type { ReactNode } from \"react\";\nimport React, { forwardRef, useMemo } from \"react\";\n\nimport { MENTION_CHARACTER } from \"../../slate/plugins/mentions\";\nimport type {\n CommentBodyComponents,\n CommentBodyProps,\n CommentLinkProps,\n CommentMentionProps,\n} from \"./types\";\nimport {\n isCommentBodyLink,\n isCommentBodyMention,\n toAbsoluteUrl,\n} from \"./utils\";\n\nconst COMMENT_MENTION_NAME = \"CommentMention\";\nconst COMMENT_BODY_NAME = \"CommentBody\";\nconst COMMENT_LINK_NAME = \"CommentLink\";\n\n/**\n * Displays mentions within `Comment.Body`.\n *\n * @example\n * <Comment.Mention>@{userId}</Comment.Mention>\n */\nconst CommentMention = forwardRef<HTMLSpanElement, CommentMentionProps>(\n ({ children, asChild, ...props }, forwardedRef) => {\n const Component = asChild ? Slot : \"span\";\n\n return (\n <Component {...props} ref={forwardedRef}>\n {children}\n </Component>\n );\n }\n);\n\n/**\n * Displays links within `Comment.Body`.\n *\n * @example\n * <Comment.Link href={href}>{children}</Comment.Link>\n */\nconst CommentLink = forwardRef<HTMLAnchorElement, CommentLinkProps>(\n ({ children, asChild, ...props }, forwardedRef) => {\n const Component = asChild ? Slot : \"a\";\n\n return (\n <Component\n target=\"_blank\"\n rel=\"noopener noreferrer nofollow\"\n {...props}\n ref={forwardedRef}\n >\n {children}\n </Component>\n );\n }\n);\n\nconst defaultBodyComponents: CommentBodyComponents = {\n Mention: ({ userId }) => {\n return (\n <CommentMention>\n {MENTION_CHARACTER}\n {userId}\n </CommentMention>\n );\n },\n Link: ({ href, children }) => {\n return <CommentLink href={href}>{children}</CommentLink>;\n },\n};\n\n/**\n * Displays a comment body.\n *\n * @example\n * <Comment.Body body={comment.body} />\n */\nconst CommentBody = forwardRef<HTMLDivElement, CommentBodyProps>(\n ({ body, components, asChild, ...props }, forwardedRef) => {\n const Component = asChild ? Slot : \"div\";\n const { Mention, Link } = useMemo(\n () => ({ ...defaultBodyComponents, ...components }),\n [components]\n );\n\n if (!body || !body?.content) {\n return null;\n }\n\n return (\n <Component {...props} ref={forwardedRef}>\n {body.content.map((block, index) => {\n switch (block.type) {\n case \"paragraph\":\n return (\n <p key={index}>\n {block.children.map((inline, index) => {\n if (isCommentBodyMention(inline)) {\n return inline.id ? (\n <Mention userId={inline.id} key={index} />\n ) : null;\n }\n\n if (isCommentBodyLink(inline)) {\n const href = toAbsoluteUrl(inline.url) ?? inline.url;\n\n return (\n <Link href={href} key={index}>\n {inline.url}\n </Link>\n );\n }\n\n // <code><s><em><strong>text</strong></s></em></code>\n let children: ReactNode = inline.text;\n\n if (inline.bold) {\n children = <strong key={index}>{children}</strong>;\n }\n\n if (inline.italic) {\n children = <em key={index}>{children}</em>;\n }\n\n if (inline.strikethrough) {\n children = <s key={index}>{children}</s>;\n }\n\n if (inline.code) {\n children = <code key={index}>{children}</code>;\n }\n\n return <span key={index}>{children}</span>;\n })}\n </p>\n );\n default:\n return null;\n }\n })}\n </Component>\n );\n }\n);\n\nif (process.env.NODE_ENV !== \"production\") {\n CommentBody.displayName = COMMENT_BODY_NAME;\n CommentMention.displayName = COMMENT_MENTION_NAME;\n CommentLink.displayName = COMMENT_LINK_NAME;\n}\n\n// NOTE: Every export from this file will be available publicly as Comment.*\nexport { CommentBody as Body, CommentLink as Link, CommentMention as Mention };\n"],"names":["React","index"],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ 'use strict';
2
+
3
+ function isCommentBodyText(element) {
4
+ return "text" in element && typeof element.text === "string";
5
+ }
6
+ function isCommentBodyMention(element) {
7
+ return "type" in element && element.type === "mention";
8
+ }
9
+ function isCommentBodyLink(element) {
10
+ return "type" in element && element.type === "link";
11
+ }
12
+ function toAbsoluteUrl(url) {
13
+ if (url.startsWith("http://") || url.startsWith("https://")) {
14
+ return url;
15
+ } else if (url.startsWith("www.")) {
16
+ return "https://" + url;
17
+ }
18
+ return;
19
+ }
20
+
21
+ exports.isCommentBodyLink = isCommentBodyLink;
22
+ exports.isCommentBodyMention = isCommentBodyMention;
23
+ exports.isCommentBodyText = isCommentBodyText;
24
+ exports.toAbsoluteUrl = toAbsoluteUrl;
25
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sources":["../../../src/primitives/Comment/utils.ts"],"sourcesContent":["import type {\n CommentBodyElement,\n CommentBodyLink,\n CommentBodyMention,\n CommentBodyText,\n} from \"@liveblocks/core\";\n\nexport function isCommentBodyText(\n element: CommentBodyElement\n): element is CommentBodyText {\n return \"text\" in element && typeof element.text === \"string\";\n}\n\nexport function isCommentBodyMention(\n element: CommentBodyElement\n): element is CommentBodyMention {\n return \"type\" in element && element.type === \"mention\";\n}\n\nexport function isCommentBodyLink(\n element: CommentBodyElement\n): element is CommentBodyLink {\n return \"type\" in element && element.type === \"link\";\n}\n\n/**\n * Helper function to convert a URL (relative or absolute) to an absolute URL.\n *\n * @param url The URL to convert to an absolute URL (relative or absolute).\n * @returns The absolute URL or undefined if the URL is invalid.\n */\nexport function toAbsoluteUrl(url: string): string | undefined {\n // Check if the URL already contains a scheme\n if (url.startsWith(\"http://\") || url.startsWith(\"https://\")) {\n return url;\n } else if (url.startsWith(\"www.\")) {\n // If the URL starts with \"www.\", prepend \"https://\"\n return \"https://\" + url;\n }\n\n return;\n}\n"],"names":[],"mappings":";;AAOO,SAAS,kBACd,OAC4B,EAAA;AAC5B,EAAA,OAAO,MAAU,IAAA,OAAA,IAAW,OAAO,OAAA,CAAQ,IAAS,KAAA,QAAA,CAAA;AACtD,CAAA;AAEO,SAAS,qBACd,OAC+B,EAAA;AAC/B,EAAO,OAAA,MAAA,IAAU,OAAW,IAAA,OAAA,CAAQ,IAAS,KAAA,SAAA,CAAA;AAC/C,CAAA;AAEO,SAAS,kBACd,OAC4B,EAAA;AAC5B,EAAO,OAAA,MAAA,IAAU,OAAW,IAAA,OAAA,CAAQ,IAAS,KAAA,MAAA,CAAA;AAC/C,CAAA;AAQO,SAAS,cAAc,GAAiC,EAAA;AAE7D,EAAA,IAAI,IAAI,UAAW,CAAA,SAAS,KAAK,GAAI,CAAA,UAAA,CAAW,UAAU,CAAG,EAAA;AAC3D,IAAO,OAAA,GAAA,CAAA;AAAA,GACE,MAAA,IAAA,GAAA,CAAI,UAAW,CAAA,MAAM,CAAG,EAAA;AAEjC,IAAA,OAAO,UAAa,GAAA,GAAA,CAAA;AAAA,GACtB;AAEA,EAAA,OAAA;AACF;;;;;;;"}
@@ -0,0 +1,20 @@
1
+ function isCommentBodyText(element) {
2
+ return "text" in element && typeof element.text === "string";
3
+ }
4
+ function isCommentBodyMention(element) {
5
+ return "type" in element && element.type === "mention";
6
+ }
7
+ function isCommentBodyLink(element) {
8
+ return "type" in element && element.type === "link";
9
+ }
10
+ function toAbsoluteUrl(url) {
11
+ if (url.startsWith("http://") || url.startsWith("https://")) {
12
+ return url;
13
+ } else if (url.startsWith("www.")) {
14
+ return "https://" + url;
15
+ }
16
+ return;
17
+ }
18
+
19
+ export { isCommentBodyLink, isCommentBodyMention, isCommentBodyText, toAbsoluteUrl };
20
+ //# sourceMappingURL=utils.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.mjs","sources":["../../../src/primitives/Comment/utils.ts"],"sourcesContent":["import type {\n CommentBodyElement,\n CommentBodyLink,\n CommentBodyMention,\n CommentBodyText,\n} from \"@liveblocks/core\";\n\nexport function isCommentBodyText(\n element: CommentBodyElement\n): element is CommentBodyText {\n return \"text\" in element && typeof element.text === \"string\";\n}\n\nexport function isCommentBodyMention(\n element: CommentBodyElement\n): element is CommentBodyMention {\n return \"type\" in element && element.type === \"mention\";\n}\n\nexport function isCommentBodyLink(\n element: CommentBodyElement\n): element is CommentBodyLink {\n return \"type\" in element && element.type === \"link\";\n}\n\n/**\n * Helper function to convert a URL (relative or absolute) to an absolute URL.\n *\n * @param url The URL to convert to an absolute URL (relative or absolute).\n * @returns The absolute URL or undefined if the URL is invalid.\n */\nexport function toAbsoluteUrl(url: string): string | undefined {\n // Check if the URL already contains a scheme\n if (url.startsWith(\"http://\") || url.startsWith(\"https://\")) {\n return url;\n } else if (url.startsWith(\"www.\")) {\n // If the URL starts with \"www.\", prepend \"https://\"\n return \"https://\" + url;\n }\n\n return;\n}\n"],"names":[],"mappings":"AAOO,SAAS,kBACd,OAC4B,EAAA;AAC5B,EAAA,OAAO,MAAU,IAAA,OAAA,IAAW,OAAO,OAAA,CAAQ,IAAS,KAAA,QAAA,CAAA;AACtD,CAAA;AAEO,SAAS,qBACd,OAC+B,EAAA;AAC/B,EAAO,OAAA,MAAA,IAAU,OAAW,IAAA,OAAA,CAAQ,IAAS,KAAA,SAAA,CAAA;AAC/C,CAAA;AAEO,SAAS,kBACd,OAC4B,EAAA;AAC5B,EAAO,OAAA,MAAA,IAAU,OAAW,IAAA,OAAA,CAAQ,IAAS,KAAA,MAAA,CAAA;AAC/C,CAAA;AAQO,SAAS,cAAc,GAAiC,EAAA;AAE7D,EAAA,IAAI,IAAI,UAAW,CAAA,SAAS,KAAK,GAAI,CAAA,UAAA,CAAW,UAAU,CAAG,EAAA;AAC3D,IAAO,OAAA,GAAA,CAAA;AAAA,GACE,MAAA,IAAA,GAAA,CAAI,UAAW,CAAA,MAAM,CAAG,EAAA;AAEjC,IAAA,OAAO,UAAa,GAAA,GAAA,CAAA;AAAA,GACtB;AAEA,EAAA,OAAA;AACF;;;;"}
@@ -0,0 +1,34 @@
1
+ 'use strict';
2
+
3
+ var core = require('@liveblocks/core');
4
+ var React = require('react');
5
+
6
+ const ComposerContext = React.createContext(null);
7
+ const ComposerEditorContext = React.createContext(null);
8
+ const ComposerSuggestionsContext = React.createContext(null);
9
+ function useComposerEditorContext() {
10
+ const composerEditorContext = React.useContext(ComposerEditorContext);
11
+ return core.nn(
12
+ composerEditorContext,
13
+ "Composer.Form is missing from the React tree."
14
+ );
15
+ }
16
+ function useComposer() {
17
+ const composerContext = React.useContext(ComposerContext);
18
+ return core.nn(composerContext, "Composer.Form is missing from the React tree.");
19
+ }
20
+ function useComposerSuggestionsContext(source = "useComposerSuggestionsContext") {
21
+ const composerSuggestionsContext = React.useContext(ComposerSuggestionsContext);
22
+ return core.nn(
23
+ composerSuggestionsContext,
24
+ `${source} can\u2019t be used outside of Composer.Editor.`
25
+ );
26
+ }
27
+
28
+ exports.ComposerContext = ComposerContext;
29
+ exports.ComposerEditorContext = ComposerEditorContext;
30
+ exports.ComposerSuggestionsContext = ComposerSuggestionsContext;
31
+ exports.useComposer = useComposer;
32
+ exports.useComposerEditorContext = useComposerEditorContext;
33
+ exports.useComposerSuggestionsContext = useComposerSuggestionsContext;
34
+ //# sourceMappingURL=contexts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contexts.js","sources":["../../../src/primitives/Composer/contexts.ts"],"sourcesContent":["import type { Placement } from \"@floating-ui/react-dom\";\nimport { nn } from \"@liveblocks/core\";\nimport type { Direction } from \"@radix-ui/react-dropdown-menu\";\nimport type { Dispatch, Ref, SetStateAction } from \"react\";\nimport { createContext, useContext } from \"react\";\nimport type { Editor as SlateEditor, Element as SlateElement } from \"slate\";\n\nexport type ComposerContext = {\n /**\n * Whether the editor is currently focused.\n */\n isFocused: boolean;\n\n /**\n * Whether the editor is currently empty.\n */\n isEmpty: boolean;\n\n /**\n * Submit the composer programmatically.\n */\n submit: () => void;\n\n /**\n * Clear the editor programmatically.\n */\n clear: () => void;\n\n /**\n * Select the editor programmatically.\n */\n select: () => void;\n\n /**\n * Focus the editor programmatically.\n */\n focus: () => void;\n\n /**\n * Blur the editor programmatically.\n */\n blur: () => void;\n\n /**\n * Start creating a mention at the current selection.\n */\n createMention: () => void;\n\n /**\n * Insert text at the current selection.\n */\n insertText: (text: string) => void;\n};\n\nexport type ComposerEditorContext = {\n validate: (value: SlateElement[]) => void;\n editor: SlateEditor;\n setFocused: Dispatch<SetStateAction<boolean>>;\n};\n\nexport type ComposerSuggestionsContext = {\n dir?: Direction;\n id: string;\n itemId: (value?: string) => string | undefined;\n placement: Placement;\n selectedValue?: string;\n setSelectedValue: (value: string) => void;\n onItemSelect: (value: string) => void;\n ref: Ref<HTMLDivElement>;\n};\n\nexport const ComposerContext = createContext<ComposerContext | null>(null);\nexport const ComposerEditorContext =\n createContext<ComposerEditorContext | null>(null);\nexport const ComposerSuggestionsContext =\n createContext<ComposerSuggestionsContext | null>(null);\n\nexport function useComposerEditorContext() {\n const composerEditorContext = useContext(ComposerEditorContext);\n\n return nn(\n composerEditorContext,\n \"Composer.Form is missing from the React tree.\"\n );\n}\n\nexport function useComposer(): ComposerContext {\n const composerContext = useContext(ComposerContext);\n\n return nn(composerContext, \"Composer.Form is missing from the React tree.\");\n}\n\nexport function useComposerSuggestionsContext(\n source = \"useComposerSuggestionsContext\"\n) {\n const composerSuggestionsContext = useContext(ComposerSuggestionsContext);\n\n return nn(\n composerSuggestionsContext,\n `${source} can’t be used outside of Composer.Editor.`\n );\n}\n"],"names":["createContext","useContext","nn"],"mappings":";;;;;AAuEa,MAAA,eAAA,GAAkBA,oBAAsC,IAAI,EAAA;AAC5D,MAAA,qBAAA,GACXA,oBAA4C,IAAI,EAAA;AACrC,MAAA,0BAAA,GACXA,oBAAiD,IAAI,EAAA;AAEhD,SAAS,wBAA2B,GAAA;AACzC,EAAM,MAAA,qBAAA,GAAwBC,iBAAW,qBAAqB,CAAA,CAAA;AAE9D,EAAO,OAAAC,OAAA;AAAA,IACL,qBAAA;AAAA,IACA,+CAAA;AAAA,GACF,CAAA;AACF,CAAA;AAEO,SAAS,WAA+B,GAAA;AAC7C,EAAM,MAAA,eAAA,GAAkBD,iBAAW,eAAe,CAAA,CAAA;AAElD,EAAO,OAAAC,OAAA,CAAG,iBAAiB,+CAA+C,CAAA,CAAA;AAC5E,CAAA;AAEgB,SAAA,6BAAA,CACd,SAAS,+BACT,EAAA;AACA,EAAM,MAAA,0BAAA,GAA6BD,iBAAW,0BAA0B,CAAA,CAAA;AAExE,EAAO,OAAAC,OAAA;AAAA,IACL,0BAAA;AAAA,IACA,CAAG,EAAA,MAAA,CAAA,+CAAA,CAAA;AAAA,GACL,CAAA;AACF;;;;;;;;;"}
@@ -0,0 +1,27 @@
1
+ import { nn } from '@liveblocks/core';
2
+ import { createContext, useContext } from 'react';
3
+
4
+ const ComposerContext = createContext(null);
5
+ const ComposerEditorContext = createContext(null);
6
+ const ComposerSuggestionsContext = createContext(null);
7
+ function useComposerEditorContext() {
8
+ const composerEditorContext = useContext(ComposerEditorContext);
9
+ return nn(
10
+ composerEditorContext,
11
+ "Composer.Form is missing from the React tree."
12
+ );
13
+ }
14
+ function useComposer() {
15
+ const composerContext = useContext(ComposerContext);
16
+ return nn(composerContext, "Composer.Form is missing from the React tree.");
17
+ }
18
+ function useComposerSuggestionsContext(source = "useComposerSuggestionsContext") {
19
+ const composerSuggestionsContext = useContext(ComposerSuggestionsContext);
20
+ return nn(
21
+ composerSuggestionsContext,
22
+ `${source} can\u2019t be used outside of Composer.Editor.`
23
+ );
24
+ }
25
+
26
+ export { ComposerContext, ComposerEditorContext, ComposerSuggestionsContext, useComposer, useComposerEditorContext, useComposerSuggestionsContext };
27
+ //# sourceMappingURL=contexts.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contexts.mjs","sources":["../../../src/primitives/Composer/contexts.ts"],"sourcesContent":["import type { Placement } from \"@floating-ui/react-dom\";\nimport { nn } from \"@liveblocks/core\";\nimport type { Direction } from \"@radix-ui/react-dropdown-menu\";\nimport type { Dispatch, Ref, SetStateAction } from \"react\";\nimport { createContext, useContext } from \"react\";\nimport type { Editor as SlateEditor, Element as SlateElement } from \"slate\";\n\nexport type ComposerContext = {\n /**\n * Whether the editor is currently focused.\n */\n isFocused: boolean;\n\n /**\n * Whether the editor is currently empty.\n */\n isEmpty: boolean;\n\n /**\n * Submit the composer programmatically.\n */\n submit: () => void;\n\n /**\n * Clear the editor programmatically.\n */\n clear: () => void;\n\n /**\n * Select the editor programmatically.\n */\n select: () => void;\n\n /**\n * Focus the editor programmatically.\n */\n focus: () => void;\n\n /**\n * Blur the editor programmatically.\n */\n blur: () => void;\n\n /**\n * Start creating a mention at the current selection.\n */\n createMention: () => void;\n\n /**\n * Insert text at the current selection.\n */\n insertText: (text: string) => void;\n};\n\nexport type ComposerEditorContext = {\n validate: (value: SlateElement[]) => void;\n editor: SlateEditor;\n setFocused: Dispatch<SetStateAction<boolean>>;\n};\n\nexport type ComposerSuggestionsContext = {\n dir?: Direction;\n id: string;\n itemId: (value?: string) => string | undefined;\n placement: Placement;\n selectedValue?: string;\n setSelectedValue: (value: string) => void;\n onItemSelect: (value: string) => void;\n ref: Ref<HTMLDivElement>;\n};\n\nexport const ComposerContext = createContext<ComposerContext | null>(null);\nexport const ComposerEditorContext =\n createContext<ComposerEditorContext | null>(null);\nexport const ComposerSuggestionsContext =\n createContext<ComposerSuggestionsContext | null>(null);\n\nexport function useComposerEditorContext() {\n const composerEditorContext = useContext(ComposerEditorContext);\n\n return nn(\n composerEditorContext,\n \"Composer.Form is missing from the React tree.\"\n );\n}\n\nexport function useComposer(): ComposerContext {\n const composerContext = useContext(ComposerContext);\n\n return nn(composerContext, \"Composer.Form is missing from the React tree.\");\n}\n\nexport function useComposerSuggestionsContext(\n source = \"useComposerSuggestionsContext\"\n) {\n const composerSuggestionsContext = useContext(ComposerSuggestionsContext);\n\n return nn(\n composerSuggestionsContext,\n `${source} can’t be used outside of Composer.Editor.`\n );\n}\n"],"names":[],"mappings":";;;AAuEa,MAAA,eAAA,GAAkB,cAAsC,IAAI,EAAA;AAC5D,MAAA,qBAAA,GACX,cAA4C,IAAI,EAAA;AACrC,MAAA,0BAAA,GACX,cAAiD,IAAI,EAAA;AAEhD,SAAS,wBAA2B,GAAA;AACzC,EAAM,MAAA,qBAAA,GAAwB,WAAW,qBAAqB,CAAA,CAAA;AAE9D,EAAO,OAAA,EAAA;AAAA,IACL,qBAAA;AAAA,IACA,+CAAA;AAAA,GACF,CAAA;AACF,CAAA;AAEO,SAAS,WAA+B,GAAA;AAC7C,EAAM,MAAA,eAAA,GAAkB,WAAW,eAAe,CAAA,CAAA;AAElD,EAAO,OAAA,EAAA,CAAG,iBAAiB,+CAA+C,CAAA,CAAA;AAC5E,CAAA;AAEgB,SAAA,6BAAA,CACd,SAAS,+BACT,EAAA;AACA,EAAM,MAAA,0BAAA,GAA6B,WAAW,0BAA0B,CAAA,CAAA;AAExE,EAAO,OAAA,EAAA;AAAA,IACL,0BAAA;AAAA,IACA,CAAG,EAAA,MAAA,CAAA,+CAAA,CAAA;AAAA,GACL,CAAA;AACF;;;;"}