@multiplatform.one/rich-text 6.1.0 → 6.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (691) hide show
  1. package/README.md +60 -0
  2. package/dist/cjs/RichEditor.cjs +89 -9
  3. package/dist/cjs/RichEditor.native.js +444 -35
  4. package/dist/cjs/RichEditor.native.js.map +1 -1
  5. package/dist/cjs/RichTextEditor/index.cjs +20 -2
  6. package/dist/cjs/RichTextEditor/index.native.js +20 -2
  7. package/dist/cjs/RichTextEditor/index.native.js.map +1 -1
  8. package/dist/cjs/constants.cjs +52 -29
  9. package/dist/cjs/constants.native.js +59 -29
  10. package/dist/cjs/constants.native.js.map +1 -1
  11. package/dist/cjs/editor/BlockDragHandle.cjs +22 -7
  12. package/dist/cjs/editor/BlockDragHandle.native.js +41 -7
  13. package/dist/cjs/editor/BlockDragHandle.native.js.map +1 -1
  14. package/dist/cjs/editor/SlashCommands.cjs +257 -294
  15. package/dist/cjs/editor/SlashCommands.native.js +320 -341
  16. package/dist/cjs/editor/SlashCommands.native.js.map +1 -1
  17. package/dist/cjs/editor/TentapEditor.native.js +59 -12
  18. package/dist/cjs/editor/TentapEditor.native.js.map +1 -1
  19. package/dist/cjs/editor/TiptapEditor.cjs +143 -240
  20. package/dist/cjs/editor/TiptapEditor.native.js +163 -289
  21. package/dist/cjs/editor/TiptapEditor.native.js.map +1 -1
  22. package/dist/cjs/editor/blockAnchor.cjs +43 -0
  23. package/dist/cjs/editor/blockAnchor.native.js +68 -0
  24. package/dist/cjs/editor/blockAnchor.native.js.map +1 -0
  25. package/dist/cjs/editor/capabilities.cjs +37 -0
  26. package/dist/cjs/editor/capabilities.native.js +41 -0
  27. package/dist/cjs/editor/capabilities.native.js.map +1 -0
  28. package/dist/cjs/editor/codeBlockPreview.cjs +230 -0
  29. package/dist/cjs/editor/codeBlockPreview.native.js +265 -0
  30. package/dist/cjs/editor/codeBlockPreview.native.js.map +1 -0
  31. package/dist/cjs/editor/editorStyles.cjs +203 -34
  32. package/dist/cjs/editor/editorStyles.native.js +203 -34
  33. package/dist/cjs/editor/editorStyles.native.js.map +1 -1
  34. package/dist/cjs/editor/emoji.cjs +128 -0
  35. package/dist/cjs/editor/emoji.native.js +184 -0
  36. package/dist/cjs/editor/emoji.native.js.map +1 -0
  37. package/dist/cjs/editor/extensions.cjs +275 -0
  38. package/dist/cjs/editor/extensions.native.js +328 -0
  39. package/dist/cjs/editor/extensions.native.js.map +1 -0
  40. package/dist/cjs/editor/lazyKatex.cjs +78 -0
  41. package/dist/cjs/editor/lazyKatex.native.js +117 -0
  42. package/dist/cjs/editor/lazyKatex.native.js.map +1 -0
  43. package/dist/cjs/editor/markdown.cjs +216 -0
  44. package/dist/cjs/editor/markdown.native.js +278 -0
  45. package/dist/cjs/editor/markdown.native.js.map +1 -0
  46. package/dist/cjs/editor/mathematics.cjs +168 -0
  47. package/dist/cjs/editor/mathematics.native.js +202 -0
  48. package/dist/cjs/editor/mathematics.native.js.map +1 -0
  49. package/dist/cjs/editor/media.cjs +138 -0
  50. package/dist/cjs/editor/media.native.js +172 -0
  51. package/dist/cjs/editor/media.native.js.map +1 -0
  52. package/dist/cjs/editor/mentions.cjs +73 -0
  53. package/dist/cjs/editor/mentions.native.js +84 -0
  54. package/dist/cjs/editor/mentions.native.js.map +1 -0
  55. package/dist/cjs/editor/pasteCleanup.cjs +83 -0
  56. package/dist/cjs/editor/pasteCleanup.native.js +175 -0
  57. package/dist/cjs/editor/pasteCleanup.native.js.map +1 -0
  58. package/dist/cjs/editor/suggestionPopup.cjs +297 -0
  59. package/dist/cjs/editor/suggestionPopup.native.js +327 -0
  60. package/dist/cjs/editor/suggestionPopup.native.js.map +1 -0
  61. package/dist/cjs/index.cjs +5 -2
  62. package/dist/cjs/index.native.js +4 -1
  63. package/dist/cjs/index.native.js.map +1 -1
  64. package/dist/cjs/preview.cjs +263 -0
  65. package/dist/cjs/preview.native.js +294 -0
  66. package/dist/cjs/preview.native.js.map +1 -0
  67. package/dist/cjs/shared/t.cjs +53 -0
  68. package/dist/cjs/shared/t.native.js +56 -0
  69. package/dist/cjs/shared/t.native.js.map +1 -0
  70. package/dist/cjs/shared/url.cjs +35 -0
  71. package/dist/cjs/shared/url.native.js +38 -0
  72. package/dist/cjs/shared/url.native.js.map +1 -0
  73. package/dist/cjs/styled.cjs +13 -6
  74. package/dist/cjs/styled.native.js +13 -6
  75. package/dist/cjs/styled.native.js.map +1 -1
  76. package/dist/cjs/toolbar/BubbleToolbar.cjs +19 -14
  77. package/dist/cjs/toolbar/BubbleToolbar.native.js +22 -15
  78. package/dist/cjs/toolbar/BubbleToolbar.native.js.map +1 -1
  79. package/dist/cjs/toolbar/CodeBlockBubble.cjs +59 -23
  80. package/dist/cjs/toolbar/CodeBlockBubble.native.js +71 -25
  81. package/dist/cjs/toolbar/CodeBlockBubble.native.js.map +1 -1
  82. package/dist/cjs/toolbar/ColorPicker.cjs +19 -54
  83. package/dist/cjs/toolbar/ColorPicker.native.js +81 -179
  84. package/dist/cjs/toolbar/ColorPicker.native.js.map +1 -1
  85. package/dist/cjs/toolbar/FixedToolbar.cjs +39 -13
  86. package/dist/cjs/toolbar/FixedToolbar.native.js +46 -54
  87. package/dist/cjs/toolbar/FixedToolbar.native.js.map +1 -1
  88. package/dist/cjs/toolbar/HeadingPicker.cjs +32 -39
  89. package/dist/cjs/toolbar/HeadingPicker.native.js +61 -51
  90. package/dist/cjs/toolbar/HeadingPicker.native.js.map +1 -1
  91. package/dist/cjs/toolbar/ImageBubble.cjs +20 -43
  92. package/dist/cjs/toolbar/ImageBubble.native.js +20 -43
  93. package/dist/cjs/toolbar/ImageBubble.native.js.map +1 -1
  94. package/dist/cjs/toolbar/ImageDialog.cjs +5 -4
  95. package/dist/cjs/toolbar/ImageDialog.native.js +76 -65
  96. package/dist/cjs/toolbar/ImageDialog.native.js.map +1 -1
  97. package/dist/cjs/toolbar/LinkBubble.cjs +23 -70
  98. package/dist/cjs/toolbar/LinkBubble.native.js +23 -70
  99. package/dist/cjs/toolbar/LinkBubble.native.js.map +1 -1
  100. package/dist/cjs/toolbar/LinkDialog.cjs +19 -18
  101. package/dist/cjs/toolbar/LinkDialog.native.js +86 -83
  102. package/dist/cjs/toolbar/LinkDialog.native.js.map +1 -1
  103. package/dist/cjs/toolbar/ListPicker.cjs +32 -43
  104. package/dist/cjs/toolbar/ListPicker.native.js +43 -44
  105. package/dist/cjs/toolbar/ListPicker.native.js.map +1 -1
  106. package/dist/cjs/toolbar/MathBubble.cjs +159 -0
  107. package/dist/cjs/toolbar/MathBubble.native.js +169 -0
  108. package/dist/cjs/toolbar/MathBubble.native.js.map +1 -0
  109. package/dist/cjs/toolbar/MoreDropdown.cjs +54 -93
  110. package/dist/cjs/toolbar/MoreDropdown.native.js +80 -93
  111. package/dist/cjs/toolbar/MoreDropdown.native.js.map +1 -1
  112. package/dist/cjs/toolbar/StatusBar.cjs +19 -10
  113. package/dist/cjs/toolbar/StatusBar.native.js +19 -10
  114. package/dist/cjs/toolbar/StatusBar.native.js.map +1 -1
  115. package/dist/cjs/toolbar/TableBubble.cjs +91 -96
  116. package/dist/cjs/toolbar/TableBubble.native.js +90 -73
  117. package/dist/cjs/toolbar/TableBubble.native.js.map +1 -1
  118. package/dist/cjs/toolbar/ToolbarButton.cjs +86 -21
  119. package/dist/cjs/toolbar/ToolbarButton.native.js +14 -4
  120. package/dist/cjs/toolbar/ToolbarButton.native.js.map +1 -1
  121. package/dist/cjs/toolbar/icons.cjs +111 -468
  122. package/dist/cjs/toolbar/shortcuts.cjs +73 -24
  123. package/dist/cjs/toolbar/shortcuts.native.js +73 -24
  124. package/dist/cjs/toolbar/shortcuts.native.js.map +1 -1
  125. package/dist/cjs/toolbar/useHorizontalScroll.cjs +25 -5
  126. package/dist/cjs/toolbar/useHorizontalScroll.native.js +25 -5
  127. package/dist/cjs/toolbar/useHorizontalScroll.native.js.map +1 -1
  128. package/dist/cjs/toolbar/useRovingFocus.cjs +80 -0
  129. package/dist/cjs/toolbar/useRovingFocus.native.js +113 -0
  130. package/dist/cjs/toolbar/useRovingFocus.native.js.map +1 -0
  131. package/dist/cjs/types.native.js.map +1 -1
  132. package/dist/esm/RichEditor.mjs +90 -10
  133. package/dist/esm/RichEditor.mjs.map +1 -1
  134. package/dist/esm/RichEditor.native.js +447 -38
  135. package/dist/esm/RichEditor.native.js.map +1 -1
  136. package/dist/esm/RichTextEditor/index.mjs +20 -2
  137. package/dist/esm/RichTextEditor/index.mjs.map +1 -1
  138. package/dist/esm/RichTextEditor/index.native.js +20 -2
  139. package/dist/esm/RichTextEditor/index.native.js.map +1 -1
  140. package/dist/esm/constants.mjs +47 -29
  141. package/dist/esm/constants.mjs.map +1 -1
  142. package/dist/esm/constants.native.js +54 -29
  143. package/dist/esm/constants.native.js.map +1 -1
  144. package/dist/esm/editor/BlockDragHandle.mjs +22 -7
  145. package/dist/esm/editor/BlockDragHandle.mjs.map +1 -1
  146. package/dist/esm/editor/BlockDragHandle.native.js +41 -7
  147. package/dist/esm/editor/BlockDragHandle.native.js.map +1 -1
  148. package/dist/esm/editor/SlashCommands.mjs +258 -295
  149. package/dist/esm/editor/SlashCommands.mjs.map +1 -1
  150. package/dist/esm/editor/SlashCommands.native.js +321 -342
  151. package/dist/esm/editor/SlashCommands.native.js.map +1 -1
  152. package/dist/esm/editor/TentapEditor.native.js +60 -13
  153. package/dist/esm/editor/TentapEditor.native.js.map +1 -1
  154. package/dist/esm/editor/TiptapEditor.mjs +145 -231
  155. package/dist/esm/editor/TiptapEditor.mjs.map +1 -1
  156. package/dist/esm/editor/TiptapEditor.native.js +165 -280
  157. package/dist/esm/editor/TiptapEditor.native.js.map +1 -1
  158. package/dist/esm/editor/blockAnchor.mjs +18 -0
  159. package/dist/esm/editor/blockAnchor.mjs.map +1 -0
  160. package/dist/esm/editor/blockAnchor.native.js +40 -0
  161. package/dist/esm/editor/blockAnchor.native.js.map +1 -0
  162. package/dist/esm/editor/capabilities.mjs +10 -0
  163. package/dist/esm/editor/capabilities.mjs.map +1 -0
  164. package/dist/esm/editor/capabilities.native.js +11 -0
  165. package/dist/esm/editor/capabilities.native.js.map +1 -0
  166. package/dist/esm/editor/codeBlockPreview.mjs +190 -0
  167. package/dist/esm/editor/codeBlockPreview.mjs.map +1 -0
  168. package/dist/esm/editor/codeBlockPreview.native.js +222 -0
  169. package/dist/esm/editor/codeBlockPreview.native.js.map +1 -0
  170. package/dist/esm/editor/editorStyles.mjs +203 -34
  171. package/dist/esm/editor/editorStyles.mjs.map +1 -1
  172. package/dist/esm/editor/editorStyles.native.js +203 -34
  173. package/dist/esm/editor/editorStyles.native.js.map +1 -1
  174. package/dist/esm/editor/emoji.mjs +88 -0
  175. package/dist/esm/editor/emoji.mjs.map +1 -0
  176. package/dist/esm/editor/emoji.native.js +141 -0
  177. package/dist/esm/editor/emoji.native.js.map +1 -0
  178. package/dist/esm/editor/extensions.mjs +236 -0
  179. package/dist/esm/editor/extensions.mjs.map +1 -0
  180. package/dist/esm/editor/extensions.native.js +286 -0
  181. package/dist/esm/editor/extensions.native.js.map +1 -0
  182. package/dist/esm/editor/lazyKatex.mjs +40 -0
  183. package/dist/esm/editor/lazyKatex.mjs.map +1 -0
  184. package/dist/esm/editor/lazyKatex.native.js +76 -0
  185. package/dist/esm/editor/lazyKatex.native.js.map +1 -0
  186. package/dist/esm/editor/markdown.mjs +179 -0
  187. package/dist/esm/editor/markdown.mjs.map +1 -0
  188. package/dist/esm/editor/markdown.native.js +238 -0
  189. package/dist/esm/editor/markdown.native.js.map +1 -0
  190. package/dist/esm/editor/mathematics.mjs +142 -0
  191. package/dist/esm/editor/mathematics.mjs.map +1 -0
  192. package/dist/esm/editor/mathematics.native.js +173 -0
  193. package/dist/esm/editor/mathematics.native.js.map +1 -0
  194. package/dist/esm/editor/media.mjs +113 -0
  195. package/dist/esm/editor/media.mjs.map +1 -0
  196. package/dist/esm/editor/media.native.js +144 -0
  197. package/dist/esm/editor/media.native.js.map +1 -0
  198. package/dist/esm/editor/mentions.mjs +37 -0
  199. package/dist/esm/editor/mentions.mjs.map +1 -0
  200. package/dist/esm/editor/mentions.native.js +45 -0
  201. package/dist/esm/editor/mentions.native.js.map +1 -0
  202. package/dist/esm/editor/pasteCleanup.mjs +57 -0
  203. package/dist/esm/editor/pasteCleanup.mjs.map +1 -0
  204. package/dist/esm/editor/pasteCleanup.native.js +146 -0
  205. package/dist/esm/editor/pasteCleanup.native.js.map +1 -0
  206. package/dist/esm/editor/suggestionPopup.mjs +268 -0
  207. package/dist/esm/editor/suggestionPopup.mjs.map +1 -0
  208. package/dist/esm/editor/suggestionPopup.native.js +295 -0
  209. package/dist/esm/editor/suggestionPopup.native.js.map +1 -0
  210. package/dist/esm/index.mjs +2 -1
  211. package/dist/esm/index.mjs.map +1 -1
  212. package/dist/esm/index.native.js +2 -1
  213. package/dist/esm/index.native.js.map +1 -1
  214. package/dist/esm/preview.mjs +236 -0
  215. package/dist/esm/preview.mjs.map +1 -0
  216. package/dist/esm/preview.native.js +264 -0
  217. package/dist/esm/preview.native.js.map +1 -0
  218. package/dist/esm/shared/t.mjs +17 -0
  219. package/dist/esm/shared/t.mjs.map +1 -0
  220. package/dist/esm/shared/t.native.js +17 -0
  221. package/dist/esm/shared/t.native.js.map +1 -0
  222. package/dist/esm/shared/url.mjs +10 -0
  223. package/dist/esm/shared/url.mjs.map +1 -0
  224. package/dist/esm/shared/url.native.js +10 -0
  225. package/dist/esm/shared/url.native.js.map +1 -0
  226. package/dist/esm/styled.mjs +13 -6
  227. package/dist/esm/styled.mjs.map +1 -1
  228. package/dist/esm/styled.native.js +13 -6
  229. package/dist/esm/styled.native.js.map +1 -1
  230. package/dist/esm/toolbar/BubbleToolbar.mjs +20 -15
  231. package/dist/esm/toolbar/BubbleToolbar.mjs.map +1 -1
  232. package/dist/esm/toolbar/BubbleToolbar.native.js +23 -16
  233. package/dist/esm/toolbar/BubbleToolbar.native.js.map +1 -1
  234. package/dist/esm/toolbar/CodeBlockBubble.mjs +60 -24
  235. package/dist/esm/toolbar/CodeBlockBubble.mjs.map +1 -1
  236. package/dist/esm/toolbar/CodeBlockBubble.native.js +72 -26
  237. package/dist/esm/toolbar/CodeBlockBubble.native.js.map +1 -1
  238. package/dist/esm/toolbar/ColorPicker.mjs +21 -56
  239. package/dist/esm/toolbar/ColorPicker.mjs.map +1 -1
  240. package/dist/esm/toolbar/ColorPicker.native.js +82 -180
  241. package/dist/esm/toolbar/ColorPicker.native.js.map +1 -1
  242. package/dist/esm/toolbar/FixedToolbar.mjs +40 -14
  243. package/dist/esm/toolbar/FixedToolbar.mjs.map +1 -1
  244. package/dist/esm/toolbar/FixedToolbar.native.js +47 -55
  245. package/dist/esm/toolbar/FixedToolbar.native.js.map +1 -1
  246. package/dist/esm/toolbar/HeadingPicker.mjs +34 -41
  247. package/dist/esm/toolbar/HeadingPicker.mjs.map +1 -1
  248. package/dist/esm/toolbar/HeadingPicker.native.js +63 -53
  249. package/dist/esm/toolbar/HeadingPicker.native.js.map +1 -1
  250. package/dist/esm/toolbar/ImageBubble.mjs +20 -43
  251. package/dist/esm/toolbar/ImageBubble.mjs.map +1 -1
  252. package/dist/esm/toolbar/ImageBubble.native.js +20 -43
  253. package/dist/esm/toolbar/ImageBubble.native.js.map +1 -1
  254. package/dist/esm/toolbar/ImageDialog.mjs +5 -4
  255. package/dist/esm/toolbar/ImageDialog.mjs.map +1 -1
  256. package/dist/esm/toolbar/ImageDialog.native.js +75 -64
  257. package/dist/esm/toolbar/ImageDialog.native.js.map +1 -1
  258. package/dist/esm/toolbar/LinkBubble.mjs +23 -70
  259. package/dist/esm/toolbar/LinkBubble.mjs.map +1 -1
  260. package/dist/esm/toolbar/LinkBubble.native.js +23 -70
  261. package/dist/esm/toolbar/LinkBubble.native.js.map +1 -1
  262. package/dist/esm/toolbar/LinkDialog.mjs +17 -16
  263. package/dist/esm/toolbar/LinkDialog.mjs.map +1 -1
  264. package/dist/esm/toolbar/LinkDialog.native.js +84 -80
  265. package/dist/esm/toolbar/LinkDialog.native.js.map +1 -1
  266. package/dist/esm/toolbar/ListPicker.mjs +33 -44
  267. package/dist/esm/toolbar/ListPicker.mjs.map +1 -1
  268. package/dist/esm/toolbar/ListPicker.native.js +44 -45
  269. package/dist/esm/toolbar/ListPicker.native.js.map +1 -1
  270. package/dist/esm/toolbar/MathBubble.mjs +134 -0
  271. package/dist/esm/toolbar/MathBubble.mjs.map +1 -0
  272. package/dist/esm/toolbar/MathBubble.native.js +141 -0
  273. package/dist/esm/toolbar/MathBubble.native.js.map +1 -0
  274. package/dist/esm/toolbar/MoreDropdown.mjs +53 -92
  275. package/dist/esm/toolbar/MoreDropdown.mjs.map +1 -1
  276. package/dist/esm/toolbar/MoreDropdown.native.js +79 -92
  277. package/dist/esm/toolbar/MoreDropdown.native.js.map +1 -1
  278. package/dist/esm/toolbar/StatusBar.mjs +19 -10
  279. package/dist/esm/toolbar/StatusBar.mjs.map +1 -1
  280. package/dist/esm/toolbar/StatusBar.native.js +19 -10
  281. package/dist/esm/toolbar/StatusBar.native.js.map +1 -1
  282. package/dist/esm/toolbar/TableBubble.mjs +91 -96
  283. package/dist/esm/toolbar/TableBubble.mjs.map +1 -1
  284. package/dist/esm/toolbar/TableBubble.native.js +90 -73
  285. package/dist/esm/toolbar/TableBubble.native.js.map +1 -1
  286. package/dist/esm/toolbar/ToolbarButton.mjs +87 -22
  287. package/dist/esm/toolbar/ToolbarButton.mjs.map +1 -1
  288. package/dist/esm/toolbar/ToolbarButton.native.js +14 -4
  289. package/dist/esm/toolbar/ToolbarButton.native.js.map +1 -1
  290. package/dist/esm/toolbar/icons.mjs +109 -469
  291. package/dist/esm/toolbar/icons.mjs.map +1 -1
  292. package/dist/esm/toolbar/shortcuts.mjs +73 -24
  293. package/dist/esm/toolbar/shortcuts.mjs.map +1 -1
  294. package/dist/esm/toolbar/shortcuts.native.js +73 -24
  295. package/dist/esm/toolbar/shortcuts.native.js.map +1 -1
  296. package/dist/esm/toolbar/useHorizontalScroll.mjs +25 -6
  297. package/dist/esm/toolbar/useHorizontalScroll.mjs.map +1 -1
  298. package/dist/esm/toolbar/useHorizontalScroll.native.js +25 -6
  299. package/dist/esm/toolbar/useHorizontalScroll.native.js.map +1 -1
  300. package/dist/esm/toolbar/useRovingFocus.mjs +55 -0
  301. package/dist/esm/toolbar/useRovingFocus.mjs.map +1 -0
  302. package/dist/esm/toolbar/useRovingFocus.native.js +85 -0
  303. package/dist/esm/toolbar/useRovingFocus.native.js.map +1 -0
  304. package/dist/esm/types.mjs.map +1 -1
  305. package/dist/esm/types.native.js.map +1 -1
  306. package/dist/jsx/RichEditor.mjs +90 -10
  307. package/dist/jsx/RichEditor.mjs.map +1 -1
  308. package/dist/jsx/RichEditor.native.js +444 -35
  309. package/dist/jsx/RichEditor.native.js.map +1 -1
  310. package/dist/jsx/RichTextEditor/index.mjs +20 -2
  311. package/dist/jsx/RichTextEditor/index.mjs.map +1 -1
  312. package/dist/jsx/RichTextEditor/index.native.js +20 -2
  313. package/dist/jsx/RichTextEditor/index.native.js.map +1 -1
  314. package/dist/jsx/constants.mjs +47 -29
  315. package/dist/jsx/constants.mjs.map +1 -1
  316. package/dist/jsx/constants.native.js +59 -29
  317. package/dist/jsx/constants.native.js.map +1 -1
  318. package/dist/jsx/editor/BlockDragHandle.mjs +22 -7
  319. package/dist/jsx/editor/BlockDragHandle.mjs.map +1 -1
  320. package/dist/jsx/editor/BlockDragHandle.native.js +41 -7
  321. package/dist/jsx/editor/BlockDragHandle.native.js.map +1 -1
  322. package/dist/jsx/editor/SlashCommands.mjs +258 -295
  323. package/dist/jsx/editor/SlashCommands.mjs.map +1 -1
  324. package/dist/jsx/editor/SlashCommands.native.js +320 -341
  325. package/dist/jsx/editor/SlashCommands.native.js.map +1 -1
  326. package/dist/jsx/editor/TentapEditor.native.js +59 -12
  327. package/dist/jsx/editor/TentapEditor.native.js.map +1 -1
  328. package/dist/jsx/editor/TiptapEditor.mjs +145 -231
  329. package/dist/jsx/editor/TiptapEditor.mjs.map +1 -1
  330. package/dist/jsx/editor/TiptapEditor.native.js +163 -289
  331. package/dist/jsx/editor/TiptapEditor.native.js.map +1 -1
  332. package/dist/jsx/editor/blockAnchor.mjs +18 -0
  333. package/dist/jsx/editor/blockAnchor.mjs.map +1 -0
  334. package/dist/jsx/editor/blockAnchor.native.js +68 -0
  335. package/dist/jsx/editor/blockAnchor.native.js.map +1 -0
  336. package/dist/jsx/editor/capabilities.mjs +10 -0
  337. package/dist/jsx/editor/capabilities.mjs.map +1 -0
  338. package/dist/jsx/editor/capabilities.native.js +41 -0
  339. package/dist/jsx/editor/capabilities.native.js.map +1 -0
  340. package/dist/jsx/editor/codeBlockPreview.mjs +190 -0
  341. package/dist/jsx/editor/codeBlockPreview.mjs.map +1 -0
  342. package/dist/jsx/editor/codeBlockPreview.native.js +265 -0
  343. package/dist/jsx/editor/codeBlockPreview.native.js.map +1 -0
  344. package/dist/jsx/editor/editorStyles.mjs +203 -34
  345. package/dist/jsx/editor/editorStyles.mjs.map +1 -1
  346. package/dist/jsx/editor/editorStyles.native.js +203 -34
  347. package/dist/jsx/editor/editorStyles.native.js.map +1 -1
  348. package/dist/jsx/editor/emoji.mjs +88 -0
  349. package/dist/jsx/editor/emoji.mjs.map +1 -0
  350. package/dist/jsx/editor/emoji.native.js +184 -0
  351. package/dist/jsx/editor/emoji.native.js.map +1 -0
  352. package/dist/jsx/editor/extensions.mjs +236 -0
  353. package/dist/jsx/editor/extensions.mjs.map +1 -0
  354. package/dist/jsx/editor/extensions.native.js +328 -0
  355. package/dist/jsx/editor/extensions.native.js.map +1 -0
  356. package/dist/jsx/editor/lazyKatex.mjs +40 -0
  357. package/dist/jsx/editor/lazyKatex.mjs.map +1 -0
  358. package/dist/jsx/editor/lazyKatex.native.js +117 -0
  359. package/dist/jsx/editor/lazyKatex.native.js.map +1 -0
  360. package/dist/jsx/editor/markdown.mjs +179 -0
  361. package/dist/jsx/editor/markdown.mjs.map +1 -0
  362. package/dist/jsx/editor/markdown.native.js +278 -0
  363. package/dist/jsx/editor/markdown.native.js.map +1 -0
  364. package/dist/jsx/editor/mathematics.mjs +142 -0
  365. package/dist/jsx/editor/mathematics.mjs.map +1 -0
  366. package/dist/jsx/editor/mathematics.native.js +202 -0
  367. package/dist/jsx/editor/mathematics.native.js.map +1 -0
  368. package/dist/jsx/editor/media.mjs +113 -0
  369. package/dist/jsx/editor/media.mjs.map +1 -0
  370. package/dist/jsx/editor/media.native.js +172 -0
  371. package/dist/jsx/editor/media.native.js.map +1 -0
  372. package/dist/jsx/editor/mentions.mjs +37 -0
  373. package/dist/jsx/editor/mentions.mjs.map +1 -0
  374. package/dist/jsx/editor/mentions.native.js +84 -0
  375. package/dist/jsx/editor/mentions.native.js.map +1 -0
  376. package/dist/jsx/editor/pasteCleanup.mjs +57 -0
  377. package/dist/jsx/editor/pasteCleanup.mjs.map +1 -0
  378. package/dist/jsx/editor/pasteCleanup.native.js +175 -0
  379. package/dist/jsx/editor/pasteCleanup.native.js.map +1 -0
  380. package/dist/jsx/editor/suggestionPopup.mjs +268 -0
  381. package/dist/jsx/editor/suggestionPopup.mjs.map +1 -0
  382. package/dist/jsx/editor/suggestionPopup.native.js +327 -0
  383. package/dist/jsx/editor/suggestionPopup.native.js.map +1 -0
  384. package/dist/jsx/index.js +2 -1
  385. package/dist/jsx/index.js.map +1 -1
  386. package/dist/jsx/index.mjs +2 -1
  387. package/dist/jsx/index.mjs.map +1 -1
  388. package/dist/jsx/index.native.js +4 -1
  389. package/dist/jsx/index.native.js.map +1 -1
  390. package/dist/jsx/preview.mjs +236 -0
  391. package/dist/jsx/preview.mjs.map +1 -0
  392. package/dist/jsx/preview.native.js +294 -0
  393. package/dist/jsx/preview.native.js.map +1 -0
  394. package/dist/jsx/shared/t.mjs +17 -0
  395. package/dist/jsx/shared/t.mjs.map +1 -0
  396. package/dist/jsx/shared/t.native.js +56 -0
  397. package/dist/jsx/shared/t.native.js.map +1 -0
  398. package/dist/jsx/shared/url.mjs +10 -0
  399. package/dist/jsx/shared/url.mjs.map +1 -0
  400. package/dist/jsx/shared/url.native.js +38 -0
  401. package/dist/jsx/shared/url.native.js.map +1 -0
  402. package/dist/jsx/styled.mjs +13 -6
  403. package/dist/jsx/styled.mjs.map +1 -1
  404. package/dist/jsx/styled.native.js +13 -6
  405. package/dist/jsx/styled.native.js.map +1 -1
  406. package/dist/jsx/toolbar/BubbleToolbar.mjs +20 -15
  407. package/dist/jsx/toolbar/BubbleToolbar.mjs.map +1 -1
  408. package/dist/jsx/toolbar/BubbleToolbar.native.js +22 -15
  409. package/dist/jsx/toolbar/BubbleToolbar.native.js.map +1 -1
  410. package/dist/jsx/toolbar/CodeBlockBubble.mjs +60 -24
  411. package/dist/jsx/toolbar/CodeBlockBubble.mjs.map +1 -1
  412. package/dist/jsx/toolbar/CodeBlockBubble.native.js +71 -25
  413. package/dist/jsx/toolbar/CodeBlockBubble.native.js.map +1 -1
  414. package/dist/jsx/toolbar/ColorPicker.mjs +21 -56
  415. package/dist/jsx/toolbar/ColorPicker.mjs.map +1 -1
  416. package/dist/jsx/toolbar/ColorPicker.native.js +81 -179
  417. package/dist/jsx/toolbar/ColorPicker.native.js.map +1 -1
  418. package/dist/jsx/toolbar/FixedToolbar.mjs +40 -14
  419. package/dist/jsx/toolbar/FixedToolbar.mjs.map +1 -1
  420. package/dist/jsx/toolbar/FixedToolbar.native.js +46 -54
  421. package/dist/jsx/toolbar/FixedToolbar.native.js.map +1 -1
  422. package/dist/jsx/toolbar/HeadingPicker.mjs +34 -41
  423. package/dist/jsx/toolbar/HeadingPicker.mjs.map +1 -1
  424. package/dist/jsx/toolbar/HeadingPicker.native.js +61 -51
  425. package/dist/jsx/toolbar/HeadingPicker.native.js.map +1 -1
  426. package/dist/jsx/toolbar/ImageBubble.mjs +20 -43
  427. package/dist/jsx/toolbar/ImageBubble.mjs.map +1 -1
  428. package/dist/jsx/toolbar/ImageBubble.native.js +20 -43
  429. package/dist/jsx/toolbar/ImageBubble.native.js.map +1 -1
  430. package/dist/jsx/toolbar/ImageDialog.mjs +5 -4
  431. package/dist/jsx/toolbar/ImageDialog.mjs.map +1 -1
  432. package/dist/jsx/toolbar/ImageDialog.native.js +76 -65
  433. package/dist/jsx/toolbar/ImageDialog.native.js.map +1 -1
  434. package/dist/jsx/toolbar/LinkBubble.mjs +23 -70
  435. package/dist/jsx/toolbar/LinkBubble.mjs.map +1 -1
  436. package/dist/jsx/toolbar/LinkBubble.native.js +23 -70
  437. package/dist/jsx/toolbar/LinkBubble.native.js.map +1 -1
  438. package/dist/jsx/toolbar/LinkDialog.mjs +17 -16
  439. package/dist/jsx/toolbar/LinkDialog.mjs.map +1 -1
  440. package/dist/jsx/toolbar/LinkDialog.native.js +86 -83
  441. package/dist/jsx/toolbar/LinkDialog.native.js.map +1 -1
  442. package/dist/jsx/toolbar/ListPicker.mjs +33 -44
  443. package/dist/jsx/toolbar/ListPicker.mjs.map +1 -1
  444. package/dist/jsx/toolbar/ListPicker.native.js +43 -44
  445. package/dist/jsx/toolbar/ListPicker.native.js.map +1 -1
  446. package/dist/jsx/toolbar/MathBubble.mjs +134 -0
  447. package/dist/jsx/toolbar/MathBubble.mjs.map +1 -0
  448. package/dist/jsx/toolbar/MathBubble.native.js +169 -0
  449. package/dist/jsx/toolbar/MathBubble.native.js.map +1 -0
  450. package/dist/jsx/toolbar/MoreDropdown.mjs +53 -92
  451. package/dist/jsx/toolbar/MoreDropdown.mjs.map +1 -1
  452. package/dist/jsx/toolbar/MoreDropdown.native.js +80 -93
  453. package/dist/jsx/toolbar/MoreDropdown.native.js.map +1 -1
  454. package/dist/jsx/toolbar/StatusBar.mjs +19 -10
  455. package/dist/jsx/toolbar/StatusBar.mjs.map +1 -1
  456. package/dist/jsx/toolbar/StatusBar.native.js +19 -10
  457. package/dist/jsx/toolbar/StatusBar.native.js.map +1 -1
  458. package/dist/jsx/toolbar/TableBubble.mjs +91 -96
  459. package/dist/jsx/toolbar/TableBubble.mjs.map +1 -1
  460. package/dist/jsx/toolbar/TableBubble.native.js +90 -73
  461. package/dist/jsx/toolbar/TableBubble.native.js.map +1 -1
  462. package/dist/jsx/toolbar/ToolbarButton.mjs +87 -22
  463. package/dist/jsx/toolbar/ToolbarButton.mjs.map +1 -1
  464. package/dist/jsx/toolbar/ToolbarButton.native.js +14 -4
  465. package/dist/jsx/toolbar/ToolbarButton.native.js.map +1 -1
  466. package/dist/jsx/toolbar/icons.mjs +109 -469
  467. package/dist/jsx/toolbar/icons.mjs.map +1 -1
  468. package/dist/jsx/toolbar/shortcuts.mjs +73 -24
  469. package/dist/jsx/toolbar/shortcuts.mjs.map +1 -1
  470. package/dist/jsx/toolbar/shortcuts.native.js +73 -24
  471. package/dist/jsx/toolbar/shortcuts.native.js.map +1 -1
  472. package/dist/jsx/toolbar/useHorizontalScroll.mjs +25 -6
  473. package/dist/jsx/toolbar/useHorizontalScroll.mjs.map +1 -1
  474. package/dist/jsx/toolbar/useHorizontalScroll.native.js +25 -5
  475. package/dist/jsx/toolbar/useHorizontalScroll.native.js.map +1 -1
  476. package/dist/jsx/toolbar/useRovingFocus.mjs +55 -0
  477. package/dist/jsx/toolbar/useRovingFocus.mjs.map +1 -0
  478. package/dist/jsx/toolbar/useRovingFocus.native.js +113 -0
  479. package/dist/jsx/toolbar/useRovingFocus.native.js.map +1 -0
  480. package/dist/jsx/types.mjs.map +1 -1
  481. package/dist/jsx/types.native.js.map +1 -1
  482. package/package.json +28 -13
  483. package/src/RichEditor.native.tsx +471 -49
  484. package/src/RichEditor.stories.tsx +190 -0
  485. package/src/RichEditor.tsx +126 -7
  486. package/src/RichTextEditor/index.tsx +54 -3
  487. package/src/RichTextEditor/richTextEditor.spec.tsx +11 -4
  488. package/src/constants.ts +86 -24
  489. package/src/editor/BlockDragHandle.ts +30 -5
  490. package/src/editor/SlashCommands.tsx +238 -293
  491. package/src/editor/TentapEditor.native.tsx +81 -17
  492. package/src/editor/TiptapEditor.tsx +202 -265
  493. package/src/editor/blockAnchor.spec.ts +70 -0
  494. package/src/editor/blockAnchor.ts +42 -0
  495. package/src/editor/capabilities.spec.ts +190 -0
  496. package/src/editor/capabilities.ts +76 -0
  497. package/src/editor/codeBlockPreview.spec.ts +144 -0
  498. package/src/editor/codeBlockPreview.ts +266 -0
  499. package/src/editor/css.d.ts +2 -0
  500. package/src/editor/details.spec.ts +48 -0
  501. package/src/editor/editorStyles.spec.ts +25 -0
  502. package/src/editor/editorStyles.ts +218 -34
  503. package/src/editor/emoji.spec.ts +88 -0
  504. package/src/editor/emoji.ts +147 -0
  505. package/src/editor/emojilib.d.ts +16 -0
  506. package/src/editor/extensions.ts +315 -0
  507. package/src/editor/lazyKatex.spec.ts +38 -0
  508. package/src/editor/lazyKatex.ts +68 -0
  509. package/src/editor/markdown.spec.ts +196 -0
  510. package/src/editor/markdown.ts +249 -0
  511. package/src/editor/mathematics.spec.ts +97 -0
  512. package/src/editor/mathematics.ts +179 -0
  513. package/src/editor/media.spec.ts +121 -0
  514. package/src/editor/media.ts +133 -0
  515. package/src/editor/mentions.spec.ts +41 -0
  516. package/src/editor/mentions.ts +55 -0
  517. package/src/editor/pasteCleanup.spec.ts +84 -0
  518. package/src/editor/pasteCleanup.ts +124 -0
  519. package/src/editor/suggestionPopup.spec.tsx +105 -0
  520. package/src/editor/suggestionPopup.tsx +414 -0
  521. package/src/editor/tiptapEditor.spec.tsx +15 -8
  522. package/src/exports.spec.ts +4 -2
  523. package/src/index.ts +10 -1
  524. package/src/integration.spec.tsx +38 -9
  525. package/src/preview.spec.ts +130 -0
  526. package/src/preview.ts +287 -0
  527. package/src/richEditor.spec.tsx +10 -3
  528. package/src/shared/t.ts +25 -0
  529. package/src/shared/url.ts +16 -0
  530. package/src/styled.ts +13 -6
  531. package/src/toolbar/BubbleToolbar.tsx +48 -33
  532. package/src/toolbar/CodeBlockBubble.tsx +66 -28
  533. package/src/toolbar/ColorPicker.native.tsx +126 -0
  534. package/src/toolbar/ColorPicker.tsx +23 -67
  535. package/src/toolbar/FixedToolbar.native.tsx +51 -51
  536. package/src/toolbar/FixedToolbar.tsx +73 -21
  537. package/src/toolbar/HeadingPicker.tsx +46 -38
  538. package/src/toolbar/ImageBubble.tsx +26 -44
  539. package/src/toolbar/ImageDialog.native.tsx +97 -0
  540. package/src/toolbar/ImageDialog.tsx +5 -4
  541. package/src/toolbar/LinkBubble.tsx +27 -64
  542. package/src/toolbar/LinkDialog.native.tsx +117 -0
  543. package/src/toolbar/LinkDialog.tsx +28 -24
  544. package/src/toolbar/ListPicker.tsx +47 -43
  545. package/src/toolbar/MathBubble.tsx +140 -0
  546. package/src/toolbar/MoreDropdown.tsx +79 -62
  547. package/src/toolbar/StatusBar.tsx +13 -8
  548. package/src/toolbar/TableBubble.tsx +136 -95
  549. package/src/toolbar/ToolbarButton.native.tsx +14 -4
  550. package/src/toolbar/ToolbarButton.tsx +98 -19
  551. package/src/toolbar/bubbleToolbar.spec.tsx +2 -1
  552. package/src/toolbar/fixedToolbar.spec.tsx +4 -2
  553. package/src/toolbar/icons.tsx +113 -323
  554. package/src/toolbar/shortcuts.ts +77 -24
  555. package/src/toolbar/toolbarPrimitives.spec.tsx +29 -1
  556. package/src/toolbar/toolbarSubComponents.spec.tsx +4 -2
  557. package/src/toolbar/useHorizontalScroll.spec.ts +67 -0
  558. package/src/toolbar/useHorizontalScroll.tsx +39 -12
  559. package/src/toolbar/useRovingFocus.spec.tsx +100 -0
  560. package/src/toolbar/useRovingFocus.ts +82 -0
  561. package/src/types.spec.ts +40 -1
  562. package/src/types.ts +56 -1
  563. package/types/RichEditor.d.ts +51 -0
  564. package/types/RichEditor.d.ts.map +1 -0
  565. package/types/RichEditor.native.d.ts +59 -0
  566. package/types/RichEditor.native.d.ts.map +1 -0
  567. package/types/RichTextEditor/index.d.ts +77 -0
  568. package/types/RichTextEditor/index.d.ts.map +1 -0
  569. package/types/constants.d.ts +49 -0
  570. package/types/constants.d.ts.map +1 -0
  571. package/types/context.d.ts +10 -0
  572. package/types/context.d.ts.map +1 -0
  573. package/types/editor/BlockDragHandle.d.ts +8 -0
  574. package/types/editor/BlockDragHandle.d.ts.map +1 -0
  575. package/types/editor/MarkdownPaste.d.ts +8 -0
  576. package/types/editor/MarkdownPaste.d.ts.map +1 -0
  577. package/types/editor/SlashCommands.d.ts +24 -0
  578. package/types/editor/SlashCommands.d.ts.map +1 -0
  579. package/types/editor/TentapEditor.native.d.ts +21 -0
  580. package/types/editor/TentapEditor.native.d.ts.map +1 -0
  581. package/types/editor/TiptapEditor.d.ts +24 -0
  582. package/types/editor/TiptapEditor.d.ts.map +1 -0
  583. package/types/editor/blockAnchor.d.ts +25 -0
  584. package/types/editor/blockAnchor.d.ts.map +1 -0
  585. package/types/editor/capabilities.d.ts +29 -0
  586. package/types/editor/capabilities.d.ts.map +1 -0
  587. package/types/editor/codeBlockPreview.d.ts +51 -0
  588. package/types/editor/codeBlockPreview.d.ts.map +1 -0
  589. package/types/editor/editorStyles.d.ts +25 -0
  590. package/types/editor/editorStyles.d.ts.map +1 -0
  591. package/types/editor/emoji.d.ts +45 -0
  592. package/types/editor/emoji.d.ts.map +1 -0
  593. package/types/editor/extensions.d.ts +41 -0
  594. package/types/editor/extensions.d.ts.map +1 -0
  595. package/types/editor/index.d.ts +11 -0
  596. package/types/editor/index.d.ts.map +1 -0
  597. package/types/editor/lazyKatex.d.ts +33 -0
  598. package/types/editor/lazyKatex.d.ts.map +1 -0
  599. package/types/editor/markdown.d.ts +24 -0
  600. package/types/editor/markdown.d.ts.map +1 -0
  601. package/types/editor/mathematics.d.ts +44 -0
  602. package/types/editor/mathematics.d.ts.map +1 -0
  603. package/types/editor/media.d.ts +32 -0
  604. package/types/editor/media.d.ts.map +1 -0
  605. package/types/editor/mentions.d.ts +15 -0
  606. package/types/editor/mentions.d.ts.map +1 -0
  607. package/types/editor/pasteCleanup.d.ts +24 -0
  608. package/types/editor/pasteCleanup.d.ts.map +1 -0
  609. package/types/editor/suggestionPopup.d.ts +113 -0
  610. package/types/editor/suggestionPopup.d.ts.map +1 -0
  611. package/types/editor/types.d.ts +80 -0
  612. package/types/editor/types.d.ts.map +1 -0
  613. package/types/editor/useEditorState.d.ts +19 -0
  614. package/types/editor/useEditorState.d.ts.map +1 -0
  615. package/types/index.d.ts +12 -0
  616. package/types/index.d.ts.map +1 -0
  617. package/types/preview.d.ts +44 -0
  618. package/types/preview.d.ts.map +1 -0
  619. package/types/shared/t.d.ts +10 -0
  620. package/types/shared/t.d.ts.map +1 -0
  621. package/types/shared/url.d.ts +9 -0
  622. package/types/shared/url.d.ts.map +1 -0
  623. package/types/styled.d.ts +40 -0
  624. package/types/styled.d.ts.map +1 -0
  625. package/types/toolbar/BubbleToolbar.d.ts +25 -0
  626. package/types/toolbar/BubbleToolbar.d.ts.map +1 -0
  627. package/types/toolbar/CodeBlockBubble.d.ts +10 -0
  628. package/types/toolbar/CodeBlockBubble.d.ts.map +1 -0
  629. package/types/toolbar/ColorPicker.d.ts +15 -0
  630. package/types/toolbar/ColorPicker.d.ts.map +1 -0
  631. package/types/toolbar/ColorPicker.native.d.ts +20 -0
  632. package/types/toolbar/ColorPicker.native.d.ts.map +1 -0
  633. package/types/toolbar/FixedToolbar.d.ts +34 -0
  634. package/types/toolbar/FixedToolbar.d.ts.map +1 -0
  635. package/types/toolbar/FixedToolbar.native.d.ts +30 -0
  636. package/types/toolbar/FixedToolbar.native.d.ts.map +1 -0
  637. package/types/toolbar/HeadingPicker.d.ts +14 -0
  638. package/types/toolbar/HeadingPicker.d.ts.map +1 -0
  639. package/types/toolbar/ImageBubble.d.ts +10 -0
  640. package/types/toolbar/ImageBubble.d.ts.map +1 -0
  641. package/types/toolbar/ImageDialog.d.ts +12 -0
  642. package/types/toolbar/ImageDialog.d.ts.map +1 -0
  643. package/types/toolbar/ImageDialog.native.d.ts +15 -0
  644. package/types/toolbar/ImageDialog.native.d.ts.map +1 -0
  645. package/types/toolbar/LinkBubble.d.ts +10 -0
  646. package/types/toolbar/LinkBubble.d.ts.map +1 -0
  647. package/types/toolbar/LinkDialog.d.ts +20 -0
  648. package/types/toolbar/LinkDialog.d.ts.map +1 -0
  649. package/types/toolbar/LinkDialog.native.d.ts +18 -0
  650. package/types/toolbar/LinkDialog.native.d.ts.map +1 -0
  651. package/types/toolbar/ListPicker.d.ts +14 -0
  652. package/types/toolbar/ListPicker.d.ts.map +1 -0
  653. package/types/toolbar/MathBubble.d.ts +11 -0
  654. package/types/toolbar/MathBubble.d.ts.map +1 -0
  655. package/types/toolbar/MoreDropdown.d.ts +15 -0
  656. package/types/toolbar/MoreDropdown.d.ts.map +1 -0
  657. package/types/toolbar/ResizeHandle.d.ts +11 -0
  658. package/types/toolbar/ResizeHandle.d.ts.map +1 -0
  659. package/types/toolbar/StatusBar.d.ts +11 -0
  660. package/types/toolbar/StatusBar.d.ts.map +1 -0
  661. package/types/toolbar/TableBubble.d.ts +13 -0
  662. package/types/toolbar/TableBubble.d.ts.map +1 -0
  663. package/types/toolbar/ToolbarButton.d.ts +35 -0
  664. package/types/toolbar/ToolbarButton.d.ts.map +1 -0
  665. package/types/toolbar/ToolbarButton.native.d.ts +30 -0
  666. package/types/toolbar/ToolbarButton.native.d.ts.map +1 -0
  667. package/types/toolbar/ToolbarGroup.d.ts +14 -0
  668. package/types/toolbar/ToolbarGroup.d.ts.map +1 -0
  669. package/types/toolbar/icons.d.ts +52 -0
  670. package/types/toolbar/icons.d.ts.map +1 -0
  671. package/types/toolbar/icons.native.d.ts +41 -0
  672. package/types/toolbar/icons.native.d.ts.map +1 -0
  673. package/types/toolbar/shortcuts.d.ts +34 -0
  674. package/types/toolbar/shortcuts.d.ts.map +1 -0
  675. package/types/toolbar/useHorizontalScroll.d.ts +43 -0
  676. package/types/toolbar/useHorizontalScroll.d.ts.map +1 -0
  677. package/types/toolbar/useRovingFocus.d.ts +10 -0
  678. package/types/toolbar/useRovingFocus.d.ts.map +1 -0
  679. package/types/types.d.ts +147 -0
  680. package/types/types.d.ts.map +1 -0
  681. package/dist/cjs/RichEditor.stories.cjs +0 -327
  682. package/dist/cjs/RichEditor.stories.native.js +0 -342
  683. package/dist/cjs/RichEditor.stories.native.js.map +0 -1
  684. package/dist/esm/RichEditor.stories.mjs +0 -291
  685. package/dist/esm/RichEditor.stories.mjs.map +0 -1
  686. package/dist/esm/RichEditor.stories.native.js +0 -303
  687. package/dist/esm/RichEditor.stories.native.js.map +0 -1
  688. package/dist/jsx/RichEditor.stories.mjs +0 -291
  689. package/dist/jsx/RichEditor.stories.mjs.map +0 -1
  690. package/dist/jsx/RichEditor.stories.native.js +0 -342
  691. package/dist/jsx/RichEditor.stories.native.js.map +0 -1
