@multiplatform.one/rich-text 6.0.4 → 6.3.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 (649) hide show
  1. package/README.md +60 -0
  2. package/dist/cjs/RichEditor.cjs +84 -9
  3. package/dist/cjs/RichEditor.native.js +422 -35
  4. package/dist/cjs/RichEditor.native.js.map +1 -1
  5. package/dist/cjs/RichTextEditor/index.cjs +18 -2
  6. package/dist/cjs/RichTextEditor/index.native.js +18 -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 +249 -293
  15. package/dist/cjs/editor/SlashCommands.native.js +306 -340
  16. package/dist/cjs/editor/SlashCommands.native.js.map +1 -1
  17. package/dist/cjs/editor/TentapEditor.native.js +44 -12
  18. package/dist/cjs/editor/TentapEditor.native.js.map +1 -1
  19. package/dist/cjs/editor/TiptapEditor.cjs +140 -33
  20. package/dist/cjs/editor/TiptapEditor.native.js +153 -33
  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/codeBlockPreview.cjs +230 -0
  26. package/dist/cjs/editor/codeBlockPreview.native.js +265 -0
  27. package/dist/cjs/editor/codeBlockPreview.native.js.map +1 -0
  28. package/dist/cjs/editor/editorStyles.cjs +203 -34
  29. package/dist/cjs/editor/editorStyles.native.js +203 -34
  30. package/dist/cjs/editor/editorStyles.native.js.map +1 -1
  31. package/dist/cjs/editor/emoji.cjs +128 -0
  32. package/dist/cjs/editor/emoji.native.js +184 -0
  33. package/dist/cjs/editor/emoji.native.js.map +1 -0
  34. package/dist/cjs/editor/lazyKatex.cjs +78 -0
  35. package/dist/cjs/editor/lazyKatex.native.js +117 -0
  36. package/dist/cjs/editor/lazyKatex.native.js.map +1 -0
  37. package/dist/cjs/editor/markdown.cjs +216 -0
  38. package/dist/cjs/editor/markdown.native.js +278 -0
  39. package/dist/cjs/editor/markdown.native.js.map +1 -0
  40. package/dist/cjs/editor/mathematics.cjs +168 -0
  41. package/dist/cjs/editor/mathematics.native.js +202 -0
  42. package/dist/cjs/editor/mathematics.native.js.map +1 -0
  43. package/dist/cjs/editor/media.cjs +138 -0
  44. package/dist/cjs/editor/media.native.js +172 -0
  45. package/dist/cjs/editor/media.native.js.map +1 -0
  46. package/dist/cjs/editor/mentions.cjs +73 -0
  47. package/dist/cjs/editor/mentions.native.js +84 -0
  48. package/dist/cjs/editor/mentions.native.js.map +1 -0
  49. package/dist/cjs/editor/pasteCleanup.cjs +83 -0
  50. package/dist/cjs/editor/pasteCleanup.native.js +175 -0
  51. package/dist/cjs/editor/pasteCleanup.native.js.map +1 -0
  52. package/dist/cjs/editor/suggestionPopup.cjs +297 -0
  53. package/dist/cjs/editor/suggestionPopup.native.js +327 -0
  54. package/dist/cjs/editor/suggestionPopup.native.js.map +1 -0
  55. package/dist/cjs/preview.cjs +263 -0
  56. package/dist/cjs/preview.native.js +294 -0
  57. package/dist/cjs/preview.native.js.map +1 -0
  58. package/dist/cjs/shared/t.cjs +53 -0
  59. package/dist/cjs/shared/t.native.js +56 -0
  60. package/dist/cjs/shared/t.native.js.map +1 -0
  61. package/dist/cjs/shared/url.cjs +35 -0
  62. package/dist/cjs/shared/url.native.js +38 -0
  63. package/dist/cjs/shared/url.native.js.map +1 -0
  64. package/dist/cjs/styled.cjs +13 -6
  65. package/dist/cjs/styled.native.js +13 -6
  66. package/dist/cjs/styled.native.js.map +1 -1
  67. package/dist/cjs/toolbar/BubbleToolbar.cjs +10 -8
  68. package/dist/cjs/toolbar/BubbleToolbar.native.js +10 -8
  69. package/dist/cjs/toolbar/BubbleToolbar.native.js.map +1 -1
  70. package/dist/cjs/toolbar/CodeBlockBubble.cjs +59 -23
  71. package/dist/cjs/toolbar/CodeBlockBubble.native.js +71 -25
  72. package/dist/cjs/toolbar/CodeBlockBubble.native.js.map +1 -1
  73. package/dist/cjs/toolbar/ColorPicker.cjs +19 -54
  74. package/dist/cjs/toolbar/ColorPicker.native.js +81 -179
  75. package/dist/cjs/toolbar/ColorPicker.native.js.map +1 -1
  76. package/dist/cjs/toolbar/FixedToolbar.cjs +33 -10
  77. package/dist/cjs/toolbar/FixedToolbar.native.js +46 -54
  78. package/dist/cjs/toolbar/FixedToolbar.native.js.map +1 -1
  79. package/dist/cjs/toolbar/HeadingPicker.cjs +32 -39
  80. package/dist/cjs/toolbar/HeadingPicker.native.js +61 -51
  81. package/dist/cjs/toolbar/HeadingPicker.native.js.map +1 -1
  82. package/dist/cjs/toolbar/ImageBubble.cjs +20 -43
  83. package/dist/cjs/toolbar/ImageBubble.native.js +20 -43
  84. package/dist/cjs/toolbar/ImageBubble.native.js.map +1 -1
  85. package/dist/cjs/toolbar/ImageDialog.cjs +5 -4
  86. package/dist/cjs/toolbar/ImageDialog.native.js +76 -65
  87. package/dist/cjs/toolbar/ImageDialog.native.js.map +1 -1
  88. package/dist/cjs/toolbar/LinkBubble.cjs +23 -70
  89. package/dist/cjs/toolbar/LinkBubble.native.js +23 -70
  90. package/dist/cjs/toolbar/LinkBubble.native.js.map +1 -1
  91. package/dist/cjs/toolbar/LinkDialog.cjs +19 -18
  92. package/dist/cjs/toolbar/LinkDialog.native.js +86 -83
  93. package/dist/cjs/toolbar/LinkDialog.native.js.map +1 -1
  94. package/dist/cjs/toolbar/ListPicker.cjs +32 -43
  95. package/dist/cjs/toolbar/ListPicker.native.js +43 -44
  96. package/dist/cjs/toolbar/ListPicker.native.js.map +1 -1
  97. package/dist/cjs/toolbar/MathBubble.cjs +159 -0
  98. package/dist/cjs/toolbar/MathBubble.native.js +169 -0
  99. package/dist/cjs/toolbar/MathBubble.native.js.map +1 -0
  100. package/dist/cjs/toolbar/MoreDropdown.cjs +51 -98
  101. package/dist/cjs/toolbar/MoreDropdown.native.js +73 -98
  102. package/dist/cjs/toolbar/MoreDropdown.native.js.map +1 -1
  103. package/dist/cjs/toolbar/StatusBar.cjs +19 -10
  104. package/dist/cjs/toolbar/StatusBar.native.js +19 -10
  105. package/dist/cjs/toolbar/StatusBar.native.js.map +1 -1
  106. package/dist/cjs/toolbar/TableBubble.cjs +77 -95
  107. package/dist/cjs/toolbar/TableBubble.native.js +73 -71
  108. package/dist/cjs/toolbar/TableBubble.native.js.map +1 -1
  109. package/dist/cjs/toolbar/ToolbarButton.cjs +86 -21
  110. package/dist/cjs/toolbar/ToolbarButton.native.js +14 -4
  111. package/dist/cjs/toolbar/ToolbarButton.native.js.map +1 -1
  112. package/dist/cjs/toolbar/icons.cjs +111 -468
  113. package/dist/cjs/toolbar/shortcuts.cjs +73 -24
  114. package/dist/cjs/toolbar/shortcuts.native.js +73 -24
  115. package/dist/cjs/toolbar/shortcuts.native.js.map +1 -1
  116. package/dist/cjs/toolbar/useHorizontalScroll.cjs +25 -5
  117. package/dist/cjs/toolbar/useHorizontalScroll.native.js +25 -5
  118. package/dist/cjs/toolbar/useHorizontalScroll.native.js.map +1 -1
  119. package/dist/cjs/toolbar/useRovingFocus.cjs +80 -0
  120. package/dist/cjs/toolbar/useRovingFocus.native.js +113 -0
  121. package/dist/cjs/toolbar/useRovingFocus.native.js.map +1 -0
  122. package/dist/cjs/types.native.js.map +1 -1
  123. package/dist/esm/RichEditor.mjs +85 -10
  124. package/dist/esm/RichEditor.mjs.map +1 -1
  125. package/dist/esm/RichEditor.native.js +425 -38
  126. package/dist/esm/RichEditor.native.js.map +1 -1
  127. package/dist/esm/RichTextEditor/index.mjs +18 -2
  128. package/dist/esm/RichTextEditor/index.mjs.map +1 -1
  129. package/dist/esm/RichTextEditor/index.native.js +18 -2
  130. package/dist/esm/RichTextEditor/index.native.js.map +1 -1
  131. package/dist/esm/constants.mjs +47 -29
  132. package/dist/esm/constants.mjs.map +1 -1
  133. package/dist/esm/constants.native.js +54 -29
  134. package/dist/esm/constants.native.js.map +1 -1
  135. package/dist/esm/editor/BlockDragHandle.mjs +22 -7
  136. package/dist/esm/editor/BlockDragHandle.mjs.map +1 -1
  137. package/dist/esm/editor/BlockDragHandle.native.js +41 -7
  138. package/dist/esm/editor/BlockDragHandle.native.js.map +1 -1
  139. package/dist/esm/editor/SlashCommands.mjs +250 -294
  140. package/dist/esm/editor/SlashCommands.mjs.map +1 -1
  141. package/dist/esm/editor/SlashCommands.native.js +307 -341
  142. package/dist/esm/editor/SlashCommands.native.js.map +1 -1
  143. package/dist/esm/editor/TentapEditor.native.js +45 -13
  144. package/dist/esm/editor/TentapEditor.native.js.map +1 -1
  145. package/dist/esm/editor/TiptapEditor.mjs +142 -35
  146. package/dist/esm/editor/TiptapEditor.mjs.map +1 -1
  147. package/dist/esm/editor/TiptapEditor.native.js +155 -35
  148. package/dist/esm/editor/TiptapEditor.native.js.map +1 -1
  149. package/dist/esm/editor/blockAnchor.mjs +18 -0
  150. package/dist/esm/editor/blockAnchor.mjs.map +1 -0
  151. package/dist/esm/editor/blockAnchor.native.js +40 -0
  152. package/dist/esm/editor/blockAnchor.native.js.map +1 -0
  153. package/dist/esm/editor/codeBlockPreview.mjs +190 -0
  154. package/dist/esm/editor/codeBlockPreview.mjs.map +1 -0
  155. package/dist/esm/editor/codeBlockPreview.native.js +222 -0
  156. package/dist/esm/editor/codeBlockPreview.native.js.map +1 -0
  157. package/dist/esm/editor/editorStyles.mjs +203 -34
  158. package/dist/esm/editor/editorStyles.mjs.map +1 -1
  159. package/dist/esm/editor/editorStyles.native.js +203 -34
  160. package/dist/esm/editor/editorStyles.native.js.map +1 -1
  161. package/dist/esm/editor/emoji.mjs +88 -0
  162. package/dist/esm/editor/emoji.mjs.map +1 -0
  163. package/dist/esm/editor/emoji.native.js +141 -0
  164. package/dist/esm/editor/emoji.native.js.map +1 -0
  165. package/dist/esm/editor/lazyKatex.mjs +40 -0
  166. package/dist/esm/editor/lazyKatex.mjs.map +1 -0
  167. package/dist/esm/editor/lazyKatex.native.js +76 -0
  168. package/dist/esm/editor/lazyKatex.native.js.map +1 -0
  169. package/dist/esm/editor/markdown.mjs +179 -0
  170. package/dist/esm/editor/markdown.mjs.map +1 -0
  171. package/dist/esm/editor/markdown.native.js +238 -0
  172. package/dist/esm/editor/markdown.native.js.map +1 -0
  173. package/dist/esm/editor/mathematics.mjs +142 -0
  174. package/dist/esm/editor/mathematics.mjs.map +1 -0
  175. package/dist/esm/editor/mathematics.native.js +173 -0
  176. package/dist/esm/editor/mathematics.native.js.map +1 -0
  177. package/dist/esm/editor/media.mjs +113 -0
  178. package/dist/esm/editor/media.mjs.map +1 -0
  179. package/dist/esm/editor/media.native.js +144 -0
  180. package/dist/esm/editor/media.native.js.map +1 -0
  181. package/dist/esm/editor/mentions.mjs +37 -0
  182. package/dist/esm/editor/mentions.mjs.map +1 -0
  183. package/dist/esm/editor/mentions.native.js +45 -0
  184. package/dist/esm/editor/mentions.native.js.map +1 -0
  185. package/dist/esm/editor/pasteCleanup.mjs +57 -0
  186. package/dist/esm/editor/pasteCleanup.mjs.map +1 -0
  187. package/dist/esm/editor/pasteCleanup.native.js +146 -0
  188. package/dist/esm/editor/pasteCleanup.native.js.map +1 -0
  189. package/dist/esm/editor/suggestionPopup.mjs +268 -0
  190. package/dist/esm/editor/suggestionPopup.mjs.map +1 -0
  191. package/dist/esm/editor/suggestionPopup.native.js +295 -0
  192. package/dist/esm/editor/suggestionPopup.native.js.map +1 -0
  193. package/dist/esm/preview.mjs +236 -0
  194. package/dist/esm/preview.mjs.map +1 -0
  195. package/dist/esm/preview.native.js +264 -0
  196. package/dist/esm/preview.native.js.map +1 -0
  197. package/dist/esm/shared/t.mjs +17 -0
  198. package/dist/esm/shared/t.mjs.map +1 -0
  199. package/dist/esm/shared/t.native.js +17 -0
  200. package/dist/esm/shared/t.native.js.map +1 -0
  201. package/dist/esm/shared/url.mjs +10 -0
  202. package/dist/esm/shared/url.mjs.map +1 -0
  203. package/dist/esm/shared/url.native.js +10 -0
  204. package/dist/esm/shared/url.native.js.map +1 -0
  205. package/dist/esm/styled.mjs +13 -6
  206. package/dist/esm/styled.mjs.map +1 -1
  207. package/dist/esm/styled.native.js +13 -6
  208. package/dist/esm/styled.native.js.map +1 -1
  209. package/dist/esm/toolbar/BubbleToolbar.mjs +11 -9
  210. package/dist/esm/toolbar/BubbleToolbar.mjs.map +1 -1
  211. package/dist/esm/toolbar/BubbleToolbar.native.js +11 -9
  212. package/dist/esm/toolbar/BubbleToolbar.native.js.map +1 -1
  213. package/dist/esm/toolbar/CodeBlockBubble.mjs +60 -24
  214. package/dist/esm/toolbar/CodeBlockBubble.mjs.map +1 -1
  215. package/dist/esm/toolbar/CodeBlockBubble.native.js +72 -26
  216. package/dist/esm/toolbar/CodeBlockBubble.native.js.map +1 -1
  217. package/dist/esm/toolbar/ColorPicker.mjs +21 -56
  218. package/dist/esm/toolbar/ColorPicker.mjs.map +1 -1
  219. package/dist/esm/toolbar/ColorPicker.native.js +82 -180
  220. package/dist/esm/toolbar/ColorPicker.native.js.map +1 -1
  221. package/dist/esm/toolbar/FixedToolbar.mjs +34 -11
  222. package/dist/esm/toolbar/FixedToolbar.mjs.map +1 -1
  223. package/dist/esm/toolbar/FixedToolbar.native.js +47 -55
  224. package/dist/esm/toolbar/FixedToolbar.native.js.map +1 -1
  225. package/dist/esm/toolbar/HeadingPicker.mjs +34 -41
  226. package/dist/esm/toolbar/HeadingPicker.mjs.map +1 -1
  227. package/dist/esm/toolbar/HeadingPicker.native.js +63 -53
  228. package/dist/esm/toolbar/HeadingPicker.native.js.map +1 -1
  229. package/dist/esm/toolbar/ImageBubble.mjs +20 -43
  230. package/dist/esm/toolbar/ImageBubble.mjs.map +1 -1
  231. package/dist/esm/toolbar/ImageBubble.native.js +20 -43
  232. package/dist/esm/toolbar/ImageBubble.native.js.map +1 -1
  233. package/dist/esm/toolbar/ImageDialog.mjs +5 -4
  234. package/dist/esm/toolbar/ImageDialog.mjs.map +1 -1
  235. package/dist/esm/toolbar/ImageDialog.native.js +75 -64
  236. package/dist/esm/toolbar/ImageDialog.native.js.map +1 -1
  237. package/dist/esm/toolbar/LinkBubble.mjs +23 -70
  238. package/dist/esm/toolbar/LinkBubble.mjs.map +1 -1
  239. package/dist/esm/toolbar/LinkBubble.native.js +23 -70
  240. package/dist/esm/toolbar/LinkBubble.native.js.map +1 -1
  241. package/dist/esm/toolbar/LinkDialog.mjs +17 -16
  242. package/dist/esm/toolbar/LinkDialog.mjs.map +1 -1
  243. package/dist/esm/toolbar/LinkDialog.native.js +84 -80
  244. package/dist/esm/toolbar/LinkDialog.native.js.map +1 -1
  245. package/dist/esm/toolbar/ListPicker.mjs +33 -44
  246. package/dist/esm/toolbar/ListPicker.mjs.map +1 -1
  247. package/dist/esm/toolbar/ListPicker.native.js +44 -45
  248. package/dist/esm/toolbar/ListPicker.native.js.map +1 -1
  249. package/dist/esm/toolbar/MathBubble.mjs +134 -0
  250. package/dist/esm/toolbar/MathBubble.mjs.map +1 -0
  251. package/dist/esm/toolbar/MathBubble.native.js +141 -0
  252. package/dist/esm/toolbar/MathBubble.native.js.map +1 -0
  253. package/dist/esm/toolbar/MoreDropdown.mjs +50 -97
  254. package/dist/esm/toolbar/MoreDropdown.mjs.map +1 -1
  255. package/dist/esm/toolbar/MoreDropdown.native.js +72 -97
  256. package/dist/esm/toolbar/MoreDropdown.native.js.map +1 -1
  257. package/dist/esm/toolbar/StatusBar.mjs +19 -10
  258. package/dist/esm/toolbar/StatusBar.mjs.map +1 -1
  259. package/dist/esm/toolbar/StatusBar.native.js +19 -10
  260. package/dist/esm/toolbar/StatusBar.native.js.map +1 -1
  261. package/dist/esm/toolbar/TableBubble.mjs +77 -95
  262. package/dist/esm/toolbar/TableBubble.mjs.map +1 -1
  263. package/dist/esm/toolbar/TableBubble.native.js +73 -71
  264. package/dist/esm/toolbar/TableBubble.native.js.map +1 -1
  265. package/dist/esm/toolbar/ToolbarButton.mjs +87 -22
  266. package/dist/esm/toolbar/ToolbarButton.mjs.map +1 -1
  267. package/dist/esm/toolbar/ToolbarButton.native.js +14 -4
  268. package/dist/esm/toolbar/ToolbarButton.native.js.map +1 -1
  269. package/dist/esm/toolbar/icons.mjs +109 -469
  270. package/dist/esm/toolbar/icons.mjs.map +1 -1
  271. package/dist/esm/toolbar/shortcuts.mjs +73 -24
  272. package/dist/esm/toolbar/shortcuts.mjs.map +1 -1
  273. package/dist/esm/toolbar/shortcuts.native.js +73 -24
  274. package/dist/esm/toolbar/shortcuts.native.js.map +1 -1
  275. package/dist/esm/toolbar/useHorizontalScroll.mjs +25 -6
  276. package/dist/esm/toolbar/useHorizontalScroll.mjs.map +1 -1
  277. package/dist/esm/toolbar/useHorizontalScroll.native.js +25 -6
  278. package/dist/esm/toolbar/useHorizontalScroll.native.js.map +1 -1
  279. package/dist/esm/toolbar/useRovingFocus.mjs +55 -0
  280. package/dist/esm/toolbar/useRovingFocus.mjs.map +1 -0
  281. package/dist/esm/toolbar/useRovingFocus.native.js +85 -0
  282. package/dist/esm/toolbar/useRovingFocus.native.js.map +1 -0
  283. package/dist/esm/types.mjs.map +1 -1
  284. package/dist/esm/types.native.js.map +1 -1
  285. package/dist/jsx/RichEditor.mjs +85 -10
  286. package/dist/jsx/RichEditor.mjs.map +1 -1
  287. package/dist/jsx/RichEditor.native.js +422 -35
  288. package/dist/jsx/RichEditor.native.js.map +1 -1
  289. package/dist/jsx/RichTextEditor/index.mjs +18 -2
  290. package/dist/jsx/RichTextEditor/index.mjs.map +1 -1
  291. package/dist/jsx/RichTextEditor/index.native.js +18 -2
  292. package/dist/jsx/RichTextEditor/index.native.js.map +1 -1
  293. package/dist/jsx/constants.mjs +47 -29
  294. package/dist/jsx/constants.mjs.map +1 -1
  295. package/dist/jsx/constants.native.js +59 -29
  296. package/dist/jsx/constants.native.js.map +1 -1
  297. package/dist/jsx/editor/BlockDragHandle.mjs +22 -7
  298. package/dist/jsx/editor/BlockDragHandle.mjs.map +1 -1
  299. package/dist/jsx/editor/BlockDragHandle.native.js +41 -7
  300. package/dist/jsx/editor/BlockDragHandle.native.js.map +1 -1
  301. package/dist/jsx/editor/SlashCommands.mjs +250 -294
  302. package/dist/jsx/editor/SlashCommands.mjs.map +1 -1
  303. package/dist/jsx/editor/SlashCommands.native.js +306 -340
  304. package/dist/jsx/editor/SlashCommands.native.js.map +1 -1
  305. package/dist/jsx/editor/TentapEditor.native.js +44 -12
  306. package/dist/jsx/editor/TentapEditor.native.js.map +1 -1
  307. package/dist/jsx/editor/TiptapEditor.mjs +142 -35
  308. package/dist/jsx/editor/TiptapEditor.mjs.map +1 -1
  309. package/dist/jsx/editor/TiptapEditor.native.js +153 -33
  310. package/dist/jsx/editor/TiptapEditor.native.js.map +1 -1
  311. package/dist/jsx/editor/blockAnchor.mjs +18 -0
  312. package/dist/jsx/editor/blockAnchor.mjs.map +1 -0
  313. package/dist/jsx/editor/blockAnchor.native.js +68 -0
  314. package/dist/jsx/editor/blockAnchor.native.js.map +1 -0
  315. package/dist/jsx/editor/codeBlockPreview.mjs +190 -0
  316. package/dist/jsx/editor/codeBlockPreview.mjs.map +1 -0
  317. package/dist/jsx/editor/codeBlockPreview.native.js +265 -0
  318. package/dist/jsx/editor/codeBlockPreview.native.js.map +1 -0
  319. package/dist/jsx/editor/editorStyles.mjs +203 -34
  320. package/dist/jsx/editor/editorStyles.mjs.map +1 -1
  321. package/dist/jsx/editor/editorStyles.native.js +203 -34
  322. package/dist/jsx/editor/editorStyles.native.js.map +1 -1
  323. package/dist/jsx/editor/emoji.mjs +88 -0
  324. package/dist/jsx/editor/emoji.mjs.map +1 -0
  325. package/dist/jsx/editor/emoji.native.js +184 -0
  326. package/dist/jsx/editor/emoji.native.js.map +1 -0
  327. package/dist/jsx/editor/lazyKatex.mjs +40 -0
  328. package/dist/jsx/editor/lazyKatex.mjs.map +1 -0
  329. package/dist/jsx/editor/lazyKatex.native.js +117 -0
  330. package/dist/jsx/editor/lazyKatex.native.js.map +1 -0
  331. package/dist/jsx/editor/markdown.mjs +179 -0
  332. package/dist/jsx/editor/markdown.mjs.map +1 -0
  333. package/dist/jsx/editor/markdown.native.js +278 -0
  334. package/dist/jsx/editor/markdown.native.js.map +1 -0
  335. package/dist/jsx/editor/mathematics.mjs +142 -0
  336. package/dist/jsx/editor/mathematics.mjs.map +1 -0
  337. package/dist/jsx/editor/mathematics.native.js +202 -0
  338. package/dist/jsx/editor/mathematics.native.js.map +1 -0
  339. package/dist/jsx/editor/media.mjs +113 -0
  340. package/dist/jsx/editor/media.mjs.map +1 -0
  341. package/dist/jsx/editor/media.native.js +172 -0
  342. package/dist/jsx/editor/media.native.js.map +1 -0
  343. package/dist/jsx/editor/mentions.mjs +37 -0
  344. package/dist/jsx/editor/mentions.mjs.map +1 -0
  345. package/dist/jsx/editor/mentions.native.js +84 -0
  346. package/dist/jsx/editor/mentions.native.js.map +1 -0
  347. package/dist/jsx/editor/pasteCleanup.mjs +57 -0
  348. package/dist/jsx/editor/pasteCleanup.mjs.map +1 -0
  349. package/dist/jsx/editor/pasteCleanup.native.js +175 -0
  350. package/dist/jsx/editor/pasteCleanup.native.js.map +1 -0
  351. package/dist/jsx/editor/suggestionPopup.mjs +268 -0
  352. package/dist/jsx/editor/suggestionPopup.mjs.map +1 -0
  353. package/dist/jsx/editor/suggestionPopup.native.js +327 -0
  354. package/dist/jsx/editor/suggestionPopup.native.js.map +1 -0
  355. package/dist/jsx/preview.mjs +236 -0
  356. package/dist/jsx/preview.mjs.map +1 -0
  357. package/dist/jsx/preview.native.js +294 -0
  358. package/dist/jsx/preview.native.js.map +1 -0
  359. package/dist/jsx/shared/t.mjs +17 -0
  360. package/dist/jsx/shared/t.mjs.map +1 -0
  361. package/dist/jsx/shared/t.native.js +56 -0
  362. package/dist/jsx/shared/t.native.js.map +1 -0
  363. package/dist/jsx/shared/url.mjs +10 -0
  364. package/dist/jsx/shared/url.mjs.map +1 -0
  365. package/dist/jsx/shared/url.native.js +38 -0
  366. package/dist/jsx/shared/url.native.js.map +1 -0
  367. package/dist/jsx/styled.mjs +13 -6
  368. package/dist/jsx/styled.mjs.map +1 -1
  369. package/dist/jsx/styled.native.js +13 -6
  370. package/dist/jsx/styled.native.js.map +1 -1
  371. package/dist/jsx/toolbar/BubbleToolbar.mjs +11 -9
  372. package/dist/jsx/toolbar/BubbleToolbar.mjs.map +1 -1
  373. package/dist/jsx/toolbar/BubbleToolbar.native.js +10 -8
  374. package/dist/jsx/toolbar/BubbleToolbar.native.js.map +1 -1
  375. package/dist/jsx/toolbar/CodeBlockBubble.mjs +60 -24
  376. package/dist/jsx/toolbar/CodeBlockBubble.mjs.map +1 -1
  377. package/dist/jsx/toolbar/CodeBlockBubble.native.js +71 -25
  378. package/dist/jsx/toolbar/CodeBlockBubble.native.js.map +1 -1
  379. package/dist/jsx/toolbar/ColorPicker.mjs +21 -56
  380. package/dist/jsx/toolbar/ColorPicker.mjs.map +1 -1
  381. package/dist/jsx/toolbar/ColorPicker.native.js +81 -179
  382. package/dist/jsx/toolbar/ColorPicker.native.js.map +1 -1
  383. package/dist/jsx/toolbar/FixedToolbar.mjs +34 -11
  384. package/dist/jsx/toolbar/FixedToolbar.mjs.map +1 -1
  385. package/dist/jsx/toolbar/FixedToolbar.native.js +46 -54
  386. package/dist/jsx/toolbar/FixedToolbar.native.js.map +1 -1
  387. package/dist/jsx/toolbar/HeadingPicker.mjs +34 -41
  388. package/dist/jsx/toolbar/HeadingPicker.mjs.map +1 -1
  389. package/dist/jsx/toolbar/HeadingPicker.native.js +61 -51
  390. package/dist/jsx/toolbar/HeadingPicker.native.js.map +1 -1
  391. package/dist/jsx/toolbar/ImageBubble.mjs +20 -43
  392. package/dist/jsx/toolbar/ImageBubble.mjs.map +1 -1
  393. package/dist/jsx/toolbar/ImageBubble.native.js +20 -43
  394. package/dist/jsx/toolbar/ImageBubble.native.js.map +1 -1
  395. package/dist/jsx/toolbar/ImageDialog.mjs +5 -4
  396. package/dist/jsx/toolbar/ImageDialog.mjs.map +1 -1
  397. package/dist/jsx/toolbar/ImageDialog.native.js +76 -65
  398. package/dist/jsx/toolbar/ImageDialog.native.js.map +1 -1
  399. package/dist/jsx/toolbar/LinkBubble.mjs +23 -70
  400. package/dist/jsx/toolbar/LinkBubble.mjs.map +1 -1
  401. package/dist/jsx/toolbar/LinkBubble.native.js +23 -70
  402. package/dist/jsx/toolbar/LinkBubble.native.js.map +1 -1
  403. package/dist/jsx/toolbar/LinkDialog.mjs +17 -16
  404. package/dist/jsx/toolbar/LinkDialog.mjs.map +1 -1
  405. package/dist/jsx/toolbar/LinkDialog.native.js +86 -83
  406. package/dist/jsx/toolbar/LinkDialog.native.js.map +1 -1
  407. package/dist/jsx/toolbar/ListPicker.mjs +33 -44
  408. package/dist/jsx/toolbar/ListPicker.mjs.map +1 -1
  409. package/dist/jsx/toolbar/ListPicker.native.js +43 -44
  410. package/dist/jsx/toolbar/ListPicker.native.js.map +1 -1
  411. package/dist/jsx/toolbar/MathBubble.mjs +134 -0
  412. package/dist/jsx/toolbar/MathBubble.mjs.map +1 -0
  413. package/dist/jsx/toolbar/MathBubble.native.js +169 -0
  414. package/dist/jsx/toolbar/MathBubble.native.js.map +1 -0
  415. package/dist/jsx/toolbar/MoreDropdown.mjs +50 -97
  416. package/dist/jsx/toolbar/MoreDropdown.mjs.map +1 -1
  417. package/dist/jsx/toolbar/MoreDropdown.native.js +73 -98
  418. package/dist/jsx/toolbar/MoreDropdown.native.js.map +1 -1
  419. package/dist/jsx/toolbar/StatusBar.mjs +19 -10
  420. package/dist/jsx/toolbar/StatusBar.mjs.map +1 -1
  421. package/dist/jsx/toolbar/StatusBar.native.js +19 -10
  422. package/dist/jsx/toolbar/StatusBar.native.js.map +1 -1
  423. package/dist/jsx/toolbar/TableBubble.mjs +77 -95
  424. package/dist/jsx/toolbar/TableBubble.mjs.map +1 -1
  425. package/dist/jsx/toolbar/TableBubble.native.js +73 -71
  426. package/dist/jsx/toolbar/TableBubble.native.js.map +1 -1
  427. package/dist/jsx/toolbar/ToolbarButton.mjs +87 -22
  428. package/dist/jsx/toolbar/ToolbarButton.mjs.map +1 -1
  429. package/dist/jsx/toolbar/ToolbarButton.native.js +14 -4
  430. package/dist/jsx/toolbar/ToolbarButton.native.js.map +1 -1
  431. package/dist/jsx/toolbar/icons.mjs +109 -469
  432. package/dist/jsx/toolbar/icons.mjs.map +1 -1
  433. package/dist/jsx/toolbar/shortcuts.mjs +73 -24
  434. package/dist/jsx/toolbar/shortcuts.mjs.map +1 -1
  435. package/dist/jsx/toolbar/shortcuts.native.js +73 -24
  436. package/dist/jsx/toolbar/shortcuts.native.js.map +1 -1
  437. package/dist/jsx/toolbar/useHorizontalScroll.mjs +25 -6
  438. package/dist/jsx/toolbar/useHorizontalScroll.mjs.map +1 -1
  439. package/dist/jsx/toolbar/useHorizontalScroll.native.js +25 -5
  440. package/dist/jsx/toolbar/useHorizontalScroll.native.js.map +1 -1
  441. package/dist/jsx/toolbar/useRovingFocus.mjs +55 -0
  442. package/dist/jsx/toolbar/useRovingFocus.mjs.map +1 -0
  443. package/dist/jsx/toolbar/useRovingFocus.native.js +113 -0
  444. package/dist/jsx/toolbar/useRovingFocus.native.js.map +1 -0
  445. package/dist/jsx/types.mjs.map +1 -1
  446. package/dist/jsx/types.native.js.map +1 -1
  447. package/package.json +28 -13
  448. package/src/RichEditor.native.tsx +451 -49
  449. package/src/RichEditor.stories.tsx +158 -0
  450. package/src/RichEditor.tsx +121 -7
  451. package/src/RichTextEditor/index.tsx +41 -3
  452. package/src/RichTextEditor/richTextEditor.spec.tsx +11 -4
  453. package/src/constants.ts +86 -24
  454. package/src/editor/BlockDragHandle.ts +30 -5
  455. package/src/editor/SlashCommands.tsx +228 -293
  456. package/src/editor/TentapEditor.native.tsx +68 -17
  457. package/src/editor/TiptapEditor.tsx +187 -22
  458. package/src/editor/blockAnchor.spec.ts +70 -0
  459. package/src/editor/blockAnchor.ts +42 -0
  460. package/src/editor/codeBlockPreview.spec.ts +144 -0
  461. package/src/editor/codeBlockPreview.ts +266 -0
  462. package/src/editor/css.d.ts +2 -0
  463. package/src/editor/details.spec.ts +48 -0
  464. package/src/editor/editorStyles.spec.ts +25 -0
  465. package/src/editor/editorStyles.ts +218 -34
  466. package/src/editor/emoji.spec.ts +88 -0
  467. package/src/editor/emoji.ts +147 -0
  468. package/src/editor/emojilib.d.ts +16 -0
  469. package/src/editor/lazyKatex.spec.ts +38 -0
  470. package/src/editor/lazyKatex.ts +68 -0
  471. package/src/editor/markdown.spec.ts +196 -0
  472. package/src/editor/markdown.ts +249 -0
  473. package/src/editor/mathematics.spec.ts +97 -0
  474. package/src/editor/mathematics.ts +179 -0
  475. package/src/editor/media.spec.ts +121 -0
  476. package/src/editor/media.ts +133 -0
  477. package/src/editor/mentions.spec.ts +41 -0
  478. package/src/editor/mentions.ts +55 -0
  479. package/src/editor/pasteCleanup.spec.ts +84 -0
  480. package/src/editor/pasteCleanup.ts +124 -0
  481. package/src/editor/suggestionPopup.spec.tsx +105 -0
  482. package/src/editor/suggestionPopup.tsx +414 -0
  483. package/src/editor/tiptapEditor.spec.tsx +15 -8
  484. package/src/exports.spec.ts +4 -2
  485. package/src/index.ts +7 -1
  486. package/src/integration.spec.tsx +38 -9
  487. package/src/preview.spec.ts +130 -0
  488. package/src/preview.ts +287 -0
  489. package/src/richEditor.spec.tsx +10 -3
  490. package/src/shared/t.ts +25 -0
  491. package/src/shared/url.ts +16 -0
  492. package/src/styled.ts +13 -6
  493. package/src/toolbar/BubbleToolbar.tsx +11 -8
  494. package/src/toolbar/CodeBlockBubble.tsx +66 -28
  495. package/src/toolbar/ColorPicker.native.tsx +126 -0
  496. package/src/toolbar/ColorPicker.tsx +23 -67
  497. package/src/toolbar/FixedToolbar.native.tsx +51 -51
  498. package/src/toolbar/FixedToolbar.tsx +54 -10
  499. package/src/toolbar/HeadingPicker.tsx +46 -38
  500. package/src/toolbar/ImageBubble.tsx +26 -44
  501. package/src/toolbar/ImageDialog.native.tsx +97 -0
  502. package/src/toolbar/ImageDialog.tsx +5 -4
  503. package/src/toolbar/LinkBubble.tsx +27 -64
  504. package/src/toolbar/LinkDialog.native.tsx +117 -0
  505. package/src/toolbar/LinkDialog.tsx +28 -24
  506. package/src/toolbar/ListPicker.tsx +47 -43
  507. package/src/toolbar/MathBubble.tsx +140 -0
  508. package/src/toolbar/MoreDropdown.tsx +53 -60
  509. package/src/toolbar/StatusBar.tsx +13 -8
  510. package/src/toolbar/TableBubble.tsx +82 -94
  511. package/src/toolbar/ToolbarButton.native.tsx +14 -4
  512. package/src/toolbar/ToolbarButton.tsx +98 -19
  513. package/src/toolbar/bubbleToolbar.spec.tsx +2 -1
  514. package/src/toolbar/fixedToolbar.spec.tsx +4 -2
  515. package/src/toolbar/icons.tsx +113 -323
  516. package/src/toolbar/shortcuts.ts +77 -24
  517. package/src/toolbar/toolbarPrimitives.spec.tsx +29 -1
  518. package/src/toolbar/toolbarSubComponents.spec.tsx +4 -2
  519. package/src/toolbar/useHorizontalScroll.spec.ts +67 -0
  520. package/src/toolbar/useHorizontalScroll.tsx +39 -12
  521. package/src/toolbar/useRovingFocus.spec.tsx +100 -0
  522. package/src/toolbar/useRovingFocus.ts +82 -0
  523. package/src/types.spec.ts +40 -1
  524. package/src/types.ts +28 -0
  525. package/types/RichEditor.d.ts +51 -0
  526. package/types/RichEditor.d.ts.map +1 -0
  527. package/types/RichEditor.native.d.ts +59 -0
  528. package/types/RichEditor.native.d.ts.map +1 -0
  529. package/types/RichTextEditor/index.d.ts +71 -0
  530. package/types/RichTextEditor/index.d.ts.map +1 -0
  531. package/types/constants.d.ts +49 -0
  532. package/types/constants.d.ts.map +1 -0
  533. package/types/context.d.ts +10 -0
  534. package/types/context.d.ts.map +1 -0
  535. package/types/editor/BlockDragHandle.d.ts +8 -0
  536. package/types/editor/BlockDragHandle.d.ts.map +1 -0
  537. package/types/editor/MarkdownPaste.d.ts +8 -0
  538. package/types/editor/MarkdownPaste.d.ts.map +1 -0
  539. package/types/editor/SlashCommands.d.ts +24 -0
  540. package/types/editor/SlashCommands.d.ts.map +1 -0
  541. package/types/editor/TentapEditor.native.d.ts +21 -0
  542. package/types/editor/TentapEditor.native.d.ts.map +1 -0
  543. package/types/editor/TiptapEditor.d.ts +24 -0
  544. package/types/editor/TiptapEditor.d.ts.map +1 -0
  545. package/types/editor/blockAnchor.d.ts +25 -0
  546. package/types/editor/blockAnchor.d.ts.map +1 -0
  547. package/types/editor/codeBlockPreview.d.ts +51 -0
  548. package/types/editor/codeBlockPreview.d.ts.map +1 -0
  549. package/types/editor/editorStyles.d.ts +25 -0
  550. package/types/editor/editorStyles.d.ts.map +1 -0
  551. package/types/editor/emoji.d.ts +45 -0
  552. package/types/editor/emoji.d.ts.map +1 -0
  553. package/types/editor/index.d.ts +11 -0
  554. package/types/editor/index.d.ts.map +1 -0
  555. package/types/editor/lazyKatex.d.ts +33 -0
  556. package/types/editor/lazyKatex.d.ts.map +1 -0
  557. package/types/editor/markdown.d.ts +24 -0
  558. package/types/editor/markdown.d.ts.map +1 -0
  559. package/types/editor/mathematics.d.ts +44 -0
  560. package/types/editor/mathematics.d.ts.map +1 -0
  561. package/types/editor/media.d.ts +32 -0
  562. package/types/editor/media.d.ts.map +1 -0
  563. package/types/editor/mentions.d.ts +15 -0
  564. package/types/editor/mentions.d.ts.map +1 -0
  565. package/types/editor/pasteCleanup.d.ts +24 -0
  566. package/types/editor/pasteCleanup.d.ts.map +1 -0
  567. package/types/editor/suggestionPopup.d.ts +113 -0
  568. package/types/editor/suggestionPopup.d.ts.map +1 -0
  569. package/types/editor/types.d.ts +80 -0
  570. package/types/editor/types.d.ts.map +1 -0
  571. package/types/editor/useEditorState.d.ts +19 -0
  572. package/types/editor/useEditorState.d.ts.map +1 -0
  573. package/types/index.d.ts +11 -0
  574. package/types/index.d.ts.map +1 -0
  575. package/types/preview.d.ts +44 -0
  576. package/types/preview.d.ts.map +1 -0
  577. package/types/shared/t.d.ts +10 -0
  578. package/types/shared/t.d.ts.map +1 -0
  579. package/types/shared/url.d.ts +9 -0
  580. package/types/shared/url.d.ts.map +1 -0
  581. package/types/styled.d.ts +40 -0
  582. package/types/styled.d.ts.map +1 -0
  583. package/types/toolbar/BubbleToolbar.d.ts +23 -0
  584. package/types/toolbar/BubbleToolbar.d.ts.map +1 -0
  585. package/types/toolbar/CodeBlockBubble.d.ts +10 -0
  586. package/types/toolbar/CodeBlockBubble.d.ts.map +1 -0
  587. package/types/toolbar/ColorPicker.d.ts +15 -0
  588. package/types/toolbar/ColorPicker.d.ts.map +1 -0
  589. package/types/toolbar/ColorPicker.native.d.ts +20 -0
  590. package/types/toolbar/ColorPicker.native.d.ts.map +1 -0
  591. package/types/toolbar/FixedToolbar.d.ts +32 -0
  592. package/types/toolbar/FixedToolbar.d.ts.map +1 -0
  593. package/types/toolbar/FixedToolbar.native.d.ts +30 -0
  594. package/types/toolbar/FixedToolbar.native.d.ts.map +1 -0
  595. package/types/toolbar/HeadingPicker.d.ts +14 -0
  596. package/types/toolbar/HeadingPicker.d.ts.map +1 -0
  597. package/types/toolbar/ImageBubble.d.ts +10 -0
  598. package/types/toolbar/ImageBubble.d.ts.map +1 -0
  599. package/types/toolbar/ImageDialog.d.ts +12 -0
  600. package/types/toolbar/ImageDialog.d.ts.map +1 -0
  601. package/types/toolbar/ImageDialog.native.d.ts +15 -0
  602. package/types/toolbar/ImageDialog.native.d.ts.map +1 -0
  603. package/types/toolbar/LinkBubble.d.ts +10 -0
  604. package/types/toolbar/LinkBubble.d.ts.map +1 -0
  605. package/types/toolbar/LinkDialog.d.ts +20 -0
  606. package/types/toolbar/LinkDialog.d.ts.map +1 -0
  607. package/types/toolbar/LinkDialog.native.d.ts +18 -0
  608. package/types/toolbar/LinkDialog.native.d.ts.map +1 -0
  609. package/types/toolbar/ListPicker.d.ts +14 -0
  610. package/types/toolbar/ListPicker.d.ts.map +1 -0
  611. package/types/toolbar/MathBubble.d.ts +11 -0
  612. package/types/toolbar/MathBubble.d.ts.map +1 -0
  613. package/types/toolbar/MoreDropdown.d.ts +13 -0
  614. package/types/toolbar/MoreDropdown.d.ts.map +1 -0
  615. package/types/toolbar/ResizeHandle.d.ts +11 -0
  616. package/types/toolbar/ResizeHandle.d.ts.map +1 -0
  617. package/types/toolbar/StatusBar.d.ts +11 -0
  618. package/types/toolbar/StatusBar.d.ts.map +1 -0
  619. package/types/toolbar/TableBubble.d.ts +10 -0
  620. package/types/toolbar/TableBubble.d.ts.map +1 -0
  621. package/types/toolbar/ToolbarButton.d.ts +35 -0
  622. package/types/toolbar/ToolbarButton.d.ts.map +1 -0
  623. package/types/toolbar/ToolbarButton.native.d.ts +30 -0
  624. package/types/toolbar/ToolbarButton.native.d.ts.map +1 -0
  625. package/types/toolbar/ToolbarGroup.d.ts +14 -0
  626. package/types/toolbar/ToolbarGroup.d.ts.map +1 -0
  627. package/types/toolbar/icons.d.ts +52 -0
  628. package/types/toolbar/icons.d.ts.map +1 -0
  629. package/types/toolbar/icons.native.d.ts +41 -0
  630. package/types/toolbar/icons.native.d.ts.map +1 -0
  631. package/types/toolbar/shortcuts.d.ts +34 -0
  632. package/types/toolbar/shortcuts.d.ts.map +1 -0
  633. package/types/toolbar/useHorizontalScroll.d.ts +43 -0
  634. package/types/toolbar/useHorizontalScroll.d.ts.map +1 -0
  635. package/types/toolbar/useRovingFocus.d.ts +10 -0
  636. package/types/toolbar/useRovingFocus.d.ts.map +1 -0
  637. package/types/types.d.ts +125 -0
  638. package/types/types.d.ts.map +1 -0
  639. package/dist/cjs/RichEditor.stories.cjs +0 -327
  640. package/dist/cjs/RichEditor.stories.native.js +0 -342
  641. package/dist/cjs/RichEditor.stories.native.js.map +0 -1
  642. package/dist/esm/RichEditor.stories.mjs +0 -291
  643. package/dist/esm/RichEditor.stories.mjs.map +0 -1
  644. package/dist/esm/RichEditor.stories.native.js +0 -303
  645. package/dist/esm/RichEditor.stories.native.js.map +0 -1
  646. package/dist/jsx/RichEditor.stories.mjs +0 -291
  647. package/dist/jsx/RichEditor.stories.mjs.map +0 -1
  648. package/dist/jsx/RichEditor.stories.native.js +0 -342
  649. package/dist/jsx/RichEditor.stories.native.js.map +0 -1
