@multiplatform.one/rich-text 6.0.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 (450) hide show
  1. package/LICENSE +201 -0
  2. package/dist/cjs/RichEditor.cjs +132 -0
  3. package/dist/cjs/RichEditor.native.js +120 -0
  4. package/dist/cjs/RichEditor.native.js.map +1 -0
  5. package/dist/cjs/RichEditor.stories.cjs +327 -0
  6. package/dist/cjs/RichEditor.stories.native.js +342 -0
  7. package/dist/cjs/RichEditor.stories.native.js.map +1 -0
  8. package/dist/cjs/RichTextEditor/index.cjs +148 -0
  9. package/dist/cjs/RichTextEditor/index.native.js +160 -0
  10. package/dist/cjs/RichTextEditor/index.native.js.map +1 -0
  11. package/dist/cjs/constants.cjs +135 -0
  12. package/dist/cjs/constants.native.js +138 -0
  13. package/dist/cjs/constants.native.js.map +1 -0
  14. package/dist/cjs/context.cjs +33 -0
  15. package/dist/cjs/context.native.js +36 -0
  16. package/dist/cjs/context.native.js.map +1 -0
  17. package/dist/cjs/editor/BlockDragHandle.cjs +137 -0
  18. package/dist/cjs/editor/BlockDragHandle.native.js +142 -0
  19. package/dist/cjs/editor/BlockDragHandle.native.js.map +1 -0
  20. package/dist/cjs/editor/MarkdownPaste.cjs +65 -0
  21. package/dist/cjs/editor/MarkdownPaste.native.js +68 -0
  22. package/dist/cjs/editor/MarkdownPaste.native.js.map +1 -0
  23. package/dist/cjs/editor/SlashCommands.cjs +369 -0
  24. package/dist/cjs/editor/SlashCommands.native.js +424 -0
  25. package/dist/cjs/editor/SlashCommands.native.js.map +1 -0
  26. package/dist/cjs/editor/TentapEditor.native.js +242 -0
  27. package/dist/cjs/editor/TentapEditor.native.js.map +1 -0
  28. package/dist/cjs/editor/TiptapEditor.cjs +578 -0
  29. package/dist/cjs/editor/TiptapEditor.native.js +661 -0
  30. package/dist/cjs/editor/TiptapEditor.native.js.map +1 -0
  31. package/dist/cjs/editor/editorStyles.cjs +272 -0
  32. package/dist/cjs/editor/editorStyles.native.js +276 -0
  33. package/dist/cjs/editor/editorStyles.native.js.map +1 -0
  34. package/dist/cjs/editor/index.cjs +33 -0
  35. package/dist/cjs/editor/index.native.js +36 -0
  36. package/dist/cjs/editor/index.native.js.map +1 -0
  37. package/dist/cjs/editor/types.cjs +54 -0
  38. package/dist/cjs/editor/types.native.js +57 -0
  39. package/dist/cjs/editor/types.native.js.map +1 -0
  40. package/dist/cjs/editor/useEditorState.cjs +129 -0
  41. package/dist/cjs/editor/useEditorState.native.js +135 -0
  42. package/dist/cjs/editor/useEditorState.native.js.map +1 -0
  43. package/dist/cjs/index.cjs +30 -0
  44. package/dist/cjs/index.native.js +33 -0
  45. package/dist/cjs/index.native.js.map +1 -0
  46. package/dist/cjs/styled.cjs +173 -0
  47. package/dist/cjs/styled.native.js +185 -0
  48. package/dist/cjs/styled.native.js.map +1 -0
  49. package/dist/cjs/toolbar/BubbleToolbar.cjs +130 -0
  50. package/dist/cjs/toolbar/BubbleToolbar.native.js +159 -0
  51. package/dist/cjs/toolbar/BubbleToolbar.native.js.map +1 -0
  52. package/dist/cjs/toolbar/CodeBlockBubble.cjs +211 -0
  53. package/dist/cjs/toolbar/CodeBlockBubble.native.js +228 -0
  54. package/dist/cjs/toolbar/CodeBlockBubble.native.js.map +1 -0
  55. package/dist/cjs/toolbar/ColorPicker.cjs +217 -0
  56. package/dist/cjs/toolbar/ColorPicker.native.js +234 -0
  57. package/dist/cjs/toolbar/ColorPicker.native.js.map +1 -0
  58. package/dist/cjs/toolbar/FixedToolbar.cjs +221 -0
  59. package/dist/cjs/toolbar/FixedToolbar.native.js +322 -0
  60. package/dist/cjs/toolbar/FixedToolbar.native.js.map +1 -0
  61. package/dist/cjs/toolbar/HeadingPicker.cjs +158 -0
  62. package/dist/cjs/toolbar/HeadingPicker.native.js +167 -0
  63. package/dist/cjs/toolbar/HeadingPicker.native.js.map +1 -0
  64. package/dist/cjs/toolbar/ImageBubble.cjs +156 -0
  65. package/dist/cjs/toolbar/ImageBubble.native.js +165 -0
  66. package/dist/cjs/toolbar/ImageBubble.native.js.map +1 -0
  67. package/dist/cjs/toolbar/ImageDialog.cjs +115 -0
  68. package/dist/cjs/toolbar/ImageDialog.native.js +122 -0
  69. package/dist/cjs/toolbar/ImageDialog.native.js.map +1 -0
  70. package/dist/cjs/toolbar/LinkBubble.cjs +195 -0
  71. package/dist/cjs/toolbar/LinkBubble.native.js +204 -0
  72. package/dist/cjs/toolbar/LinkBubble.native.js.map +1 -0
  73. package/dist/cjs/toolbar/LinkDialog.cjs +138 -0
  74. package/dist/cjs/toolbar/LinkDialog.native.js +146 -0
  75. package/dist/cjs/toolbar/LinkDialog.native.js.map +1 -0
  76. package/dist/cjs/toolbar/ListPicker.cjs +117 -0
  77. package/dist/cjs/toolbar/ListPicker.native.js +124 -0
  78. package/dist/cjs/toolbar/ListPicker.native.js.map +1 -0
  79. package/dist/cjs/toolbar/MoreDropdown.cjs +201 -0
  80. package/dist/cjs/toolbar/MoreDropdown.native.js +224 -0
  81. package/dist/cjs/toolbar/MoreDropdown.native.js.map +1 -0
  82. package/dist/cjs/toolbar/ResizeHandle.cjs +105 -0
  83. package/dist/cjs/toolbar/ResizeHandle.native.js +109 -0
  84. package/dist/cjs/toolbar/ResizeHandle.native.js.map +1 -0
  85. package/dist/cjs/toolbar/StatusBar.cjs +91 -0
  86. package/dist/cjs/toolbar/StatusBar.native.js +100 -0
  87. package/dist/cjs/toolbar/StatusBar.native.js.map +1 -0
  88. package/dist/cjs/toolbar/TableBubble.cjs +232 -0
  89. package/dist/cjs/toolbar/TableBubble.native.js +273 -0
  90. package/dist/cjs/toolbar/TableBubble.native.js.map +1 -0
  91. package/dist/cjs/toolbar/ToolbarButton.cjs +105 -0
  92. package/dist/cjs/toolbar/ToolbarButton.native.js +97 -0
  93. package/dist/cjs/toolbar/ToolbarButton.native.js.map +1 -0
  94. package/dist/cjs/toolbar/ToolbarGroup.cjs +41 -0
  95. package/dist/cjs/toolbar/ToolbarGroup.native.js +45 -0
  96. package/dist/cjs/toolbar/ToolbarGroup.native.js.map +1 -0
  97. package/dist/cjs/toolbar/icons.cjs +601 -0
  98. package/dist/cjs/toolbar/icons.native.js +165 -0
  99. package/dist/cjs/toolbar/icons.native.js.map +1 -0
  100. package/dist/cjs/toolbar/shortcuts.cjs +62 -0
  101. package/dist/cjs/toolbar/shortcuts.native.js +66 -0
  102. package/dist/cjs/toolbar/shortcuts.native.js.map +1 -0
  103. package/dist/cjs/toolbar/useHorizontalScroll.cjs +250 -0
  104. package/dist/cjs/toolbar/useHorizontalScroll.native.js +260 -0
  105. package/dist/cjs/toolbar/useHorizontalScroll.native.js.map +1 -0
  106. package/dist/cjs/types.cjs +56 -0
  107. package/dist/cjs/types.native.js +59 -0
  108. package/dist/cjs/types.native.js.map +1 -0
  109. package/dist/esm/RichEditor.mjs +107 -0
  110. package/dist/esm/RichEditor.mjs.map +1 -0
  111. package/dist/esm/RichEditor.native.js +92 -0
  112. package/dist/esm/RichEditor.native.js.map +1 -0
  113. package/dist/esm/RichEditor.stories.mjs +291 -0
  114. package/dist/esm/RichEditor.stories.mjs.map +1 -0
  115. package/dist/esm/RichEditor.stories.native.js +303 -0
  116. package/dist/esm/RichEditor.stories.native.js.map +1 -0
  117. package/dist/esm/RichTextEditor/index.mjs +123 -0
  118. package/dist/esm/RichTextEditor/index.mjs.map +1 -0
  119. package/dist/esm/RichTextEditor/index.native.js +132 -0
  120. package/dist/esm/RichTextEditor/index.native.js.map +1 -0
  121. package/dist/esm/constants.mjs +108 -0
  122. package/dist/esm/constants.mjs.map +1 -0
  123. package/dist/esm/constants.native.js +108 -0
  124. package/dist/esm/constants.native.js.map +1 -0
  125. package/dist/esm/context.mjs +8 -0
  126. package/dist/esm/context.mjs.map +1 -0
  127. package/dist/esm/context.native.js +8 -0
  128. package/dist/esm/context.native.js.map +1 -0
  129. package/dist/esm/editor/BlockDragHandle.mjs +112 -0
  130. package/dist/esm/editor/BlockDragHandle.mjs.map +1 -0
  131. package/dist/esm/editor/BlockDragHandle.native.js +114 -0
  132. package/dist/esm/editor/BlockDragHandle.native.js.map +1 -0
  133. package/dist/esm/editor/MarkdownPaste.mjs +40 -0
  134. package/dist/esm/editor/MarkdownPaste.mjs.map +1 -0
  135. package/dist/esm/editor/MarkdownPaste.native.js +40 -0
  136. package/dist/esm/editor/MarkdownPaste.native.js.map +1 -0
  137. package/dist/esm/editor/SlashCommands.mjs +333 -0
  138. package/dist/esm/editor/SlashCommands.mjs.map +1 -0
  139. package/dist/esm/editor/SlashCommands.native.js +385 -0
  140. package/dist/esm/editor/SlashCommands.native.js.map +1 -0
  141. package/dist/esm/editor/TentapEditor.native.js +214 -0
  142. package/dist/esm/editor/TentapEditor.native.js.map +1 -0
  143. package/dist/esm/editor/TiptapEditor.mjs +542 -0
  144. package/dist/esm/editor/TiptapEditor.mjs.map +1 -0
  145. package/dist/esm/editor/TiptapEditor.native.js +622 -0
  146. package/dist/esm/editor/TiptapEditor.native.js.map +1 -0
  147. package/dist/esm/editor/editorStyles.mjs +247 -0
  148. package/dist/esm/editor/editorStyles.mjs.map +1 -0
  149. package/dist/esm/editor/editorStyles.native.js +248 -0
  150. package/dist/esm/editor/editorStyles.native.js.map +1 -0
  151. package/dist/esm/editor/index.mjs +5 -0
  152. package/dist/esm/editor/index.mjs.map +1 -0
  153. package/dist/esm/editor/index.native.js +5 -0
  154. package/dist/esm/editor/index.native.js.map +1 -0
  155. package/dist/esm/editor/types.mjs +29 -0
  156. package/dist/esm/editor/types.mjs.map +1 -0
  157. package/dist/esm/editor/types.native.js +29 -0
  158. package/dist/esm/editor/types.native.js.map +1 -0
  159. package/dist/esm/editor/useEditorState.mjs +102 -0
  160. package/dist/esm/editor/useEditorState.mjs.map +1 -0
  161. package/dist/esm/editor/useEditorState.native.js +105 -0
  162. package/dist/esm/editor/useEditorState.native.js.map +1 -0
  163. package/dist/esm/index.mjs +4 -0
  164. package/dist/esm/index.mjs.map +1 -0
  165. package/dist/esm/index.native.js +4 -0
  166. package/dist/esm/index.native.js.map +1 -0
  167. package/dist/esm/styled.mjs +144 -0
  168. package/dist/esm/styled.mjs.map +1 -0
  169. package/dist/esm/styled.native.js +153 -0
  170. package/dist/esm/styled.native.js.map +1 -0
  171. package/dist/esm/toolbar/BubbleToolbar.mjs +105 -0
  172. package/dist/esm/toolbar/BubbleToolbar.mjs.map +1 -0
  173. package/dist/esm/toolbar/BubbleToolbar.native.js +131 -0
  174. package/dist/esm/toolbar/BubbleToolbar.native.js.map +1 -0
  175. package/dist/esm/toolbar/CodeBlockBubble.mjs +186 -0
  176. package/dist/esm/toolbar/CodeBlockBubble.mjs.map +1 -0
  177. package/dist/esm/toolbar/CodeBlockBubble.native.js +200 -0
  178. package/dist/esm/toolbar/CodeBlockBubble.native.js.map +1 -0
  179. package/dist/esm/toolbar/ColorPicker.mjs +191 -0
  180. package/dist/esm/toolbar/ColorPicker.mjs.map +1 -0
  181. package/dist/esm/toolbar/ColorPicker.native.js +205 -0
  182. package/dist/esm/toolbar/ColorPicker.native.js.map +1 -0
  183. package/dist/esm/toolbar/FixedToolbar.mjs +196 -0
  184. package/dist/esm/toolbar/FixedToolbar.mjs.map +1 -0
  185. package/dist/esm/toolbar/FixedToolbar.native.js +294 -0
  186. package/dist/esm/toolbar/FixedToolbar.native.js.map +1 -0
  187. package/dist/esm/toolbar/HeadingPicker.mjs +133 -0
  188. package/dist/esm/toolbar/HeadingPicker.mjs.map +1 -0
  189. package/dist/esm/toolbar/HeadingPicker.native.js +139 -0
  190. package/dist/esm/toolbar/HeadingPicker.native.js.map +1 -0
  191. package/dist/esm/toolbar/ImageBubble.mjs +131 -0
  192. package/dist/esm/toolbar/ImageBubble.mjs.map +1 -0
  193. package/dist/esm/toolbar/ImageBubble.native.js +137 -0
  194. package/dist/esm/toolbar/ImageBubble.native.js.map +1 -0
  195. package/dist/esm/toolbar/ImageDialog.mjs +90 -0
  196. package/dist/esm/toolbar/ImageDialog.mjs.map +1 -0
  197. package/dist/esm/toolbar/ImageDialog.native.js +94 -0
  198. package/dist/esm/toolbar/ImageDialog.native.js.map +1 -0
  199. package/dist/esm/toolbar/LinkBubble.mjs +170 -0
  200. package/dist/esm/toolbar/LinkBubble.mjs.map +1 -0
  201. package/dist/esm/toolbar/LinkBubble.native.js +176 -0
  202. package/dist/esm/toolbar/LinkBubble.native.js.map +1 -0
  203. package/dist/esm/toolbar/LinkDialog.mjs +112 -0
  204. package/dist/esm/toolbar/LinkDialog.mjs.map +1 -0
  205. package/dist/esm/toolbar/LinkDialog.native.js +117 -0
  206. package/dist/esm/toolbar/LinkDialog.native.js.map +1 -0
  207. package/dist/esm/toolbar/ListPicker.mjs +92 -0
  208. package/dist/esm/toolbar/ListPicker.mjs.map +1 -0
  209. package/dist/esm/toolbar/ListPicker.native.js +96 -0
  210. package/dist/esm/toolbar/ListPicker.native.js.map +1 -0
  211. package/dist/esm/toolbar/MoreDropdown.mjs +176 -0
  212. package/dist/esm/toolbar/MoreDropdown.mjs.map +1 -0
  213. package/dist/esm/toolbar/MoreDropdown.native.js +196 -0
  214. package/dist/esm/toolbar/MoreDropdown.native.js.map +1 -0
  215. package/dist/esm/toolbar/ResizeHandle.mjs +80 -0
  216. package/dist/esm/toolbar/ResizeHandle.mjs.map +1 -0
  217. package/dist/esm/toolbar/ResizeHandle.native.js +81 -0
  218. package/dist/esm/toolbar/ResizeHandle.native.js.map +1 -0
  219. package/dist/esm/toolbar/StatusBar.mjs +66 -0
  220. package/dist/esm/toolbar/StatusBar.mjs.map +1 -0
  221. package/dist/esm/toolbar/StatusBar.native.js +72 -0
  222. package/dist/esm/toolbar/StatusBar.native.js.map +1 -0
  223. package/dist/esm/toolbar/TableBubble.mjs +207 -0
  224. package/dist/esm/toolbar/TableBubble.mjs.map +1 -0
  225. package/dist/esm/toolbar/TableBubble.native.js +245 -0
  226. package/dist/esm/toolbar/TableBubble.native.js.map +1 -0
  227. package/dist/esm/toolbar/ToolbarButton.mjs +79 -0
  228. package/dist/esm/toolbar/ToolbarButton.mjs.map +1 -0
  229. package/dist/esm/toolbar/ToolbarButton.native.js +68 -0
  230. package/dist/esm/toolbar/ToolbarButton.native.js.map +1 -0
  231. package/dist/esm/toolbar/ToolbarGroup.mjs +16 -0
  232. package/dist/esm/toolbar/ToolbarGroup.mjs.map +1 -0
  233. package/dist/esm/toolbar/ToolbarGroup.native.js +17 -0
  234. package/dist/esm/toolbar/ToolbarGroup.native.js.map +1 -0
  235. package/dist/esm/toolbar/icons.mjs +554 -0
  236. package/dist/esm/toolbar/icons.mjs.map +1 -0
  237. package/dist/esm/toolbar/icons.native.js +115 -0
  238. package/dist/esm/toolbar/icons.native.js.map +1 -0
  239. package/dist/esm/toolbar/shortcuts.mjs +36 -0
  240. package/dist/esm/toolbar/shortcuts.mjs.map +1 -0
  241. package/dist/esm/toolbar/shortcuts.native.js +37 -0
  242. package/dist/esm/toolbar/shortcuts.native.js.map +1 -0
  243. package/dist/esm/toolbar/useHorizontalScroll.mjs +223 -0
  244. package/dist/esm/toolbar/useHorizontalScroll.mjs.map +1 -0
  245. package/dist/esm/toolbar/useHorizontalScroll.native.js +230 -0
  246. package/dist/esm/toolbar/useHorizontalScroll.native.js.map +1 -0
  247. package/dist/esm/types.mjs +31 -0
  248. package/dist/esm/types.mjs.map +1 -0
  249. package/dist/esm/types.native.js +31 -0
  250. package/dist/esm/types.native.js.map +1 -0
  251. package/dist/jsx/RichEditor.mjs +107 -0
  252. package/dist/jsx/RichEditor.mjs.map +1 -0
  253. package/dist/jsx/RichEditor.native.js +120 -0
  254. package/dist/jsx/RichEditor.native.js.map +1 -0
  255. package/dist/jsx/RichEditor.stories.mjs +291 -0
  256. package/dist/jsx/RichEditor.stories.mjs.map +1 -0
  257. package/dist/jsx/RichEditor.stories.native.js +342 -0
  258. package/dist/jsx/RichEditor.stories.native.js.map +1 -0
  259. package/dist/jsx/RichTextEditor/index.mjs +123 -0
  260. package/dist/jsx/RichTextEditor/index.mjs.map +1 -0
  261. package/dist/jsx/RichTextEditor/index.native.js +160 -0
  262. package/dist/jsx/RichTextEditor/index.native.js.map +1 -0
  263. package/dist/jsx/constants.mjs +108 -0
  264. package/dist/jsx/constants.mjs.map +1 -0
  265. package/dist/jsx/constants.native.js +138 -0
  266. package/dist/jsx/constants.native.js.map +1 -0
  267. package/dist/jsx/context.mjs +8 -0
  268. package/dist/jsx/context.mjs.map +1 -0
  269. package/dist/jsx/context.native.js +36 -0
  270. package/dist/jsx/context.native.js.map +1 -0
  271. package/dist/jsx/editor/BlockDragHandle.mjs +112 -0
  272. package/dist/jsx/editor/BlockDragHandle.mjs.map +1 -0
  273. package/dist/jsx/editor/BlockDragHandle.native.js +142 -0
  274. package/dist/jsx/editor/BlockDragHandle.native.js.map +1 -0
  275. package/dist/jsx/editor/MarkdownPaste.mjs +40 -0
  276. package/dist/jsx/editor/MarkdownPaste.mjs.map +1 -0
  277. package/dist/jsx/editor/MarkdownPaste.native.js +68 -0
  278. package/dist/jsx/editor/MarkdownPaste.native.js.map +1 -0
  279. package/dist/jsx/editor/SlashCommands.mjs +333 -0
  280. package/dist/jsx/editor/SlashCommands.mjs.map +1 -0
  281. package/dist/jsx/editor/SlashCommands.native.js +424 -0
  282. package/dist/jsx/editor/SlashCommands.native.js.map +1 -0
  283. package/dist/jsx/editor/TentapEditor.native.js +242 -0
  284. package/dist/jsx/editor/TentapEditor.native.js.map +1 -0
  285. package/dist/jsx/editor/TiptapEditor.mjs +542 -0
  286. package/dist/jsx/editor/TiptapEditor.mjs.map +1 -0
  287. package/dist/jsx/editor/TiptapEditor.native.js +661 -0
  288. package/dist/jsx/editor/TiptapEditor.native.js.map +1 -0
  289. package/dist/jsx/editor/editorStyles.mjs +247 -0
  290. package/dist/jsx/editor/editorStyles.mjs.map +1 -0
  291. package/dist/jsx/editor/editorStyles.native.js +276 -0
  292. package/dist/jsx/editor/editorStyles.native.js.map +1 -0
  293. package/dist/jsx/editor/index.mjs +5 -0
  294. package/dist/jsx/editor/index.mjs.map +1 -0
  295. package/dist/jsx/editor/index.native.js +36 -0
  296. package/dist/jsx/editor/index.native.js.map +1 -0
  297. package/dist/jsx/editor/types.mjs +29 -0
  298. package/dist/jsx/editor/types.mjs.map +1 -0
  299. package/dist/jsx/editor/types.native.js +57 -0
  300. package/dist/jsx/editor/types.native.js.map +1 -0
  301. package/dist/jsx/editor/useEditorState.mjs +102 -0
  302. package/dist/jsx/editor/useEditorState.mjs.map +1 -0
  303. package/dist/jsx/editor/useEditorState.native.js +135 -0
  304. package/dist/jsx/editor/useEditorState.native.js.map +1 -0
  305. package/dist/jsx/index.js +4 -0
  306. package/dist/jsx/index.js.map +1 -0
  307. package/dist/jsx/index.mjs +4 -0
  308. package/dist/jsx/index.mjs.map +1 -0
  309. package/dist/jsx/index.native.js +33 -0
  310. package/dist/jsx/index.native.js.map +1 -0
  311. package/dist/jsx/styled.mjs +144 -0
  312. package/dist/jsx/styled.mjs.map +1 -0
  313. package/dist/jsx/styled.native.js +185 -0
  314. package/dist/jsx/styled.native.js.map +1 -0
  315. package/dist/jsx/toolbar/BubbleToolbar.mjs +105 -0
  316. package/dist/jsx/toolbar/BubbleToolbar.mjs.map +1 -0
  317. package/dist/jsx/toolbar/BubbleToolbar.native.js +159 -0
  318. package/dist/jsx/toolbar/BubbleToolbar.native.js.map +1 -0
  319. package/dist/jsx/toolbar/CodeBlockBubble.mjs +186 -0
  320. package/dist/jsx/toolbar/CodeBlockBubble.mjs.map +1 -0
  321. package/dist/jsx/toolbar/CodeBlockBubble.native.js +228 -0
  322. package/dist/jsx/toolbar/CodeBlockBubble.native.js.map +1 -0
  323. package/dist/jsx/toolbar/ColorPicker.mjs +191 -0
  324. package/dist/jsx/toolbar/ColorPicker.mjs.map +1 -0
  325. package/dist/jsx/toolbar/ColorPicker.native.js +234 -0
  326. package/dist/jsx/toolbar/ColorPicker.native.js.map +1 -0
  327. package/dist/jsx/toolbar/FixedToolbar.mjs +196 -0
  328. package/dist/jsx/toolbar/FixedToolbar.mjs.map +1 -0
  329. package/dist/jsx/toolbar/FixedToolbar.native.js +322 -0
  330. package/dist/jsx/toolbar/FixedToolbar.native.js.map +1 -0
  331. package/dist/jsx/toolbar/HeadingPicker.mjs +133 -0
  332. package/dist/jsx/toolbar/HeadingPicker.mjs.map +1 -0
  333. package/dist/jsx/toolbar/HeadingPicker.native.js +167 -0
  334. package/dist/jsx/toolbar/HeadingPicker.native.js.map +1 -0
  335. package/dist/jsx/toolbar/ImageBubble.mjs +131 -0
  336. package/dist/jsx/toolbar/ImageBubble.mjs.map +1 -0
  337. package/dist/jsx/toolbar/ImageBubble.native.js +165 -0
  338. package/dist/jsx/toolbar/ImageBubble.native.js.map +1 -0
  339. package/dist/jsx/toolbar/ImageDialog.mjs +90 -0
  340. package/dist/jsx/toolbar/ImageDialog.mjs.map +1 -0
  341. package/dist/jsx/toolbar/ImageDialog.native.js +122 -0
  342. package/dist/jsx/toolbar/ImageDialog.native.js.map +1 -0
  343. package/dist/jsx/toolbar/LinkBubble.mjs +170 -0
  344. package/dist/jsx/toolbar/LinkBubble.mjs.map +1 -0
  345. package/dist/jsx/toolbar/LinkBubble.native.js +204 -0
  346. package/dist/jsx/toolbar/LinkBubble.native.js.map +1 -0
  347. package/dist/jsx/toolbar/LinkDialog.mjs +112 -0
  348. package/dist/jsx/toolbar/LinkDialog.mjs.map +1 -0
  349. package/dist/jsx/toolbar/LinkDialog.native.js +146 -0
  350. package/dist/jsx/toolbar/LinkDialog.native.js.map +1 -0
  351. package/dist/jsx/toolbar/ListPicker.mjs +92 -0
  352. package/dist/jsx/toolbar/ListPicker.mjs.map +1 -0
  353. package/dist/jsx/toolbar/ListPicker.native.js +124 -0
  354. package/dist/jsx/toolbar/ListPicker.native.js.map +1 -0
  355. package/dist/jsx/toolbar/MoreDropdown.mjs +176 -0
  356. package/dist/jsx/toolbar/MoreDropdown.mjs.map +1 -0
  357. package/dist/jsx/toolbar/MoreDropdown.native.js +224 -0
  358. package/dist/jsx/toolbar/MoreDropdown.native.js.map +1 -0
  359. package/dist/jsx/toolbar/ResizeHandle.mjs +80 -0
  360. package/dist/jsx/toolbar/ResizeHandle.mjs.map +1 -0
  361. package/dist/jsx/toolbar/ResizeHandle.native.js +109 -0
  362. package/dist/jsx/toolbar/ResizeHandle.native.js.map +1 -0
  363. package/dist/jsx/toolbar/StatusBar.mjs +66 -0
  364. package/dist/jsx/toolbar/StatusBar.mjs.map +1 -0
  365. package/dist/jsx/toolbar/StatusBar.native.js +100 -0
  366. package/dist/jsx/toolbar/StatusBar.native.js.map +1 -0
  367. package/dist/jsx/toolbar/TableBubble.mjs +207 -0
  368. package/dist/jsx/toolbar/TableBubble.mjs.map +1 -0
  369. package/dist/jsx/toolbar/TableBubble.native.js +273 -0
  370. package/dist/jsx/toolbar/TableBubble.native.js.map +1 -0
  371. package/dist/jsx/toolbar/ToolbarButton.mjs +79 -0
  372. package/dist/jsx/toolbar/ToolbarButton.mjs.map +1 -0
  373. package/dist/jsx/toolbar/ToolbarButton.native.js +97 -0
  374. package/dist/jsx/toolbar/ToolbarButton.native.js.map +1 -0
  375. package/dist/jsx/toolbar/ToolbarGroup.mjs +16 -0
  376. package/dist/jsx/toolbar/ToolbarGroup.mjs.map +1 -0
  377. package/dist/jsx/toolbar/ToolbarGroup.native.js +45 -0
  378. package/dist/jsx/toolbar/ToolbarGroup.native.js.map +1 -0
  379. package/dist/jsx/toolbar/icons.mjs +554 -0
  380. package/dist/jsx/toolbar/icons.mjs.map +1 -0
  381. package/dist/jsx/toolbar/icons.native.js +165 -0
  382. package/dist/jsx/toolbar/icons.native.js.map +1 -0
  383. package/dist/jsx/toolbar/shortcuts.mjs +36 -0
  384. package/dist/jsx/toolbar/shortcuts.mjs.map +1 -0
  385. package/dist/jsx/toolbar/shortcuts.native.js +66 -0
  386. package/dist/jsx/toolbar/shortcuts.native.js.map +1 -0
  387. package/dist/jsx/toolbar/useHorizontalScroll.mjs +223 -0
  388. package/dist/jsx/toolbar/useHorizontalScroll.mjs.map +1 -0
  389. package/dist/jsx/toolbar/useHorizontalScroll.native.js +260 -0
  390. package/dist/jsx/toolbar/useHorizontalScroll.native.js.map +1 -0
  391. package/dist/jsx/types.mjs +31 -0
  392. package/dist/jsx/types.mjs.map +1 -0
  393. package/dist/jsx/types.native.js +59 -0
  394. package/dist/jsx/types.native.js.map +1 -0
  395. package/package.json +117 -0
  396. package/src/RichEditor.native.tsx +161 -0
  397. package/src/RichEditor.stories.tsx +324 -0
  398. package/src/RichEditor.tsx +185 -0
  399. package/src/RichTextEditor/index.tsx +245 -0
  400. package/src/RichTextEditor/richTextEditor.spec.tsx +239 -0
  401. package/src/constants.ts +100 -0
  402. package/src/context.spec.ts +9 -0
  403. package/src/context.ts +16 -0
  404. package/src/editor/BlockDragHandle.ts +141 -0
  405. package/src/editor/MarkdownPaste.ts +50 -0
  406. package/src/editor/SlashCommands.tsx +357 -0
  407. package/src/editor/TentapEditor.native.tsx +269 -0
  408. package/src/editor/TiptapEditor.tsx +616 -0
  409. package/src/editor/editorStyles.spec.ts +24 -0
  410. package/src/editor/editorStyles.ts +260 -0
  411. package/src/editor/index.ts +10 -0
  412. package/src/editor/tentapEditor.spec.ts +125 -0
  413. package/src/editor/tiptapEditor.spec.tsx +169 -0
  414. package/src/editor/types.ts +142 -0
  415. package/src/editor/useEditorState.spec.ts +93 -0
  416. package/src/editor/useEditorState.ts +125 -0
  417. package/src/exports.spec.ts +128 -0
  418. package/src/index.ts +13 -0
  419. package/src/integration.spec.tsx +430 -0
  420. package/src/richEditor.spec.tsx +169 -0
  421. package/src/styled.spec.tsx +42 -0
  422. package/src/styled.ts +177 -0
  423. package/src/toolbar/BubbleToolbar.tsx +151 -0
  424. package/src/toolbar/CodeBlockBubble.tsx +141 -0
  425. package/src/toolbar/ColorPicker.tsx +211 -0
  426. package/src/toolbar/FixedToolbar.native.tsx +381 -0
  427. package/src/toolbar/FixedToolbar.tsx +252 -0
  428. package/src/toolbar/HeadingPicker.tsx +169 -0
  429. package/src/toolbar/ImageBubble.tsx +126 -0
  430. package/src/toolbar/ImageDialog.tsx +93 -0
  431. package/src/toolbar/LinkBubble.tsx +166 -0
  432. package/src/toolbar/LinkDialog.tsx +124 -0
  433. package/src/toolbar/ListPicker.tsx +121 -0
  434. package/src/toolbar/MoreDropdown.tsx +185 -0
  435. package/src/toolbar/ResizeHandle.tsx +80 -0
  436. package/src/toolbar/StatusBar.tsx +76 -0
  437. package/src/toolbar/TableBubble.tsx +197 -0
  438. package/src/toolbar/ToolbarButton.native.tsx +105 -0
  439. package/src/toolbar/ToolbarButton.tsx +114 -0
  440. package/src/toolbar/ToolbarGroup.tsx +38 -0
  441. package/src/toolbar/bubbleToolbar.spec.tsx +93 -0
  442. package/src/toolbar/fixedToolbar.spec.tsx +127 -0
  443. package/src/toolbar/icons.native.tsx +112 -0
  444. package/src/toolbar/icons.tsx +417 -0
  445. package/src/toolbar/shortcuts.ts +42 -0
  446. package/src/toolbar/toolbarPrimitives.spec.tsx +118 -0
  447. package/src/toolbar/toolbarSubComponents.spec.tsx +115 -0
  448. package/src/toolbar/useHorizontalScroll.tsx +270 -0
  449. package/src/types.spec.ts +102 -0
  450. package/src/types.ts +217 -0
