@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
@@ -31,6 +31,10 @@ const meta: Meta<typeof RichTextEditor> = {
31
31
  showBubbleToolbar: { control: "boolean" },
32
32
  compact: { control: "boolean" },
33
33
  skeleton: { control: "boolean" },
34
+ defaultFullscreen: { control: "boolean" },
35
+ fullscreen: { control: false },
36
+ onFullscreenChange: { control: false },
37
+ inlineEditing: { control: "boolean" },
34
38
  size: { control: "select", options: ["$2", "$3", "$4"] },
35
39
  minHeight: { control: "number" },
36
40
  maxHeight: { control: "number" },
@@ -322,3 +326,189 @@ export const Skeleton: Story = {
322
326
  minHeight: 200,
323
327
  },
324
328
  };
329
+
330
+ // ---------------------------------------------------------------------------
331
+ // Fullscreen
332
+ // ---------------------------------------------------------------------------
333
+
334
+ export const Fullscreen: Story = {
335
+ args: {
336
+ label: "Fullscreen",
337
+ defaultFullscreen: false,
338
+ defaultValue:
339
+ "<p>Use the expand button at the toolbar's right end to fill the viewport. Press Escape (or the button again) to exit.</p>",
340
+ minHeight: 200,
341
+ helperText: "Toggle fullscreen from the toolbar; Escape exits",
342
+ },
343
+ };
344
+
345
+ // ---------------------------------------------------------------------------
346
+ // InlineEmbedded (native escape hatch; web renders the normal inline editor)
347
+ // ---------------------------------------------------------------------------
348
+
349
+ export const InlineEmbedded: Story = {
350
+ args: {
351
+ label: "Inline (embedded)",
352
+ inlineEditing: true,
353
+ defaultValue: "<p>Native: edits inline without the fullscreen modal (escape hatch).</p>",
354
+ minHeight: 160,
355
+ helperText: "inlineEditing keeps the old embedded editor on native",
356
+ },
357
+ };
358
+
359
+ // ---------------------------------------------------------------------------
360
+ // WithMentions (@ suggestion popup wired to a demo directory)
361
+ // ---------------------------------------------------------------------------
362
+
363
+ const MENTION_DIRECTORY = [
364
+ { id: "ada", display: "Ada Lovelace", description: "Analyst" },
365
+ { id: "alan", display: "Alan Turing", description: "Computer science" },
366
+ { id: "grace", display: "Grace Hopper", description: "Compilers" },
367
+ { id: "linus", display: "Linus Torvalds", description: "Kernels" },
368
+ { id: "margaret", display: "Margaret Hamilton", description: "Flight software" },
369
+ ];
370
+
371
+ export const WithMentions: Story = {
372
+ args: {
373
+ label: "With Mentions",
374
+ placeholder: "Type @ to mention someone...",
375
+ minHeight: 200,
376
+ helperText: "The @ popup shares the slash-menu chrome (LC-16)",
377
+ mentions: {
378
+ items: (query: string) =>
379
+ MENTION_DIRECTORY.filter((item) =>
380
+ item.display.toLowerCase().includes(query.toLowerCase()),
381
+ ),
382
+ },
383
+ },
384
+ };
385
+
386
+ // ---------------------------------------------------------------------------
387
+ // WithEmoji (`:` shortname autocomplete — lazy dataset)
388
+ // ---------------------------------------------------------------------------
389
+
390
+ export const WithEmoji: Story = {
391
+ args: {
392
+ label: "Emoji Autocomplete",
393
+ placeholder: "Type : followed by a name, e.g. :tada",
394
+ minHeight: 160,
395
+ helperText:
396
+ "The : popup shares the slash/mention chrome (LC-16); the dataset lazy-loads on first trigger and inserts plain unicode",
397
+ },
398
+ };
399
+
400
+ // ---------------------------------------------------------------------------
401
+ // WithMermaid (fenced diagram code with live preview)
402
+ // ---------------------------------------------------------------------------
403
+
404
+ export const WithMermaid: Story = {
405
+ args: {
406
+ label: "Mermaid Diagram",
407
+ showBubbleToolbar: true,
408
+ minHeight: 320,
409
+ helperText:
410
+ "The diagram engine lazy-loads on the first mermaid block; edits re-render debounced; invalid syntax shows the parse error",
411
+ defaultValue:
412
+ "<p>Flow below — edit the code to see the live preview update.</p>" +
413
+ '<pre><code class="language-mermaid">graph TD\n A[Draft] --> B{Review}\n B -->|approve| C[Merge]\n B -->|reject| A</code></pre>',
414
+ },
415
+ };
416
+
417
+ // ---------------------------------------------------------------------------
418
+ // WithMath (inline $...$ + $$ block via lazy KaTeX, incl. error state)
419
+ // ---------------------------------------------------------------------------
420
+
421
+ export const WithMath: Story = {
422
+ args: {
423
+ label: "Math (KaTeX)",
424
+ showBubbleToolbar: true,
425
+ minHeight: 320,
426
+ helperText:
427
+ "KaTeX lazy-loads on the first math node; select an inline formula to edit it; bad TeX shows the parse error",
428
+ defaultValue:
429
+ '<p>Inline: <span data-type="inline-math" data-latex="E=mc^2">E=mc^2</span> flows with text.</p>' +
430
+ '<pre><code class="language-math">\\sum_{i=0}^{n} i = \\frac{n(n+1)}{2}</code></pre>' +
431
+ '<p>Error state: <span data-type="inline-math" data-latex="\\nope{">\\nope{</span> keeps the source visible.</p>',
432
+ },
433
+ };
434
+
435
+ // ---------------------------------------------------------------------------
436
+ // WithDetails (collapsible <details> sections)
437
+ // ---------------------------------------------------------------------------
438
+
439
+ export const WithDetails: Story = {
440
+ args: {
441
+ label: "Collapsible Section",
442
+ minHeight: 240,
443
+ helperText:
444
+ "GitLab-style <details>: toggle collapses content; markdown keeps it as raw HTML (lossless)",
445
+ defaultValue:
446
+ "<details open><summary>Deployment checklist</summary>" +
447
+ '<div data-type="detailsContent"><ul><li><p>Run the migration</p></li>' +
448
+ "<li><p>Flip the feature flag</p></li></ul></div></details>" +
449
+ "<p>Content after the section.</p>",
450
+ },
451
+ };
452
+
453
+ // ---------------------------------------------------------------------------
454
+ // MarkdownMode (capabilities="markdown" — GFM-expressible surface only)
455
+ // ---------------------------------------------------------------------------
456
+
457
+ export const MarkdownMode: Story = {
458
+ render: () => {
459
+ const [markdown, setMarkdown] = useState(
460
+ "# Markdown mode\n\nWYSIWYG editing constrained to **GFM**: no highlight, underline, color, or alignment.\n\n- [ ] Task lists work\n- Bullet lists too\n\n> Blockquotes and `inline code` round-trip.",
461
+ );
462
+
463
+ return (
464
+ <YStack gap="$4">
465
+ <RichEditor
466
+ capabilities="markdown"
467
+ initialContent={markdown}
468
+ onChange={(md) => setMarkdown(md)}
469
+ minHeight={240}
470
+ showBubbleToolbar
471
+ />
472
+ <YStack backgroundColor="$color3" padding="$3" borderRadius="$3" maxHeight={200}>
473
+ <Text color="$color10" fontSize="$2">
474
+ Serialized markdown (onChange):
475
+ </Text>
476
+ <Paragraph size="$1" fontFamily="$mono" whiteSpace="pre-wrap">
477
+ {markdown}
478
+ </Paragraph>
479
+ </YStack>
480
+ </YStack>
481
+ );
482
+ },
483
+ };
484
+
485
+ // ---------------------------------------------------------------------------
486
+ // WithUploadHooks (prop-driven image/file upload)
487
+ // ---------------------------------------------------------------------------
488
+
489
+ export const WithUploadHooks: Story = {
490
+ args: {
491
+ label: "With Upload Hooks",
492
+ placeholder: "Paste or drop an image or file...",
493
+ minHeight: 200,
494
+ helperText: "onImageUpload / onFileUpload resolve fake URLs after a short delay",
495
+ onImageUpload: async (file: File) =>
496
+ new Promise<string>((resolve) =>
497
+ setTimeout(
498
+ () => resolve(`https://example.com/uploads/${encodeURIComponent(file.name)}`),
499
+ 150,
500
+ ),
501
+ ),
502
+ onFileUpload: async (file: File) =>
503
+ new Promise<{ url: string; name?: string }>((resolve) =>
504
+ setTimeout(
505
+ () =>
506
+ resolve({
507
+ url: `https://example.com/files/${encodeURIComponent(file.name)}`,
508
+ name: file.name,
509
+ }),
510
+ 150,
511
+ ),
512
+ ),
513
+ },
514
+ };
@@ -15,6 +15,7 @@
15
15
  import {
16
16
  forwardRef,
17
17
  useCallback,
18
+ useEffect,
18
19
  useImperativeHandle,
19
20
  useMemo,
20
21
  useRef,
@@ -60,6 +61,18 @@ export interface RichEditorCombinedProps extends RichEditorProps {
60
61
  resizable?: boolean;
61
62
  /** Show word/character count status bar (default: true) */
62
63
  showStatusBar?: boolean;
64
+ /** Controlled fullscreen state (uncontrolled when omitted) */
65
+ fullscreen?: boolean;
66
+ /** Initial fullscreen state when uncontrolled (default: false) */
67
+ defaultFullscreen?: boolean;
68
+ /** Called when the fullscreen state changes */
69
+ onFullscreenChange?: (fullscreen: boolean) => void;
70
+ /**
71
+ * Native only: render the embedded inline editor instead of the
72
+ * preview + fullscreen edit modal. Ignored on web (the web editor is
73
+ * always inline; fullscreen is the toolbar toggle).
74
+ */
75
+ inlineEditing?: boolean;
63
76
  }
64
77
 
65
78
  // ===========================================================================
@@ -76,9 +89,14 @@ const RichEditorImpl = forwardRef<RichEditorRef, RichEditorCombinedProps>(
76
89
  resizable = true,
77
90
  showStatusBar = true,
78
91
  sections,
92
+ capabilities = "full",
79
93
  hasError,
80
94
  editable = true,
81
95
  onStateChange,
96
+ fullscreen: fullscreenProp,
97
+ defaultFullscreen = false,
98
+ onFullscreenChange,
99
+ inlineEditing: _inlineEditing,
82
100
  ...editorProps
83
101
  },
84
102
  ref,
@@ -87,6 +105,10 @@ const RichEditorImpl = forwardRef<RichEditorRef, RichEditorCombinedProps>(
87
105
  const frameRef = useRef<HTMLElement>(null);
88
106
  const [editorState, setEditorState] = useState<EditorState>(defaultEditorState);
89
107
  const [editorMode, setEditorMode] = useState<EditorMode>("richtext");
108
+ const [internalFullscreen, setInternalFullscreen] = useState(defaultFullscreen);
109
+ const [linkDialogOpen, setLinkDialogOpen] = useState(false);
110
+
111
+ const fullscreen = fullscreenProp ?? internalFullscreen;
90
112
 
91
113
  const { knobProps } = useResolvedKnobs({
92
114
  component: "RichEditor",
@@ -102,7 +124,96 @@ const RichEditorImpl = forwardRef<RichEditorRef, RichEditorCombinedProps>(
102
124
  [onStateChange],
103
125
  );
104
126
 
105
- useImperativeHandle(ref, () => internalRef.current!, []);
127
+ const handleFullscreenChange = useCallback(
128
+ (next: boolean) => {
129
+ setInternalFullscreen(next);
130
+ onFullscreenChange?.(next);
131
+ },
132
+ [onFullscreenChange],
133
+ );
134
+
135
+ // Escape exits fullscreen -- but open menus/dialogs get Escape first:
136
+ // popover content is still mounted while it dismisses on the same
137
+ // keydown (React unmounts async), so the presence check skips this
138
+ // handler until the next Escape. The slash menu stops propagation when
139
+ // it consumes Escape, so it never reaches here. defaultPrevented is NOT
140
+ // a usable signal -- ProseMirror preventDefaults Escape unconditionally
141
+ // whenever focus is inside the editor.
142
+ useEffect(() => {
143
+ if (!fullscreen || typeof document === "undefined") return undefined;
144
+ const handleKeyDown = (event: KeyboardEvent) => {
145
+ if (event.key !== "Escape") return;
146
+ const openOverlay = Array.from(
147
+ document.querySelectorAll<HTMLElement>(
148
+ '[role="dialog"], [role="menu"], [role="listbox"]',
149
+ ),
150
+ ).some((el) => el.getClientRects().length > 0);
151
+ if (openOverlay) return;
152
+ handleFullscreenChange(false);
153
+ };
154
+ document.addEventListener("keydown", handleKeyDown);
155
+ return () => document.removeEventListener("keydown", handleKeyDown);
156
+ }, [fullscreen, handleFullscreenChange]);
157
+
158
+ // Lock page scroll while fullscreen and clear any drag-resize inline
159
+ // height (ResizeHandle writes style.height, which would beat inset 0)
160
+ useEffect(() => {
161
+ if (!fullscreen || typeof document === "undefined") return undefined;
162
+ const frame = frameRef.current;
163
+ const prevHeight = frame?.style.height ?? "";
164
+ if (frame) frame.style.height = "";
165
+ const prevBodyOverflow = document.body.style.overflow;
166
+ const prevHtmlOverflow = document.documentElement.style.overflow;
167
+ // scrollbar-gutter: stable shrinks the initial containing block, which
168
+ // would leave a gutter-wide strip beside the fixed inset-0 frame
169
+ const prevGutter = document.documentElement.style.scrollbarGutter;
170
+ document.body.style.overflow = "hidden";
171
+ document.documentElement.style.overflow = "hidden";
172
+ document.documentElement.style.scrollbarGutter = "auto";
173
+ return () => {
174
+ document.body.style.overflow = prevBodyOverflow;
175
+ document.documentElement.style.overflow = prevHtmlOverflow;
176
+ document.documentElement.style.scrollbarGutter = prevGutter;
177
+ if (frame) frame.style.height = prevHeight;
178
+ };
179
+ }, [fullscreen]);
180
+
181
+ // Mod+K opens the link dialog (GitLab parity). Scoped to the editor
182
+ // frame so multiple editors on a page do not fight over the shortcut.
183
+ const showToolbarNow = showToolbar && editable && editorMode === "richtext";
184
+ useEffect(() => {
185
+ const frame = frameRef.current;
186
+ if (!frame || !showToolbarNow || typeof document === "undefined") return undefined;
187
+ const handleKeyDown = (event: KeyboardEvent) => {
188
+ if (!(event.metaKey || event.ctrlKey)) return;
189
+ if (event.altKey || event.shiftKey) return;
190
+ if (event.key.toLowerCase() !== "k") return;
191
+ event.preventDefault();
192
+ setLinkDialogOpen(true);
193
+ };
194
+ frame.addEventListener("keydown", handleKeyDown);
195
+ return () => frame.removeEventListener("keydown", handleKeyDown);
196
+ }, [showToolbarNow]);
197
+
198
+ // Delegate per call — a frozen `internalRef.current` snapshot would bind
199
+ // the first render's methods, where the Tiptap editor is still null
200
+ // (immediatelyRender: false), leaving every host-facing method a no-op.
201
+ useImperativeHandle(
202
+ ref,
203
+ () => ({
204
+ executeCommand: (command, payload) => internalRef.current?.executeCommand(command, payload),
205
+ getState: () => internalRef.current?.getState() ?? defaultEditorState,
206
+ getHTML: () => internalRef.current?.getHTML() ?? "",
207
+ getJSON: () => internalRef.current?.getJSON() ?? null,
208
+ getMarkdown: () => internalRef.current?.getMarkdown() ?? "",
209
+ setHTML: (html) => internalRef.current?.setHTML(html),
210
+ setJSON: (json) => internalRef.current?.setJSON(json),
211
+ setMarkdown: (markdown) => internalRef.current?.setMarkdown(markdown),
212
+ focus: () => internalRef.current?.focus(),
213
+ blur: () => internalRef.current?.blur(),
214
+ }),
215
+ [],
216
+ );
106
217
 
107
218
  const cappedRadius = clampRadiusForLargeComponent(knobProps.borderRadius.borderRadius, 4);
108
219
 
@@ -130,24 +241,31 @@ const RichEditorImpl = forwardRef<RichEditorRef, RichEditorCombinedProps>(
130
241
  <EditorFrame
131
242
  ref={frameRef as any}
132
243
  hasError={hasError}
133
- borderRadius={cappedRadius}
134
- borderWidth={knobProps.borderRadius.borderWidth}
244
+ borderRadius={fullscreen ? 0 : cappedRadius}
245
+ borderWidth={fullscreen ? 0 : knobProps.borderRadius.borderWidth}
135
246
  borderColor={hasError ? "$red10" : "$color6"}
136
- backgroundColor={knobProps.inputBackground ?? "$color2"}
247
+ backgroundColor={fullscreen ? "$background" : (knobProps.inputBackground ?? "$color2")}
137
248
  disabled={disabled}
138
- position="relative"
249
+ position={fullscreen ? ("fixed" as any) : "relative"}
250
+ {...(fullscreen && { top: 0, left: 0, right: 0, bottom: 0, zIndex: 100000 })}
139
251
  >
140
- {showToolbar && !disabled && editorMode === "richtext" && (
252
+ {showToolbarNow && (
141
253
  <FixedToolbar
142
254
  editorRef={internalRef}
143
255
  state={editorState}
144
256
  sections={sections}
257
+ capabilities={capabilities}
145
258
  hasError={hasError}
259
+ fullscreen={fullscreen}
260
+ onFullscreenToggle={() => handleFullscreenChange(!fullscreen)}
261
+ linkDialogOpen={linkDialogOpen}
262
+ onLinkDialogOpenChange={setLinkDialogOpen}
146
263
  />
147
264
  )}
148
265
  <TiptapEditor
149
266
  ref={internalRef}
150
267
  {...editorProps}
268
+ capabilities={capabilities}
151
269
  editable={editable}
152
270
  onStateChange={handleStateChange}
153
271
  hasError={false}
@@ -155,11 +273,12 @@ const RichEditorImpl = forwardRef<RichEditorRef, RichEditorCombinedProps>(
155
273
  bodyFontFamily={bodyFontFamily}
156
274
  headingFontFamily={headingFontFamily}
157
275
  editorMode={editorMode}
276
+ fullscreen={fullscreen}
158
277
  />
159
278
  {showStatusBar && (
160
279
  <StatusBar state={editorState} mode={editorMode} onModeChange={setEditorMode} />
161
280
  )}
162
- {resizable && !disabled && (
281
+ {resizable && !disabled && !fullscreen && (
163
282
  <ResizeHandle
164
283
  containerRef={frameRef as RefObject<HTMLElement>}
165
284
  minHeight={editorProps.minHeight ?? 150}
@@ -27,9 +27,14 @@ import {
27
27
  type FieldComponentProps,
28
28
  type Validator,
29
29
  } from "@multiplatform.one/forms";
30
- import type { ToolbarSection } from "../types";
31
- import type { RichEditorRef } from "../types";
30
+ import type {
31
+ EditorCapabilities,
32
+ RichEditorRef,
33
+ RichTextMentionOptions,
34
+ ToolbarSection,
35
+ } from "../types";
32
36
  import { RichEditor } from "../RichEditor";
37
+ import { t } from "../shared/t";
33
38
 
34
39
  // ---------------------------------------------------------------------------
35
40
  // Custom empty check for rich text
@@ -84,8 +89,37 @@ export type RichTextEditorProps<
84
89
  showBubbleToolbar?: boolean;
85
90
  /** Toolbar sections to display (shows all when omitted) */
86
91
  sections?: ToolbarSection[];
92
+ /**
93
+ * Capability surface (default "full"). "markdown" constrains the editor
94
+ * to markdown-expressible features and makes value/onChange markdown
95
+ * strings instead of HTML.
96
+ */
97
+ capabilities?: EditorCapabilities;
87
98
  /** When true, renders a skeleton placeholder instead of the editor */
88
99
  skeleton?: boolean;
100
+ /** Controlled fullscreen state (web; uncontrolled when omitted) */
101
+ fullscreen?: boolean;
102
+ /** Initial fullscreen state when uncontrolled (default: false) */
103
+ defaultFullscreen?: boolean;
104
+ /** Called when the fullscreen state changes */
105
+ onFullscreenChange?: (fullscreen: boolean) => void;
106
+ /**
107
+ * Native only: render the embedded inline editor instead of the
108
+ * preview + fullscreen edit modal (ignored on web)
109
+ */
110
+ inlineEditing?: boolean;
111
+ /**
112
+ * Uploads a pasted/dropped image and resolves its URL (web). Without it,
113
+ * images are inlined as base64 data URIs.
114
+ */
115
+ onImageUpload?: (file: File) => Promise<string>;
116
+ /**
117
+ * Uploads a pasted/dropped non-image file and resolves its URL (web).
118
+ * Inserts an attachment chip link; without it, non-image files are ignored.
119
+ */
120
+ onFileUpload?: (file: File) => Promise<{ url: string; name?: string }>;
121
+ /** Enables the @ mention suggestion popup (web) */
122
+ mentions?: RichTextMentionOptions;
89
123
  };
90
124
 
91
125
  // ---------------------------------------------------------------------------
@@ -102,7 +136,7 @@ export function RichTextEditor<
102
136
  const {
103
137
  defaultValue = "",
104
138
  form,
105
- placeholder = "Write something...",
139
+ placeholder: placeholderProp,
106
140
  disabled,
107
141
  readOnly,
108
142
  minHeight = 150,
@@ -124,10 +158,19 @@ export function RichTextEditor<
124
158
  compact = false,
125
159
  showBubbleToolbar = false,
126
160
  sections,
161
+ capabilities,
127
162
  skeleton,
163
+ fullscreen,
164
+ defaultFullscreen,
165
+ onFullscreenChange,
166
+ inlineEditing,
167
+ onImageUpload,
168
+ onFileUpload,
169
+ mentions,
128
170
  ..._restProps
129
171
  } = props;
130
172
 
173
+ const placeholder = placeholderProp ?? t("Write something...");
131
174
  const { resolvedForm, knobProps, id } = useFormField({ form });
132
175
  const resolvedValidators = useResolvedValidators(
133
176
  required,
@@ -179,9 +222,17 @@ export function RichTextEditor<
179
222
  showToolbar={showToolbar}
180
223
  showBubbleToolbar={showBubbleToolbar}
181
224
  sections={sections}
225
+ capabilities={capabilities}
182
226
  hasError={hasError}
183
227
  size={size}
184
228
  compact={compact}
229
+ fullscreen={fullscreen}
230
+ defaultFullscreen={defaultFullscreen}
231
+ onFullscreenChange={onFullscreenChange}
232
+ inlineEditing={inlineEditing}
233
+ onImageUpload={onImageUpload}
234
+ onFileUpload={onFileUpload}
235
+ mentions={mentions}
185
236
  />
186
237
  );
187
238
  };
@@ -4,8 +4,9 @@ import { describe, it, expect, vi } from "vitest";
4
4
  // Mocks -- must come before imports
5
5
  // ---------------------------------------------------------------------------
6
6
 
7
- vi.mock("@multiplatform.one/forms", () => {
7
+ vi.mock("@multiplatform.one/forms", async (importOriginal) => {
8
8
  return {
9
+ ...(await importOriginal<Record<string, unknown>>()),
9
10
  Field: ({ children, ...props }: any) => {
10
11
  const field = {
11
12
  state: { value: props.defaultValue ?? "", meta: { errors: [] } },
@@ -57,7 +58,7 @@ vi.mock("@multiplatform.one/forms", () => {
57
58
  isEmpty?: (v: unknown) => boolean,
58
59
  ) => {
59
60
  if (!required) return validators;
60
- const check = isEmpty || ((v: unknown) => v == null || v === "");
61
+ const check = isEmpty || ((v: unknown) => v === null || v === undefined || v === "");
61
62
  const requiredValidator = ({ value }: { value: unknown }) =>
62
63
  check(value)
63
64
  ? `${typeof label === "string" ? label : name || "Field"} is required`
@@ -84,11 +85,13 @@ vi.mock("@multiplatform.one/forms", () => {
84
85
  };
85
86
  });
86
87
 
87
- vi.mock("@multiplatform.one/components", () => ({
88
+ vi.mock("@multiplatform.one/components", async (importOriginal) => ({
89
+ ...(await importOriginal<Record<string, unknown>>()),
88
90
  Tooltip: ({ children }: any) => children,
89
91
  }));
90
92
 
91
- vi.mock("@multiplatform.one/theme", () => ({
93
+ vi.mock("@multiplatform.one/theme", async (importOriginal) => ({
94
+ ...(await importOriginal<Record<string, unknown>>()),
92
95
  useResolvedKnobs: () => ({
93
96
  knobProps: {
94
97
  body: {},
@@ -132,6 +135,10 @@ const mockEditor = {
132
135
  blur: vi.fn(),
133
136
  },
134
137
  setEditable: vi.fn(),
138
+ storage: {
139
+ mediaUpload: { handlers: {} },
140
+ suggestionChrome: { value: null },
141
+ },
135
142
  };
136
143
 
137
144
  vi.mock("@tiptap/react", () => ({
package/src/constants.ts CHANGED
@@ -5,40 +5,102 @@
5
5
  import type { NativeCapability } from "./types";
6
6
 
7
7
  // ===========================================================================
8
- // Color Palettes
8
+ // Color Palettes (Axiom 5 ONE SOURCE: theme ramp tokens, never fixed hexes)
9
9
  // ===========================================================================
10
10
 
11
11
  export interface ColorEntry {
12
12
  /** Display name for the color */
13
13
  name: string;
14
- /** Hex color value, or null for default/none */
14
+ /** CSS color value (theme custom property on web), or null for default/none */
15
15
  value: string | null;
16
16
  }
17
17
 
18
- export const TEXT_COLORS: ColorEntry[] = [
19
- { name: "Default", value: null },
20
- { name: "Black", value: "#000000" },
21
- { name: "Dark Gray", value: "#4a4a4a" },
22
- { name: "Gray", value: "#9b9b9b" },
23
- { name: "Red", value: "#e53935" },
24
- { name: "Orange", value: "#fb8c00" },
25
- { name: "Yellow", value: "#fdd835" },
26
- { name: "Green", value: "#43a047" },
27
- { name: "Blue", value: "#1e88e5" },
28
- { name: "Purple", value: "#8e24aa" },
29
- { name: "Pink", value: "#d81b60" },
18
+ /** A palette entry backed by a theme token instead of a literal color */
19
+ export interface ColorTokenEntry {
20
+ /** Display name for the color */
21
+ name: string;
22
+ /** Theme token key (e.g. "red11"), or null for default/none */
23
+ token: string | null;
24
+ }
25
+
26
+ /**
27
+ * Hue swatches ride the radix step-11 text ramps: legible (>=4.5:1) on the
28
+ * step-1/2 editor surface in BOTH schemes, so the same token list serves
29
+ * light and dark. `color12` is the house strong ink (near-black in light,
30
+ * near-white in dark).
31
+ */
32
+ const TEXT_COLOR_HUES: ColorTokenEntry[] = [
33
+ { name: "Gray", token: "gray11" },
34
+ { name: "Red", token: "red11" },
35
+ { name: "Orange", token: "orange11" },
36
+ { name: "Yellow", token: "yellow11" },
37
+ { name: "Green", token: "green11" },
38
+ { name: "Blue", token: "blue11" },
39
+ { name: "Purple", token: "purple11" },
40
+ { name: "Pink", token: "pink11" },
41
+ ];
42
+
43
+ export const TEXT_COLOR_TOKENS: ColorTokenEntry[] = [
44
+ { name: "Default", token: null },
45
+ // color12 resolves near-black in light schemes; the label states what renders
46
+ { name: "Black", token: "color12" },
47
+ ...TEXT_COLOR_HUES,
48
+ ];
49
+
50
+ /**
51
+ * Dark-scheme display names for the same tokens: the values are identical
52
+ * (theme vars re-resolve per scheme) — only the neutral ink's honest label
53
+ * flips (color12 renders near-white in dark).
54
+ */
55
+ export const TEXT_COLOR_TOKENS_DARK: ColorTokenEntry[] = [
56
+ { name: "Default", token: null },
57
+ { name: "White", token: "color12" },
58
+ ...TEXT_COLOR_HUES,
59
+ ];
60
+
61
+ /**
62
+ * Highlight washes ride the radix step-5 component backgrounds: pastel in
63
+ * light, deep-dim in dark — the scheme's own ink (color12, inherited by the
64
+ * mark) stays legible on them in both schemes.
65
+ */
66
+ export const HIGHLIGHT_COLOR_TOKENS: ColorTokenEntry[] = [
67
+ { name: "None", token: null },
68
+ { name: "Yellow", token: "yellow5" },
69
+ { name: "Green", token: "green5" },
70
+ { name: "Blue", token: "blue5" },
71
+ { name: "Pink", token: "pink5" },
72
+ { name: "Purple", token: "purple5" },
73
+ { name: "Orange", token: "orange5" },
74
+ { name: "Red", token: "red5" },
75
+ { name: "Cyan", token: "cyan5" },
30
76
  ];
31
77
 
32
- export const HIGHLIGHT_COLORS: ColorEntry[] = [
33
- { name: "None", value: null },
34
- { name: "Yellow", value: "#fff59d" },
35
- { name: "Green", value: "#c8e6c9" },
36
- { name: "Blue", value: "#bbdefb" },
37
- { name: "Pink", value: "#f8bbd9" },
38
- { name: "Purple", value: "#e1bee7" },
39
- { name: "Orange", value: "#ffe0b2" },
40
- { name: "Red", value: "#ffcdd2" },
41
- { name: "Cyan", value: "#b2ebf2" },
78
+ /**
79
+ * Web palette values are CSS custom properties: applied color marks re-resolve
80
+ * live from the ambient theme, so content authored in one scheme stays legible
81
+ * when the scheme flips. Native pickers resolve the same tokens via useTheme()
82
+ * (see ColorPicker.native), and TentapEditor injects the resolved vars into
83
+ * the 10Tap webview so cross-authored content renders there too.
84
+ */
85
+ const toCssVarEntry = ({ name, token }: ColorTokenEntry): ColorEntry => ({
86
+ name,
87
+ value: token ? `var(--${token})` : null,
88
+ });
89
+
90
+ export const TEXT_COLORS: ColorEntry[] = TEXT_COLOR_TOKENS.map(toCssVarEntry);
91
+ export const TEXT_COLORS_DARK: ColorEntry[] = TEXT_COLOR_TOKENS_DARK.map(toCssVarEntry);
92
+ export const HIGHLIGHT_COLORS: ColorEntry[] = HIGHLIGHT_COLOR_TOKENS.map(toCssVarEntry);
93
+
94
+ /**
95
+ * Every theme token the palettes reference — the single list used to inject
96
+ * resolved CSS custom properties into the native 10Tap webview.
97
+ */
98
+ export const PALETTE_THEME_TOKENS: string[] = [
99
+ ...new Set(
100
+ [...TEXT_COLOR_TOKENS, ...HIGHLIGHT_COLOR_TOKENS]
101
+ .map((entry) => entry.token)
102
+ .filter((token): token is string => token !== null),
103
+ ),
42
104
  ];
43
105
 
44
106
  // ===========================================================================