@@ -5,7 +5,8 @@ import { defaultEditorState } from "../types";
5
5
  import { TEXT_COLORS, HIGHLIGHT_COLORS } from "../constants";
6
6
  import { normalizeUrl } from "./LinkDialog";
7
7
 
8
- vi.mock("@multiplatform.one/forms", () => ({
8
+ vi.mock("@multiplatform.one/forms", async (importOriginal) => ({
9
+ ...(await importOriginal<Record<string, unknown>>()),
9
10
  Button: (props: any) => (
10
11
  <button
11
12
  role="button"
@@ -18,7 +19,8 @@ vi.mock("@multiplatform.one/forms", () => ({
18
19
  ),
19
20
  }));
20
21
 
21
- vi.mock("@multiplatform.one/components", () => ({
22
+ vi.mock("@multiplatform.one/components", async (importOriginal) => ({
23
+ ...(await importOriginal<Record<string, unknown>>()),
22
24
  Tooltip: ({ children }: any) => children,
23
25
  }));
24
26
 
@@ -0,0 +1,67 @@
1
+ /**
2
+ * ScrollArrow direction math (rtl-audit U1-class residual): CSSOM flips the
3
+ * scrollLeft range under RTL (0 → −(scrollWidth − clientWidth)), so the raw
4
+ * LTR reading inverted both arrow visibility and the remaining-distance
5
+ * clamp. `horizontalScrollEdges` is the direction-normalized primitive both
6
+ * the visibility hook and the hover-scroll loop consume.
7
+ */
8
+ import { describe, expect, it, vi } from "vitest";
9
+
10
+ // The module under test imports useDirection (house RTL pattern); the pure
11
+ // edge math is exercised with explicit directions (same wholesale-mock
12
+ // precedent as toolbarPrimitives.spec).
13
+ vi.mock("@multiplatform.one/components", () => ({
14
+ useDirection: () => "ltr",
15
+ }));
16
+
17
+ const { horizontalScrollEdges } = await import("./useHorizontalScroll");
18
+
19
+ const scroller = (scrollLeft: number) => ({ scrollLeft, scrollWidth: 500, clientWidth: 300 });
20
+
21
+ describe("horizontalScrollEdges", () => {
22
+ it("LTR: scrollLeft is the distance from the left edge", () => {
23
+ expect(horizontalScrollEdges(scroller(0), "ltr")).toEqual({
24
+ fromLeftEdge: 0,
25
+ fromRightEdge: 200,
26
+ });
27
+ expect(horizontalScrollEdges(scroller(120), "ltr")).toEqual({
28
+ fromLeftEdge: 120,
29
+ fromRightEdge: 80,
30
+ });
31
+ expect(horizontalScrollEdges(scroller(200), "ltr")).toEqual({
32
+ fromLeftEdge: 200,
33
+ fromRightEdge: 0,
34
+ });
35
+ });
36
+
37
+ it("RTL: scrollLeft runs 0 → −range, distances normalize per edge", () => {
38
+ // Start position (flush right): everything overflows to the LEFT.
39
+ expect(horizontalScrollEdges(scroller(0), "rtl")).toEqual({
40
+ fromLeftEdge: 200,
41
+ fromRightEdge: 0,
42
+ });
43
+ expect(horizontalScrollEdges(scroller(-120), "rtl")).toEqual({
44
+ fromLeftEdge: 80,
45
+ fromRightEdge: 120,
46
+ });
47
+ // Fully scrolled (flush left): nothing further left, all content right.
48
+ expect(horizontalScrollEdges(scroller(-200), "rtl")).toEqual({
49
+ fromLeftEdge: 0,
50
+ fromRightEdge: 200,
51
+ });
52
+ });
53
+
54
+ it("no overflow: both distances collapse to zero in both directions", () => {
55
+ const flat = { scrollLeft: 0, scrollWidth: 300, clientWidth: 300 };
56
+ expect(horizontalScrollEdges(flat, "ltr")).toEqual({ fromLeftEdge: 0, fromRightEdge: 0 });
57
+ expect(horizontalScrollEdges(flat, "rtl")).toEqual({ fromLeftEdge: 0, fromRightEdge: 0 });
58
+ });
59
+
60
+ it("pre-fix regression: raw scrollLeft sign misreads RTL edges", () => {
61
+ // The old visibility math (scrollLeft > threshold) at the RTL start
62
+ // position read 0 → no left arrow, while 200px actually overflowed left.
63
+ const atRtlStart = horizontalScrollEdges(scroller(0), "rtl");
64
+ expect(atRtlStart.fromLeftEdge).toBeGreaterThan(8);
65
+ expect(atRtlStart.fromRightEdge).toBeLessThanOrEqual(8);
66
+ });
67
+ });
@@ -8,9 +8,31 @@ import { useCallback, useEffect, useRef, useState } from "react";
8
8
  import { View } from "tamagui";
9
9
  import { LinearGradient } from "@tamagui/linear-gradient";
10
10
  import { CaretLeftIcon, CaretRightIcon } from "@phosphor-icons/react";
11
+ import { useDirection } from "@multiplatform.one/components";
11
12
 
12
13
  const scrollArrowThreshold = 8;
13
14
 
15
+ /**
16
+ * Physical px distances from each horizontal scroll edge. The arrows are
17
+ * physically-anchored edge overlays (left:0 / right:0), but CSSOM flips the
18
+ * `scrollLeft` range under RTL: an RTL scroller runs 0 → −(scrollWidth −
19
+ * clientWidth), so the LTR reading (`scrollLeft` = distance from the left
20
+ * edge) inverts and both arrow visibility and the remaining-distance clamp
21
+ * break. Normalize per `useDirection()` (house RTL pattern) instead of
22
+ * reading the raw sign.
23
+ */
24
+ export function horizontalScrollEdges(
25
+ element: Pick<HTMLElement, "scrollLeft" | "scrollWidth" | "clientWidth">,
26
+ direction: "ltr" | "rtl",
27
+ ): { fromLeftEdge: number; fromRightEdge: number } {
28
+ const range = Math.max(element.scrollWidth - element.clientWidth, 0);
29
+ const minScrollLeft = direction === "rtl" ? -range : 0;
30
+ return {
31
+ fromLeftEdge: element.scrollLeft - minScrollLeft,
32
+ fromRightEdge: minScrollLeft + range - element.scrollLeft,
33
+ };
34
+ }
35
+
14
36
  // ===========================================================================
15
37
  // useHorizontalScroll
16
38
  // ===========================================================================
@@ -98,17 +120,21 @@ export function useHorizontalScroll(ref: React.RefObject<HTMLDivElement | null>)
98
120
  * Hook to track horizontal scroll arrows visibility
99
121
  */
100
122
  export function useHorizontalScrollArrows() {
123
+ const direction = useDirection();
101
124
  const [arrowLeft, setArrowLeft] = useState(false);
102
125
  const [arrowRight, setArrowRight] = useState(false);
103
126
  const arrowScrollDirRef = useRef<"left" | "right" | null>(null);
104
127
 
105
- const updateArrows = useCallback((element: HTMLElement) => {
106
- const left = element.scrollLeft > scrollArrowThreshold;
107
- const right =
108
- element.scrollLeft < element.scrollWidth - element.clientWidth - scrollArrowThreshold;
109
- setArrowLeft((prev) => (prev !== left ? left : prev));
110
- setArrowRight((prev) => (prev !== right ? right : prev));
111
- }, []);
128
+ const updateArrows = useCallback(
129
+ (element: HTMLElement) => {
130
+ const { fromLeftEdge, fromRightEdge } = horizontalScrollEdges(element, direction);
131
+ const left = fromLeftEdge > scrollArrowThreshold;
132
+ const right = fromRightEdge > scrollArrowThreshold;
133
+ setArrowLeft((prev) => (prev !== left ? left : prev));
134
+ setArrowRight((prev) => (prev !== right ? right : prev));
135
+ },
136
+ [direction],
137
+ );
112
138
 
113
139
  return { arrowLeft, arrowRight, arrowScrollDirRef, updateArrows };
114
140
  }
@@ -136,6 +162,7 @@ export function HorizontalScrollArrow({
136
162
  transition,
137
163
  }: HorizontalScrollArrowProps) {
138
164
  const isLeft = direction === "left";
165
+ const textDirection = useDirection();
139
166
  const animationFrameRef = useRef(0);
140
167
  const lastTimeRef = useRef(0);
141
168
  const resumeTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);
@@ -163,10 +190,10 @@ export function HorizontalScrollArrow({
163
190
  const now = performance.now();
164
191
  const elapsed = now - lastTimeRef.current;
165
192
  lastTimeRef.current = now;
166
- const px = Math.min(
167
- elapsed / 2,
168
- Math.max(isLeft ? el.scrollLeft : el.scrollWidth - el.clientWidth - el.scrollLeft, 0),
169
- );
193
+ // Remaining distance to this arrow's physical edge (RTL-normalized);
194
+ // the step itself stays physical: scrollLeft always decreases leftward.
195
+ const { fromLeftEdge, fromRightEdge } = horizontalScrollEdges(el, textDirection);
196
+ const px = Math.min(elapsed / 2, Math.max(isLeft ? fromLeftEdge : fromRightEdge, 0));
170
197
  if (px > 0) {
171
198
  selfScrollingRef.current = true;
172
199
  arrowScrollDirRef.current = isLeft ? "left" : "right";
@@ -175,7 +202,7 @@ export function HorizontalScrollArrow({
175
202
  animationFrameRef.current = requestAnimationFrame(tick);
176
203
  };
177
204
  animationFrameRef.current = requestAnimationFrame(tick);
178
- }, [isLeft, scrollRef, arrowScrollDirRef]);
205
+ }, [isLeft, scrollRef, arrowScrollDirRef, textDirection]);
179
206
 
180
207
  const openTimestampRef = useRef(0);
181
208
  useEffect(() => {
@@ -0,0 +1,100 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { useRef } from "react";
3
+ import { fireEvent, render } from "@testing-library/react";
4
+ import { useRovingFocus } from "./useRovingFocus";
5
+
6
+ function Toolbar({ disabledSecond = false }: { disabledSecond?: boolean }) {
7
+ const ref = useRef<HTMLDivElement>(null);
8
+ useRovingFocus(ref);
9
+ return (
10
+ <div ref={ref} role="toolbar" aria-label="Test toolbar">
11
+ <button type="button">one</button>
12
+ <button type="button" disabled={disabledSecond}>
13
+ two
14
+ </button>
15
+ <button type="button">three</button>
16
+ </div>
17
+ );
18
+ }
19
+
20
+ /** Tamagui Buttons render as <div role="button">, not <button> */
21
+ function DivToolbar() {
22
+ const ref = useRef<HTMLDivElement>(null);
23
+ useRovingFocus(ref);
24
+ return (
25
+ <div ref={ref} role="toolbar" aria-label="Div toolbar">
26
+ <div role="button" tabIndex={0}>
27
+ bold
28
+ </div>
29
+ <div role="button" tabIndex={0}>
30
+ italic
31
+ </div>
32
+ <div role="button" tabIndex={0} aria-disabled="true">
33
+ redo
34
+ </div>
35
+ <div role="button" tabIndex={0}>
36
+ undo
37
+ </div>
38
+ </div>
39
+ );
40
+ }
41
+
42
+ describe("useRovingFocus", () => {
43
+ it("handles div[role=button] controls (Tamagui Button shape)", () => {
44
+ const { getAllByRole, getByRole } = render(<DivToolbar />);
45
+ const buttons = getAllByRole("button");
46
+ // aria-disabled control is excluded from the roving order entirely
47
+ expect(buttons.map((b) => b.tabIndex)).toEqual([0, -1, 0, -1]);
48
+ buttons[0]!.focus();
49
+ fireEvent.keyDown(getByRole("toolbar"), { key: "ArrowRight" });
50
+ expect(document.activeElement).toBe(buttons[1]);
51
+ fireEvent.keyDown(getByRole("toolbar"), { key: "ArrowRight" });
52
+ // skips the aria-disabled control
53
+ expect(document.activeElement).toBe(buttons[3]);
54
+ });
55
+
56
+ it("makes the toolbar a single tab stop (first button 0, rest -1)", () => {
57
+ const { getAllByRole } = render(<Toolbar />);
58
+ const buttons = getAllByRole("button");
59
+ expect(buttons.map((b) => b.tabIndex)).toEqual([0, -1, -1]);
60
+ });
61
+
62
+ it("moves focus with ArrowRight and wraps", () => {
63
+ const { getAllByRole, getByRole } = render(<Toolbar />);
64
+ const [first, second, third] = getAllByRole("button");
65
+ first!.focus();
66
+ fireEvent.keyDown(getByRole("toolbar"), { key: "ArrowRight" });
67
+ expect(document.activeElement).toBe(second);
68
+ fireEvent.keyDown(getByRole("toolbar"), { key: "ArrowRight" });
69
+ expect(document.activeElement).toBe(third);
70
+ fireEvent.keyDown(getByRole("toolbar"), { key: "ArrowRight" });
71
+ expect(document.activeElement).toBe(first);
72
+ });
73
+
74
+ it("moves focus with ArrowLeft (reverse) and Home/End", () => {
75
+ const { getAllByRole, getByRole } = render(<Toolbar />);
76
+ const [first, _second, third] = getAllByRole("button");
77
+ first!.focus();
78
+ fireEvent.keyDown(getByRole("toolbar"), { key: "ArrowLeft" });
79
+ expect(document.activeElement).toBe(third);
80
+ fireEvent.keyDown(getByRole("toolbar"), { key: "Home" });
81
+ expect(document.activeElement).toBe(first);
82
+ fireEvent.keyDown(getByRole("toolbar"), { key: "End" });
83
+ expect(document.activeElement).toBe(third);
84
+ });
85
+
86
+ it("skips disabled controls", () => {
87
+ const { getAllByRole, getByRole } = render(<Toolbar disabledSecond />);
88
+ const [first, _second, third] = getAllByRole("button");
89
+ first!.focus();
90
+ fireEvent.keyDown(getByRole("toolbar"), { key: "ArrowRight" });
91
+ expect(document.activeElement).toBe(third);
92
+ });
93
+
94
+ it("updates the tab stop when focus lands on a control", () => {
95
+ const { getAllByRole } = render(<Toolbar />);
96
+ const buttons = getAllByRole("button");
97
+ fireEvent.focusIn(buttons[2]!);
98
+ expect(buttons.map((b) => b.tabIndex)).toEqual([-1, -1, 0]);
99
+ });
100
+ });
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Roving tabindex for the toolbar (WAI-ARIA toolbar pattern).
3
+ *
4
+ * The toolbar is ONE tab stop: Tab enters at the last-active control and
5
+ * leaves on the next Tab; ArrowLeft/ArrowRight (direction-aware for RTL),
6
+ * Home, and End move between enabled controls.
7
+ */
8
+
9
+ import { useEffect } from "react";
10
+ import type { RefObject } from "react";
11
+
12
+ // Tamagui Buttons render as <div role="button">, so match by role as well
13
+ // as by tag; disabled controls drop out of the roving order either way.
14
+ const FOCUSABLE = [
15
+ 'button:not([disabled]):not([aria-disabled="true"])',
16
+ '[role="button"]:not([disabled]):not([aria-disabled="true"])',
17
+ ].join(", ");
18
+
19
+ export function useRovingFocus(containerRef: RefObject<HTMLElement | null>) {
20
+ useEffect(() => {
21
+ const container = containerRef.current;
22
+ if (!container) return undefined;
23
+
24
+ const controls = () => Array.from(container.querySelectorAll<HTMLElement>(FOCUSABLE));
25
+
26
+ const setTabStops = (active?: HTMLElement) => {
27
+ const list = controls();
28
+ if (list.length === 0) return;
29
+ const current =
30
+ active && list.includes(active) ? active : (list.find((b) => b.tabIndex === 0) ?? list[0]!);
31
+ for (const control of list) control.tabIndex = control === current ? 0 : -1;
32
+ };
33
+
34
+ setTabStops();
35
+
36
+ const handleKeyDown = (event: KeyboardEvent) => {
37
+ if (!["ArrowLeft", "ArrowRight", "Home", "End"].includes(event.key)) return;
38
+ const list = controls();
39
+ if (list.length === 0) return;
40
+ const current = document.activeElement as HTMLElement | null;
41
+ let index = current ? list.indexOf(current) : -1;
42
+ if (index === -1) return;
43
+
44
+ const isRtl =
45
+ (container.closest("[dir]") as HTMLElement | null)?.dir === "rtl" || document.dir === "rtl";
46
+ const forward = isRtl ? -1 : 1;
47
+
48
+ if (event.key === "ArrowRight") index = (index + forward + list.length) % list.length;
49
+ else if (event.key === "ArrowLeft") index = (index - forward + list.length) % list.length;
50
+ else if (event.key === "Home") index = 0;
51
+ else index = list.length - 1;
52
+
53
+ event.preventDefault();
54
+ const next = list[index]!;
55
+ setTabStops(next);
56
+ next.focus();
57
+ next.scrollIntoView({ block: "nearest", inline: "nearest" });
58
+ };
59
+
60
+ const handleFocusIn = (event: FocusEvent) => {
61
+ const target = event.target as HTMLElement;
62
+ if (target.matches?.(FOCUSABLE)) setTabStops(target);
63
+ };
64
+
65
+ // Buttons mount/unmount (sections, disabled flips) -- keep stops valid
66
+ const observer = new MutationObserver(() => setTabStops());
67
+ observer.observe(container, {
68
+ childList: true,
69
+ subtree: true,
70
+ attributes: true,
71
+ attributeFilter: ["disabled", "aria-disabled"],
72
+ });
73
+
74
+ container.addEventListener("keydown", handleKeyDown);
75
+ container.addEventListener("focusin", handleFocusIn);
76
+ return () => {
77
+ observer.disconnect();
78
+ container.removeEventListener("keydown", handleKeyDown);
79
+ container.removeEventListener("focusin", handleFocusIn);
80
+ };
81
+ }, [containerRef]);
82
+ }
package/src/types.spec.ts CHANGED
@@ -1,6 +1,12 @@
1
1
  import { describe, it, expect } from "vitest";
2
2
  import { defaultEditorState } from "./types";
3
- import { NATIVE_SUPPORTED_COMMANDS, TEXT_COLORS, HIGHLIGHT_COLORS } from "./constants";
3
+ import {
4
+ NATIVE_SUPPORTED_COMMANDS,
5
+ TEXT_COLORS,
6
+ TEXT_COLORS_DARK,
7
+ HIGHLIGHT_COLORS,
8
+ PALETTE_THEME_TOKENS,
9
+ } from "./constants";
4
10
 
5
11
  describe("types and constants", () => {
6
12
  it("defaultEditorState has expected shape and default values", () => {
@@ -56,6 +62,28 @@ describe("types and constants", () => {
56
62
  expect(noneEntry?.name).toBe("None");
57
63
  });
58
64
 
65
+ it("palette values are theme custom properties, never raw hex (Axiom 5 / DG-COL-01)", () => {
66
+ for (const entry of [...TEXT_COLORS, ...TEXT_COLORS_DARK, ...HIGHLIGHT_COLORS]) {
67
+ if (entry.value === null) continue;
68
+ expect(entry.value).toMatch(/^var\(--[a-zA-Z0-9]+\)$/);
69
+ }
70
+ });
71
+
72
+ it("light and dark text palettes share tokens; only the neutral ink label flips", () => {
73
+ expect(TEXT_COLORS_DARK.map((c) => c.value)).toEqual(TEXT_COLORS.map((c) => c.value));
74
+ expect(TEXT_COLORS.find((c) => c.value === "var(--color12)")?.name).toBe("Black");
75
+ expect(TEXT_COLORS_DARK.find((c) => c.value === "var(--color12)")?.name).toBe("White");
76
+ });
77
+
78
+ it("PALETTE_THEME_TOKENS covers every token referenced by the palettes", () => {
79
+ expect(PALETTE_THEME_TOKENS.length).toBeGreaterThan(0);
80
+ for (const entry of [...TEXT_COLORS, ...HIGHLIGHT_COLORS]) {
81
+ if (entry.value === null) continue;
82
+ const token = entry.value.replace(/^var\(--/, "").replace(/\)$/, "");
83
+ expect(PALETTE_THEME_TOKENS).toContain(token);
84
+ }
85
+ });
86
+
59
87
  it("NativeCapability covers all EditorCommand values", () => {
60
88
  const commands: string[] = [
61
89
  "bold",
@@ -89,6 +117,17 @@ describe("types and constants", () => {
89
117
  "highlight",
90
118
  "horizontalRule",
91
119
  "clearFormatting",
120
+ "insertTable",
121
+ "addColumnBefore",
122
+ "addColumnAfter",
123
+ "deleteColumn",
124
+ "addRowBefore",
125
+ "addRowAfter",
126
+ "deleteRow",
127
+ "deleteTable",
128
+ "mergeCells",
129
+ "splitCell",
130
+ "toggleHeaderRow",
92
131
  ];
93
132
 
94
133
  for (const cmd of commands) {
package/src/types.ts CHANGED
@@ -3,6 +3,38 @@
3
3
  */
4
4
 
5
5
  import type { FontSizeTokens } from "tamagui";
6
+ import type { MentionItem } from "@multiplatform.one/forms";
7
+
8
+ // ===========================================================================
9
+ // Mentions
10
+ // ===========================================================================
11
+
12
+ /**
13
+ * Mention wiring for the @ suggestion popup (web). Uses the forms
14
+ * `MentionItem` contract (LC-16: same data shape as MentionInput).
15
+ */
16
+ export interface RichTextMentionOptions {
17
+ /** Trigger character (default "@") */
18
+ trigger?: string;
19
+ /** Returns suggestion items for a query (sync or async) */
20
+ items: (query: string) => MentionItem[] | Promise<MentionItem[]>;
21
+ }
22
+
23
+ // ===========================================================================
24
+ // Editor Capabilities
25
+ // ===========================================================================
26
+
27
+ /**
28
+ * Capability surface of the editor:
29
+ * - "full": every extension and toolbar control (default).
30
+ * - "markdown": WYSIWYG constrained to what GFM markdown can express —
31
+ * non-markdown extensions (underline, highlight, text color, alignment,
32
+ * sub/superscript, details, inline math, mentions) are NOT registered
33
+ * (commands absent, not just hidden), the toolbar shows only the
34
+ * markdown-expressible controls, `initialContent` is parsed as markdown,
35
+ * and `onChange` emits a markdown string.
36
+ */
37
+ export type EditorCapabilities = "full" | "markdown";
6
38
 
7
39
  // ===========================================================================
8
40
  // Editor Command
@@ -135,10 +167,14 @@ export interface RichEditorRef {
135
167
  getHTML: () => string;
136
168
  /** Get the content as JSON (ProseMirror format) */
137
169
  getJSON: () => any;
170
+ /** Get the content serialized to GFM markdown (web) */
171
+ getMarkdown: () => string;
138
172
  /** Set content from HTML */
139
173
  setHTML: (html: string) => void;
140
174
  /** Set content from JSON */
141
175
  setJSON: (json: any) => void;
176
+ /** Set content from a markdown string without emitting onChange (web) */
177
+ setMarkdown: (markdown: string) => void;
142
178
  /** Focus the editor */
143
179
  focus: () => void;
144
180
  /** Blur the editor */
@@ -146,7 +182,14 @@ export interface RichEditorRef {
146
182
  }
147
183
 
148
184
  export interface RichEditorProps {
149
- /** Initial content as HTML */
185
+ /**
186
+ * Capability preset (default "full"). With "markdown", only the
187
+ * markdown-expressible extensions register, the toolbar shows only the
188
+ * corresponding controls, `initialContent` is parsed as markdown, and
189
+ * `onChange` receives a markdown string. Fixed at mount.
190
+ */
191
+ capabilities?: EditorCapabilities;
192
+ /** Initial content as HTML ("full") or markdown ("markdown" capabilities) */
150
193
  initialContent?: string;
151
194
  /** Initial content as JSON (takes precedence over initialContent) */
152
195
  initialJSON?: any;
@@ -170,6 +213,18 @@ export interface RichEditorProps {
170
213
  maxHeight?: number;
171
214
  /** Show error state */
172
215
  hasError?: boolean;
216
+ /**
217
+ * Uploads a pasted/dropped image and resolves its URL (web). Without it,
218
+ * images are inlined as base64 data URIs.
219
+ */
220
+ onImageUpload?: (file: File) => Promise<string>;
221
+ /**
222
+ * Uploads a pasted/dropped non-image file and resolves its URL (web).
223
+ * Inserts an attachment chip link; without it, non-image files are ignored.
224
+ */
225
+ onFileUpload?: (file: File) => Promise<{ url: string; name?: string }>;
226
+ /** Enables the @ mention suggestion popup (web) */
227
+ mentions?: RichTextMentionOptions;
173
228
  }
174
229
 
175
230
  // ===========================================================================
@@ -0,0 +1,51 @@
1
+ /**
2
+ * RichEditor compound component (web)
3
+ *
4
+ * Combines the TiptapEditor, FixedToolbar, and BubbleToolbar into a compound
5
+ * component with static properties:
6
+ * - RichEditor.FixedToolbar
7
+ * - RichEditor.BubbleToolbar
8
+ * - RichEditor.Editor
9
+ *
10
+ * Root provides RichEditorContext with resolved size, compact, and disabled.
11
+ * Uses useResolvedKnobs for knobs integration and clampRadiusForLargeComponent
12
+ * for radius clamping (max $4).
13
+ */
14
+ import type { SizeTokens } from "tamagui";
15
+ import type { RichEditorProps, RichEditorRef, ToolbarSection } from "./types";
16
+ import { FixedToolbar } from "./toolbar/FixedToolbar";
17
+ import { BubbleToolbar } from "./toolbar/BubbleToolbar";
18
+ export interface RichEditorCombinedProps extends RichEditorProps {
19
+ /** Size token for the editor */
20
+ size?: SizeTokens;
21
+ /** Use compact sizing for tighter controls */
22
+ compact?: boolean;
23
+ /** Show the fixed toolbar (default: true) */
24
+ showToolbar?: boolean;
25
+ /** Show the bubble toolbar on text selection (default: false, web only) */
26
+ showBubbleToolbar?: boolean;
27
+ /** Toolbar sections to display (shows all when omitted) */
28
+ sections?: ToolbarSection[];
29
+ /** Show a drag handle to resize the editor vertically (default: true) */
30
+ resizable?: boolean;
31
+ /** Show word/character count status bar (default: true) */
32
+ showStatusBar?: boolean;
33
+ /** Controlled fullscreen state (uncontrolled when omitted) */
34
+ fullscreen?: boolean;
35
+ /** Initial fullscreen state when uncontrolled (default: false) */
36
+ defaultFullscreen?: boolean;
37
+ /** Called when the fullscreen state changes */
38
+ onFullscreenChange?: (fullscreen: boolean) => void;
39
+ /**
40
+ * Native only: render the embedded inline editor instead of the
41
+ * preview + fullscreen edit modal. Ignored on web (the web editor is
42
+ * always inline; fullscreen is the toolbar toggle).
43
+ */
44
+ inlineEditing?: boolean;
45
+ }
46
+ export declare const RichEditor: import("react").ForwardRefExoticComponent<RichEditorCombinedProps & import("react").RefAttributes<RichEditorRef>> & {
47
+ FixedToolbar: typeof FixedToolbar;
48
+ BubbleToolbar: typeof BubbleToolbar;
49
+ Editor: import("react").NamedExoticComponent<import("./editor").TiptapEditorProps & import("react").RefAttributes<RichEditorRef>>;
50
+ };
51
+ //# sourceMappingURL=RichEditor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RichEditor.d.ts","sourceRoot":"","sources":["../src/RichEditor.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAYH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAI1C,OAAO,KAAK,EAGV,eAAe,EACf,aAAa,EACb,cAAc,EACf,MAAM,SAAS,CAAC;AAKjB,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAQxD,MAAM,WAAW,uBAAwB,SAAQ,eAAe;IAC9D,gCAAgC;IAChC,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,8CAA8C;IAC9C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,6CAA6C;IAC7C,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,2EAA2E;IAC3E,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,cAAc,EAAE,CAAC;IAC5B,yEAAyE;IACzE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,2DAA2D;IAC3D,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,8DAA8D;IAC9D,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,kEAAkE;IAClE,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,+CAA+C;IAC/C,kBAAkB,CAAC,EAAE,CAAC,UAAU,EAAE,OAAO,KAAK,IAAI,CAAC;IACnD;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAgOD,eAAO,MAAM,UAAU;;;;CAIrB,CAAC"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * RichEditor compound component (native)
3
+ *
4
+ * Mobile editing model (Notion / Gmail convention):
5
+ *
6
+ * - INLINE (default): a compact PREVIEW surface themed like an input --
7
+ * the committed content rendered as styled text (or the placeholder),
8
+ * with a subtle edit affordance. Tapping it does not type inline; it
9
+ * opens the fullscreen editor.
10
+ * - FULLSCREEN EDIT: a safe-area-aware RN Modal. Header bar with Cancel
11
+ * (left, discards the draft back to the pre-open value) and Done (right,
12
+ * commits via onChange) -- draft-until-commit. The Tentap editor fills
13
+ * the screen and the FixedToolbar docks ABOVE the keyboard via
14
+ * KeyboardAvoidingView.
15
+ * - `inlineEditing` opts back into the embedded inline editor for hosts
16
+ * that truly want the old behavior.
17
+ *
18
+ * The web `fullscreen` / `defaultFullscreen` / `onFullscreenChange` props
19
+ * map to the modal here, so the public API is one surface.
20
+ *
21
+ * No BubbleToolbar sub-component (10Tap does not support floating menus).
22
+ * The BubbleToolbar property is still present on the compound component
23
+ * to maintain the same public interface, but renders nothing on native.
24
+ */
25
+ import type { SizeTokens } from "tamagui";
26
+ import type { RichEditorProps, RichEditorRef, ToolbarSection } from "./types";
27
+ import { FixedToolbar } from "./toolbar/FixedToolbar";
28
+ export interface RichEditorCombinedProps extends RichEditorProps {
29
+ /** Size token for the editor */
30
+ size?: SizeTokens;
31
+ /** Use compact sizing for tighter controls */
32
+ compact?: boolean;
33
+ /** Show the fixed toolbar (default: true) */
34
+ showToolbar?: boolean;
35
+ /** Show the bubble toolbar on text selection (not supported on native, ignored) */
36
+ showBubbleToolbar?: boolean;
37
+ /** Toolbar sections to display (shows all when omitted) */
38
+ sections?: ToolbarSection[];
39
+ /** Controlled fullscreen state (opens the fullscreen edit modal) */
40
+ fullscreen?: boolean;
41
+ /** Initial fullscreen state when uncontrolled (default: false) */
42
+ defaultFullscreen?: boolean;
43
+ /** Called when the fullscreen state changes */
44
+ onFullscreenChange?: (fullscreen: boolean) => void;
45
+ /**
46
+ * Escape hatch: render the old embedded inline editor instead of the
47
+ * preview + fullscreen modal (default: false)
48
+ */
49
+ inlineEditing?: boolean;
50
+ }
51
+ /** No-op BubbleToolbar for native -- 10Tap does not support floating menus */
52
+ declare function NativeBubbleToolbar(): null;
53
+ export declare const RichEditor: import("react").ForwardRefExoticComponent<RichEditorCombinedProps & import("react").RefAttributes<RichEditorRef>> & {
54
+ FixedToolbar: typeof FixedToolbar;
55
+ BubbleToolbar: typeof NativeBubbleToolbar;
56
+ Editor: any;
57
+ };
58
+ export {};
59
+ //# sourceMappingURL=RichEditor.native.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RichEditor.native.d.ts","sourceRoot":"","sources":["../src/RichEditor.native.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAWH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAI1C,OAAO,KAAK,EAAe,eAAe,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAI3F,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAUtD,MAAM,WAAW,uBAAwB,SAAQ,eAAe;IAC9D,gCAAgC;IAChC,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,8CAA8C;IAC9C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,6CAA6C;IAC7C,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,mFAAmF;IACnF,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,cAAc,EAAE,CAAC;IAC5B,oEAAoE;IACpE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,kEAAkE;IAClE,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,+CAA+C;IAC/C,kBAAkB,CAAC,EAAE,CAAC,UAAU,EAAE,OAAO,KAAK,IAAI,CAAC;IACnD;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAMD,8EAA8E;AAC9E,iBAAS,mBAAmB,SAE3B;AA+eD,eAAO,MAAM,UAAU;;;;CAIrB,CAAC"}