@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
@@ -0,0 +1,133 @@
1
+ /**
2
+ * Image / attachment paste-and-drop handling (web).
3
+ *
4
+ * Files pasted or dropped into the editor route through prop-driven upload
5
+ * hooks -- the package assumes no backend:
6
+ * - Images: `onImageUpload(file) -> Promise<url>` inserts an image node at
7
+ * the paste/drop position. Without a hook, images fall back to an inline
8
+ * base64 data URI so the flow still works in demos and offline hosts.
9
+ * - Other files: `onFileUpload(file) -> Promise<{ url, name? }>` inserts an
10
+ * attachment chip (a link with `data-attachment`). Without a hook there is
11
+ * no URL to link, so the file is ignored (honest no-op).
12
+ */
13
+
14
+ import { Extension } from "@tiptap/core";
15
+ import type { Editor } from "@tiptap/core";
16
+ import { Plugin, PluginKey } from "@tiptap/pm/state";
17
+
18
+ export interface MediaUploadHandlers {
19
+ /** Uploads a pasted/dropped image and resolves its URL */
20
+ onImageUpload?: (file: File) => Promise<string>;
21
+ /** Uploads a pasted/dropped non-image file and resolves its URL (+ display name) */
22
+ onFileUpload?: (file: File) => Promise<{ url: string; name?: string }>;
23
+ }
24
+
25
+ export interface MediaUploadStorage {
26
+ handlers: MediaUploadHandlers;
27
+ }
28
+
29
+ declare module "@tiptap/core" {
30
+ interface Storage {
31
+ mediaUpload: MediaUploadStorage;
32
+ }
33
+ }
34
+
35
+ function readFileAsDataUrl(file: File): Promise<string> {
36
+ return new Promise((resolve, reject) => {
37
+ const reader = new FileReader();
38
+ reader.onload = () => resolve(String(reader.result));
39
+ reader.onerror = () => reject(reader.error);
40
+ reader.readAsDataURL(file);
41
+ });
42
+ }
43
+
44
+ function insertImage(editor: Editor, src: string, alt: string, pos?: number) {
45
+ const chain = editor.chain().focus();
46
+ if (pos !== undefined) {
47
+ chain.insertContentAt(pos, { type: "image", attrs: { src, alt } }).run();
48
+ } else {
49
+ chain.setImage({ src, alt }).run();
50
+ }
51
+ }
52
+
53
+ function insertAttachment(editor: Editor, url: string, name: string, pos?: number) {
54
+ const content = {
55
+ type: "text",
56
+ text: name,
57
+ marks: [
58
+ {
59
+ type: "link",
60
+ // the Link mark schema only allows href/target/rel/class -- the
61
+ // chip presentation rides on the class
62
+ attrs: { href: url, class: "rt-attachment" },
63
+ },
64
+ ],
65
+ };
66
+ const chain = editor.chain().focus();
67
+ if (pos !== undefined) chain.insertContentAt(pos, content).run();
68
+ else chain.insertContent(content).run();
69
+ }
70
+
71
+ async function handleFiles(editor: Editor, files: File[], pos?: number): Promise<void> {
72
+ const { handlers } = editor.storage.mediaUpload as MediaUploadStorage;
73
+ for (const file of files) {
74
+ try {
75
+ if (file.type.startsWith("image/")) {
76
+ const src = handlers.onImageUpload
77
+ ? await handlers.onImageUpload(file)
78
+ : await readFileAsDataUrl(file);
79
+ insertImage(editor, src, file.name.replace(/\.[a-z0-9]+$/i, ""), pos);
80
+ } else if (handlers.onFileUpload) {
81
+ const { url, name } = await handlers.onFileUpload(file);
82
+ insertAttachment(editor, url, name ?? file.name, pos);
83
+ }
84
+ } catch (err) {
85
+ console.warn("[rich-text] media upload failed:", err);
86
+ }
87
+ }
88
+ }
89
+
90
+ export const MediaUpload = Extension.create({
91
+ name: "mediaUpload",
92
+
93
+ addStorage(): MediaUploadStorage {
94
+ return { handlers: {} };
95
+ },
96
+
97
+ addProseMirrorPlugins() {
98
+ const { editor } = this;
99
+
100
+ return [
101
+ new Plugin({
102
+ key: new PluginKey("mediaUpload"),
103
+ props: {
104
+ handlePaste(_view, event) {
105
+ const files = Array.from(event.clipboardData?.files ?? []);
106
+ if (files.length === 0) return false;
107
+ const { handlers } = editor.storage.mediaUpload as MediaUploadStorage;
108
+ const actionable = files.some(
109
+ (f) => f.type.startsWith("image/") || handlers.onFileUpload,
110
+ );
111
+ if (!actionable) return false;
112
+ event.preventDefault();
113
+ void handleFiles(editor, files);
114
+ return true;
115
+ },
116
+ handleDrop(view, event) {
117
+ const files = Array.from(event.dataTransfer?.files ?? []);
118
+ if (files.length === 0) return false;
119
+ const { handlers } = editor.storage.mediaUpload as MediaUploadStorage;
120
+ const actionable = files.some(
121
+ (f) => f.type.startsWith("image/") || handlers.onFileUpload,
122
+ );
123
+ if (!actionable) return false;
124
+ event.preventDefault();
125
+ const coords = view.posAtCoords({ left: event.clientX, top: event.clientY });
126
+ void handleFiles(editor, files, coords?.pos);
127
+ return true;
128
+ },
129
+ },
130
+ }),
131
+ ];
132
+ },
133
+ });
@@ -0,0 +1,41 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { createMentionExtension } from "./mentions";
3
+
4
+ describe("createMentionExtension", () => {
5
+ it("creates a mention extension with @ as the default trigger", () => {
6
+ const ext = createMentionExtension({ items: () => [] });
7
+ expect(ext.name).toBe("mention");
8
+ expect(ext.options.suggestion.char).toBe("@");
9
+ });
10
+
11
+ it("honors a custom trigger", () => {
12
+ const ext = createMentionExtension({ trigger: "#", items: () => [] });
13
+ expect(ext.options.suggestion.char).toBe("#");
14
+ });
15
+
16
+ it("maps the forms MentionItem contract (display -> label) and caps at 20", async () => {
17
+ const data = Array.from({ length: 30 }, (_, i) => ({
18
+ id: `u${i}`,
19
+ display: `User ${i}`,
20
+ description: `Role ${i}`,
21
+ avatar: `https://a.b/${i}.png`,
22
+ }));
23
+ const ext = createMentionExtension({ items: () => data });
24
+ const items = await ext.options.suggestion.items!({ query: "", editor: null as any });
25
+ expect(items).toHaveLength(20);
26
+ expect(items[0]).toEqual({
27
+ id: "u0",
28
+ label: "User 0",
29
+ description: "Role 0",
30
+ avatar: "https://a.b/0.png",
31
+ });
32
+ });
33
+
34
+ it("supports async item sources", async () => {
35
+ const ext = createMentionExtension({
36
+ items: async (query) => [{ id: "1", display: `match:${query}` }],
37
+ });
38
+ const items = await ext.options.suggestion.items!({ query: "ada", editor: null as any });
39
+ expect(items[0]!.label).toBe("match:ada");
40
+ });
41
+ });
@@ -0,0 +1,55 @@
1
+ /**
2
+ * @ mention support for the rich text editor (web).
3
+ *
4
+ * Reuses the forms `MentionItem` contract (LC-16: same suggestion data
5
+ * shape as `MentionInput`) and the shared suggestion popup (same rows,
6
+ * chrome, and keyboard handling as the slash menu). The host wires data via
7
+ * the `mentions` prop -- the package assumes no backend.
8
+ *
9
+ * Inserted mentions are Tiptap mention nodes rendered as
10
+ * `<span data-type="mention" data-id="...">@label</span>` chips.
11
+ */
12
+
13
+ import Mention from "@tiptap/extension-mention";
14
+ import type { RichTextMentionOptions } from "../types";
15
+ import { t } from "../shared/t";
16
+ import { createSuggestionRenderer, getSuggestionChrome } from "./suggestionPopup";
17
+
18
+ export type { RichTextMentionOptions };
19
+
20
+ /** Internal suggestion payload: Mention's default command reads id + label */
21
+ interface MentionSuggestionItem {
22
+ id: string;
23
+ label: string;
24
+ description?: string;
25
+ avatar?: string;
26
+ }
27
+
28
+ export function createMentionExtension(options: RichTextMentionOptions) {
29
+ return Mention.configure({
30
+ HTMLAttributes: { class: "rt-mention" },
31
+ deleteTriggerWithBackspace: true,
32
+ suggestion: {
33
+ char: options.trigger ?? "@",
34
+ items: async ({ query }: { query: string }): Promise<MentionSuggestionItem[]> => {
35
+ const items = await options.items(query);
36
+ return items.slice(0, 20).map((item) => ({
37
+ id: item.id,
38
+ label: item.display,
39
+ description: item.description,
40
+ avatar: item.avatar,
41
+ }));
42
+ },
43
+ render: createSuggestionRenderer<MentionSuggestionItem>({
44
+ toRow: (item) => ({
45
+ key: item.id,
46
+ title: item.label,
47
+ description: item.description,
48
+ avatarUrl: item.avatar,
49
+ }),
50
+ getChrome: getSuggestionChrome,
51
+ getEmptyLabel: () => t("No results"),
52
+ }),
53
+ },
54
+ });
55
+ }
@@ -0,0 +1,84 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { cleanPastedHtml, isOfficeHtml } from "./pasteCleanup";
3
+
4
+ const GOOGLE_DOCS_HTML =
5
+ '<meta charset="utf-8"><b style="font-weight:normal;" id="docs-internal-guid-abc123">' +
6
+ '<p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;">' +
7
+ '<span style="font-size:11pt;font-family:Arial;color:#000000;background-color:transparent;' +
8
+ 'font-weight:400;font-style:normal;">Hello from Docs</span></p>' +
9
+ '<p dir="ltr"><span style="font-weight:700;color:#ff0000;">Red bold</span></p></b>';
10
+
11
+ const WORD_HTML =
12
+ "<html xmlns:o='urn:schemas-microsoft-com:office:office'><body>" +
13
+ "<!--[if gte mso 9]><xml><o:shapedefaults/></xml><![endif]-->" +
14
+ '<p class="MsoNormal" style="mso-margin-top-alt:auto;color:windowtext;">Hello from Word<o:p></o:p></p>' +
15
+ "</body></html>";
16
+
17
+ describe("isOfficeHtml", () => {
18
+ it("detects Google Docs clipboard payloads", () => {
19
+ expect(isOfficeHtml(GOOGLE_DOCS_HTML)).toBe(true);
20
+ });
21
+
22
+ it("detects Microsoft Word clipboard payloads", () => {
23
+ expect(isOfficeHtml(WORD_HTML)).toBe(true);
24
+ });
25
+
26
+ it("returns false for regular web HTML", () => {
27
+ expect(isOfficeHtml("<p><strong>plain</strong> web copy</p>")).toBe(false);
28
+ });
29
+ });
30
+
31
+ describe("cleanPastedHtml", () => {
32
+ it("passes non-office HTML through untouched", () => {
33
+ const html = '<p class="keep-me"><strong>web</strong></p>';
34
+ expect(cleanPastedHtml(html)).toBe(html);
35
+ });
36
+
37
+ it("unwraps the Google Docs non-bold <b> guid wrapper", () => {
38
+ const cleaned = cleanPastedHtml(GOOGLE_DOCS_HTML);
39
+ // The wrapper <b> is gone so content does not become bold
40
+ expect(cleaned).not.toContain("docs-internal-guid");
41
+ expect(cleaned).not.toMatch(/<b[\s>]/);
42
+ expect(cleaned).toContain("Hello from Docs");
43
+ });
44
+
45
+ it("drops font junk but keeps meaningful colors", () => {
46
+ const cleaned = cleanPastedHtml(GOOGLE_DOCS_HTML);
47
+ expect(cleaned).not.toContain("font-family");
48
+ expect(cleaned).not.toContain("font-size");
49
+ // Default black ink is dropped (stays on theme text color)
50
+ expect(cleaned).not.toContain("#000000");
51
+ // Explicit non-default color survives as data (authored hex preserved)
52
+ expect(cleaned).toContain("color: #ff0000");
53
+ });
54
+
55
+ it("keeps span-styled bold (Docs marks bold with font-weight, not <b>)", () => {
56
+ const cleaned = cleanPastedHtml(GOOGLE_DOCS_HTML);
57
+ // Authored bold survives so ProseMirror parses it into a bold mark
58
+ expect(cleaned).toContain("font-weight: 700");
59
+ // The default-weight span (font-weight:400) carries no mark
60
+ expect(cleaned).not.toContain("font-weight: 400");
61
+ expect(cleaned).not.toContain("font-style: normal");
62
+ });
63
+
64
+ it("keeps span-styled italic/underline/strike, drops default values", () => {
65
+ const html =
66
+ '<p class="MsoNormal">' +
67
+ '<span style="font-style:italic;">it</span>' +
68
+ '<span style="text-decoration:underline;">un</span>' +
69
+ '<span style="text-decoration:none;">plain</span></p>';
70
+ const cleaned = cleanPastedHtml(html);
71
+ expect(cleaned).toContain("font-style: italic");
72
+ expect(cleaned).toContain("text-decoration: underline");
73
+ expect(cleaned).not.toContain("text-decoration: none");
74
+ });
75
+
76
+ it("strips Word Mso classes, o:p tags, and conditional comments", () => {
77
+ const cleaned = cleanPastedHtml(WORD_HTML);
78
+ expect(cleaned).not.toContain("MsoNormal");
79
+ expect(cleaned).not.toContain("mso-");
80
+ expect(cleaned).not.toContain("<o:p>");
81
+ expect(cleaned).not.toContain("[if gte mso");
82
+ expect(cleaned).toContain("Hello from Word");
83
+ });
84
+ });
@@ -0,0 +1,124 @@
1
+ /**
2
+ * Paste sanitizer for HTML clipboard payloads from Google Docs and
3
+ * Microsoft Word/Outlook.
4
+ *
5
+ * Both sources wrap content in junk that either breaks ProseMirror parsing
6
+ * or smuggles presentation into the document:
7
+ * - Google Docs wraps the entire fragment in
8
+ * `<b style="font-weight:normal" id="docs-internal-guid-...">` (which
9
+ * ProseMirror would read as bold) and inlines font/size styles on spans.
10
+ * - Word ships `<o:p>` tags, `Mso*` classes, `mso-*` style declarations,
11
+ * XML islands, and conditional comments.
12
+ *
13
+ * The cleanup keeps semantics (b/strong/i/em/u/lists/headings/links and
14
+ * color/background-color styles the editor actually supports) and drops
15
+ * the rest. Non-office HTML passes through untouched.
16
+ */
17
+
18
+ const OFFICE_SIGNATURES = [
19
+ "docs-internal-guid",
20
+ "urn:schemas-microsoft-com",
21
+ "MsoNormal",
22
+ "mso-",
23
+ "<o:p>",
24
+ "office:office",
25
+ ];
26
+
27
+ /** True when the clipboard HTML comes from Google Docs or Microsoft Office */
28
+ export function isOfficeHtml(html: string): boolean {
29
+ return OFFICE_SIGNATURES.some((sig) => html.includes(sig));
30
+ }
31
+
32
+ /** Style declarations the editor supports (everything else is junk) */
33
+ const KEPT_STYLES = new Set([
34
+ "color",
35
+ "background-color",
36
+ // Docs/Word mark bold/italic/underline/strike with span styles rather
37
+ // than semantic tags; ProseMirror parses these into real marks.
38
+ "font-weight",
39
+ "font-style",
40
+ "text-decoration",
41
+ "text-decoration-line",
42
+ ]);
43
+
44
+ function cleanElement(el: Element): void {
45
+ // Word XML-namespaced elements (<o:p>, <w:sdt>, ...) contribute nothing
46
+ if (el.tagName.includes(":")) {
47
+ el.remove();
48
+ return;
49
+ }
50
+
51
+ if (el.hasAttribute("class")) el.removeAttribute("class");
52
+ if (el.hasAttribute("lang")) el.removeAttribute("lang");
53
+ if (el.hasAttribute("id")) el.removeAttribute("id");
54
+
55
+ if (el.hasAttribute("style")) {
56
+ // Parse the attribute text directly (not CSSStyleDeclaration) so the
57
+ // result is identical across browsers and DOM test environments.
58
+ const declarations = (el.getAttribute("style") ?? "")
59
+ .split(";")
60
+ .map((decl) => decl.trim())
61
+ .filter((decl) => decl.includes(":"));
62
+ const kept: string[] = [];
63
+ for (const decl of declarations) {
64
+ const colon = decl.indexOf(":");
65
+ const prop = decl.slice(0, colon).trim().toLowerCase();
66
+ const value = decl.slice(colon + 1).trim();
67
+ if (!KEPT_STYLES.has(prop)) continue;
68
+ // Office emits default inks explicitly; dropping them keeps content
69
+ // on theme text color instead of hardcoded near-black
70
+ if (prop === "color" && /^(rgb\(0,\s*0,\s*0\)|#000000|#000|windowtext)$/i.test(value)) {
71
+ continue;
72
+ }
73
+ if (
74
+ prop === "background-color" &&
75
+ /^(transparent|#ffffff|#fff|rgb\(255,\s*255,\s*255\))$/i.test(value)
76
+ ) {
77
+ continue;
78
+ }
79
+ // Non-emphasis values are the office default state, not authored marks
80
+ if (prop === "font-weight" && !/^(bold(er)?|[5-9]\d\d)$/i.test(value)) continue;
81
+ if (prop === "font-style" && !/^(italic|oblique)/i.test(value)) continue;
82
+ if (
83
+ (prop === "text-decoration" || prop === "text-decoration-line") &&
84
+ !/(underline|line-through)/i.test(value)
85
+ ) {
86
+ continue;
87
+ }
88
+ kept.push(`${prop}: ${value}`);
89
+ }
90
+ if (kept.length > 0) el.setAttribute("style", kept.join("; "));
91
+ else el.removeAttribute("style");
92
+ }
93
+
94
+ for (const child of Array.from(el.children)) cleanElement(child);
95
+ }
96
+
97
+ /**
98
+ * Sanitize office-suite clipboard HTML. Non-office HTML is returned as-is
99
+ * (regular web copy already parses cleanly).
100
+ */
101
+ export function cleanPastedHtml(html: string): string {
102
+ if (typeof document === "undefined" || !isOfficeHtml(html)) return html;
103
+
104
+ // Strip XML islands and conditional comments before parsing
105
+ const source = html
106
+ .replace(/<xml>[\s\S]*?<\/xml>/gi, "")
107
+ .replace(/<!--\[if[\s\S]*?<!\[endif\]-->/gi, "")
108
+ .replace(/<!--StartFragment-->|<!--EndFragment-->/gi, "");
109
+
110
+ const doc = new DOMParser().parseFromString(source, "text/html");
111
+ doc.querySelectorAll("style, meta, link, script, title").forEach((el) => el.remove());
112
+
113
+ // Google Docs: unwrap the non-bold <b> guid wrapper so content is not bold
114
+ for (const b of Array.from(doc.body.querySelectorAll("b"))) {
115
+ const weight = (b as HTMLElement).style.fontWeight;
116
+ if (weight === "normal" || weight === "400") {
117
+ b.replaceWith(...Array.from(b.childNodes));
118
+ }
119
+ }
120
+
121
+ for (const child of Array.from(doc.body.children)) cleanElement(child);
122
+
123
+ return doc.body.innerHTML;
124
+ }
@@ -0,0 +1,105 @@
1
+ import { describe, expect, it, vi } from "vitest";
2
+ import { act, createRef } from "react";
3
+ import { render } from "@testing-library/react";
4
+ import {
5
+ SuggestionList,
6
+ fallbackSuggestionChrome,
7
+ getSuggestionChrome,
8
+ type SuggestionListRef,
9
+ type SuggestionRow,
10
+ } from "./suggestionPopup";
11
+
12
+ const rows: SuggestionRow[] = [
13
+ { key: "a", title: "Alpha", description: "first" },
14
+ { key: "b", title: "Beta", description: "second" },
15
+ { key: "c", title: "Gamma", description: "third" },
16
+ ];
17
+
18
+ const chrome = { ...fallbackSuggestionChrome, rowPaddingX: 12 };
19
+
20
+ function renderList(onSelect = vi.fn()) {
21
+ const ref = createRef<SuggestionListRef>();
22
+ const utils = render(
23
+ <SuggestionList
24
+ ref={ref}
25
+ rows={rows}
26
+ chrome={chrome}
27
+ emptyLabel="No results"
28
+ onSelect={onSelect}
29
+ />,
30
+ );
31
+ return { ref, onSelect, ...utils };
32
+ }
33
+
34
+ describe("SuggestionList", () => {
35
+ it("renders one option per row with LC-16 menu-row geometry", () => {
36
+ const { container } = renderList();
37
+ const options = container.querySelectorAll('[role="option"]');
38
+ expect(options.length).toBe(3);
39
+ const style = (options[0] as HTMLElement).style;
40
+ // menuRowFrame-derived horizontal padding, flat corners, full width
41
+ expect(style.padding).toBe("8px 12px");
42
+ expect(style.borderRadius).toBe("0px");
43
+ expect(style.width).toBe("100%");
44
+ });
45
+
46
+ it("marks the first row selected and navigates with arrows (wrapping)", () => {
47
+ const { ref, container } = renderList();
48
+ const selected = () =>
49
+ Array.from(container.querySelectorAll('[role="option"]')).findIndex(
50
+ (el) => el.getAttribute("aria-selected") === "true",
51
+ );
52
+ expect(selected()).toBe(0);
53
+ act(() => {
54
+ ref.current!.onKeyDown({ event: new KeyboardEvent("keydown", { key: "ArrowDown" }) });
55
+ });
56
+ expect(selected()).toBe(1);
57
+ act(() => {
58
+ ref.current!.onKeyDown({ event: new KeyboardEvent("keydown", { key: "ArrowUp" }) });
59
+ ref.current!.onKeyDown({ event: new KeyboardEvent("keydown", { key: "ArrowUp" }) });
60
+ });
61
+ expect(selected()).toBe(2);
62
+ });
63
+
64
+ it("selects with Enter and Tab", () => {
65
+ const { ref, onSelect } = renderList();
66
+ act(() => {
67
+ ref.current!.onKeyDown({ event: new KeyboardEvent("keydown", { key: "ArrowDown" }) });
68
+ });
69
+ let handled = false;
70
+ act(() => {
71
+ handled = ref.current!.onKeyDown({
72
+ event: new KeyboardEvent("keydown", { key: "Enter" }),
73
+ });
74
+ });
75
+ expect(handled).toBe(true);
76
+ expect(onSelect).toHaveBeenCalledWith(1);
77
+ });
78
+
79
+ it("selects on click", () => {
80
+ const { container, onSelect } = renderList();
81
+ const options = container.querySelectorAll('[role="option"]');
82
+ (options[2] as HTMLElement).click();
83
+ expect(onSelect).toHaveBeenCalledWith(2);
84
+ });
85
+
86
+ it("shows the empty label when there are no rows", () => {
87
+ const { container } = render(
88
+ <SuggestionList rows={[]} chrome={chrome} emptyLabel="No results" onSelect={vi.fn()} />,
89
+ );
90
+ expect(container.textContent).toContain("No results");
91
+ expect(container.querySelectorAll('[role="option"]').length).toBe(0);
92
+ });
93
+ });
94
+
95
+ describe("getSuggestionChrome", () => {
96
+ it("reads the chrome pushed by the editor host", () => {
97
+ const editor = { storage: { suggestionChrome: { value: chrome } } };
98
+ expect(getSuggestionChrome(editor)).toBe(chrome);
99
+ });
100
+
101
+ it("falls back to the neutral chrome before the host pushes values", () => {
102
+ expect(getSuggestionChrome(null)).toBe(fallbackSuggestionChrome);
103
+ expect(getSuggestionChrome({ storage: {} })).toBe(fallbackSuggestionChrome);
104
+ });
105
+ });