@@ -0,0 +1,324 @@
1
+ /**
2
+ * Storybook stories for RichTextEditor
3
+ *
4
+ * Stories: Main, WithInitialContent, WithoutToolbar, BubbleToolbarOnly,
5
+ * MinimalToolbar, ReadOnly, WithError, WithMaxHeight, Interactive,
6
+ * FormIntegrated, Skeleton
7
+ */
8
+ import type { Meta, StoryObj } from "@storybook/react-native-web-vite";
9
+ import { useForm } from "@tanstack/react-form";
10
+ import { useRef, useState } from "react";
11
+ import { Button, Paragraph, Text, View, XStack, YStack } from "tamagui";
12
+ import { RichTextEditor } from "./RichTextEditor";
13
+ import type { RichEditorRef } from "./types";
14
+ import { RichEditor } from "./RichEditor";
15
+
16
+ const meta: Meta<typeof RichTextEditor> = {
17
+ title: "Forms/RichTextEditor",
18
+ component: RichTextEditor,
19
+ parameters: {
20
+ layout: "padded",
21
+ },
22
+ argTypes: {
23
+ label: { control: "text" },
24
+ placeholder: { control: "text" },
25
+ helperText: { control: "text" },
26
+ error: { control: "text" },
27
+ required: { control: "boolean" },
28
+ disabled: { control: "boolean" },
29
+ readOnly: { control: "boolean" },
30
+ showToolbar: { control: "boolean" },
31
+ showBubbleToolbar: { control: "boolean" },
32
+ compact: { control: "boolean" },
33
+ skeleton: { control: "boolean" },
34
+ size: { control: "select", options: ["$2", "$3", "$4"] },
35
+ minHeight: { control: "number" },
36
+ maxHeight: { control: "number" },
37
+ sections: { control: false },
38
+ form: { control: false },
39
+ validators: { control: false },
40
+ },
41
+ decorators: [
42
+ (Story) => (
43
+ <View padding="$4" maxWidth={800}>
44
+ <Story />
45
+ </View>
46
+ ),
47
+ ],
48
+ };
49
+
50
+ export default meta;
51
+ type Story = StoryObj<typeof RichTextEditor>;
52
+
53
+ // ---------------------------------------------------------------------------
54
+ // Main (with controls)
55
+ // ---------------------------------------------------------------------------
56
+
57
+ export const Main: Story = {
58
+ args: {
59
+ label: "Content",
60
+ placeholder: "Start typing your content...",
61
+ helperText: "Rich text editor with full formatting support",
62
+ minHeight: 200,
63
+ showToolbar: true,
64
+ showBubbleToolbar: false,
65
+ compact: false,
66
+ skeleton: false,
67
+ },
68
+ };
69
+
70
+ // ---------------------------------------------------------------------------
71
+ // WithInitialContent
72
+ // ---------------------------------------------------------------------------
73
+
74
+ export const WithInitialContent: Story = {
75
+ args: {
76
+ label: "Article Body",
77
+ defaultValue: `
78
+ <h1>Welcome to the Rich Editor</h1>
79
+ <p>This is a <strong>rich text editor</strong> built with <em>Tiptap</em>.</p>
80
+ <h2>Features</h2>
81
+ <ul>
82
+ <li>Bold, italic, underline, strikethrough</li>
83
+ <li>Headings (H1-H6)</li>
84
+ <li>Bullet and numbered lists</li>
85
+ <li>Blockquotes and code blocks</li>
86
+ <li>Links and images</li>
87
+ <li>Text color and highlighting</li>
88
+ </ul>
89
+ <blockquote>
90
+ <p>This is a blockquote with some important information.</p>
91
+ </blockquote>
92
+ <p>Here is some <code>inline code</code> for you.</p>
93
+ `,
94
+ minHeight: 300,
95
+ },
96
+ };
97
+
98
+ // ---------------------------------------------------------------------------
99
+ // WithoutToolbar
100
+ // ---------------------------------------------------------------------------
101
+
102
+ export const WithoutToolbar: Story = {
103
+ args: {
104
+ label: "No Toolbar",
105
+ showToolbar: false,
106
+ defaultValue: "<p>Editor without toolbar - keyboard shortcuts still work</p>",
107
+ minHeight: 150,
108
+ },
109
+ };
110
+
111
+ // ---------------------------------------------------------------------------
112
+ // BubbleToolbarOnly
113
+ // ---------------------------------------------------------------------------
114
+
115
+ export const BubbleToolbarOnly: Story = {
116
+ args: {
117
+ label: "Bubble Toolbar Only",
118
+ showToolbar: false,
119
+ showBubbleToolbar: true,
120
+ defaultValue:
121
+ "<p>Select some text to see the bubble toolbar appear with inline formatting options.</p>",
122
+ minHeight: 150,
123
+ helperText: "Select text to see the bubble toolbar",
124
+ },
125
+ };
126
+
127
+ // ---------------------------------------------------------------------------
128
+ // MinimalToolbar
129
+ // ---------------------------------------------------------------------------
130
+
131
+ export const MinimalToolbar: Story = {
132
+ args: {
133
+ label: "Minimal Toolbar",
134
+ sections: ["formatting", "list"],
135
+ defaultValue: "<p>Minimal toolbar with only formatting and list options</p>",
136
+ minHeight: 150,
137
+ helperText: "Only text formatting and list controls are shown",
138
+ },
139
+ };
140
+
141
+ // ---------------------------------------------------------------------------
142
+ // ReadOnly
143
+ // ---------------------------------------------------------------------------
144
+
145
+ export const ReadOnly: Story = {
146
+ args: {
147
+ label: "Read-only Content",
148
+ readOnly: true,
149
+ defaultValue: `
150
+ <h2>Read-only Content</h2>
151
+ <p>This content cannot be edited. The toolbar is hidden.</p>
152
+ <ul>
153
+ <li>View-only mode for displaying formatted content</li>
154
+ <li>No toolbar or editing capabilities</li>
155
+ </ul>
156
+ `,
157
+ minHeight: 150,
158
+ },
159
+ };
160
+
161
+ // ---------------------------------------------------------------------------
162
+ // WithError
163
+ // ---------------------------------------------------------------------------
164
+
165
+ export const WithError: Story = {
166
+ args: {
167
+ label: "Content",
168
+ error: "This field is required",
169
+ placeholder: "This field has an error...",
170
+ required: true,
171
+ minHeight: 150,
172
+ },
173
+ };
174
+
175
+ // ---------------------------------------------------------------------------
176
+ // WithMaxHeight
177
+ // ---------------------------------------------------------------------------
178
+
179
+ export const WithMaxHeight: Story = {
180
+ args: {
181
+ label: "Scrollable Content",
182
+ defaultValue: `
183
+ <h1>Scrollable Content</h1>
184
+ <p>This editor has a maximum height and will scroll when content exceeds it.</p>
185
+ <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
186
+ <p>Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p>
187
+ <p>Ut enim ad minim veniam, quis nostrud exercitation ullamco.</p>
188
+ <p>Duis aute irure dolor in reprehenderit in voluptate velit.</p>
189
+ <p>Excepteur sint occaecat cupidatat non proident.</p>
190
+ <p>Sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
191
+ <p>More content to demonstrate scrolling...</p>
192
+ <p>And even more content...</p>
193
+ <p>Keep scrolling...</p>
194
+ `,
195
+ minHeight: 150,
196
+ maxHeight: 250,
197
+ },
198
+ };
199
+
200
+ // ---------------------------------------------------------------------------
201
+ // Interactive
202
+ // ---------------------------------------------------------------------------
203
+
204
+ export const Interactive: Story = {
205
+ render: () => {
206
+ const editorRef = useRef<RichEditorRef>(null);
207
+ const [html, setHtml] = useState("");
208
+ const [charCount, setCharCount] = useState(0);
209
+
210
+ const handleChange = (newHtml: string) => {
211
+ setHtml(newHtml);
212
+ const text = newHtml.replace(/<[^>]*>/g, "");
213
+ setCharCount(text.length);
214
+ };
215
+
216
+ return (
217
+ <YStack gap="$4">
218
+ <RichEditor
219
+ ref={editorRef}
220
+ placeholder="Type here to see live updates..."
221
+ onChange={handleChange}
222
+ minHeight={200}
223
+ showBubbleToolbar
224
+ />
225
+ <XStack gap="$4" alignItems="center">
226
+ <Text color="$color10" fontSize="$2">
227
+ Characters: {charCount}
228
+ </Text>
229
+ <Button
230
+ size="$3"
231
+ onPress={() => {
232
+ const content = editorRef.current?.getHTML();
233
+ console.log("HTML Content:", content);
234
+ }}
235
+ >
236
+ Log HTML
237
+ </Button>
238
+ <Button
239
+ size="$3"
240
+ onPress={() => {
241
+ editorRef.current?.setHTML("<p>Content set programmatically!</p>");
242
+ }}
243
+ >
244
+ Set Content
245
+ </Button>
246
+ <Button size="$3" onPress={() => editorRef.current?.focus()}>
247
+ Focus
248
+ </Button>
249
+ </XStack>
250
+ {html && (
251
+ <YStack
252
+ backgroundColor="$color3"
253
+ padding="$3"
254
+ borderRadius="$3"
255
+ maxHeight={200}
256
+ overflow="scroll"
257
+ >
258
+ <Paragraph size="$1" fontFamily="$mono" whiteSpace="pre-wrap">
259
+ {html}
260
+ </Paragraph>
261
+ </YStack>
262
+ )}
263
+ </YStack>
264
+ );
265
+ },
266
+ };
267
+
268
+ // ---------------------------------------------------------------------------
269
+ // FormIntegrated
270
+ // ---------------------------------------------------------------------------
271
+
272
+ export const FormIntegrated: Story = {
273
+ render: () => {
274
+ const FormExample = () => {
275
+ const form = useForm({
276
+ defaultValues: {
277
+ title: "",
278
+ content: "",
279
+ },
280
+ onSubmit: async ({ value }) => {
281
+ console.log("Form submitted:", value);
282
+ alert(JSON.stringify(value, null, 2));
283
+ },
284
+ });
285
+
286
+ return (
287
+ <YStack gap="$4">
288
+ <RichTextEditor
289
+ form={form as any}
290
+ name="content"
291
+ label="Article Content"
292
+ helperText="Write your article content here"
293
+ required
294
+ placeholder="Start writing..."
295
+ minHeight={250}
296
+ showBubbleToolbar
297
+ />
298
+ <XStack gap="$2">
299
+ <Button size="$3" onPress={() => form.handleSubmit()}>
300
+ Submit
301
+ </Button>
302
+ <Button size="$3" theme="gray" onPress={() => form.reset()}>
303
+ Reset
304
+ </Button>
305
+ </XStack>
306
+ </YStack>
307
+ );
308
+ };
309
+
310
+ return <FormExample />;
311
+ },
312
+ };
313
+
314
+ // ---------------------------------------------------------------------------
315
+ // Skeleton
316
+ // ---------------------------------------------------------------------------
317
+
318
+ export const Skeleton: Story = {
319
+ args: {
320
+ skeleton: true,
321
+ label: "Loading Content",
322
+ minHeight: 200,
323
+ },
324
+ };
@@ -0,0 +1,185 @@
1
+ /**
2
+ * RichEditor compound component (web)
3
+ *
4
+ * Combines the TiptapEditor, FixedToolbar, and BubbleToolbar into a compound
5
+ * component with static properties:
6
+ * - RichEditor.FixedToolbar
7
+ * - RichEditor.BubbleToolbar
8
+ * - RichEditor.Editor
9
+ *
10
+ * Root provides RichEditorContext with resolved size, compact, and disabled.
11
+ * Uses useResolvedKnobs for knobs integration and clampRadiusForLargeComponent
12
+ * for radius clamping (max $4).
13
+ */
14
+
15
+ import {
16
+ forwardRef,
17
+ useCallback,
18
+ useImperativeHandle,
19
+ useMemo,
20
+ useRef,
21
+ useState,
22
+ type RefObject,
23
+ } from "react";
24
+ import type { SizeTokens } from "tamagui";
25
+ import { getConfig, withStaticProperties } from "tamagui";
26
+ import { useResolvedKnobs } from "@multiplatform.one/theme";
27
+ import { clampRadiusForLargeComponent } from "@multiplatform.one/forms";
28
+ import type {
29
+ EditorMode,
30
+ EditorState,
31
+ RichEditorProps,
32
+ RichEditorRef,
33
+ ToolbarSection,
34
+ } from "./types";
35
+ import { defaultEditorState } from "./types";
36
+ import { RichEditorContext } from "./context";
37
+ import { EditorFrame } from "./styled";
38
+ import { TiptapEditor } from "./editor/TiptapEditor";
39
+ import { FixedToolbar } from "./toolbar/FixedToolbar";
40
+ import { BubbleToolbar } from "./toolbar/BubbleToolbar";
41
+ import { ResizeHandle } from "./toolbar/ResizeHandle";
42
+ import { StatusBar } from "./toolbar/StatusBar";
43
+
44
+ // ===========================================================================
45
+ // Combined Props
46
+ // ===========================================================================
47
+
48
+ export interface RichEditorCombinedProps extends RichEditorProps {
49
+ /** Size token for the editor */
50
+ size?: SizeTokens;
51
+ /** Use compact sizing for tighter controls */
52
+ compact?: boolean;
53
+ /** Show the fixed toolbar (default: true) */
54
+ showToolbar?: boolean;
55
+ /** Show the bubble toolbar on text selection (default: false, web only) */
56
+ showBubbleToolbar?: boolean;
57
+ /** Toolbar sections to display (shows all when omitted) */
58
+ sections?: ToolbarSection[];
59
+ /** Show a drag handle to resize the editor vertically (default: true) */
60
+ resizable?: boolean;
61
+ /** Show word/character count status bar (default: true) */
62
+ showStatusBar?: boolean;
63
+ }
64
+
65
+ // ===========================================================================
66
+ // RichEditorImpl
67
+ // ===========================================================================
68
+
69
+ const RichEditorImpl = forwardRef<RichEditorRef, RichEditorCombinedProps>(
70
+ (
71
+ {
72
+ size,
73
+ compact = false,
74
+ showToolbar = true,
75
+ showBubbleToolbar = false,
76
+ resizable = true,
77
+ showStatusBar = true,
78
+ sections,
79
+ hasError,
80
+ editable = true,
81
+ onStateChange,
82
+ ...editorProps
83
+ },
84
+ ref,
85
+ ) => {
86
+ const internalRef = useRef<RichEditorRef>(null);
87
+ const frameRef = useRef<HTMLElement>(null);
88
+ const [editorState, setEditorState] = useState<EditorState>(defaultEditorState);
89
+ const [editorMode, setEditorMode] = useState<EditorMode>("richtext");
90
+
91
+ const { knobProps } = useResolvedKnobs({
92
+ component: "RichEditor",
93
+ size,
94
+ compact,
95
+ });
96
+
97
+ const handleStateChange = useCallback(
98
+ (state: EditorState) => {
99
+ setEditorState(state);
100
+ onStateChange?.(state);
101
+ },
102
+ [onStateChange],
103
+ );
104
+
105
+ useImperativeHandle(ref, () => internalRef.current!, []);
106
+
107
+ const cappedRadius = clampRadiusForLargeComponent(knobProps.borderRadius.borderRadius, 4);
108
+
109
+ const { bodyFontFamily, headingFontFamily } = useMemo(() => {
110
+ const fonts = getConfig()?.fonts;
111
+ const resolve = (token?: string) => {
112
+ if (!token) return undefined;
113
+ const key = token.startsWith("$") ? token.slice(1) : token;
114
+ return fonts?.[key]?.family as string | undefined;
115
+ };
116
+ return {
117
+ bodyFontFamily: resolve(knobProps.body?.fontFamily),
118
+ headingFontFamily: resolve(knobProps.heading?.fontFamily),
119
+ };
120
+ }, [knobProps.body?.fontFamily, knobProps.heading?.fontFamily]);
121
+
122
+ const disabled = !editable;
123
+
124
+ return (
125
+ <RichEditorContext.Provider
126
+ size={(knobProps.sizeToken ?? "$true") as any}
127
+ compact={compact}
128
+ disabled={disabled}
129
+ >
130
+ <EditorFrame
131
+ ref={frameRef as any}
132
+ hasError={hasError}
133
+ borderRadius={cappedRadius}
134
+ borderWidth={knobProps.borderRadius.borderWidth}
135
+ borderColor={hasError ? "$red10" : "$color6"}
136
+ backgroundColor={knobProps.inputBackground ?? "$color2"}
137
+ disabled={disabled}
138
+ position="relative"
139
+ >
140
+ {showToolbar && !disabled && editorMode === "richtext" && (
141
+ <FixedToolbar
142
+ editorRef={internalRef}
143
+ state={editorState}
144
+ sections={sections}
145
+ hasError={hasError}
146
+ />
147
+ )}
148
+ <TiptapEditor
149
+ ref={internalRef}
150
+ {...editorProps}
151
+ editable={editable}
152
+ onStateChange={handleStateChange}
153
+ hasError={false}
154
+ showBubbleToolbar={showBubbleToolbar}
155
+ bodyFontFamily={bodyFontFamily}
156
+ headingFontFamily={headingFontFamily}
157
+ editorMode={editorMode}
158
+ />
159
+ {showStatusBar && (
160
+ <StatusBar state={editorState} mode={editorMode} onModeChange={setEditorMode} />
161
+ )}
162
+ {resizable && !disabled && (
163
+ <ResizeHandle
164
+ containerRef={frameRef as RefObject<HTMLElement>}
165
+ minHeight={editorProps.minHeight ?? 150}
166
+ maxHeight={editorProps.maxHeight}
167
+ />
168
+ )}
169
+ </EditorFrame>
170
+ </RichEditorContext.Provider>
171
+ );
172
+ },
173
+ );
174
+
175
+ RichEditorImpl.displayName = "RichEditor";
176
+
177
+ // ===========================================================================
178
+ // Compound Component
179
+ // ===========================================================================
180
+
181
+ export const RichEditor = withStaticProperties(RichEditorImpl, {
182
+ FixedToolbar,
183
+ BubbleToolbar,
184
+ Editor: TiptapEditor,
185
+ });