@@ -14,6 +14,10 @@ import { NATIVE_SUPPORTED_COMMANDS } from "../constants";
14
14
  import { ToolbarFrame } from "../styled";
15
15
  import { ToolbarButton } from "./ToolbarButton";
16
16
  import { ToolbarGroup } from "./ToolbarGroup";
17
+ import { TextColorPicker, HighlightColorPicker } from "./ColorPicker";
18
+ import { LinkDialog } from "./LinkDialog";
19
+ import { ImageDialog } from "./ImageDialog";
20
+ import { t } from "../shared/t";
17
21
  import {
18
22
  UndoIcon,
19
23
  RedoIcon,
@@ -27,10 +31,6 @@ import {
27
31
  AlignJustifyIcon,
28
32
  BlockquoteIcon,
29
33
  ClearFormattingIcon,
30
- LinkIcon,
31
- ImageIcon,
32
- TextColorIcon,
33
- HighlightIcon,
34
34
  } from "./icons";
35
35
 
36
36
  // ===========================================================================
@@ -46,6 +46,16 @@ export interface FixedToolbarProps {
46
46
  sections?: ToolbarSection[];
47
47
  /** Whether the toolbar has an error state */
48
48
  hasError?: boolean;
49
+ /**
50
+ * Which edge the toolbar docks to (default: "top"). "bottom" flips the
51
+ * hairline to the top edge -- used by the fullscreen modal where the
52
+ * toolbar rides above the keyboard.
53
+ */
54
+ docked?: "top" | "bottom";
55
+ /** Interface parity with web (native fullscreen is the modal; no toggle button) */
56
+ fullscreen?: boolean;
57
+ /** Interface parity with web (ignored on native) */
58
+ onFullscreenToggle?: () => void;
49
59
  }
50
60
 
51
61
  // ===========================================================================
@@ -82,6 +92,7 @@ export function FixedToolbar({
82
92
  state = defaultEditorState,
83
93
  sections,
84
94
  hasError,
95
+ docked = "top",
85
96
  }: FixedToolbarProps) {
86
97
  const executeCommand = useCallback(
87
98
  (command: EditorCommand, payload?: any) => {
@@ -130,7 +141,14 @@ export function FixedToolbar({
130
141
  const clearVisible = visible("clear") && isNativeSupported("clearFormatting");
131
142
 
132
143
  return (
133
- <ToolbarFrame hasError={hasError}>
144
+ <ToolbarFrame
145
+ hasError={hasError}
146
+ {...(docked === "bottom" && {
147
+ borderBottomWidth: 0,
148
+ borderTopWidth: 1,
149
+ borderTopColor: hasError ? "$red10" : ("$color6" as any),
150
+ })}
151
+ >
134
152
  <ScrollView
135
153
  horizontal
136
154
  showsHorizontalScrollIndicator={false}
@@ -143,7 +161,7 @@ export function FixedToolbar({
143
161
  <ToolbarButton
144
162
  disabled={!state.canUndo}
145
163
  onPress={() => executeCommand("undo")}
146
- aria-label="Undo"
164
+ aria-label={t("Undo")}
147
165
  >
148
166
  <UndoIcon />
149
167
  </ToolbarButton>
@@ -152,7 +170,7 @@ export function FixedToolbar({
152
170
  <ToolbarButton
153
171
  disabled={!state.canRedo}
154
172
  onPress={() => executeCommand("redo")}
155
- aria-label="Redo"
173
+ aria-label={t("Redo")}
156
174
  >
157
175
  <RedoIcon />
158
176
  </ToolbarButton>
@@ -165,7 +183,7 @@ export function FixedToolbar({
165
183
  <ToolbarButton
166
184
  active={state.isBold}
167
185
  onPress={() => executeCommand("bold")}
168
- aria-label="Bold"
186
+ aria-label={t("Bold")}
169
187
  >
170
188
  <BoldIcon>B</BoldIcon>
171
189
  </ToolbarButton>
@@ -174,7 +192,7 @@ export function FixedToolbar({
174
192
  <ToolbarButton
175
193
  active={state.isItalic}
176
194
  onPress={() => executeCommand("italic")}
177
- aria-label="Italic"
195
+ aria-label={t("Italic")}
178
196
  >
179
197
  <ItalicIcon>I</ItalicIcon>
180
198
  </ToolbarButton>
@@ -183,7 +201,7 @@ export function FixedToolbar({
183
201
  <ToolbarButton
184
202
  active={state.isUnderline}
185
203
  onPress={() => executeCommand("underline")}
186
- aria-label="Underline"
204
+ aria-label={t("Underline")}
187
205
  >
188
206
  <UnderlineIcon>U</UnderlineIcon>
189
207
  </ToolbarButton>
@@ -192,7 +210,7 @@ export function FixedToolbar({
192
210
  <ToolbarButton
193
211
  active={state.isStrike}
194
212
  onPress={() => executeCommand("strike")}
195
- aria-label="Strikethrough"
213
+ aria-label={t("Strikethrough")}
196
214
  >
197
215
  <StrikeIcon>S</StrikeIcon>
198
216
  </ToolbarButton>
@@ -201,7 +219,7 @@ export function FixedToolbar({
201
219
  <ToolbarButton
202
220
  active={state.isCode}
203
221
  onPress={() => executeCommand("code")}
204
- aria-label="Code"
222
+ aria-label={t("Code")}
205
223
  >
206
224
  <Text>{"</>"}</Text>
207
225
  </ToolbarButton>
@@ -209,25 +227,15 @@ export function FixedToolbar({
209
227
  {/* subscript and superscript are NOT supported on native -- hidden entirely */}
210
228
  </ToolbarGroup>
211
229
 
212
- {/* Color */}
230
+ {/* Color — must open a picker; bare textColor/highlight with no
231
+ payload is a no-op at best and historically wiped Tentap content
232
+ when ColorBridge received an undefined setColor. */}
213
233
  <ToolbarGroup visible={colorVisible}>
214
234
  {isNativeSupported("textColor") && (
215
- <ToolbarButton
216
- active={!!state.textColor}
217
- onPress={() => executeCommand("textColor")}
218
- aria-label="Text Color"
219
- >
220
- <TextColorIcon color={state.textColor} />
221
- </ToolbarButton>
235
+ <TextColorPicker editorRef={editorRef} state={state} />
222
236
  )}
223
237
  {isNativeSupported("highlight") && (
224
- <ToolbarButton
225
- active={!!state.highlightColor}
226
- onPress={() => executeCommand("highlight")}
227
- aria-label="Highlight Color"
228
- >
229
- <HighlightIcon color={state.highlightColor} />
230
- </ToolbarButton>
238
+ <HighlightColorPicker editorRef={editorRef} state={state} />
231
239
  )}
232
240
  </ToolbarGroup>
233
241
 
@@ -237,7 +245,7 @@ export function FixedToolbar({
237
245
  <ToolbarButton
238
246
  active={state.isHeading1}
239
247
  onPress={() => executeCommand("heading1")}
240
- aria-label="Heading 1"
248
+ aria-label={t("Heading 1")}
241
249
  >
242
250
  <Text fontWeight="700">H1</Text>
243
251
  </ToolbarButton>
@@ -246,7 +254,7 @@ export function FixedToolbar({
246
254
  <ToolbarButton
247
255
  active={state.isHeading2}
248
256
  onPress={() => executeCommand("heading2")}
249
- aria-label="Heading 2"
257
+ aria-label={t("Heading 2")}
250
258
  >
251
259
  <Text fontWeight="600">H2</Text>
252
260
  </ToolbarButton>
@@ -255,7 +263,7 @@ export function FixedToolbar({
255
263
  <ToolbarButton
256
264
  active={state.isHeading3}
257
265
  onPress={() => executeCommand("heading3")}
258
- aria-label="Heading 3"
266
+ aria-label={t("Heading 3")}
259
267
  >
260
268
  <Text fontWeight="600">H3</Text>
261
269
  </ToolbarButton>
@@ -268,7 +276,7 @@ export function FixedToolbar({
268
276
  <ToolbarButton
269
277
  active={state.textAlign === "left"}
270
278
  onPress={() => executeCommand("alignLeft")}
271
- aria-label="Align Left"
279
+ aria-label={t("Align Left")}
272
280
  >
273
281
  <AlignLeftIcon />
274
282
  </ToolbarButton>
@@ -277,7 +285,7 @@ export function FixedToolbar({
277
285
  <ToolbarButton
278
286
  active={state.textAlign === "center"}
279
287
  onPress={() => executeCommand("alignCenter")}
280
- aria-label="Align Center"
288
+ aria-label={t("Align Center")}
281
289
  >
282
290
  <AlignCenterIcon />
283
291
  </ToolbarButton>
@@ -286,7 +294,7 @@ export function FixedToolbar({
286
294
  <ToolbarButton
287
295
  active={state.textAlign === "right"}
288
296
  onPress={() => executeCommand("alignRight")}
289
- aria-label="Align Right"
297
+ aria-label={t("Align Right")}
290
298
  >
291
299
  <AlignRightIcon />
292
300
  </ToolbarButton>
@@ -295,7 +303,7 @@ export function FixedToolbar({
295
303
  <ToolbarButton
296
304
  active={state.textAlign === "justify"}
297
305
  onPress={() => executeCommand("alignJustify")}
298
- aria-label="Justify"
306
+ aria-label={t("Justify")}
299
307
  >
300
308
  <AlignJustifyIcon />
301
309
  </ToolbarButton>
@@ -308,7 +316,7 @@ export function FixedToolbar({
308
316
  <ToolbarButton
309
317
  active={state.isBulletList}
310
318
  onPress={() => executeCommand("bulletList")}
311
- aria-label="Bullet List"
319
+ aria-label={t("Bullet List")}
312
320
  >
313
321
  <Text>{"•"}</Text>
314
322
  </ToolbarButton>
@@ -317,7 +325,7 @@ export function FixedToolbar({
317
325
  <ToolbarButton
318
326
  active={state.isOrderedList}
319
327
  onPress={() => executeCommand("orderedList")}
320
- aria-label="Ordered List"
328
+ aria-label={t("Ordered List")}
321
329
  >
322
330
  <Text>{"1."}</Text>
323
331
  </ToolbarButton>
@@ -326,7 +334,7 @@ export function FixedToolbar({
326
334
  <ToolbarButton
327
335
  active={state.isTaskList}
328
336
  onPress={() => executeCommand("taskList")}
329
- aria-label="Task List"
337
+ aria-label={t("Task List")}
330
338
  >
331
339
  <Text>{"[ ]"}</Text>
332
340
  </ToolbarButton>
@@ -339,7 +347,7 @@ export function FixedToolbar({
339
347
  <ToolbarButton
340
348
  active={state.isBlockquote}
341
349
  onPress={() => executeCommand("blockquote")}
342
- aria-label="Blockquote"
350
+ aria-label={t("Blockquote")}
343
351
  >
344
352
  <BlockquoteIcon />
345
353
  </ToolbarButton>
@@ -347,29 +355,21 @@ export function FixedToolbar({
347
355
  {/* codeBlock and horizontalRule are NOT supported on native -- hidden entirely */}
348
356
  </ToolbarGroup>
349
357
 
350
- {/* Link */}
358
+ {/* Link (modal dialog -- a bare "link" command has no href and is a no-op) */}
351
359
  <ToolbarGroup visible={linkVisible}>
352
- <ToolbarButton
353
- active={state.isLink}
354
- onPress={() => executeCommand("link")}
355
- aria-label="Link"
356
- >
357
- <LinkIcon />
358
- </ToolbarButton>
360
+ <LinkDialog editorRef={editorRef} state={state} />
359
361
  </ToolbarGroup>
360
362
 
361
- {/* Image */}
363
+ {/* Image (modal dialog -- a bare "image" command has no src and is a no-op) */}
362
364
  <ToolbarGroup visible={imageVisible} showSeparator={!clearVisible}>
363
- <ToolbarButton onPress={() => executeCommand("image")} aria-label="Insert Image">
364
- <ImageIcon />
365
- </ToolbarButton>
365
+ <ImageDialog editorRef={editorRef} />
366
366
  </ToolbarGroup>
367
367
 
368
368
  {/* Clear formatting (not supported on native -- hidden entirely) */}
369
369
  <ToolbarGroup visible={clearVisible} showSeparator={false}>
370
370
  <ToolbarButton
371
371
  onPress={() => executeCommand("clearFormatting")}
372
- aria-label="Clear Formatting"
372
+ aria-label={t("Clear Formatting")}
373
373
  >
374
374
  <ClearFormattingIcon />
375
375
  </ToolbarButton>
@@ -29,6 +29,8 @@ import {
29
29
  StrikeIcon,
30
30
  BlockquoteIcon,
31
31
  CodeBlockIcon,
32
+ ExpandIcon,
33
+ CompressIcon,
32
34
  } from "./icons";
33
35
  import { TextColorPicker, HighlightColorPicker } from "./ColorPicker";
34
36
  import { HeadingPicker } from "./HeadingPicker";
@@ -37,6 +39,8 @@ import { LinkDialog } from "./LinkDialog";
37
39
  import { ImageDialog } from "./ImageDialog";
38
40
  import { MoreDropdown } from "./MoreDropdown";
39
41
  import { SHORTCUTS } from "./shortcuts";
42
+ import { useRovingFocus } from "./useRovingFocus";
43
+ import { t } from "../shared/t";
40
44
 
41
45
  // ===========================================================================
42
46
  // Types
@@ -51,6 +55,16 @@ export interface FixedToolbarProps {
51
55
  sections?: ToolbarSection[];
52
56
  /** Whether the toolbar has an error state */
53
57
  hasError?: boolean;
58
+ /** Whether the editor is in fullscreen mode */
59
+ fullscreen?: boolean;
60
+ /** Shows a fullscreen toggle at the toolbar's right end when provided */
61
+ onFullscreenToggle?: () => void;
62
+ /** Native only: which edge the toolbar docks to (ignored on web) */
63
+ docked?: "top" | "bottom";
64
+ /** Controlled link-dialog open state (Mod+K wiring; internal when omitted) */
65
+ linkDialogOpen?: boolean;
66
+ /** Called when the link-dialog open state changes */
67
+ onLinkDialogOpenChange?: (open: boolean) => void;
54
68
  }
55
69
 
56
70
  // ===========================================================================
@@ -71,11 +85,17 @@ export function FixedToolbar({
71
85
  state = defaultEditorState,
72
86
  sections,
73
87
  hasError,
88
+ fullscreen,
89
+ onFullscreenToggle,
90
+ linkDialogOpen,
91
+ onLinkDialogOpenChange,
74
92
  }: FixedToolbarProps) {
75
93
  const scrollerRef = useRef<HTMLDivElement>(null);
76
94
  const { arrowLeft, arrowRight, arrowScrollDirRef, updateArrows } = useHorizontalScrollArrows();
77
95
 
78
96
  useHorizontalScroll(scrollerRef);
97
+ // WAI-ARIA toolbar pattern: one tab stop, arrows move between controls
98
+ useRovingFocus(scrollerRef);
79
99
 
80
100
  useEffect(() => {
81
101
  const el = scrollerRef.current;
@@ -125,14 +145,20 @@ export function FixedToolbar({
125
145
  visible={arrowLeft}
126
146
  arrowScrollDirRef={arrowScrollDirRef}
127
147
  />
128
- <div ref={scrollerRef} className="toolbar-scroller">
148
+ <div
149
+ ref={scrollerRef}
150
+ className="toolbar-scroller"
151
+ role="toolbar"
152
+ aria-label={t("Formatting toolbar")}
153
+ aria-orientation="horizontal"
154
+ >
129
155
  <XStack alignItems="center" gap="$1" paddingHorizontal="$2">
130
156
  {/* History */}
131
157
  <ToolbarGroup visible={visible("history")}>
132
158
  <ToolbarButton
133
159
  disabled={!state.canUndo}
134
160
  onPress={() => executeCommand("undo")}
135
- aria-label="Undo"
161
+ aria-label={t("Undo")}
136
162
  tooltip={SHORTCUTS.undo}
137
163
  >
138
164
  <UndoIcon />
@@ -140,7 +166,7 @@ export function FixedToolbar({
140
166
  <ToolbarButton
141
167
  disabled={!state.canRedo}
142
168
  onPress={() => executeCommand("redo")}
143
- aria-label="Redo"
169
+ aria-label={t("Redo")}
144
170
  tooltip={SHORTCUTS.redo}
145
171
  >
146
172
  <RedoIcon />
@@ -152,7 +178,7 @@ export function FixedToolbar({
152
178
  <ToolbarButton
153
179
  active={state.isBold}
154
180
  onPress={() => executeCommand("bold")}
155
- aria-label="Bold"
181
+ aria-label={t("Bold")}
156
182
  tooltip={SHORTCUTS.bold}
157
183
  >
158
184
  <BoldIcon>B</BoldIcon>
@@ -160,7 +186,7 @@ export function FixedToolbar({
160
186
  <ToolbarButton
161
187
  active={state.isItalic}
162
188
  onPress={() => executeCommand("italic")}
163
- aria-label="Italic"
189
+ aria-label={t("Italic")}
164
190
  tooltip={SHORTCUTS.italic}
165
191
  >
166
192
  <ItalicIcon>I</ItalicIcon>
@@ -168,7 +194,7 @@ export function FixedToolbar({
168
194
  <ToolbarButton
169
195
  active={state.isUnderline}
170
196
  onPress={() => executeCommand("underline")}
171
- aria-label="Underline"
197
+ aria-label={t("Underline")}
172
198
  tooltip={SHORTCUTS.underline}
173
199
  >
174
200
  <UnderlineIcon>U</UnderlineIcon>
@@ -176,7 +202,7 @@ export function FixedToolbar({
176
202
  <ToolbarButton
177
203
  active={state.isStrike}
178
204
  onPress={() => executeCommand("strike")}
179
- aria-label="Strikethrough"
205
+ aria-label={t("Strikethrough")}
180
206
  tooltip={SHORTCUTS.strike}
181
207
  >
182
208
  <StrikeIcon>S</StrikeIcon>
@@ -204,7 +230,7 @@ export function FixedToolbar({
204
230
  <ToolbarButton
205
231
  active={state.isBlockquote}
206
232
  onPress={() => executeCommand("blockquote")}
207
- aria-label="Blockquote"
233
+ aria-label={t("Blockquote")}
208
234
  tooltip={SHORTCUTS.blockquote}
209
235
  >
210
236
  <BlockquoteIcon />
@@ -212,7 +238,7 @@ export function FixedToolbar({
212
238
  <ToolbarButton
213
239
  active={state.isCodeBlock}
214
240
  onPress={() => executeCommand("codeBlock")}
215
- aria-label="Code Block"
241
+ aria-label={t("Code Block")}
216
242
  tooltip={SHORTCUTS.codeBlock}
217
243
  >
218
244
  <CodeBlockIcon />
@@ -221,7 +247,12 @@ export function FixedToolbar({
221
247
 
222
248
  {/* Link */}
223
249
  <ToolbarGroup visible={visible("link")}>
224
- <LinkDialog editorRef={editorRef} state={state} />
250
+ <LinkDialog
251
+ editorRef={editorRef}
252
+ state={state}
253
+ open={linkDialogOpen}
254
+ onOpenChange={onLinkDialogOpenChange}
255
+ />
225
256
  </ToolbarGroup>
226
257
 
227
258
  {/* Image */}
@@ -247,6 +278,19 @@ export function FixedToolbar({
247
278
  visible={arrowRight}
248
279
  arrowScrollDirRef={arrowScrollDirRef}
249
280
  />
281
+ {onFullscreenToggle && (
282
+ <XStack alignItems="center" paddingHorizontal="$1">
283
+ <ToolbarButton
284
+ active={fullscreen}
285
+ onPress={onFullscreenToggle}
286
+ aria-label={t("Fullscreen")}
287
+ aria-pressed={!!fullscreen}
288
+ tooltip={fullscreen ? t("Exit fullscreen (Esc)") : t("Fullscreen")}
289
+ >
290
+ {fullscreen ? <CompressIcon /> : <ExpandIcon />}
291
+ </ToolbarButton>
292
+ </XStack>
293
+ )}
250
294
  </ToolbarFrame>
251
295
  );
252
296
  }
@@ -2,12 +2,12 @@
2
2
  * Heading picker dropdown for selecting heading levels
3
3
  */
4
4
 
5
- import { useState } from "react";
6
- import { useResolvedKnobs } from "@multiplatform.one/theme";
7
- import { Popover, Text, YStack } from "tamagui";
5
+ import { useRef, useState } from "react";
6
+ import { DropdownMenu } from "@multiplatform.one/components";
7
+ import { Text } from "tamagui";
8
8
  import type { EditorCommand, EditorState, RichEditorRef } from "../types";
9
- import { DropdownMenuItemFrame } from "../styled";
10
9
  import { ToolbarDropdownButton } from "./ToolbarButton";
10
+ import { t } from "../shared/t";
11
11
 
12
12
  // ===========================================================================
13
13
  // Types
@@ -28,7 +28,8 @@ export interface HeadingPickerProps {
28
28
 
29
29
  interface HeadingOption {
30
30
  label: string;
31
- description: string;
31
+ /** Lazy so t() resolves at render time, not module import */
32
+ description: () => string;
32
33
  command: EditorCommand;
33
34
  stateKey: keyof EditorState;
34
35
  fontSize: string;
@@ -38,7 +39,7 @@ interface HeadingOption {
38
39
  const HEADING_OPTIONS: HeadingOption[] = [
39
40
  {
40
41
  label: "H1",
41
- description: "Heading 1",
42
+ description: () => t("Heading 1"),
42
43
  command: "heading1",
43
44
  stateKey: "isHeading1",
44
45
  fontSize: "$5",
@@ -46,7 +47,7 @@ const HEADING_OPTIONS: HeadingOption[] = [
46
47
  },
47
48
  {
48
49
  label: "H2",
49
- description: "Heading 2",
50
+ description: () => t("Heading 2"),
50
51
  command: "heading2",
51
52
  stateKey: "isHeading2",
52
53
  fontSize: "$4",
@@ -54,7 +55,7 @@ const HEADING_OPTIONS: HeadingOption[] = [
54
55
  },
55
56
  {
56
57
  label: "H3",
57
- description: "Heading 3",
58
+ description: () => t("Heading 3"),
58
59
  command: "heading3",
59
60
  stateKey: "isHeading3",
60
61
  fontSize: "$3",
@@ -62,7 +63,7 @@ const HEADING_OPTIONS: HeadingOption[] = [
62
63
  },
63
64
  {
64
65
  label: "H4",
65
- description: "Heading 4",
66
+ description: () => t("Heading 4"),
66
67
  command: "heading4",
67
68
  stateKey: "isHeading4",
68
69
  fontSize: "$2",
@@ -70,7 +71,7 @@ const HEADING_OPTIONS: HeadingOption[] = [
70
71
  },
71
72
  {
72
73
  label: "H5",
73
- description: "Heading 5",
74
+ description: () => t("Heading 5"),
74
75
  command: "heading5",
75
76
  stateKey: "isHeading5",
76
77
  fontSize: "$1",
@@ -78,7 +79,7 @@ const HEADING_OPTIONS: HeadingOption[] = [
78
79
  },
79
80
  {
80
81
  label: "H6",
81
- description: "Heading 6",
82
+ description: () => t("Heading 6"),
82
83
  command: "heading6",
83
84
  stateKey: "isHeading6",
84
85
  fontSize: "$1",
@@ -86,7 +87,7 @@ const HEADING_OPTIONS: HeadingOption[] = [
86
87
  },
87
88
  {
88
89
  label: "P",
89
- description: "Paragraph",
90
+ description: () => t("Paragraph"),
90
91
  command: "paragraph",
91
92
  stateKey: "isParagraph",
92
93
  fontSize: "$3",
@@ -120,50 +121,57 @@ function isAnyHeadingActive(state: EditorState): boolean {
120
121
  }
121
122
 
122
123
  export function HeadingPicker({ editorRef, state, disabled }: HeadingPickerProps) {
123
- const { knobProps } = useResolvedKnobs();
124
124
  const [open, setOpen] = useState(false);
125
+ const selectedRef = useRef(false);
125
126
 
126
127
  return (
127
- <Popover open={open} onOpenChange={setOpen} placement="bottom-start">
128
- <Popover.Trigger asChild>
128
+ <DropdownMenu open={open} onOpenChange={setOpen} placement="bottom-start">
129
+ <DropdownMenu.Trigger asChild>
129
130
  <ToolbarDropdownButton
130
131
  active={isAnyHeadingActive(state)}
131
132
  disabled={disabled}
132
133
  onPress={() => setOpen(true)}
133
- aria-label="Heading"
134
+ aria-label={t("Heading")}
134
135
  >
135
136
  <Text fontWeight="600">{getActiveHeadingLabel(state)}</Text>
136
137
  </ToolbarDropdownButton>
137
- </Popover.Trigger>
138
- <Popover.Content
139
- {...knobProps.panelPadding}
140
- backgroundColor="$background"
141
- borderWidth={1}
142
- borderColor="$borderColor"
143
- borderRadius={knobProps.borderRadius.borderRadius}
144
- elevation={knobProps.elevation}
145
- enterStyle={{ opacity: 0, y: -5 }}
146
- exitStyle={{ opacity: 0, y: -5 }}
138
+ </DropdownMenu.Trigger>
139
+ <DropdownMenu.Content
140
+ minWidth={200}
141
+ // Toolbar menus must not steal focus back to the trigger on
142
+ // select-close: the user expects to keep typing, so focus returns
143
+ // to the editor. Escape still restores the trigger via the menu's
144
+ // own close().
145
+ onCloseAutoFocus={(event) => {
146
+ event.preventDefault();
147
+ if (selectedRef.current) {
148
+ selectedRef.current = false;
149
+ editorRef.current?.focus();
150
+ }
151
+ }}
147
152
  >
148
- <YStack gap="$1" minWidth={140}>
149
- {HEADING_OPTIONS.map((option) => (
150
- <DropdownMenuItemFrame
153
+ {HEADING_OPTIONS.map((option) => {
154
+ const description = option.description();
155
+ return (
156
+ <DropdownMenu.Item
151
157
  key={option.command}
152
- active={state[option.stateKey] as boolean}
153
- onPress={() => {
158
+ closeOnSelect={false}
159
+ backgroundColor={state[option.stateKey] ? "$color4" : undefined}
160
+ aria-label={description}
161
+ onSelect={() => {
162
+ selectedRef.current = true;
154
163
  editorRef.current?.executeCommand(option.command);
155
164
  setOpen(false);
156
165
  }}
157
- aria-label={option.description}
158
166
  >
159
167
  <Text fontWeight={option.fontWeight as any} fontSize={option.fontSize as any}>
160
168
  {option.label}
161
169
  </Text>
162
- <Text color="$color11">{option.description}</Text>
163
- </DropdownMenuItemFrame>
164
- ))}
165
- </YStack>
166
- </Popover.Content>
167
- </Popover>
170
+ <Text color="$color11"> {description}</Text>
171
+ </DropdownMenu.Item>
172
+ );
173
+ })}
174
+ </DropdownMenu.Content>
175
+ </DropdownMenu>
168
176
  );
169
177
  }