@liveblocks/react-ui 2.18.2 → 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 (678) 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.cjs.map +1 -0
  363. package/dist/slate/plugins/mentions.js +47 -36
  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.cjs +64 -0
  382. package/dist/slate/utils/get-match-range.cjs.map +1 -0
  383. package/dist/slate/utils/get-match-range.js +26 -17
  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.cjs +9 -0
  398. package/dist/slate/utils/is-whitespace-character.cjs.map +1 -0
  399. package/dist/slate/utils/is-whitespace-character.js +7 -0
  400. package/dist/slate/utils/is-whitespace-character.js.map +1 -0
  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 -104
  638. package/dist/slate/plugins/mentions.mjs.map +0 -1
  639. package/dist/slate/plugins/normalize.mjs +0 -26
  640. package/dist/slate/plugins/normalize.mjs.map +0 -1
  641. package/dist/slate/utils/get-character.mjs +0 -47
  642. package/dist/slate/utils/get-dom-range.mjs +0 -15
  643. package/dist/slate/utils/get-match-range.mjs +0 -51
  644. package/dist/slate/utils/get-match-range.mjs.map +0 -1
  645. package/dist/slate/utils/is-empty-string.mjs +0 -6
  646. package/dist/slate/utils/is-empty-string.mjs.map +0 -1
  647. package/dist/slate/utils/is-empty.mjs +0 -25
  648. package/dist/slate/utils/marks.mjs +0 -55
  649. package/dist/slate/utils/selection-contains-inlines.mjs +0 -34
  650. package/dist/slate/utils/selection-contains-inlines.mjs.map +0 -1
  651. package/dist/utils/Portal.mjs +0 -27
  652. package/dist/utils/capitalize.mjs.map +0 -1
  653. package/dist/utils/clamp.mjs.map +0 -1
  654. package/dist/utils/download.mjs.map +0 -1
  655. package/dist/utils/exists.mjs +0 -6
  656. package/dist/utils/exists.mjs.map +0 -1
  657. package/dist/utils/find-last-index.mjs.map +0 -1
  658. package/dist/utils/format-file-size.mjs.map +0 -1
  659. package/dist/utils/get-initials.mjs.map +0 -1
  660. package/dist/utils/intl.mjs +0 -25
  661. package/dist/utils/is-apple.mjs.map +0 -1
  662. package/dist/utils/memoize.mjs.map +0 -1
  663. package/dist/utils/pluralize.mjs.map +0 -1
  664. package/dist/utils/request-submit.mjs.map +0 -1
  665. package/dist/utils/url.mjs.map +0 -1
  666. package/dist/utils/use-index.mjs +0 -30
  667. package/dist/utils/use-initial.mjs +0 -9
  668. package/dist/utils/use-interval.mjs.map +0 -1
  669. package/dist/utils/use-latest.mjs +0 -12
  670. package/dist/utils/use-observable.mjs +0 -13
  671. package/dist/utils/use-rerender.mjs +0 -12
  672. package/dist/utils/use-window-focus.mjs.map +0 -1
  673. package/dist/utils/visually-hidden.mjs.map +0 -1
  674. package/dist/utils/wrap.mjs.map +0 -1
  675. package/dist/version.mjs +0 -6
  676. /package/dist/_private/{index.d.mts → index.d.cts} +0 -0
  677. /package/dist/{index.d.mts → index.d.cts} +0 -0
  678. /package/dist/primitives/{index.d.mts → index.d.cts} +0 -0
@@ -1,7 +1,9 @@
1
- import { Node, Transforms, Range, Element } from 'slate';
2
- import { isText, isPlainText } from '../utils/is-text.mjs';
3
- import { filterActiveMarks } from '../utils/marks.mjs';
4
- import { selectionContainsInlines } from '../utils/selection-contains-inlines.mjs';
1
+ 'use strict';
2
+
3
+ var slate = require('slate');
4
+ var isText = require('../utils/is-text.cjs');
5
+ var marks = require('../utils/marks.cjs');
6
+ var selectionContainsInlines = require('../utils/selection-contains-inlines.cjs');
5
7
 
6
8
  function isUrl(string) {
7
9
  try {
@@ -18,12 +20,12 @@ function withCustomLinks(editor) {
18
20
  };
19
21
  editor.normalizeNode = (entry) => {
20
22
  const [node, path] = entry;
21
- if (isText(node)) {
22
- const parentNode = Node.parent(editor, path);
23
+ if (isText.isText(node)) {
24
+ const parentNode = slate.Node.parent(editor, path);
23
25
  if (isComposerBodyCustomLink(parentNode)) {
24
- if (!isPlainText(node)) {
25
- const marks = filterActiveMarks(node);
26
- Transforms.unsetNodes(editor, marks, { at: path });
26
+ if (!isText.isPlainText(node)) {
27
+ const marks$1 = marks.filterActiveMarks(node);
28
+ slate.Transforms.unsetNodes(editor, marks$1, { at: path });
27
29
  }
28
30
  }
29
31
  }
@@ -33,11 +35,11 @@ function withCustomLinks(editor) {
33
35
  const { selection } = editor;
34
36
  const pastedText = data.getData("text/plain");
35
37
  let shouldInvokeDefaultBehavior = true;
36
- if (selection && !Range.isCollapsed(selection)) {
38
+ if (selection && !slate.Range.isCollapsed(selection)) {
37
39
  if (selection.anchor.path[0] === selection.focus.path[0]) {
38
40
  if (isUrl(pastedText)) {
39
- if (!selectionContainsInlines(editor, (node) => !isText(node))) {
40
- Transforms.wrapNodes(
41
+ if (!selectionContainsInlines.selectionContainsInlines(editor, (node) => !isText.isText(node))) {
42
+ slate.Transforms.wrapNodes(
41
43
  editor,
42
44
  {
43
45
  type: "custom-link",
@@ -47,7 +49,7 @@ function withCustomLinks(editor) {
47
49
  {
48
50
  at: selection,
49
51
  split: true,
50
- match: isPlainText
52
+ match: isText.isPlainText
51
53
  }
52
54
  );
53
55
  shouldInvokeDefaultBehavior = false;
@@ -62,8 +64,9 @@ function withCustomLinks(editor) {
62
64
  return editor;
63
65
  }
64
66
  function isComposerBodyCustomLink(node) {
65
- return Element.isElement(node) && node.type === "custom-link";
67
+ return slate.Element.isElement(node) && node.type === "custom-link";
66
68
  }
67
69
 
68
- export { isComposerBodyCustomLink, withCustomLinks };
69
- //# sourceMappingURL=custom-links.mjs.map
70
+ exports.isComposerBodyCustomLink = isComposerBodyCustomLink;
71
+ exports.withCustomLinks = withCustomLinks;
72
+ //# sourceMappingURL=custom-links.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"custom-links.mjs","sources":["../../../src/slate/plugins/custom-links.ts"],"sourcesContent":["import type { Editor } from \"slate\";\nimport { Element, Node, Range, Transforms } from \"slate\";\n\nimport type { ComposerBodyCustomLink } from \"../../types\";\nimport { isPlainText, isText } from \"../utils/is-text\";\nimport { filterActiveMarks } from \"../utils/marks\";\nimport { selectionContainsInlines } from \"../utils/selection-contains-inlines\";\n\nfunction isUrl(string: string) {\n try {\n new URL(string);\n return true;\n } catch (_) {\n return false;\n }\n}\n\nexport function withCustomLinks(editor: Editor): Editor {\n const { isInline, normalizeNode, insertData } = editor;\n\n editor.isInline = (element) => {\n return element.type === \"custom-link\" ? true : isInline(element);\n };\n\n editor.normalizeNode = (entry) => {\n const [node, path] = entry;\n\n if (isText(node)) {\n const parentNode = Node.parent(editor, path);\n\n // Prevent rich text within custom links by removing all marks of inner text nodes\n if (isComposerBodyCustomLink(parentNode)) {\n if (!isPlainText(node)) {\n const marks = filterActiveMarks(node);\n\n Transforms.unsetNodes(editor, marks, { at: path });\n }\n }\n }\n\n normalizeNode(entry);\n };\n\n // Create custom links when pasting URLs while some text is selected\n editor.insertData = (data) => {\n const { selection } = editor;\n const pastedText = data.getData(\"text/plain\");\n\n // Keep track of whether the default behavior should be invoked\n // This allows us to sequence multiple conditions in a performant way,\n // ordering them by likelihood/cost and stopping early whenever possible\n let shouldInvokeDefaultBehavior = true;\n\n // Check if the selection is a range\n if (selection && !Range.isCollapsed(selection)) {\n // Check if the selection is contained in a single block\n if (selection.anchor.path[0] === selection.focus.path[0]) {\n // Check if the pasted text is a valid URL\n if (isUrl(pastedText)) {\n // Check if the selection only contains (rich and/or plain) text nodes\n if (!selectionContainsInlines(editor, (node) => !isText(node))) {\n // If all conditions are met, wrap the selected nodes in a custom link\n Transforms.wrapNodes<ComposerBodyCustomLink>(\n editor,\n {\n type: \"custom-link\",\n url: pastedText,\n children: [],\n },\n {\n at: selection,\n split: true,\n match: isPlainText,\n }\n );\n shouldInvokeDefaultBehavior = false;\n }\n }\n }\n }\n\n if (shouldInvokeDefaultBehavior) {\n insertData(data);\n }\n };\n\n return editor;\n}\n\nexport function isComposerBodyCustomLink(\n node: Node\n): node is ComposerBodyCustomLink {\n return Element.isElement(node) && node.type === \"custom-link\";\n}\n"],"names":[],"mappings":";;;;;AAQA,SAAS,MAAM,MAAgB,EAAA;AAC7B,EAAI,IAAA;AACF,IAAA,IAAI,IAAI,MAAM,CAAA,CAAA;AACd,IAAO,OAAA,IAAA,CAAA;AAAA,WACA,CAAP,EAAA;AACA,IAAO,OAAA,KAAA,CAAA;AAAA,GACT;AACF,CAAA;AAEO,SAAS,gBAAgB,MAAwB,EAAA;AACtD,EAAA,MAAM,EAAE,QAAA,EAAU,aAAe,EAAA,UAAA,EAAe,GAAA,MAAA,CAAA;AAEhD,EAAO,MAAA,CAAA,QAAA,GAAW,CAAC,OAAY,KAAA;AAC7B,IAAA,OAAO,OAAQ,CAAA,IAAA,KAAS,aAAgB,GAAA,IAAA,GAAO,SAAS,OAAO,CAAA,CAAA;AAAA,GACjE,CAAA;AAEA,EAAO,MAAA,CAAA,aAAA,GAAgB,CAAC,KAAU,KAAA;AAChC,IAAM,MAAA,CAAC,IAAM,EAAA,IAAI,CAAI,GAAA,KAAA,CAAA;AAErB,IAAI,IAAA,MAAA,CAAO,IAAI,CAAG,EAAA;AAChB,MAAA,MAAM,UAAa,GAAA,IAAA,CAAK,MAAO,CAAA,MAAA,EAAQ,IAAI,CAAA,CAAA;AAG3C,MAAI,IAAA,wBAAA,CAAyB,UAAU,CAAG,EAAA;AACxC,QAAI,IAAA,CAAC,WAAY,CAAA,IAAI,CAAG,EAAA;AACtB,UAAM,MAAA,KAAA,GAAQ,kBAAkB,IAAI,CAAA,CAAA;AAEpC,UAAA,UAAA,CAAW,WAAW,MAAQ,EAAA,KAAA,EAAO,EAAE,EAAA,EAAI,MAAM,CAAA,CAAA;AAAA,SACnD;AAAA,OACF;AAAA,KACF;AAEA,IAAA,aAAA,CAAc,KAAK,CAAA,CAAA;AAAA,GACrB,CAAA;AAGA,EAAO,MAAA,CAAA,UAAA,GAAa,CAAC,IAAS,KAAA;AAC5B,IAAM,MAAA,EAAE,WAAc,GAAA,MAAA,CAAA;AACtB,IAAM,MAAA,UAAA,GAAa,IAAK,CAAA,OAAA,CAAQ,YAAY,CAAA,CAAA;AAK5C,IAAA,IAAI,2BAA8B,GAAA,IAAA,CAAA;AAGlC,IAAA,IAAI,SAAa,IAAA,CAAC,KAAM,CAAA,WAAA,CAAY,SAAS,CAAG,EAAA;AAE9C,MAAA,IAAI,UAAU,MAAO,CAAA,IAAA,CAAK,OAAO,SAAU,CAAA,KAAA,CAAM,KAAK,CAAI,CAAA,EAAA;AAExD,QAAI,IAAA,KAAA,CAAM,UAAU,CAAG,EAAA;AAErB,UAAI,IAAA,CAAC,yBAAyB,MAAQ,EAAA,CAAC,SAAS,CAAC,MAAA,CAAO,IAAI,CAAC,CAAG,EAAA;AAE9D,YAAW,UAAA,CAAA,SAAA;AAAA,cACT,MAAA;AAAA,cACA;AAAA,gBACE,IAAM,EAAA,aAAA;AAAA,gBACN,GAAK,EAAA,UAAA;AAAA,gBACL,UAAU,EAAC;AAAA,eACb;AAAA,cACA;AAAA,gBACE,EAAI,EAAA,SAAA;AAAA,gBACJ,KAAO,EAAA,IAAA;AAAA,gBACP,KAAO,EAAA,WAAA;AAAA,eACT;AAAA,aACF,CAAA;AACA,YAA8B,2BAAA,GAAA,KAAA,CAAA;AAAA,WAChC;AAAA,SACF;AAAA,OACF;AAAA,KACF;AAEA,IAAA,IAAI,2BAA6B,EAAA;AAC/B,MAAA,UAAA,CAAW,IAAI,CAAA,CAAA;AAAA,KACjB;AAAA,GACF,CAAA;AAEA,EAAO,OAAA,MAAA,CAAA;AACT,CAAA;AAEO,SAAS,yBACd,IACgC,EAAA;AAChC,EAAA,OAAO,OAAQ,CAAA,SAAA,CAAU,IAAI,CAAA,IAAK,KAAK,IAAS,KAAA,aAAA,CAAA;AAClD;;;;"}
1
+ {"version":3,"file":"custom-links.cjs","sources":["../../../src/slate/plugins/custom-links.ts"],"sourcesContent":["import type { Editor } from \"slate\";\nimport { Element, Node, Range, Transforms } from \"slate\";\n\nimport type { ComposerBodyCustomLink } from \"../../types\";\nimport { isPlainText, isText } from \"../utils/is-text\";\nimport { filterActiveMarks } from \"../utils/marks\";\nimport { selectionContainsInlines } from \"../utils/selection-contains-inlines\";\n\nfunction isUrl(string: string) {\n try {\n new URL(string);\n return true;\n } catch (_) {\n return false;\n }\n}\n\nexport function withCustomLinks(editor: Editor): Editor {\n const { isInline, normalizeNode, insertData } = editor;\n\n editor.isInline = (element) => {\n return element.type === \"custom-link\" ? true : isInline(element);\n };\n\n editor.normalizeNode = (entry) => {\n const [node, path] = entry;\n\n if (isText(node)) {\n const parentNode = Node.parent(editor, path);\n\n // Prevent rich text within custom links by removing all marks of inner text nodes\n if (isComposerBodyCustomLink(parentNode)) {\n if (!isPlainText(node)) {\n const marks = filterActiveMarks(node);\n\n Transforms.unsetNodes(editor, marks, { at: path });\n }\n }\n }\n\n normalizeNode(entry);\n };\n\n // Create custom links when pasting URLs while some text is selected\n editor.insertData = (data) => {\n const { selection } = editor;\n const pastedText = data.getData(\"text/plain\");\n\n // Keep track of whether the default behavior should be invoked\n // This allows us to sequence multiple conditions in a performant way,\n // ordering them by likelihood/cost and stopping early whenever possible\n let shouldInvokeDefaultBehavior = true;\n\n // Check if the selection is a range\n if (selection && !Range.isCollapsed(selection)) {\n // Check if the selection is contained in a single block\n if (selection.anchor.path[0] === selection.focus.path[0]) {\n // Check if the pasted text is a valid URL\n if (isUrl(pastedText)) {\n // Check if the selection only contains (rich and/or plain) text nodes\n if (!selectionContainsInlines(editor, (node) => !isText(node))) {\n // If all conditions are met, wrap the selected nodes in a custom link\n Transforms.wrapNodes<ComposerBodyCustomLink>(\n editor,\n {\n type: \"custom-link\",\n url: pastedText,\n children: [],\n },\n {\n at: selection,\n split: true,\n match: isPlainText,\n }\n );\n shouldInvokeDefaultBehavior = false;\n }\n }\n }\n }\n\n if (shouldInvokeDefaultBehavior) {\n insertData(data);\n }\n };\n\n return editor;\n}\n\nexport function isComposerBodyCustomLink(\n node: Node\n): node is ComposerBodyCustomLink {\n return Element.isElement(node) && node.type === \"custom-link\";\n}\n"],"names":["isText","Node","isPlainText","marks","filterActiveMarks","Transforms","Range","selectionContainsInlines","Element"],"mappings":";;;;;;;AAQA,SAAS,MAAM,MAAgB,EAAA;AAC7B,EAAI,IAAA;AACF,IAAA,IAAI,IAAI,MAAM,CAAA,CAAA;AACd,IAAO,OAAA,IAAA,CAAA;AAAA,WACA,CAAP,EAAA;AACA,IAAO,OAAA,KAAA,CAAA;AAAA,GACT;AACF,CAAA;AAEO,SAAS,gBAAgB,MAAwB,EAAA;AACtD,EAAA,MAAM,EAAE,QAAA,EAAU,aAAe,EAAA,UAAA,EAAe,GAAA,MAAA,CAAA;AAEhD,EAAO,MAAA,CAAA,QAAA,GAAW,CAAC,OAAY,KAAA;AAC7B,IAAA,OAAO,OAAQ,CAAA,IAAA,KAAS,aAAgB,GAAA,IAAA,GAAO,SAAS,OAAO,CAAA,CAAA;AAAA,GACjE,CAAA;AAEA,EAAO,MAAA,CAAA,aAAA,GAAgB,CAAC,KAAU,KAAA;AAChC,IAAM,MAAA,CAAC,IAAM,EAAA,IAAI,CAAI,GAAA,KAAA,CAAA;AAErB,IAAI,IAAAA,aAAA,CAAO,IAAI,CAAG,EAAA;AAChB,MAAA,MAAM,UAAa,GAAAC,UAAA,CAAK,MAAO,CAAA,MAAA,EAAQ,IAAI,CAAA,CAAA;AAG3C,MAAI,IAAA,wBAAA,CAAyB,UAAU,CAAG,EAAA;AACxC,QAAI,IAAA,CAACC,kBAAY,CAAA,IAAI,CAAG,EAAA;AACtB,UAAM,MAAAC,OAAA,GAAQC,wBAAkB,IAAI,CAAA,CAAA;AAEpC,UAAAC,gBAAA,CAAW,WAAW,MAAQ,EAAAF,OAAA,EAAO,EAAE,EAAA,EAAI,MAAM,CAAA,CAAA;AAAA,SACnD;AAAA,OACF;AAAA,KACF;AAEA,IAAA,aAAA,CAAc,KAAK,CAAA,CAAA;AAAA,GACrB,CAAA;AAGA,EAAO,MAAA,CAAA,UAAA,GAAa,CAAC,IAAS,KAAA;AAC5B,IAAM,MAAA,EAAE,WAAc,GAAA,MAAA,CAAA;AACtB,IAAM,MAAA,UAAA,GAAa,IAAK,CAAA,OAAA,CAAQ,YAAY,CAAA,CAAA;AAK5C,IAAA,IAAI,2BAA8B,GAAA,IAAA,CAAA;AAGlC,IAAA,IAAI,SAAa,IAAA,CAACG,WAAM,CAAA,WAAA,CAAY,SAAS,CAAG,EAAA;AAE9C,MAAA,IAAI,UAAU,MAAO,CAAA,IAAA,CAAK,OAAO,SAAU,CAAA,KAAA,CAAM,KAAK,CAAI,CAAA,EAAA;AAExD,QAAI,IAAA,KAAA,CAAM,UAAU,CAAG,EAAA;AAErB,UAAI,IAAA,CAACC,kDAAyB,MAAQ,EAAA,CAAC,SAAS,CAACP,aAAA,CAAO,IAAI,CAAC,CAAG,EAAA;AAE9D,YAAWK,gBAAA,CAAA,SAAA;AAAA,cACT,MAAA;AAAA,cACA;AAAA,gBACE,IAAM,EAAA,aAAA;AAAA,gBACN,GAAK,EAAA,UAAA;AAAA,gBACL,UAAU,EAAC;AAAA,eACb;AAAA,cACA;AAAA,gBACE,EAAI,EAAA,SAAA;AAAA,gBACJ,KAAO,EAAA,IAAA;AAAA,gBACP,KAAO,EAAAH,kBAAA;AAAA,eACT;AAAA,aACF,CAAA;AACA,YAA8B,2BAAA,GAAA,KAAA,CAAA;AAAA,WAChC;AAAA,SACF;AAAA,OACF;AAAA,KACF;AAEA,IAAA,IAAI,2BAA6B,EAAA;AAC/B,MAAA,UAAA,CAAW,IAAI,CAAA,CAAA;AAAA,KACjB;AAAA,GACF,CAAA;AAEA,EAAO,OAAA,MAAA,CAAA;AACT,CAAA;AAEO,SAAS,yBACd,IACgC,EAAA;AAChC,EAAA,OAAOM,aAAQ,CAAA,SAAA,CAAU,IAAI,CAAA,IAAK,KAAK,IAAS,KAAA,aAAA,CAAA;AAClD;;;;;"}
@@ -1,9 +1,7 @@
1
- 'use strict';
2
-
3
- var slate = require('slate');
4
- var isText = require('../utils/is-text.js');
5
- var marks = require('../utils/marks.js');
6
- var selectionContainsInlines = require('../utils/selection-contains-inlines.js');
1
+ import { Node, Transforms, Range, Element } from 'slate';
2
+ import { isText, isPlainText } from '../utils/is-text.js';
3
+ import { filterActiveMarks } from '../utils/marks.js';
4
+ import { selectionContainsInlines } from '../utils/selection-contains-inlines.js';
7
5
 
8
6
  function isUrl(string) {
9
7
  try {
@@ -20,12 +18,12 @@ function withCustomLinks(editor) {
20
18
  };
21
19
  editor.normalizeNode = (entry) => {
22
20
  const [node, path] = entry;
23
- if (isText.isText(node)) {
24
- const parentNode = slate.Node.parent(editor, path);
21
+ if (isText(node)) {
22
+ const parentNode = Node.parent(editor, path);
25
23
  if (isComposerBodyCustomLink(parentNode)) {
26
- if (!isText.isPlainText(node)) {
27
- const marks$1 = marks.filterActiveMarks(node);
28
- slate.Transforms.unsetNodes(editor, marks$1, { at: path });
24
+ if (!isPlainText(node)) {
25
+ const marks = filterActiveMarks(node);
26
+ Transforms.unsetNodes(editor, marks, { at: path });
29
27
  }
30
28
  }
31
29
  }
@@ -35,11 +33,11 @@ function withCustomLinks(editor) {
35
33
  const { selection } = editor;
36
34
  const pastedText = data.getData("text/plain");
37
35
  let shouldInvokeDefaultBehavior = true;
38
- if (selection && !slate.Range.isCollapsed(selection)) {
36
+ if (selection && !Range.isCollapsed(selection)) {
39
37
  if (selection.anchor.path[0] === selection.focus.path[0]) {
40
38
  if (isUrl(pastedText)) {
41
- if (!selectionContainsInlines.selectionContainsInlines(editor, (node) => !isText.isText(node))) {
42
- slate.Transforms.wrapNodes(
39
+ if (!selectionContainsInlines(editor, (node) => !isText(node))) {
40
+ Transforms.wrapNodes(
43
41
  editor,
44
42
  {
45
43
  type: "custom-link",
@@ -49,7 +47,7 @@ function withCustomLinks(editor) {
49
47
  {
50
48
  at: selection,
51
49
  split: true,
52
- match: isText.isPlainText
50
+ match: isPlainText
53
51
  }
54
52
  );
55
53
  shouldInvokeDefaultBehavior = false;
@@ -64,9 +62,8 @@ function withCustomLinks(editor) {
64
62
  return editor;
65
63
  }
66
64
  function isComposerBodyCustomLink(node) {
67
- return slate.Element.isElement(node) && node.type === "custom-link";
65
+ return Element.isElement(node) && node.type === "custom-link";
68
66
  }
69
67
 
70
- exports.isComposerBodyCustomLink = isComposerBodyCustomLink;
71
- exports.withCustomLinks = withCustomLinks;
68
+ export { isComposerBodyCustomLink, withCustomLinks };
72
69
  //# sourceMappingURL=custom-links.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"custom-links.js","sources":["../../../src/slate/plugins/custom-links.ts"],"sourcesContent":["import type { Editor } from \"slate\";\nimport { Element, Node, Range, Transforms } from \"slate\";\n\nimport type { ComposerBodyCustomLink } from \"../../types\";\nimport { isPlainText, isText } from \"../utils/is-text\";\nimport { filterActiveMarks } from \"../utils/marks\";\nimport { selectionContainsInlines } from \"../utils/selection-contains-inlines\";\n\nfunction isUrl(string: string) {\n try {\n new URL(string);\n return true;\n } catch (_) {\n return false;\n }\n}\n\nexport function withCustomLinks(editor: Editor): Editor {\n const { isInline, normalizeNode, insertData } = editor;\n\n editor.isInline = (element) => {\n return element.type === \"custom-link\" ? true : isInline(element);\n };\n\n editor.normalizeNode = (entry) => {\n const [node, path] = entry;\n\n if (isText(node)) {\n const parentNode = Node.parent(editor, path);\n\n // Prevent rich text within custom links by removing all marks of inner text nodes\n if (isComposerBodyCustomLink(parentNode)) {\n if (!isPlainText(node)) {\n const marks = filterActiveMarks(node);\n\n Transforms.unsetNodes(editor, marks, { at: path });\n }\n }\n }\n\n normalizeNode(entry);\n };\n\n // Create custom links when pasting URLs while some text is selected\n editor.insertData = (data) => {\n const { selection } = editor;\n const pastedText = data.getData(\"text/plain\");\n\n // Keep track of whether the default behavior should be invoked\n // This allows us to sequence multiple conditions in a performant way,\n // ordering them by likelihood/cost and stopping early whenever possible\n let shouldInvokeDefaultBehavior = true;\n\n // Check if the selection is a range\n if (selection && !Range.isCollapsed(selection)) {\n // Check if the selection is contained in a single block\n if (selection.anchor.path[0] === selection.focus.path[0]) {\n // Check if the pasted text is a valid URL\n if (isUrl(pastedText)) {\n // Check if the selection only contains (rich and/or plain) text nodes\n if (!selectionContainsInlines(editor, (node) => !isText(node))) {\n // If all conditions are met, wrap the selected nodes in a custom link\n Transforms.wrapNodes<ComposerBodyCustomLink>(\n editor,\n {\n type: \"custom-link\",\n url: pastedText,\n children: [],\n },\n {\n at: selection,\n split: true,\n match: isPlainText,\n }\n );\n shouldInvokeDefaultBehavior = false;\n }\n }\n }\n }\n\n if (shouldInvokeDefaultBehavior) {\n insertData(data);\n }\n };\n\n return editor;\n}\n\nexport function isComposerBodyCustomLink(\n node: Node\n): node is ComposerBodyCustomLink {\n return Element.isElement(node) && node.type === \"custom-link\";\n}\n"],"names":["isText","Node","isPlainText","marks","filterActiveMarks","Transforms","Range","selectionContainsInlines","Element"],"mappings":";;;;;;;AAQA,SAAS,MAAM,MAAgB,EAAA;AAC7B,EAAI,IAAA;AACF,IAAA,IAAI,IAAI,MAAM,CAAA,CAAA;AACd,IAAO,OAAA,IAAA,CAAA;AAAA,WACA,CAAP,EAAA;AACA,IAAO,OAAA,KAAA,CAAA;AAAA,GACT;AACF,CAAA;AAEO,SAAS,gBAAgB,MAAwB,EAAA;AACtD,EAAA,MAAM,EAAE,QAAA,EAAU,aAAe,EAAA,UAAA,EAAe,GAAA,MAAA,CAAA;AAEhD,EAAO,MAAA,CAAA,QAAA,GAAW,CAAC,OAAY,KAAA;AAC7B,IAAA,OAAO,OAAQ,CAAA,IAAA,KAAS,aAAgB,GAAA,IAAA,GAAO,SAAS,OAAO,CAAA,CAAA;AAAA,GACjE,CAAA;AAEA,EAAO,MAAA,CAAA,aAAA,GAAgB,CAAC,KAAU,KAAA;AAChC,IAAM,MAAA,CAAC,IAAM,EAAA,IAAI,CAAI,GAAA,KAAA,CAAA;AAErB,IAAI,IAAAA,aAAA,CAAO,IAAI,CAAG,EAAA;AAChB,MAAA,MAAM,UAAa,GAAAC,UAAA,CAAK,MAAO,CAAA,MAAA,EAAQ,IAAI,CAAA,CAAA;AAG3C,MAAI,IAAA,wBAAA,CAAyB,UAAU,CAAG,EAAA;AACxC,QAAI,IAAA,CAACC,kBAAY,CAAA,IAAI,CAAG,EAAA;AACtB,UAAM,MAAAC,OAAA,GAAQC,wBAAkB,IAAI,CAAA,CAAA;AAEpC,UAAAC,gBAAA,CAAW,WAAW,MAAQ,EAAAF,OAAA,EAAO,EAAE,EAAA,EAAI,MAAM,CAAA,CAAA;AAAA,SACnD;AAAA,OACF;AAAA,KACF;AAEA,IAAA,aAAA,CAAc,KAAK,CAAA,CAAA;AAAA,GACrB,CAAA;AAGA,EAAO,MAAA,CAAA,UAAA,GAAa,CAAC,IAAS,KAAA;AAC5B,IAAM,MAAA,EAAE,WAAc,GAAA,MAAA,CAAA;AACtB,IAAM,MAAA,UAAA,GAAa,IAAK,CAAA,OAAA,CAAQ,YAAY,CAAA,CAAA;AAK5C,IAAA,IAAI,2BAA8B,GAAA,IAAA,CAAA;AAGlC,IAAA,IAAI,SAAa,IAAA,CAACG,WAAM,CAAA,WAAA,CAAY,SAAS,CAAG,EAAA;AAE9C,MAAA,IAAI,UAAU,MAAO,CAAA,IAAA,CAAK,OAAO,SAAU,CAAA,KAAA,CAAM,KAAK,CAAI,CAAA,EAAA;AAExD,QAAI,IAAA,KAAA,CAAM,UAAU,CAAG,EAAA;AAErB,UAAI,IAAA,CAACC,kDAAyB,MAAQ,EAAA,CAAC,SAAS,CAACP,aAAA,CAAO,IAAI,CAAC,CAAG,EAAA;AAE9D,YAAWK,gBAAA,CAAA,SAAA;AAAA,cACT,MAAA;AAAA,cACA;AAAA,gBACE,IAAM,EAAA,aAAA;AAAA,gBACN,GAAK,EAAA,UAAA;AAAA,gBACL,UAAU,EAAC;AAAA,eACb;AAAA,cACA;AAAA,gBACE,EAAI,EAAA,SAAA;AAAA,gBACJ,KAAO,EAAA,IAAA;AAAA,gBACP,KAAO,EAAAH,kBAAA;AAAA,eACT;AAAA,aACF,CAAA;AACA,YAA8B,2BAAA,GAAA,KAAA,CAAA;AAAA,WAChC;AAAA,SACF;AAAA,OACF;AAAA,KACF;AAEA,IAAA,IAAI,2BAA6B,EAAA;AAC/B,MAAA,UAAA,CAAW,IAAI,CAAA,CAAA;AAAA,KACjB;AAAA,GACF,CAAA;AAEA,EAAO,OAAA,MAAA,CAAA;AACT,CAAA;AAEO,SAAS,yBACd,IACgC,EAAA;AAChC,EAAA,OAAOM,aAAQ,CAAA,SAAA,CAAU,IAAI,CAAA,IAAK,KAAK,IAAS,KAAA,aAAA,CAAA;AAClD;;;;;"}
1
+ {"version":3,"file":"custom-links.js","sources":["../../../src/slate/plugins/custom-links.ts"],"sourcesContent":["import type { Editor } from \"slate\";\nimport { Element, Node, Range, Transforms } from \"slate\";\n\nimport type { ComposerBodyCustomLink } from \"../../types\";\nimport { isPlainText, isText } from \"../utils/is-text\";\nimport { filterActiveMarks } from \"../utils/marks\";\nimport { selectionContainsInlines } from \"../utils/selection-contains-inlines\";\n\nfunction isUrl(string: string) {\n try {\n new URL(string);\n return true;\n } catch (_) {\n return false;\n }\n}\n\nexport function withCustomLinks(editor: Editor): Editor {\n const { isInline, normalizeNode, insertData } = editor;\n\n editor.isInline = (element) => {\n return element.type === \"custom-link\" ? true : isInline(element);\n };\n\n editor.normalizeNode = (entry) => {\n const [node, path] = entry;\n\n if (isText(node)) {\n const parentNode = Node.parent(editor, path);\n\n // Prevent rich text within custom links by removing all marks of inner text nodes\n if (isComposerBodyCustomLink(parentNode)) {\n if (!isPlainText(node)) {\n const marks = filterActiveMarks(node);\n\n Transforms.unsetNodes(editor, marks, { at: path });\n }\n }\n }\n\n normalizeNode(entry);\n };\n\n // Create custom links when pasting URLs while some text is selected\n editor.insertData = (data) => {\n const { selection } = editor;\n const pastedText = data.getData(\"text/plain\");\n\n // Keep track of whether the default behavior should be invoked\n // This allows us to sequence multiple conditions in a performant way,\n // ordering them by likelihood/cost and stopping early whenever possible\n let shouldInvokeDefaultBehavior = true;\n\n // Check if the selection is a range\n if (selection && !Range.isCollapsed(selection)) {\n // Check if the selection is contained in a single block\n if (selection.anchor.path[0] === selection.focus.path[0]) {\n // Check if the pasted text is a valid URL\n if (isUrl(pastedText)) {\n // Check if the selection only contains (rich and/or plain) text nodes\n if (!selectionContainsInlines(editor, (node) => !isText(node))) {\n // If all conditions are met, wrap the selected nodes in a custom link\n Transforms.wrapNodes<ComposerBodyCustomLink>(\n editor,\n {\n type: \"custom-link\",\n url: pastedText,\n children: [],\n },\n {\n at: selection,\n split: true,\n match: isPlainText,\n }\n );\n shouldInvokeDefaultBehavior = false;\n }\n }\n }\n }\n\n if (shouldInvokeDefaultBehavior) {\n insertData(data);\n }\n };\n\n return editor;\n}\n\nexport function isComposerBodyCustomLink(\n node: Node\n): node is ComposerBodyCustomLink {\n return Element.isElement(node) && node.type === \"custom-link\";\n}\n"],"names":[],"mappings":";;;;;AAQA,SAAS,MAAM,MAAgB,EAAA;AAC7B,EAAI,IAAA;AACF,IAAA,IAAI,IAAI,MAAM,CAAA,CAAA;AACd,IAAO,OAAA,IAAA,CAAA;AAAA,WACA,CAAP,EAAA;AACA,IAAO,OAAA,KAAA,CAAA;AAAA,GACT;AACF,CAAA;AAEO,SAAS,gBAAgB,MAAwB,EAAA;AACtD,EAAA,MAAM,EAAE,QAAA,EAAU,aAAe,EAAA,UAAA,EAAe,GAAA,MAAA,CAAA;AAEhD,EAAO,MAAA,CAAA,QAAA,GAAW,CAAC,OAAY,KAAA;AAC7B,IAAA,OAAO,OAAQ,CAAA,IAAA,KAAS,aAAgB,GAAA,IAAA,GAAO,SAAS,OAAO,CAAA,CAAA;AAAA,GACjE,CAAA;AAEA,EAAO,MAAA,CAAA,aAAA,GAAgB,CAAC,KAAU,KAAA;AAChC,IAAM,MAAA,CAAC,IAAM,EAAA,IAAI,CAAI,GAAA,KAAA,CAAA;AAErB,IAAI,IAAA,MAAA,CAAO,IAAI,CAAG,EAAA;AAChB,MAAA,MAAM,UAAa,GAAA,IAAA,CAAK,MAAO,CAAA,MAAA,EAAQ,IAAI,CAAA,CAAA;AAG3C,MAAI,IAAA,wBAAA,CAAyB,UAAU,CAAG,EAAA;AACxC,QAAI,IAAA,CAAC,WAAY,CAAA,IAAI,CAAG,EAAA;AACtB,UAAM,MAAA,KAAA,GAAQ,kBAAkB,IAAI,CAAA,CAAA;AAEpC,UAAA,UAAA,CAAW,WAAW,MAAQ,EAAA,KAAA,EAAO,EAAE,EAAA,EAAI,MAAM,CAAA,CAAA;AAAA,SACnD;AAAA,OACF;AAAA,KACF;AAEA,IAAA,aAAA,CAAc,KAAK,CAAA,CAAA;AAAA,GACrB,CAAA;AAGA,EAAO,MAAA,CAAA,UAAA,GAAa,CAAC,IAAS,KAAA;AAC5B,IAAM,MAAA,EAAE,WAAc,GAAA,MAAA,CAAA;AACtB,IAAM,MAAA,UAAA,GAAa,IAAK,CAAA,OAAA,CAAQ,YAAY,CAAA,CAAA;AAK5C,IAAA,IAAI,2BAA8B,GAAA,IAAA,CAAA;AAGlC,IAAA,IAAI,SAAa,IAAA,CAAC,KAAM,CAAA,WAAA,CAAY,SAAS,CAAG,EAAA;AAE9C,MAAA,IAAI,UAAU,MAAO,CAAA,IAAA,CAAK,OAAO,SAAU,CAAA,KAAA,CAAM,KAAK,CAAI,CAAA,EAAA;AAExD,QAAI,IAAA,KAAA,CAAM,UAAU,CAAG,EAAA;AAErB,UAAI,IAAA,CAAC,yBAAyB,MAAQ,EAAA,CAAC,SAAS,CAAC,MAAA,CAAO,IAAI,CAAC,CAAG,EAAA;AAE9D,YAAW,UAAA,CAAA,SAAA;AAAA,cACT,MAAA;AAAA,cACA;AAAA,gBACE,IAAM,EAAA,aAAA;AAAA,gBACN,GAAK,EAAA,UAAA;AAAA,gBACL,UAAU,EAAC;AAAA,eACb;AAAA,cACA;AAAA,gBACE,EAAI,EAAA,SAAA;AAAA,gBACJ,KAAO,EAAA,IAAA;AAAA,gBACP,KAAO,EAAA,WAAA;AAAA,eACT;AAAA,aACF,CAAA;AACA,YAA8B,2BAAA,GAAA,KAAA,CAAA;AAAA,WAChC;AAAA,SACF;AAAA,OACF;AAAA,KACF;AAEA,IAAA,IAAI,2BAA6B,EAAA;AAC/B,MAAA,UAAA,CAAW,IAAI,CAAA,CAAA;AAAA,KACjB;AAAA,GACF,CAAA;AAEA,EAAO,OAAA,MAAA,CAAA;AACT,CAAA;AAEO,SAAS,yBACd,IACgC,EAAA;AAChC,EAAA,OAAO,OAAQ,CAAA,SAAA,CAAU,IAAI,CAAA,IAAK,KAAK,IAAS,KAAA,aAAA,CAAA;AAClD;;;;"}
@@ -0,0 +1,18 @@
1
+ 'use strict';
2
+
3
+ var isEmpty = require('../utils/is-empty.cjs');
4
+ var marks = require('../utils/marks.cjs');
5
+
6
+ function withEmptyClearFormatting(editor) {
7
+ const { onChange } = editor;
8
+ editor.onChange = (options) => {
9
+ if (isEmpty.isEmpty(editor, editor.children)) {
10
+ marks.removeMarks(editor);
11
+ }
12
+ onChange(options);
13
+ };
14
+ return editor;
15
+ }
16
+
17
+ exports.withEmptyClearFormatting = withEmptyClearFormatting;
18
+ //# sourceMappingURL=empty-clear-formatting.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"empty-clear-formatting.mjs","sources":["../../../src/slate/plugins/empty-clear-formatting.ts"],"sourcesContent":["import type { Editor as SlateEditor } from \"slate\";\n\nimport { isEmpty } from \"../utils/is-empty\";\nimport { removeMarks } from \"../utils/marks\";\n\n// This plugins clears formatting on empty blocks\n// https://github.com/ianstormtaylor/slate/issues/2908\nexport function withEmptyClearFormatting<T extends SlateEditor>(editor: T): T {\n const { onChange } = editor;\n\n editor.onChange = (options) => {\n if (isEmpty(editor, editor.children)) {\n removeMarks(editor);\n }\n\n onChange(options);\n };\n\n return editor;\n}\n"],"names":[],"mappings":";;;AAOO,SAAS,yBAAgD,MAAc,EAAA;AAC5E,EAAM,MAAA,EAAE,UAAa,GAAA,MAAA,CAAA;AAErB,EAAO,MAAA,CAAA,QAAA,GAAW,CAAC,OAAY,KAAA;AAC7B,IAAA,IAAI,OAAQ,CAAA,MAAA,EAAQ,MAAO,CAAA,QAAQ,CAAG,EAAA;AACpC,MAAA,WAAA,CAAY,MAAM,CAAA,CAAA;AAAA,KACpB;AAEA,IAAA,QAAA,CAAS,OAAO,CAAA,CAAA;AAAA,GAClB,CAAA;AAEA,EAAO,OAAA,MAAA,CAAA;AACT;;;;"}
1
+ {"version":3,"file":"empty-clear-formatting.cjs","sources":["../../../src/slate/plugins/empty-clear-formatting.ts"],"sourcesContent":["import type { Editor as SlateEditor } from \"slate\";\n\nimport { isEmpty } from \"../utils/is-empty\";\nimport { removeMarks } from \"../utils/marks\";\n\n// This plugins clears formatting on empty blocks\n// https://github.com/ianstormtaylor/slate/issues/2908\nexport function withEmptyClearFormatting<T extends SlateEditor>(editor: T): T {\n const { onChange } = editor;\n\n editor.onChange = (options) => {\n if (isEmpty(editor, editor.children)) {\n removeMarks(editor);\n }\n\n onChange(options);\n };\n\n return editor;\n}\n"],"names":["isEmpty","removeMarks"],"mappings":";;;;;AAOO,SAAS,yBAAgD,MAAc,EAAA;AAC5E,EAAM,MAAA,EAAE,UAAa,GAAA,MAAA,CAAA;AAErB,EAAO,MAAA,CAAA,QAAA,GAAW,CAAC,OAAY,KAAA;AAC7B,IAAA,IAAIA,eAAQ,CAAA,MAAA,EAAQ,MAAO,CAAA,QAAQ,CAAG,EAAA;AACpC,MAAAC,iBAAA,CAAY,MAAM,CAAA,CAAA;AAAA,KACpB;AAEA,IAAA,QAAA,CAAS,OAAO,CAAA,CAAA;AAAA,GAClB,CAAA;AAEA,EAAO,OAAA,MAAA,CAAA;AACT;;;;"}
@@ -1,18 +1,16 @@
1
- 'use strict';
2
-
3
- var isEmpty = require('../utils/is-empty.js');
4
- var marks = require('../utils/marks.js');
1
+ import { isEmpty } from '../utils/is-empty.js';
2
+ import { removeMarks } from '../utils/marks.js';
5
3
 
6
4
  function withEmptyClearFormatting(editor) {
7
5
  const { onChange } = editor;
8
6
  editor.onChange = (options) => {
9
- if (isEmpty.isEmpty(editor, editor.children)) {
10
- marks.removeMarks(editor);
7
+ if (isEmpty(editor, editor.children)) {
8
+ removeMarks(editor);
11
9
  }
12
10
  onChange(options);
13
11
  };
14
12
  return editor;
15
13
  }
16
14
 
17
- exports.withEmptyClearFormatting = withEmptyClearFormatting;
15
+ export { withEmptyClearFormatting };
18
16
  //# sourceMappingURL=empty-clear-formatting.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"empty-clear-formatting.js","sources":["../../../src/slate/plugins/empty-clear-formatting.ts"],"sourcesContent":["import type { Editor as SlateEditor } from \"slate\";\n\nimport { isEmpty } from \"../utils/is-empty\";\nimport { removeMarks } from \"../utils/marks\";\n\n// This plugins clears formatting on empty blocks\n// https://github.com/ianstormtaylor/slate/issues/2908\nexport function withEmptyClearFormatting<T extends SlateEditor>(editor: T): T {\n const { onChange } = editor;\n\n editor.onChange = (options) => {\n if (isEmpty(editor, editor.children)) {\n removeMarks(editor);\n }\n\n onChange(options);\n };\n\n return editor;\n}\n"],"names":["isEmpty","removeMarks"],"mappings":";;;;;AAOO,SAAS,yBAAgD,MAAc,EAAA;AAC5E,EAAM,MAAA,EAAE,UAAa,GAAA,MAAA,CAAA;AAErB,EAAO,MAAA,CAAA,QAAA,GAAW,CAAC,OAAY,KAAA;AAC7B,IAAA,IAAIA,eAAQ,CAAA,MAAA,EAAQ,MAAO,CAAA,QAAQ,CAAG,EAAA;AACpC,MAAAC,iBAAA,CAAY,MAAM,CAAA,CAAA;AAAA,KACpB;AAEA,IAAA,QAAA,CAAS,OAAO,CAAA,CAAA;AAAA,GAClB,CAAA;AAEA,EAAO,OAAA,MAAA,CAAA;AACT;;;;"}
1
+ {"version":3,"file":"empty-clear-formatting.js","sources":["../../../src/slate/plugins/empty-clear-formatting.ts"],"sourcesContent":["import type { Editor as SlateEditor } from \"slate\";\n\nimport { isEmpty } from \"../utils/is-empty\";\nimport { removeMarks } from \"../utils/marks\";\n\n// This plugins clears formatting on empty blocks\n// https://github.com/ianstormtaylor/slate/issues/2908\nexport function withEmptyClearFormatting<T extends SlateEditor>(editor: T): T {\n const { onChange } = editor;\n\n editor.onChange = (options) => {\n if (isEmpty(editor, editor.children)) {\n removeMarks(editor);\n }\n\n onChange(options);\n };\n\n return editor;\n}\n"],"names":[],"mappings":";;;AAOO,SAAS,yBAAgD,MAAc,EAAA;AAC5E,EAAM,MAAA,EAAE,UAAa,GAAA,MAAA,CAAA;AAErB,EAAO,MAAA,CAAA,QAAA,GAAW,CAAC,OAAY,KAAA;AAC7B,IAAA,IAAI,OAAQ,CAAA,MAAA,EAAQ,MAAO,CAAA,QAAQ,CAAG,EAAA;AACpC,MAAA,WAAA,CAAY,MAAM,CAAA,CAAA;AAAA,KACpB;AAEA,IAAA,QAAA,CAAS,OAAO,CAAA,CAAA;AAAA,GAClB,CAAA;AAEA,EAAO,OAAA,MAAA,CAAA;AACT;;;;"}
@@ -0,0 +1,129 @@
1
+ 'use strict';
2
+
3
+ var slate = require('slate');
4
+ var getCharacter = require('../utils/get-character.cjs');
5
+ var getMatchRange = require('../utils/get-match-range.cjs');
6
+ var isEmptyString = require('../utils/is-empty-string.cjs');
7
+ var isWhitespaceCharacter = require('../utils/is-whitespace-character.cjs');
8
+
9
+ const MENTION_CHARACTER = "@";
10
+ function getMentionDraftAtSelection(editor) {
11
+ const { selection } = editor;
12
+ if (!selection || !slate.Range.isCollapsed(selection)) {
13
+ return;
14
+ }
15
+ const match = getMatchRange.getMatchRange(editor, selection, ["@"], {
16
+ include: true,
17
+ allowConsecutiveWhitespace: false,
18
+ ignoreTerminator: (_, point) => {
19
+ const characterBefore = getCharacter.getCharacterBefore(editor, point);
20
+ if (characterBefore && !isWhitespaceCharacter.isWhitespaceCharacter(characterBefore.text)) {
21
+ return true;
22
+ }
23
+ const after = slate.Editor.after(editor, point, { unit: "character" });
24
+ if (after) {
25
+ const characterAfter = getCharacter.getCharacterAfter(editor, after);
26
+ if (isWhitespaceCharacter.isWhitespaceCharacter(characterAfter?.text)) {
27
+ return true;
28
+ }
29
+ }
30
+ return false;
31
+ }
32
+ });
33
+ if (!match) {
34
+ return;
35
+ }
36
+ const matchText = slate.Editor.string(editor, match);
37
+ if (!matchText.startsWith(MENTION_CHARACTER) || isWhitespaceCharacter.isWhitespaceCharacter(matchText[1])) {
38
+ return;
39
+ }
40
+ return {
41
+ range: match,
42
+ text: matchText.substring(1)
43
+ };
44
+ }
45
+ function isComposerBodyMention(node) {
46
+ return slate.Element.isElement(node) && node.type === "mention";
47
+ }
48
+ function insertMention(editor, userId) {
49
+ const mention = {
50
+ type: "mention",
51
+ id: userId,
52
+ children: [{ text: "" }]
53
+ };
54
+ slate.Transforms.insertNodes(editor, mention);
55
+ slate.Transforms.move(editor);
56
+ const afterCharacter = editor.selection ? getCharacter.getCharacterAfter(editor, editor.selection) : void 0;
57
+ if (!afterCharacter || afterCharacter.void) {
58
+ slate.Transforms.insertText(editor, " ");
59
+ } else if (isEmptyString.isEmptyString(afterCharacter.text)) {
60
+ slate.Transforms.move(editor);
61
+ }
62
+ }
63
+ function insertMentionCharacter(editor) {
64
+ if (!editor.selection) {
65
+ return;
66
+ }
67
+ const beforeCharacter = getCharacter.getCharacterBefore(editor, editor.selection, {
68
+ filterVoids: true
69
+ });
70
+ const afterCharacter = getCharacter.getCharacterAfter(editor, editor.selection, {
71
+ filterVoids: true
72
+ });
73
+ const shouldInsertSpaceBefore = beforeCharacter && !isEmptyString.isEmptyString(beforeCharacter.text);
74
+ const shouldInsertSpaceAfter = afterCharacter && !isEmptyString.isEmptyString(afterCharacter.text);
75
+ if (!slate.Range.isCollapsed(editor.selection)) {
76
+ const text = (shouldInsertSpaceBefore ? " " : "") + MENTION_CHARACTER + (shouldInsertSpaceAfter ? " " : "");
77
+ editor.insertText(text);
78
+ if (shouldInsertSpaceAfter) {
79
+ slate.Transforms.move(editor, {
80
+ distance: 1,
81
+ unit: "character",
82
+ reverse: true
83
+ });
84
+ }
85
+ } else {
86
+ const beforeText = (shouldInsertSpaceBefore ? " " : "") + MENTION_CHARACTER;
87
+ editor.insertText(beforeText, { at: slate.Range.start(editor.selection) });
88
+ if (shouldInsertSpaceAfter) {
89
+ editor.insertText(" ", { at: slate.Range.end(editor.selection) });
90
+ }
91
+ slate.Transforms.collapse(editor, { edge: "end" });
92
+ }
93
+ }
94
+ function withMentions(editor) {
95
+ const { isInline, isVoid, markableVoid, deleteBackward } = editor;
96
+ editor.isInline = (element) => {
97
+ return isComposerBodyMention(element) || isInline(element);
98
+ };
99
+ editor.isVoid = (element) => {
100
+ return isComposerBodyMention(element) || isVoid(element);
101
+ };
102
+ editor.markableVoid = (element) => {
103
+ return isComposerBodyMention(element) || markableVoid(element);
104
+ };
105
+ editor.deleteBackward = (unit) => {
106
+ const { selection } = editor;
107
+ if (selection && slate.Range.isCollapsed(selection)) {
108
+ const [mention] = slate.Editor.nodes(editor, {
109
+ at: unit === "character" ? slate.Editor.before(editor, selection, { unit: "character" }) : selection,
110
+ match: isComposerBodyMention
111
+ });
112
+ deleteBackward(unit);
113
+ if (mention) {
114
+ slate.Transforms.insertText(editor, MENTION_CHARACTER);
115
+ }
116
+ } else {
117
+ deleteBackward(unit);
118
+ }
119
+ };
120
+ return editor;
121
+ }
122
+
123
+ exports.MENTION_CHARACTER = MENTION_CHARACTER;
124
+ exports.getMentionDraftAtSelection = getMentionDraftAtSelection;
125
+ exports.insertMention = insertMention;
126
+ exports.insertMentionCharacter = insertMentionCharacter;
127
+ exports.isComposerBodyMention = isComposerBodyMention;
128
+ exports.withMentions = withMentions;
129
+ //# sourceMappingURL=mentions.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mentions.cjs","sources":["../../../src/slate/plugins/mentions.ts"],"sourcesContent":["import type { Node as SlateNode } from \"slate\";\nimport {\n Editor as SlateEditor,\n Element as SlateElement,\n Range as SlateRange,\n Transforms as SlateTransforms,\n} from \"slate\";\n\nimport type { ComposerBodyMention } from \"../../types\";\nimport { getCharacterAfter, getCharacterBefore } from \"../utils/get-character\";\nimport { getMatchRange } from \"../utils/get-match-range\";\nimport { isEmptyString } from \"../utils/is-empty-string\";\nimport { isWhitespaceCharacter } from \"../utils/is-whitespace-character\";\n\nexport const MENTION_CHARACTER = \"@\";\n\nexport type MentionDraft = {\n range: SlateRange;\n text: string;\n};\n\nexport function getMentionDraftAtSelection(\n editor: SlateEditor\n): MentionDraft | undefined {\n const { selection } = editor;\n\n if (!selection || !SlateRange.isCollapsed(selection)) {\n return;\n }\n\n // Walk backwards from the selection until \"@\" is found, unless the character\n // before isn't whitespace (or \"@\" is the block's first character)\n const match = getMatchRange(editor, selection, [\"@\"], {\n include: true,\n allowConsecutiveWhitespace: false,\n ignoreTerminator: (_, point) => {\n const characterBefore = getCharacterBefore(editor, point);\n\n // Ignore \"@\" if it's preceded by a non-whitespace character\n if (characterBefore && !isWhitespaceCharacter(characterBefore.text)) {\n return true;\n }\n\n const after = SlateEditor.after(editor, point, { unit: \"character\" });\n\n if (after) {\n const characterAfter = getCharacterAfter(editor, after);\n\n // Ignore \"@\" if it's followed by a whitespace character\n if (isWhitespaceCharacter(characterAfter?.text)) {\n return true;\n }\n }\n\n return false;\n },\n });\n\n if (!match) {\n return;\n }\n\n const matchText = SlateEditor.string(editor, match);\n\n // Check if the match starts with the mention character (not followed by a whitespace character)\n if (\n !matchText.startsWith(MENTION_CHARACTER) ||\n isWhitespaceCharacter(matchText[1])\n ) {\n return;\n }\n\n return {\n range: match,\n // Exclude the mention character from the text\n text: matchText.substring(1),\n };\n}\n\nexport function isComposerBodyMention(\n node: SlateNode\n): node is ComposerBodyMention {\n return SlateElement.isElement(node) && node.type === \"mention\";\n}\n\nexport function insertMention(editor: SlateEditor, userId: string) {\n const mention: ComposerBodyMention = {\n type: \"mention\",\n id: userId,\n children: [{ text: \"\" }],\n };\n\n // Insert the mention\n SlateTransforms.insertNodes(editor, mention);\n SlateTransforms.move(editor);\n\n const afterCharacter = editor.selection\n ? getCharacterAfter(editor, editor.selection)\n : undefined;\n\n if (!afterCharacter || afterCharacter.void) {\n // Insert a following space if needed\n SlateTransforms.insertText(editor, \" \");\n } else if (isEmptyString(afterCharacter.text)) {\n // Move the selection if it's already followed by a space\n SlateTransforms.move(editor);\n }\n}\n\nexport function insertMentionCharacter(editor: SlateEditor) {\n if (!editor.selection) {\n return;\n }\n\n // Check if the selection is preceded or followed by a non-whitespace character\n const beforeCharacter = getCharacterBefore(editor, editor.selection, {\n filterVoids: true,\n });\n const afterCharacter = getCharacterAfter(editor, editor.selection, {\n filterVoids: true,\n });\n const shouldInsertSpaceBefore =\n beforeCharacter && !isEmptyString(beforeCharacter.text);\n const shouldInsertSpaceAfter =\n afterCharacter && !isEmptyString(afterCharacter.text);\n\n if (!SlateRange.isCollapsed(editor.selection)) {\n const text =\n (shouldInsertSpaceBefore ? \" \" : \"\") +\n MENTION_CHARACTER +\n (shouldInsertSpaceAfter ? \" \" : \"\");\n\n // If the selection is collapsed, insert the mention character at the current selection\n editor.insertText(text);\n\n // If a following space was inserted, move the selection back by one\n if (shouldInsertSpaceAfter) {\n SlateTransforms.move(editor, {\n distance: 1,\n unit: \"character\",\n reverse: true,\n });\n }\n } else {\n const beforeText = (shouldInsertSpaceBefore ? \" \" : \"\") + MENTION_CHARACTER;\n\n // If the selection is not collapsed, insert the mention character before the selection\n editor.insertText(beforeText, { at: SlateRange.start(editor.selection) });\n\n if (shouldInsertSpaceAfter) {\n editor.insertText(\" \", { at: SlateRange.end(editor.selection) });\n }\n\n // Collapse the selection at its end\n SlateTransforms.collapse(editor, { edge: \"end\" });\n }\n}\n\nexport function withMentions<T extends SlateEditor>(editor: T): T {\n const { isInline, isVoid, markableVoid, deleteBackward } = editor;\n\n editor.isInline = (element) => {\n return isComposerBodyMention(element) || isInline(element);\n };\n\n editor.isVoid = (element) => {\n return isComposerBodyMention(element) || isVoid(element);\n };\n\n editor.markableVoid = (element) => {\n return isComposerBodyMention(element) || markableVoid(element);\n };\n\n editor.deleteBackward = (unit) => {\n const { selection } = editor;\n\n if (selection && SlateRange.isCollapsed(selection)) {\n const [mention] = SlateEditor.nodes(editor, {\n at:\n unit === \"character\"\n ? SlateEditor.before(editor, selection, { unit: \"character\" })\n : selection,\n match: isComposerBodyMention,\n });\n\n deleteBackward(unit);\n\n if (mention) {\n SlateTransforms.insertText(editor, MENTION_CHARACTER);\n }\n } else {\n deleteBackward(unit);\n }\n };\n\n return editor;\n}\n"],"names":["SlateRange","getMatchRange","getCharacterBefore","isWhitespaceCharacter","SlateEditor","getCharacterAfter","SlateElement","SlateTransforms","isEmptyString"],"mappings":"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"}
@@ -1,22 +1,38 @@
1
- 'use strict';
2
-
3
- var slate = require('slate');
4
- var getCharacter = require('../utils/get-character.js');
5
- var getMatchRange = require('../utils/get-match-range.js');
6
- var isEmptyString = require('../utils/is-empty-string.js');
1
+ import { Range, Editor, Element, Transforms } from 'slate';
2
+ import { getCharacterBefore, getCharacterAfter } from '../utils/get-character.js';
3
+ import { getMatchRange } from '../utils/get-match-range.js';
4
+ import { isEmptyString } from '../utils/is-empty-string.js';
5
+ import { isWhitespaceCharacter } from '../utils/is-whitespace-character.js';
7
6
 
8
7
  const MENTION_CHARACTER = "@";
9
8
  function getMentionDraftAtSelection(editor) {
10
9
  const { selection } = editor;
11
- if (!selection || !slate.Range.isCollapsed(selection)) {
10
+ if (!selection || !Range.isCollapsed(selection)) {
12
11
  return;
13
12
  }
14
- const match = getMatchRange.getMatchRange(editor, selection);
13
+ const match = getMatchRange(editor, selection, ["@"], {
14
+ include: true,
15
+ allowConsecutiveWhitespace: false,
16
+ ignoreTerminator: (_, point) => {
17
+ const characterBefore = getCharacterBefore(editor, point);
18
+ if (characterBefore && !isWhitespaceCharacter(characterBefore.text)) {
19
+ return true;
20
+ }
21
+ const after = Editor.after(editor, point, { unit: "character" });
22
+ if (after) {
23
+ const characterAfter = getCharacterAfter(editor, after);
24
+ if (isWhitespaceCharacter(characterAfter?.text)) {
25
+ return true;
26
+ }
27
+ }
28
+ return false;
29
+ }
30
+ });
15
31
  if (!match) {
16
32
  return;
17
33
  }
18
- const matchText = slate.Editor.string(editor, match);
19
- if (!matchText.startsWith(MENTION_CHARACTER)) {
34
+ const matchText = Editor.string(editor, match);
35
+ if (!matchText.startsWith(MENTION_CHARACTER) || isWhitespaceCharacter(matchText[1])) {
20
36
  return;
21
37
  }
22
38
  return {
@@ -25,7 +41,7 @@ function getMentionDraftAtSelection(editor) {
25
41
  };
26
42
  }
27
43
  function isComposerBodyMention(node) {
28
- return slate.Element.isElement(node) && node.type === "mention";
44
+ return Element.isElement(node) && node.type === "mention";
29
45
  }
30
46
  function insertMention(editor, userId) {
31
47
  const mention = {
@@ -33,32 +49,32 @@ function insertMention(editor, userId) {
33
49
  id: userId,
34
50
  children: [{ text: "" }]
35
51
  };
36
- slate.Transforms.insertNodes(editor, mention);
37
- slate.Transforms.move(editor);
38
- const afterCharacter = editor.selection ? getCharacter.getCharacterAfter(editor, editor.selection) : void 0;
52
+ Transforms.insertNodes(editor, mention);
53
+ Transforms.move(editor);
54
+ const afterCharacter = editor.selection ? getCharacterAfter(editor, editor.selection) : void 0;
39
55
  if (!afterCharacter || afterCharacter.void) {
40
- slate.Transforms.insertText(editor, " ");
41
- } else if (isEmptyString.isEmptyString(afterCharacter.text)) {
42
- slate.Transforms.move(editor);
56
+ Transforms.insertText(editor, " ");
57
+ } else if (isEmptyString(afterCharacter.text)) {
58
+ Transforms.move(editor);
43
59
  }
44
60
  }
45
61
  function insertMentionCharacter(editor) {
46
62
  if (!editor.selection) {
47
63
  return;
48
64
  }
49
- const beforeCharacter = getCharacter.getCharacterBefore(editor, editor.selection, {
65
+ const beforeCharacter = getCharacterBefore(editor, editor.selection, {
50
66
  filterVoids: true
51
67
  });
52
- const afterCharacter = getCharacter.getCharacterAfter(editor, editor.selection, {
68
+ const afterCharacter = getCharacterAfter(editor, editor.selection, {
53
69
  filterVoids: true
54
70
  });
55
- const shouldInsertSpaceBefore = beforeCharacter && !isEmptyString.isEmptyString(beforeCharacter.text);
56
- const shouldInsertSpaceAfter = afterCharacter && !isEmptyString.isEmptyString(afterCharacter.text);
57
- if (!slate.Range.isCollapsed(editor.selection)) {
71
+ const shouldInsertSpaceBefore = beforeCharacter && !isEmptyString(beforeCharacter.text);
72
+ const shouldInsertSpaceAfter = afterCharacter && !isEmptyString(afterCharacter.text);
73
+ if (!Range.isCollapsed(editor.selection)) {
58
74
  const text = (shouldInsertSpaceBefore ? " " : "") + MENTION_CHARACTER + (shouldInsertSpaceAfter ? " " : "");
59
75
  editor.insertText(text);
60
76
  if (shouldInsertSpaceAfter) {
61
- slate.Transforms.move(editor, {
77
+ Transforms.move(editor, {
62
78
  distance: 1,
63
79
  unit: "character",
64
80
  reverse: true
@@ -66,11 +82,11 @@ function insertMentionCharacter(editor) {
66
82
  }
67
83
  } else {
68
84
  const beforeText = (shouldInsertSpaceBefore ? " " : "") + MENTION_CHARACTER;
69
- editor.insertText(beforeText, { at: slate.Range.start(editor.selection) });
85
+ editor.insertText(beforeText, { at: Range.start(editor.selection) });
70
86
  if (shouldInsertSpaceAfter) {
71
- editor.insertText(" ", { at: slate.Range.end(editor.selection) });
87
+ editor.insertText(" ", { at: Range.end(editor.selection) });
72
88
  }
73
- slate.Transforms.collapse(editor, { edge: "end" });
89
+ Transforms.collapse(editor, { edge: "end" });
74
90
  }
75
91
  }
76
92
  function withMentions(editor) {
@@ -86,14 +102,14 @@ function withMentions(editor) {
86
102
  };
87
103
  editor.deleteBackward = (unit) => {
88
104
  const { selection } = editor;
89
- if (selection && slate.Range.isCollapsed(selection)) {
90
- const [mention] = slate.Editor.nodes(editor, {
91
- at: unit === "character" ? slate.Editor.before(editor, selection, { unit: "character" }) : selection,
105
+ if (selection && Range.isCollapsed(selection)) {
106
+ const [mention] = Editor.nodes(editor, {
107
+ at: unit === "character" ? Editor.before(editor, selection, { unit: "character" }) : selection,
92
108
  match: isComposerBodyMention
93
109
  });
94
110
  deleteBackward(unit);
95
111
  if (mention) {
96
- slate.Transforms.insertText(editor, MENTION_CHARACTER);
112
+ Transforms.insertText(editor, MENTION_CHARACTER);
97
113
  }
98
114
  } else {
99
115
  deleteBackward(unit);
@@ -102,10 +118,5 @@ function withMentions(editor) {
102
118
  return editor;
103
119
  }
104
120
 
105
- exports.MENTION_CHARACTER = MENTION_CHARACTER;
106
- exports.getMentionDraftAtSelection = getMentionDraftAtSelection;
107
- exports.insertMention = insertMention;
108
- exports.insertMentionCharacter = insertMentionCharacter;
109
- exports.isComposerBodyMention = isComposerBodyMention;
110
- exports.withMentions = withMentions;
121
+ export { MENTION_CHARACTER, getMentionDraftAtSelection, insertMention, insertMentionCharacter, isComposerBodyMention, withMentions };
111
122
  //# sourceMappingURL=mentions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mentions.js","sources":["../../../src/slate/plugins/mentions.ts"],"sourcesContent":["import type { Node as SlateNode } from \"slate\";\nimport {\n Editor as SlateEditor,\n Element as SlateElement,\n Range as SlateRange,\n Transforms as SlateTransforms,\n} from \"slate\";\n\nimport type { ComposerBodyMention } from \"../../types\";\nimport { getCharacterAfter, getCharacterBefore } from \"../utils/get-character\";\nimport { getMatchRange } from \"../utils/get-match-range\";\nimport { isEmptyString } from \"../utils/is-empty-string\";\n\nexport const MENTION_CHARACTER = \"@\";\n\nexport type MentionDraft = {\n range: SlateRange;\n text: string;\n};\n\nexport function getMentionDraftAtSelection(\n editor: SlateEditor\n): MentionDraft | undefined {\n const { selection } = editor;\n\n if (!selection || !SlateRange.isCollapsed(selection)) {\n return;\n }\n\n // Match the word at the current selection by walking back\n // until a whitespace character is found\n const match = getMatchRange(editor, selection);\n\n if (!match) {\n return;\n }\n\n const matchText = SlateEditor.string(editor, match);\n\n // Check if the match starts with the mention character\n if (!matchText.startsWith(MENTION_CHARACTER)) {\n return;\n }\n\n return {\n range: match,\n // Exclude the mention character from the text\n text: matchText.substring(1),\n };\n}\n\nexport function isComposerBodyMention(\n node: SlateNode\n): node is ComposerBodyMention {\n return SlateElement.isElement(node) && node.type === \"mention\";\n}\n\nexport function insertMention(editor: SlateEditor, userId: string) {\n const mention: ComposerBodyMention = {\n type: \"mention\",\n id: userId,\n children: [{ text: \"\" }],\n };\n\n // Insert the mention\n SlateTransforms.insertNodes(editor, mention);\n SlateTransforms.move(editor);\n\n const afterCharacter = editor.selection\n ? getCharacterAfter(editor, editor.selection)\n : undefined;\n\n if (!afterCharacter || afterCharacter.void) {\n // Insert a following space if needed\n SlateTransforms.insertText(editor, \" \");\n } else if (isEmptyString(afterCharacter.text)) {\n // Move the selection if it's already followed by a space\n SlateTransforms.move(editor);\n }\n}\n\nexport function insertMentionCharacter(editor: SlateEditor) {\n if (!editor.selection) {\n return;\n }\n\n // Check if the selection is preceded or followed by a non-whitespace character\n const beforeCharacter = getCharacterBefore(editor, editor.selection, {\n filterVoids: true,\n });\n const afterCharacter = getCharacterAfter(editor, editor.selection, {\n filterVoids: true,\n });\n const shouldInsertSpaceBefore =\n beforeCharacter && !isEmptyString(beforeCharacter.text);\n const shouldInsertSpaceAfter =\n afterCharacter && !isEmptyString(afterCharacter.text);\n\n if (!SlateRange.isCollapsed(editor.selection)) {\n const text =\n (shouldInsertSpaceBefore ? \" \" : \"\") +\n MENTION_CHARACTER +\n (shouldInsertSpaceAfter ? \" \" : \"\");\n\n // If the selection is collapsed, insert the mention character at the current selection\n editor.insertText(text);\n\n // If a following space was inserted, move the selection back by one\n if (shouldInsertSpaceAfter) {\n SlateTransforms.move(editor, {\n distance: 1,\n unit: \"character\",\n reverse: true,\n });\n }\n } else {\n const beforeText = (shouldInsertSpaceBefore ? \" \" : \"\") + MENTION_CHARACTER;\n\n // If the selection is not collapsed, insert the mention character before the selection\n editor.insertText(beforeText, { at: SlateRange.start(editor.selection) });\n\n if (shouldInsertSpaceAfter) {\n editor.insertText(\" \", { at: SlateRange.end(editor.selection) });\n }\n\n // Collapse the selection at its end\n SlateTransforms.collapse(editor, { edge: \"end\" });\n }\n}\n\nexport function withMentions<T extends SlateEditor>(editor: T): T {\n const { isInline, isVoid, markableVoid, deleteBackward } = editor;\n\n editor.isInline = (element) => {\n return isComposerBodyMention(element) || isInline(element);\n };\n\n editor.isVoid = (element) => {\n return isComposerBodyMention(element) || isVoid(element);\n };\n\n editor.markableVoid = (element) => {\n return isComposerBodyMention(element) || markableVoid(element);\n };\n\n editor.deleteBackward = (unit) => {\n const { selection } = editor;\n\n if (selection && SlateRange.isCollapsed(selection)) {\n const [mention] = SlateEditor.nodes(editor, {\n at:\n unit === \"character\"\n ? SlateEditor.before(editor, selection, { unit: \"character\" })\n : selection,\n match: isComposerBodyMention,\n });\n\n deleteBackward(unit);\n\n if (mention) {\n SlateTransforms.insertText(editor, MENTION_CHARACTER);\n }\n } else {\n deleteBackward(unit);\n }\n };\n\n return editor;\n}\n"],"names":["SlateRange","getMatchRange","SlateEditor","SlateElement","SlateTransforms","getCharacterAfter","isEmptyString","getCharacterBefore"],"mappings":"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"}
1
+ {"version":3,"file":"mentions.js","sources":["../../../src/slate/plugins/mentions.ts"],"sourcesContent":["import type { Node as SlateNode } from \"slate\";\nimport {\n Editor as SlateEditor,\n Element as SlateElement,\n Range as SlateRange,\n Transforms as SlateTransforms,\n} from \"slate\";\n\nimport type { ComposerBodyMention } from \"../../types\";\nimport { getCharacterAfter, getCharacterBefore } from \"../utils/get-character\";\nimport { getMatchRange } from \"../utils/get-match-range\";\nimport { isEmptyString } from \"../utils/is-empty-string\";\nimport { isWhitespaceCharacter } from \"../utils/is-whitespace-character\";\n\nexport const MENTION_CHARACTER = \"@\";\n\nexport type MentionDraft = {\n range: SlateRange;\n text: string;\n};\n\nexport function getMentionDraftAtSelection(\n editor: SlateEditor\n): MentionDraft | undefined {\n const { selection } = editor;\n\n if (!selection || !SlateRange.isCollapsed(selection)) {\n return;\n }\n\n // Walk backwards from the selection until \"@\" is found, unless the character\n // before isn't whitespace (or \"@\" is the block's first character)\n const match = getMatchRange(editor, selection, [\"@\"], {\n include: true,\n allowConsecutiveWhitespace: false,\n ignoreTerminator: (_, point) => {\n const characterBefore = getCharacterBefore(editor, point);\n\n // Ignore \"@\" if it's preceded by a non-whitespace character\n if (characterBefore && !isWhitespaceCharacter(characterBefore.text)) {\n return true;\n }\n\n const after = SlateEditor.after(editor, point, { unit: \"character\" });\n\n if (after) {\n const characterAfter = getCharacterAfter(editor, after);\n\n // Ignore \"@\" if it's followed by a whitespace character\n if (isWhitespaceCharacter(characterAfter?.text)) {\n return true;\n }\n }\n\n return false;\n },\n });\n\n if (!match) {\n return;\n }\n\n const matchText = SlateEditor.string(editor, match);\n\n // Check if the match starts with the mention character (not followed by a whitespace character)\n if (\n !matchText.startsWith(MENTION_CHARACTER) ||\n isWhitespaceCharacter(matchText[1])\n ) {\n return;\n }\n\n return {\n range: match,\n // Exclude the mention character from the text\n text: matchText.substring(1),\n };\n}\n\nexport function isComposerBodyMention(\n node: SlateNode\n): node is ComposerBodyMention {\n return SlateElement.isElement(node) && node.type === \"mention\";\n}\n\nexport function insertMention(editor: SlateEditor, userId: string) {\n const mention: ComposerBodyMention = {\n type: \"mention\",\n id: userId,\n children: [{ text: \"\" }],\n };\n\n // Insert the mention\n SlateTransforms.insertNodes(editor, mention);\n SlateTransforms.move(editor);\n\n const afterCharacter = editor.selection\n ? getCharacterAfter(editor, editor.selection)\n : undefined;\n\n if (!afterCharacter || afterCharacter.void) {\n // Insert a following space if needed\n SlateTransforms.insertText(editor, \" \");\n } else if (isEmptyString(afterCharacter.text)) {\n // Move the selection if it's already followed by a space\n SlateTransforms.move(editor);\n }\n}\n\nexport function insertMentionCharacter(editor: SlateEditor) {\n if (!editor.selection) {\n return;\n }\n\n // Check if the selection is preceded or followed by a non-whitespace character\n const beforeCharacter = getCharacterBefore(editor, editor.selection, {\n filterVoids: true,\n });\n const afterCharacter = getCharacterAfter(editor, editor.selection, {\n filterVoids: true,\n });\n const shouldInsertSpaceBefore =\n beforeCharacter && !isEmptyString(beforeCharacter.text);\n const shouldInsertSpaceAfter =\n afterCharacter && !isEmptyString(afterCharacter.text);\n\n if (!SlateRange.isCollapsed(editor.selection)) {\n const text =\n (shouldInsertSpaceBefore ? \" \" : \"\") +\n MENTION_CHARACTER +\n (shouldInsertSpaceAfter ? \" \" : \"\");\n\n // If the selection is collapsed, insert the mention character at the current selection\n editor.insertText(text);\n\n // If a following space was inserted, move the selection back by one\n if (shouldInsertSpaceAfter) {\n SlateTransforms.move(editor, {\n distance: 1,\n unit: \"character\",\n reverse: true,\n });\n }\n } else {\n const beforeText = (shouldInsertSpaceBefore ? \" \" : \"\") + MENTION_CHARACTER;\n\n // If the selection is not collapsed, insert the mention character before the selection\n editor.insertText(beforeText, { at: SlateRange.start(editor.selection) });\n\n if (shouldInsertSpaceAfter) {\n editor.insertText(\" \", { at: SlateRange.end(editor.selection) });\n }\n\n // Collapse the selection at its end\n SlateTransforms.collapse(editor, { edge: \"end\" });\n }\n}\n\nexport function withMentions<T extends SlateEditor>(editor: T): T {\n const { isInline, isVoid, markableVoid, deleteBackward } = editor;\n\n editor.isInline = (element) => {\n return isComposerBodyMention(element) || isInline(element);\n };\n\n editor.isVoid = (element) => {\n return isComposerBodyMention(element) || isVoid(element);\n };\n\n editor.markableVoid = (element) => {\n return isComposerBodyMention(element) || markableVoid(element);\n };\n\n editor.deleteBackward = (unit) => {\n const { selection } = editor;\n\n if (selection && SlateRange.isCollapsed(selection)) {\n const [mention] = SlateEditor.nodes(editor, {\n at:\n unit === \"character\"\n ? SlateEditor.before(editor, selection, { unit: \"character\" })\n : selection,\n match: isComposerBodyMention,\n });\n\n deleteBackward(unit);\n\n if (mention) {\n SlateTransforms.insertText(editor, MENTION_CHARACTER);\n }\n } else {\n deleteBackward(unit);\n }\n };\n\n return editor;\n}\n"],"names":["SlateRange","SlateEditor","SlateElement","SlateTransforms"],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ 'use strict';
2
+
3
+ var slate = require('slate');
4
+
5
+ function withNormalize(editor) {
6
+ const { normalizeNode } = editor;
7
+ editor.normalizeNode = (entry) => {
8
+ const [node, path] = entry;
9
+ if (slate.Element.isElement(node) && node.type === "paragraph") {
10
+ for (const [child, childPath] of slate.Node.children(editor, path)) {
11
+ if (slate.Element.isElement(child) && !editor.isInline(child)) {
12
+ slate.Transforms.unwrapNodes(editor, { at: childPath });
13
+ return;
14
+ }
15
+ }
16
+ }
17
+ if (slate.Element.isElement(node) && (node.type === "auto-link" || node.type === "custom-link")) {
18
+ if (node.children.length === 0 || node.children.length === 1 && node.children[0]?.text === "") {
19
+ slate.Transforms.removeNodes(editor, { at: path });
20
+ }
21
+ }
22
+ normalizeNode(entry);
23
+ };
24
+ return editor;
25
+ }
26
+
27
+ exports.withNormalize = withNormalize;
28
+ //# sourceMappingURL=normalize.cjs.map