@depup/lexical__react 0.41.0-depup.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 (471) hide show
  1. package/ExtensionComponent.d.ts +42 -0
  2. package/LICENSE +21 -0
  3. package/LexicalAutoEmbedPlugin.d.ts +39 -0
  4. package/LexicalAutoEmbedPlugin.dev.js +146 -0
  5. package/LexicalAutoEmbedPlugin.dev.mjs +141 -0
  6. package/LexicalAutoEmbedPlugin.js +11 -0
  7. package/LexicalAutoEmbedPlugin.js.flow +64 -0
  8. package/LexicalAutoEmbedPlugin.mjs +15 -0
  9. package/LexicalAutoEmbedPlugin.node.mjs +13 -0
  10. package/LexicalAutoEmbedPlugin.prod.js +9 -0
  11. package/LexicalAutoEmbedPlugin.prod.mjs +9 -0
  12. package/LexicalAutoFocusPlugin.d.ts +12 -0
  13. package/LexicalAutoFocusPlugin.dev.js +47 -0
  14. package/LexicalAutoFocusPlugin.dev.mjs +45 -0
  15. package/LexicalAutoFocusPlugin.js +11 -0
  16. package/LexicalAutoFocusPlugin.js.flow +14 -0
  17. package/LexicalAutoFocusPlugin.mjs +12 -0
  18. package/LexicalAutoFocusPlugin.node.mjs +10 -0
  19. package/LexicalAutoFocusPlugin.prod.js +9 -0
  20. package/LexicalAutoFocusPlugin.prod.mjs +9 -0
  21. package/LexicalAutoLinkPlugin.d.ts +16 -0
  22. package/LexicalAutoLinkPlugin.dev.js +56 -0
  23. package/LexicalAutoLinkPlugin.dev.mjs +54 -0
  24. package/LexicalAutoLinkPlugin.js +11 -0
  25. package/LexicalAutoLinkPlugin.js.flow +18 -0
  26. package/LexicalAutoLinkPlugin.mjs +13 -0
  27. package/LexicalAutoLinkPlugin.node.mjs +11 -0
  28. package/LexicalAutoLinkPlugin.prod.js +9 -0
  29. package/LexicalAutoLinkPlugin.prod.mjs +9 -0
  30. package/LexicalBlockWithAlignableContents.d.ts +21 -0
  31. package/LexicalBlockWithAlignableContents.dev.js +81 -0
  32. package/LexicalBlockWithAlignableContents.dev.mjs +79 -0
  33. package/LexicalBlockWithAlignableContents.js +11 -0
  34. package/LexicalBlockWithAlignableContents.js.flow +28 -0
  35. package/LexicalBlockWithAlignableContents.mjs +12 -0
  36. package/LexicalBlockWithAlignableContents.node.mjs +10 -0
  37. package/LexicalBlockWithAlignableContents.prod.js +9 -0
  38. package/LexicalBlockWithAlignableContents.prod.mjs +9 -0
  39. package/LexicalCharacterLimitPlugin.d.ts +15 -0
  40. package/LexicalCharacterLimitPlugin.dev.js +292 -0
  41. package/LexicalCharacterLimitPlugin.dev.mjs +290 -0
  42. package/LexicalCharacterLimitPlugin.js +11 -0
  43. package/LexicalCharacterLimitPlugin.js.flow +12 -0
  44. package/LexicalCharacterLimitPlugin.mjs +12 -0
  45. package/LexicalCharacterLimitPlugin.node.mjs +10 -0
  46. package/LexicalCharacterLimitPlugin.prod.js +9 -0
  47. package/LexicalCharacterLimitPlugin.prod.mjs +9 -0
  48. package/LexicalCheckListPlugin.d.ts +10 -0
  49. package/LexicalCheckListPlugin.dev.js +35 -0
  50. package/LexicalCheckListPlugin.dev.mjs +33 -0
  51. package/LexicalCheckListPlugin.js +11 -0
  52. package/LexicalCheckListPlugin.js.flow +12 -0
  53. package/LexicalCheckListPlugin.mjs +12 -0
  54. package/LexicalCheckListPlugin.node.mjs +10 -0
  55. package/LexicalCheckListPlugin.prod.js +9 -0
  56. package/LexicalCheckListPlugin.prod.mjs +9 -0
  57. package/LexicalClearEditorPlugin.d.ts +13 -0
  58. package/LexicalClearEditorPlugin.dev.js +55 -0
  59. package/LexicalClearEditorPlugin.dev.mjs +53 -0
  60. package/LexicalClearEditorPlugin.js +11 -0
  61. package/LexicalClearEditorPlugin.js.flow +14 -0
  62. package/LexicalClearEditorPlugin.mjs +12 -0
  63. package/LexicalClearEditorPlugin.node.mjs +10 -0
  64. package/LexicalClearEditorPlugin.prod.js +9 -0
  65. package/LexicalClearEditorPlugin.prod.mjs +9 -0
  66. package/LexicalClickableLinkPlugin.d.ts +11 -0
  67. package/LexicalClickableLinkPlugin.dev.js +38 -0
  68. package/LexicalClickableLinkPlugin.dev.mjs +36 -0
  69. package/LexicalClickableLinkPlugin.js +11 -0
  70. package/LexicalClickableLinkPlugin.js.flow +12 -0
  71. package/LexicalClickableLinkPlugin.mjs +12 -0
  72. package/LexicalClickableLinkPlugin.node.mjs +10 -0
  73. package/LexicalClickableLinkPlugin.prod.js +9 -0
  74. package/LexicalClickableLinkPlugin.prod.mjs +9 -0
  75. package/LexicalCollaborationContext.d.ts +19 -0
  76. package/LexicalCollaborationContext.dev.js +69 -0
  77. package/LexicalCollaborationContext.dev.mjs +65 -0
  78. package/LexicalCollaborationContext.js +11 -0
  79. package/LexicalCollaborationContext.js.flow +22 -0
  80. package/LexicalCollaborationContext.mjs +14 -0
  81. package/LexicalCollaborationContext.node.mjs +12 -0
  82. package/LexicalCollaborationContext.prod.js +9 -0
  83. package/LexicalCollaborationContext.prod.mjs +9 -0
  84. package/LexicalCollaborationPlugin.d.ts +39 -0
  85. package/LexicalCollaborationPlugin.dev.js +584 -0
  86. package/LexicalCollaborationPlugin.dev.mjs +569 -0
  87. package/LexicalCollaborationPlugin.js +11 -0
  88. package/LexicalCollaborationPlugin.js.flow +50 -0
  89. package/LexicalCollaborationPlugin.mjs +13 -0
  90. package/LexicalCollaborationPlugin.node.mjs +11 -0
  91. package/LexicalCollaborationPlugin.prod.js +9 -0
  92. package/LexicalCollaborationPlugin.prod.mjs +9 -0
  93. package/LexicalComposer.d.ts +25 -0
  94. package/LexicalComposer.dev.js +134 -0
  95. package/LexicalComposer.dev.mjs +132 -0
  96. package/LexicalComposer.js +11 -0
  97. package/LexicalComposer.js.flow +40 -0
  98. package/LexicalComposer.mjs +12 -0
  99. package/LexicalComposer.node.mjs +10 -0
  100. package/LexicalComposer.prod.js +9 -0
  101. package/LexicalComposer.prod.mjs +9 -0
  102. package/LexicalComposerContext.d.ts +18 -0
  103. package/LexicalComposerContext.dev.js +55 -0
  104. package/LexicalComposerContext.dev.mjs +51 -0
  105. package/LexicalComposerContext.js +11 -0
  106. package/LexicalComposerContext.js.flow +27 -0
  107. package/LexicalComposerContext.mjs +14 -0
  108. package/LexicalComposerContext.node.mjs +12 -0
  109. package/LexicalComposerContext.prod.js +9 -0
  110. package/LexicalComposerContext.prod.mjs +9 -0
  111. package/LexicalContentEditable.d.ts +26 -0
  112. package/LexicalContentEditable.dev.js +242 -0
  113. package/LexicalContentEditable.dev.mjs +239 -0
  114. package/LexicalContentEditable.js +11 -0
  115. package/LexicalContentEditable.js.flow +80 -0
  116. package/LexicalContentEditable.mjs +13 -0
  117. package/LexicalContentEditable.node.mjs +11 -0
  118. package/LexicalContentEditable.prod.js +9 -0
  119. package/LexicalContentEditable.prod.mjs +9 -0
  120. package/LexicalContextMenuPlugin.d.ts +42 -0
  121. package/LexicalContextMenuPlugin.dev.js +526 -0
  122. package/LexicalContextMenuPlugin.dev.mjs +511 -0
  123. package/LexicalContextMenuPlugin.js +11 -0
  124. package/LexicalContextMenuPlugin.js.flow +13 -0
  125. package/LexicalContextMenuPlugin.mjs +13 -0
  126. package/LexicalContextMenuPlugin.node.mjs +11 -0
  127. package/LexicalContextMenuPlugin.prod.js +9 -0
  128. package/LexicalContextMenuPlugin.prod.mjs +9 -0
  129. package/LexicalDecoratorBlockNode.d.ts +25 -0
  130. package/LexicalDecoratorBlockNode.dev.js +59 -0
  131. package/LexicalDecoratorBlockNode.dev.mjs +56 -0
  132. package/LexicalDecoratorBlockNode.js +11 -0
  133. package/LexicalDecoratorBlockNode.js.flow +35 -0
  134. package/LexicalDecoratorBlockNode.mjs +13 -0
  135. package/LexicalDecoratorBlockNode.node.mjs +11 -0
  136. package/LexicalDecoratorBlockNode.prod.js +9 -0
  137. package/LexicalDecoratorBlockNode.prod.mjs +9 -0
  138. package/LexicalDraggableBlockPlugin.d.ts +18 -0
  139. package/LexicalDraggableBlockPlugin.dev.js +655 -0
  140. package/LexicalDraggableBlockPlugin.dev.mjs +653 -0
  141. package/LexicalDraggableBlockPlugin.js +11 -0
  142. package/LexicalDraggableBlockPlugin.js.flow +24 -0
  143. package/LexicalDraggableBlockPlugin.mjs +12 -0
  144. package/LexicalDraggableBlockPlugin.node.mjs +10 -0
  145. package/LexicalDraggableBlockPlugin.prod.js +9 -0
  146. package/LexicalDraggableBlockPlugin.prod.mjs +9 -0
  147. package/LexicalEditorRefPlugin.d.ts +20 -0
  148. package/LexicalEditorRefPlugin.dev.js +58 -0
  149. package/LexicalEditorRefPlugin.dev.mjs +43 -0
  150. package/LexicalEditorRefPlugin.js +11 -0
  151. package/LexicalEditorRefPlugin.js.flow +19 -0
  152. package/LexicalEditorRefPlugin.mjs +12 -0
  153. package/LexicalEditorRefPlugin.node.mjs +10 -0
  154. package/LexicalEditorRefPlugin.prod.js +9 -0
  155. package/LexicalEditorRefPlugin.prod.mjs +9 -0
  156. package/LexicalErrorBoundary.d.ts +13 -0
  157. package/LexicalErrorBoundary.dev.js +40 -0
  158. package/LexicalErrorBoundary.dev.mjs +38 -0
  159. package/LexicalErrorBoundary.js +11 -0
  160. package/LexicalErrorBoundary.js.flow +17 -0
  161. package/LexicalErrorBoundary.mjs +12 -0
  162. package/LexicalErrorBoundary.node.mjs +10 -0
  163. package/LexicalErrorBoundary.prod.js +9 -0
  164. package/LexicalErrorBoundary.prod.mjs +9 -0
  165. package/LexicalExtensionComponent.dev.js +53 -0
  166. package/LexicalExtensionComponent.dev.mjs +51 -0
  167. package/LexicalExtensionComponent.js +11 -0
  168. package/LexicalExtensionComponent.js.flow +12 -0
  169. package/LexicalExtensionComponent.mjs +12 -0
  170. package/LexicalExtensionComponent.node.mjs +10 -0
  171. package/LexicalExtensionComponent.prod.js +9 -0
  172. package/LexicalExtensionComponent.prod.mjs +9 -0
  173. package/LexicalExtensionComposer.d.ts +69 -0
  174. package/LexicalExtensionComposer.dev.js +105 -0
  175. package/LexicalExtensionComposer.dev.mjs +103 -0
  176. package/LexicalExtensionComposer.js +11 -0
  177. package/LexicalExtensionComposer.js.flow +20 -0
  178. package/LexicalExtensionComposer.mjs +12 -0
  179. package/LexicalExtensionComposer.node.mjs +10 -0
  180. package/LexicalExtensionComposer.prod.js +9 -0
  181. package/LexicalExtensionComposer.prod.mjs +9 -0
  182. package/LexicalHashtagPlugin.d.ts +9 -0
  183. package/LexicalHashtagPlugin.dev.js +34 -0
  184. package/LexicalHashtagPlugin.dev.mjs +32 -0
  185. package/LexicalHashtagPlugin.js +11 -0
  186. package/LexicalHashtagPlugin.js.flow +10 -0
  187. package/LexicalHashtagPlugin.mjs +12 -0
  188. package/LexicalHashtagPlugin.node.mjs +10 -0
  189. package/LexicalHashtagPlugin.prod.js +9 -0
  190. package/LexicalHashtagPlugin.prod.mjs +9 -0
  191. package/LexicalHistoryPlugin.d.ts +14 -0
  192. package/LexicalHistoryPlugin.dev.js +48 -0
  193. package/LexicalHistoryPlugin.dev.mjs +46 -0
  194. package/LexicalHistoryPlugin.js +11 -0
  195. package/LexicalHistoryPlugin.js.flow +28 -0
  196. package/LexicalHistoryPlugin.mjs +13 -0
  197. package/LexicalHistoryPlugin.node.mjs +11 -0
  198. package/LexicalHistoryPlugin.prod.js +9 -0
  199. package/LexicalHistoryPlugin.prod.mjs +9 -0
  200. package/LexicalHorizontalRuleNode.d.ts +25 -0
  201. package/LexicalHorizontalRuleNode.dev.js +102 -0
  202. package/LexicalHorizontalRuleNode.dev.mjs +98 -0
  203. package/LexicalHorizontalRuleNode.js +11 -0
  204. package/LexicalHorizontalRuleNode.js.flow +27 -0
  205. package/LexicalHorizontalRuleNode.mjs +15 -0
  206. package/LexicalHorizontalRuleNode.node.mjs +13 -0
  207. package/LexicalHorizontalRuleNode.prod.js +9 -0
  208. package/LexicalHorizontalRuleNode.prod.mjs +9 -0
  209. package/LexicalHorizontalRulePlugin.d.ts +8 -0
  210. package/LexicalHorizontalRulePlugin.dev.js +44 -0
  211. package/LexicalHorizontalRulePlugin.dev.mjs +42 -0
  212. package/LexicalHorizontalRulePlugin.js +11 -0
  213. package/LexicalHorizontalRulePlugin.js.flow +12 -0
  214. package/LexicalHorizontalRulePlugin.mjs +12 -0
  215. package/LexicalHorizontalRulePlugin.node.mjs +10 -0
  216. package/LexicalHorizontalRulePlugin.prod.js +9 -0
  217. package/LexicalHorizontalRulePlugin.prod.mjs +9 -0
  218. package/LexicalLinkPlugin.d.ts +14 -0
  219. package/LexicalLinkPlugin.dev.js +43 -0
  220. package/LexicalLinkPlugin.dev.mjs +41 -0
  221. package/LexicalLinkPlugin.js +11 -0
  222. package/LexicalLinkPlugin.js.flow +21 -0
  223. package/LexicalLinkPlugin.mjs +12 -0
  224. package/LexicalLinkPlugin.node.mjs +10 -0
  225. package/LexicalLinkPlugin.prod.js +9 -0
  226. package/LexicalLinkPlugin.prod.mjs +9 -0
  227. package/LexicalListPlugin.d.ts +20 -0
  228. package/LexicalListPlugin.dev.js +57 -0
  229. package/LexicalListPlugin.dev.mjs +55 -0
  230. package/LexicalListPlugin.js +11 -0
  231. package/LexicalListPlugin.js.flow +15 -0
  232. package/LexicalListPlugin.mjs +12 -0
  233. package/LexicalListPlugin.node.mjs +10 -0
  234. package/LexicalListPlugin.prod.js +9 -0
  235. package/LexicalListPlugin.prod.mjs +9 -0
  236. package/LexicalMarkdownShortcutPlugin.d.ts +12 -0
  237. package/LexicalMarkdownShortcutPlugin.dev.js +55 -0
  238. package/LexicalMarkdownShortcutPlugin.dev.mjs +52 -0
  239. package/LexicalMarkdownShortcutPlugin.js +11 -0
  240. package/LexicalMarkdownShortcutPlugin.js.flow +16 -0
  241. package/LexicalMarkdownShortcutPlugin.mjs +13 -0
  242. package/LexicalMarkdownShortcutPlugin.node.mjs +11 -0
  243. package/LexicalMarkdownShortcutPlugin.prod.js +9 -0
  244. package/LexicalMarkdownShortcutPlugin.prod.mjs +9 -0
  245. package/LexicalNestedComposer.d.ts +57 -0
  246. package/LexicalNestedComposer.dev.js +161 -0
  247. package/LexicalNestedComposer.dev.mjs +159 -0
  248. package/LexicalNestedComposer.js +11 -0
  249. package/LexicalNestedComposer.js.flow +26 -0
  250. package/LexicalNestedComposer.mjs +12 -0
  251. package/LexicalNestedComposer.node.mjs +10 -0
  252. package/LexicalNestedComposer.prod.js +9 -0
  253. package/LexicalNestedComposer.prod.mjs +9 -0
  254. package/LexicalNodeContextMenuPlugin.d.ts +46 -0
  255. package/LexicalNodeContextMenuPlugin.dev.js +257 -0
  256. package/LexicalNodeContextMenuPlugin.dev.mjs +253 -0
  257. package/LexicalNodeContextMenuPlugin.js +11 -0
  258. package/LexicalNodeContextMenuPlugin.js.flow +12 -0
  259. package/LexicalNodeContextMenuPlugin.mjs +14 -0
  260. package/LexicalNodeContextMenuPlugin.node.mjs +12 -0
  261. package/LexicalNodeContextMenuPlugin.prod.js +9 -0
  262. package/LexicalNodeContextMenuPlugin.prod.mjs +9 -0
  263. package/LexicalNodeEventPlugin.d.ts +13 -0
  264. package/LexicalNodeEventPlugin.dev.js +61 -0
  265. package/LexicalNodeEventPlugin.dev.mjs +59 -0
  266. package/LexicalNodeEventPlugin.js +11 -0
  267. package/LexicalNodeEventPlugin.js.flow +20 -0
  268. package/LexicalNodeEventPlugin.mjs +12 -0
  269. package/LexicalNodeEventPlugin.node.mjs +10 -0
  270. package/LexicalNodeEventPlugin.prod.js +9 -0
  271. package/LexicalNodeEventPlugin.prod.mjs +9 -0
  272. package/LexicalNodeMenuPlugin.d.ts +24 -0
  273. package/LexicalNodeMenuPlugin.dev.js +527 -0
  274. package/LexicalNodeMenuPlugin.dev.mjs +524 -0
  275. package/LexicalNodeMenuPlugin.js +11 -0
  276. package/LexicalNodeMenuPlugin.js.flow +64 -0
  277. package/LexicalNodeMenuPlugin.mjs +13 -0
  278. package/LexicalNodeMenuPlugin.node.mjs +11 -0
  279. package/LexicalNodeMenuPlugin.prod.js +9 -0
  280. package/LexicalNodeMenuPlugin.prod.mjs +9 -0
  281. package/LexicalOnChangePlugin.d.ts +13 -0
  282. package/LexicalOnChangePlugin.dev.js +72 -0
  283. package/LexicalOnChangePlugin.dev.mjs +70 -0
  284. package/LexicalOnChangePlugin.js +11 -0
  285. package/LexicalOnChangePlugin.js.flow +16 -0
  286. package/LexicalOnChangePlugin.mjs +12 -0
  287. package/LexicalOnChangePlugin.node.mjs +10 -0
  288. package/LexicalOnChangePlugin.prod.js +9 -0
  289. package/LexicalOnChangePlugin.prod.mjs +9 -0
  290. package/LexicalPlainTextPlugin.d.ts +14 -0
  291. package/LexicalPlainTextPlugin.dev.js +235 -0
  292. package/LexicalPlainTextPlugin.dev.mjs +233 -0
  293. package/LexicalPlainTextPlugin.js +11 -0
  294. package/LexicalPlainTextPlugin.js.flow +29 -0
  295. package/LexicalPlainTextPlugin.mjs +12 -0
  296. package/LexicalPlainTextPlugin.node.mjs +10 -0
  297. package/LexicalPlainTextPlugin.prod.js +9 -0
  298. package/LexicalPlainTextPlugin.prod.mjs +9 -0
  299. package/LexicalReactExtension.dev.js +187 -0
  300. package/LexicalReactExtension.dev.mjs +184 -0
  301. package/LexicalReactExtension.js +11 -0
  302. package/LexicalReactExtension.js.flow +68 -0
  303. package/LexicalReactExtension.mjs +13 -0
  304. package/LexicalReactExtension.node.mjs +11 -0
  305. package/LexicalReactExtension.prod.js +9 -0
  306. package/LexicalReactExtension.prod.mjs +9 -0
  307. package/LexicalReactPluginHostExtension.dev.js +189 -0
  308. package/LexicalReactPluginHostExtension.dev.mjs +181 -0
  309. package/LexicalReactPluginHostExtension.js +11 -0
  310. package/LexicalReactPluginHostExtension.js.flow +84 -0
  311. package/LexicalReactPluginHostExtension.mjs +18 -0
  312. package/LexicalReactPluginHostExtension.node.mjs +16 -0
  313. package/LexicalReactPluginHostExtension.prod.js +9 -0
  314. package/LexicalReactPluginHostExtension.prod.mjs +9 -0
  315. package/LexicalReactProviderExtension.dev.js +33 -0
  316. package/LexicalReactProviderExtension.dev.mjs +31 -0
  317. package/LexicalReactProviderExtension.js +11 -0
  318. package/LexicalReactProviderExtension.js.flow +12 -0
  319. package/LexicalReactProviderExtension.mjs +12 -0
  320. package/LexicalReactProviderExtension.node.mjs +10 -0
  321. package/LexicalReactProviderExtension.prod.js +9 -0
  322. package/LexicalReactProviderExtension.prod.mjs +9 -0
  323. package/LexicalRichTextPlugin.d.ts +14 -0
  324. package/LexicalRichTextPlugin.dev.js +235 -0
  325. package/LexicalRichTextPlugin.dev.mjs +233 -0
  326. package/LexicalRichTextPlugin.js +11 -0
  327. package/LexicalRichTextPlugin.js.flow +29 -0
  328. package/LexicalRichTextPlugin.mjs +12 -0
  329. package/LexicalRichTextPlugin.node.mjs +10 -0
  330. package/LexicalRichTextPlugin.prod.js +9 -0
  331. package/LexicalRichTextPlugin.prod.mjs +9 -0
  332. package/LexicalSelectionAlwaysOnDisplay.d.ts +12 -0
  333. package/LexicalSelectionAlwaysOnDisplay.dev.js +33 -0
  334. package/LexicalSelectionAlwaysOnDisplay.dev.mjs +31 -0
  335. package/LexicalSelectionAlwaysOnDisplay.js +11 -0
  336. package/LexicalSelectionAlwaysOnDisplay.js.flow +15 -0
  337. package/LexicalSelectionAlwaysOnDisplay.mjs +12 -0
  338. package/LexicalSelectionAlwaysOnDisplay.node.mjs +10 -0
  339. package/LexicalSelectionAlwaysOnDisplay.prod.js +9 -0
  340. package/LexicalSelectionAlwaysOnDisplay.prod.mjs +9 -0
  341. package/LexicalTabIndentationPlugin.d.ts +22 -0
  342. package/LexicalTabIndentationPlugin.dev.js +41 -0
  343. package/LexicalTabIndentationPlugin.dev.mjs +39 -0
  344. package/LexicalTabIndentationPlugin.js +11 -0
  345. package/LexicalTabIndentationPlugin.js.flow +21 -0
  346. package/LexicalTabIndentationPlugin.mjs +13 -0
  347. package/LexicalTabIndentationPlugin.node.mjs +11 -0
  348. package/LexicalTabIndentationPlugin.prod.js +9 -0
  349. package/LexicalTabIndentationPlugin.prod.mjs +9 -0
  350. package/LexicalTableOfContentsPlugin.d.ts +20 -0
  351. package/LexicalTableOfContentsPlugin.dev.js +209 -0
  352. package/LexicalTableOfContentsPlugin.dev.mjs +207 -0
  353. package/LexicalTableOfContentsPlugin.js +11 -0
  354. package/LexicalTableOfContentsPlugin.js.flow +18 -0
  355. package/LexicalTableOfContentsPlugin.mjs +12 -0
  356. package/LexicalTableOfContentsPlugin.node.mjs +10 -0
  357. package/LexicalTableOfContentsPlugin.prod.js +9 -0
  358. package/LexicalTableOfContentsPlugin.prod.mjs +9 -0
  359. package/LexicalTablePlugin.d.ts +46 -0
  360. package/LexicalTablePlugin.dev.js +84 -0
  361. package/LexicalTablePlugin.dev.mjs +82 -0
  362. package/LexicalTablePlugin.js +11 -0
  363. package/LexicalTablePlugin.js.flow +15 -0
  364. package/LexicalTablePlugin.mjs +12 -0
  365. package/LexicalTablePlugin.node.mjs +10 -0
  366. package/LexicalTablePlugin.prod.js +9 -0
  367. package/LexicalTablePlugin.prod.mjs +9 -0
  368. package/LexicalTreeView.d.ts +37 -0
  369. package/LexicalTreeView.dev.js +105 -0
  370. package/LexicalTreeView.dev.mjs +91 -0
  371. package/LexicalTreeView.js +11 -0
  372. package/LexicalTreeView.js.flow +21 -0
  373. package/LexicalTreeView.mjs +12 -0
  374. package/LexicalTreeView.node.mjs +10 -0
  375. package/LexicalTreeView.prod.js +9 -0
  376. package/LexicalTreeView.prod.mjs +9 -0
  377. package/LexicalTreeViewExtension.dev.js +57 -0
  378. package/LexicalTreeViewExtension.dev.mjs +54 -0
  379. package/LexicalTreeViewExtension.js +11 -0
  380. package/LexicalTreeViewExtension.js.flow +12 -0
  381. package/LexicalTreeViewExtension.mjs +13 -0
  382. package/LexicalTreeViewExtension.node.mjs +11 -0
  383. package/LexicalTreeViewExtension.prod.js +9 -0
  384. package/LexicalTreeViewExtension.prod.mjs +9 -0
  385. package/LexicalTypeaheadMenuPlugin.d.ts +40 -0
  386. package/LexicalTypeaheadMenuPlugin.dev.js +654 -0
  387. package/LexicalTypeaheadMenuPlugin.dev.mjs +646 -0
  388. package/LexicalTypeaheadMenuPlugin.js +11 -0
  389. package/LexicalTypeaheadMenuPlugin.js.flow +83 -0
  390. package/LexicalTypeaheadMenuPlugin.mjs +18 -0
  391. package/LexicalTypeaheadMenuPlugin.node.mjs +16 -0
  392. package/LexicalTypeaheadMenuPlugin.prod.js +9 -0
  393. package/LexicalTypeaheadMenuPlugin.prod.mjs +9 -0
  394. package/README.md +32 -0
  395. package/ReactExtension.d.ts +41 -0
  396. package/ReactPluginHostExtension.d.ts +56 -0
  397. package/ReactProviderExtension.d.ts +9 -0
  398. package/TreeViewExtension.d.ts +18 -0
  399. package/changes.json +14 -0
  400. package/package.json +1572 -0
  401. package/shared/LegacyDecorators.d.ts +23 -0
  402. package/shared/LexicalContentEditableElement.d.ts +43 -0
  403. package/shared/LexicalMenu.d.ts +52 -0
  404. package/shared/buildEditorComponent.d.ts +11 -0
  405. package/shared/mergeRefs.d.ts +9 -0
  406. package/shared/point.d.ts +21 -0
  407. package/shared/rect.d.ts +45 -0
  408. package/shared/types.d.ts +89 -0
  409. package/shared/useCanShowPlaceholder.d.ts +9 -0
  410. package/shared/useCharacterLimit.d.ts +16 -0
  411. package/shared/useDecorators.d.ts +17 -0
  412. package/shared/useHistory.d.ts +10 -0
  413. package/shared/useList.d.ts +9 -0
  414. package/shared/usePlainTextSetup.d.ts +9 -0
  415. package/shared/useReactDecorators.d.ts +12 -0
  416. package/shared/useRichTextSetup.d.ts +9 -0
  417. package/shared/useYjsCollaboration.d.ts +25 -0
  418. package/useExtensionComponent.d.ts +10 -0
  419. package/useLexicalEditable.d.ts +16 -0
  420. package/useLexicalEditable.dev.js +102 -0
  421. package/useLexicalEditable.dev.mjs +100 -0
  422. package/useLexicalEditable.js +11 -0
  423. package/useLexicalEditable.js.flow +12 -0
  424. package/useLexicalEditable.mjs +12 -0
  425. package/useLexicalEditable.node.mjs +10 -0
  426. package/useLexicalEditable.prod.js +9 -0
  427. package/useLexicalEditable.prod.mjs +9 -0
  428. package/useLexicalExtensionComponent.dev.js +37 -0
  429. package/useLexicalExtensionComponent.dev.mjs +34 -0
  430. package/useLexicalExtensionComponent.js +11 -0
  431. package/useLexicalExtensionComponent.js.flow +12 -0
  432. package/useLexicalExtensionComponent.mjs +13 -0
  433. package/useLexicalExtensionComponent.node.mjs +11 -0
  434. package/useLexicalExtensionComponent.prod.js +9 -0
  435. package/useLexicalExtensionComponent.prod.mjs +9 -0
  436. package/useLexicalIsTextContentEmpty.d.ts +9 -0
  437. package/useLexicalIsTextContentEmpty.dev.js +60 -0
  438. package/useLexicalIsTextContentEmpty.dev.mjs +58 -0
  439. package/useLexicalIsTextContentEmpty.js +11 -0
  440. package/useLexicalIsTextContentEmpty.js.flow +15 -0
  441. package/useLexicalIsTextContentEmpty.mjs +12 -0
  442. package/useLexicalIsTextContentEmpty.node.mjs +10 -0
  443. package/useLexicalIsTextContentEmpty.prod.js +9 -0
  444. package/useLexicalIsTextContentEmpty.prod.mjs +9 -0
  445. package/useLexicalNodeSelection.d.ts +24 -0
  446. package/useLexicalNodeSelection.dev.js +102 -0
  447. package/useLexicalNodeSelection.dev.mjs +100 -0
  448. package/useLexicalNodeSelection.js +11 -0
  449. package/useLexicalNodeSelection.js.flow +14 -0
  450. package/useLexicalNodeSelection.mjs +12 -0
  451. package/useLexicalNodeSelection.node.mjs +10 -0
  452. package/useLexicalNodeSelection.prod.js +9 -0
  453. package/useLexicalNodeSelection.prod.mjs +9 -0
  454. package/useLexicalSubscription.d.ts +17 -0
  455. package/useLexicalSubscription.dev.js +73 -0
  456. package/useLexicalSubscription.dev.mjs +71 -0
  457. package/useLexicalSubscription.js +11 -0
  458. package/useLexicalSubscription.js.flow +19 -0
  459. package/useLexicalSubscription.mjs +12 -0
  460. package/useLexicalSubscription.node.mjs +10 -0
  461. package/useLexicalSubscription.prod.js +9 -0
  462. package/useLexicalSubscription.prod.mjs +9 -0
  463. package/useLexicalTextEntity.d.ts +10 -0
  464. package/useLexicalTextEntity.dev.js +31 -0
  465. package/useLexicalTextEntity.dev.mjs +29 -0
  466. package/useLexicalTextEntity.js +11 -0
  467. package/useLexicalTextEntity.js.flow +18 -0
  468. package/useLexicalTextEntity.mjs +12 -0
  469. package/useLexicalTextEntity.node.mjs +10 -0
  470. package/useLexicalTextEntity.prod.js +9 -0
  471. package/useLexicalTextEntity.prod.mjs +9 -0
@@ -0,0 +1,524 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ */
8
+
9
+ import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';
10
+ import { createCommand, COMMAND_PRIORITY_LOW, KEY_ARROW_DOWN_COMMAND, KEY_ARROW_UP_COMMAND, KEY_ESCAPE_COMMAND, KEY_TAB_COMMAND, KEY_ENTER_COMMAND, $getSelection, $isRangeSelection, $getNodeByKey } from 'lexical';
11
+ import React, { useLayoutEffect, useEffect, useRef, useCallback, useState, useMemo } from 'react';
12
+ import { mergeRegister } from '@lexical/utils';
13
+ import { jsx } from 'react/jsx-runtime';
14
+
15
+ /**
16
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
17
+ *
18
+ * This source code is licensed under the MIT license found in the
19
+ * LICENSE file in the root directory of this source tree.
20
+ *
21
+ */
22
+
23
+
24
+ // Webpack + React 17 fails to compile on the usage of `React.startTransition` or
25
+ // `React["startTransition"]` even if it's behind a feature detection of
26
+ // `"startTransition" in React`. Moving this to a constant avoids the issue :/
27
+ const START_TRANSITION = 'startTransition';
28
+ function startTransition(callback) {
29
+ if (START_TRANSITION in React) {
30
+ React[START_TRANSITION](callback);
31
+ } else {
32
+ callback();
33
+ }
34
+ }
35
+
36
+ /**
37
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
38
+ *
39
+ * This source code is licensed under the MIT license found in the
40
+ * LICENSE file in the root directory of this source tree.
41
+ *
42
+ */
43
+
44
+ const CAN_USE_DOM = typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined';
45
+
46
+ /**
47
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
48
+ *
49
+ * This source code is licensed under the MIT license found in the
50
+ * LICENSE file in the root directory of this source tree.
51
+ *
52
+ */
53
+
54
+
55
+ // This workaround is no longer necessary in React 19,
56
+ // but we currently support React >=17.x
57
+ // https://github.com/facebook/react/pull/26395
58
+ const useLayoutEffectImpl = CAN_USE_DOM ? useLayoutEffect : useEffect;
59
+
60
+ /**
61
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
62
+ *
63
+ * This source code is licensed under the MIT license found in the
64
+ * LICENSE file in the root directory of this source tree.
65
+ *
66
+ */
67
+
68
+ class MenuOption {
69
+ key;
70
+ ref;
71
+ constructor(key) {
72
+ this.key = key;
73
+ this.ref = {
74
+ current: null
75
+ };
76
+ this.setRefElement = this.setRefElement.bind(this);
77
+ }
78
+ setRefElement(element) {
79
+ this.ref = {
80
+ current: element
81
+ };
82
+ }
83
+ }
84
+ const scrollIntoViewIfNeeded = target => {
85
+ const typeaheadContainerNode = document.getElementById('typeahead-menu');
86
+ if (!typeaheadContainerNode) {
87
+ return;
88
+ }
89
+ const typeaheadRect = typeaheadContainerNode.getBoundingClientRect();
90
+ if (typeaheadRect.top + typeaheadRect.height > window.innerHeight) {
91
+ typeaheadContainerNode.scrollIntoView({
92
+ block: 'center'
93
+ });
94
+ }
95
+ if (typeaheadRect.top < 0) {
96
+ typeaheadContainerNode.scrollIntoView({
97
+ block: 'center'
98
+ });
99
+ }
100
+ target.scrollIntoView({
101
+ block: 'nearest'
102
+ });
103
+ };
104
+
105
+ /**
106
+ * Walk backwards along user input and forward through entity title to try
107
+ * and replace more of the user's text with entity.
108
+ */
109
+ function getFullMatchOffset(documentText, entryText, offset) {
110
+ let triggerOffset = offset;
111
+ for (let i = triggerOffset; i <= entryText.length; i++) {
112
+ if (documentText.slice(-i) === entryText.substring(0, i)) {
113
+ triggerOffset = i;
114
+ }
115
+ }
116
+ return triggerOffset;
117
+ }
118
+
119
+ /**
120
+ * Split Lexical TextNode and return a new TextNode only containing matched text.
121
+ * Common use cases include: removing the node, replacing with a new node.
122
+ */
123
+ function $splitNodeContainingQuery(match) {
124
+ const selection = $getSelection();
125
+ if (!$isRangeSelection(selection) || !selection.isCollapsed()) {
126
+ return null;
127
+ }
128
+ const anchor = selection.anchor;
129
+ if (anchor.type !== 'text') {
130
+ return null;
131
+ }
132
+ const anchorNode = anchor.getNode();
133
+ if (!anchorNode.isSimpleText()) {
134
+ return null;
135
+ }
136
+ const selectionOffset = anchor.offset;
137
+ const textContent = anchorNode.getTextContent().slice(0, selectionOffset);
138
+ const characterOffset = match.replaceableString.length;
139
+ const queryOffset = getFullMatchOffset(textContent, match.matchingString, characterOffset);
140
+ const startOffset = selectionOffset - queryOffset;
141
+ if (startOffset < 0) {
142
+ return null;
143
+ }
144
+ let newNode;
145
+ if (startOffset === 0) {
146
+ [newNode] = anchorNode.splitText(selectionOffset);
147
+ } else {
148
+ [, newNode] = anchorNode.splitText(startOffset, selectionOffset);
149
+ }
150
+ return newNode;
151
+ }
152
+
153
+ // Got from https://stackoverflow.com/a/42543908/2013580
154
+ function getScrollParent(element, includeHidden) {
155
+ let style = getComputedStyle(element);
156
+ const excludeStaticParent = style.position === 'absolute';
157
+ const overflowRegex = /(auto|scroll)/;
158
+ if (style.position === 'fixed') {
159
+ return document.body;
160
+ }
161
+ for (let parent = element; parent = parent.parentElement;) {
162
+ style = getComputedStyle(parent);
163
+ if (excludeStaticParent && style.position === 'static') {
164
+ continue;
165
+ }
166
+ if (overflowRegex.test(style.overflow + style.overflowY + style.overflowX)) {
167
+ return parent;
168
+ }
169
+ }
170
+ return document.body;
171
+ }
172
+ function isTriggerVisibleInNearestScrollContainer(targetElement, containerElement) {
173
+ const tRect = targetElement.getBoundingClientRect();
174
+ const cRect = containerElement.getBoundingClientRect();
175
+ const VISIBILITY_MARGIN_PX = 6;
176
+ return tRect.top >= cRect.top - VISIBILITY_MARGIN_PX && tRect.top <= cRect.bottom + VISIBILITY_MARGIN_PX;
177
+ }
178
+
179
+ // Reposition the menu on scroll, window resize, and element resize.
180
+ function useDynamicPositioning(resolution, targetElement, onReposition, onVisibilityChange) {
181
+ const [editor] = useLexicalComposerContext();
182
+ useEffect(() => {
183
+ if (targetElement != null && resolution != null) {
184
+ const rootElement = editor.getRootElement();
185
+ const rootScrollParent = rootElement != null ? getScrollParent(rootElement) : document.body;
186
+ let ticking = false;
187
+ let previousIsInView = isTriggerVisibleInNearestScrollContainer(targetElement, rootScrollParent);
188
+ const handleScroll = function () {
189
+ if (!ticking) {
190
+ window.requestAnimationFrame(function () {
191
+ onReposition();
192
+ ticking = false;
193
+ });
194
+ ticking = true;
195
+ }
196
+ const isInView = isTriggerVisibleInNearestScrollContainer(targetElement, rootScrollParent);
197
+ if (isInView !== previousIsInView) {
198
+ previousIsInView = isInView;
199
+ if (onVisibilityChange != null) {
200
+ onVisibilityChange(isInView);
201
+ }
202
+ }
203
+ };
204
+ const resizeObserver = new ResizeObserver(onReposition);
205
+ window.addEventListener('resize', onReposition);
206
+ document.addEventListener('scroll', handleScroll, {
207
+ capture: true,
208
+ passive: true
209
+ });
210
+ resizeObserver.observe(targetElement);
211
+ return () => {
212
+ resizeObserver.unobserve(targetElement);
213
+ window.removeEventListener('resize', onReposition);
214
+ document.removeEventListener('scroll', handleScroll, true);
215
+ };
216
+ }
217
+ }, [targetElement, editor, onVisibilityChange, onReposition, resolution]);
218
+ }
219
+ const SCROLL_TYPEAHEAD_OPTION_INTO_VIEW_COMMAND = createCommand('SCROLL_TYPEAHEAD_OPTION_INTO_VIEW_COMMAND');
220
+ function LexicalMenu({
221
+ close,
222
+ editor,
223
+ anchorElementRef,
224
+ resolution,
225
+ options,
226
+ menuRenderFn,
227
+ onSelectOption,
228
+ shouldSplitNodeWithQuery = false,
229
+ commandPriority = COMMAND_PRIORITY_LOW,
230
+ preselectFirstItem = true
231
+ }) {
232
+ const [rawSelectedIndex, setHighlightedIndex] = useState(null);
233
+ // Clamp highlighted index if options list shrinks
234
+ const selectedIndex = rawSelectedIndex !== null ? Math.min(options.length - 1, rawSelectedIndex) : null;
235
+ const matchingString = resolution.match && resolution.match.matchingString;
236
+ useEffect(() => {
237
+ if (preselectFirstItem) {
238
+ setHighlightedIndex(0);
239
+ }
240
+ }, [matchingString, preselectFirstItem]);
241
+ const selectOptionAndCleanUp = useCallback(selectedEntry => {
242
+ editor.update(() => {
243
+ const textNodeContainingQuery = resolution.match != null && shouldSplitNodeWithQuery ? $splitNodeContainingQuery(resolution.match) : null;
244
+ onSelectOption(selectedEntry, textNodeContainingQuery, close, resolution.match ? resolution.match.matchingString : '');
245
+ });
246
+ }, [editor, shouldSplitNodeWithQuery, resolution.match, onSelectOption, close]);
247
+ const updateSelectedIndex = useCallback(index => {
248
+ const rootElem = editor.getRootElement();
249
+ if (rootElem !== null) {
250
+ rootElem.setAttribute('aria-activedescendant', 'typeahead-item-' + index);
251
+ setHighlightedIndex(index);
252
+ }
253
+ }, [editor]);
254
+ useEffect(() => {
255
+ return () => {
256
+ const rootElem = editor.getRootElement();
257
+ if (rootElem !== null) {
258
+ rootElem.removeAttribute('aria-activedescendant');
259
+ }
260
+ };
261
+ }, [editor]);
262
+ useLayoutEffectImpl(() => {
263
+ if (options === null) {
264
+ setHighlightedIndex(null);
265
+ } else if (selectedIndex === null && preselectFirstItem) {
266
+ updateSelectedIndex(0);
267
+ }
268
+ }, [options, selectedIndex, updateSelectedIndex, preselectFirstItem]);
269
+ useEffect(() => {
270
+ return mergeRegister(editor.registerCommand(SCROLL_TYPEAHEAD_OPTION_INTO_VIEW_COMMAND, ({
271
+ option
272
+ }) => {
273
+ if (option.ref && option.ref.current != null) {
274
+ scrollIntoViewIfNeeded(option.ref.current);
275
+ return true;
276
+ }
277
+ return false;
278
+ }, commandPriority));
279
+ }, [editor, updateSelectedIndex, commandPriority]);
280
+ useEffect(() => {
281
+ return mergeRegister(editor.registerCommand(KEY_ARROW_DOWN_COMMAND, payload => {
282
+ const event = payload;
283
+ if (options !== null && options.length) {
284
+ const newSelectedIndex = selectedIndex === null ? 0 : selectedIndex !== options.length - 1 ? selectedIndex + 1 : 0;
285
+ updateSelectedIndex(newSelectedIndex);
286
+ const option = options[newSelectedIndex];
287
+ if (!option) {
288
+ updateSelectedIndex(-1);
289
+ event.preventDefault();
290
+ event.stopImmediatePropagation();
291
+ return true;
292
+ }
293
+ if (option.ref && option.ref.current) {
294
+ editor.dispatchCommand(SCROLL_TYPEAHEAD_OPTION_INTO_VIEW_COMMAND, {
295
+ index: newSelectedIndex,
296
+ option
297
+ });
298
+ }
299
+ event.preventDefault();
300
+ event.stopImmediatePropagation();
301
+ }
302
+ return true;
303
+ }, commandPriority), editor.registerCommand(KEY_ARROW_UP_COMMAND, payload => {
304
+ const event = payload;
305
+ if (options !== null && options.length) {
306
+ const newSelectedIndex = selectedIndex === null ? options.length - 1 : selectedIndex !== 0 ? selectedIndex - 1 : options.length - 1;
307
+ updateSelectedIndex(newSelectedIndex);
308
+ const option = options[newSelectedIndex];
309
+ if (!option) {
310
+ updateSelectedIndex(-1);
311
+ event.preventDefault();
312
+ event.stopImmediatePropagation();
313
+ return true;
314
+ }
315
+ if (option.ref && option.ref.current) {
316
+ scrollIntoViewIfNeeded(option.ref.current);
317
+ }
318
+ event.preventDefault();
319
+ event.stopImmediatePropagation();
320
+ }
321
+ return true;
322
+ }, commandPriority), editor.registerCommand(KEY_ESCAPE_COMMAND, payload => {
323
+ const event = payload;
324
+ event.preventDefault();
325
+ event.stopImmediatePropagation();
326
+ close();
327
+ return true;
328
+ }, commandPriority), editor.registerCommand(KEY_TAB_COMMAND, payload => {
329
+ const event = payload;
330
+ if (options === null || selectedIndex === null || options[selectedIndex] == null) {
331
+ return false;
332
+ }
333
+ event.preventDefault();
334
+ event.stopImmediatePropagation();
335
+ selectOptionAndCleanUp(options[selectedIndex]);
336
+ return true;
337
+ }, commandPriority), editor.registerCommand(KEY_ENTER_COMMAND, event => {
338
+ if (options === null || selectedIndex === null || options[selectedIndex] == null) {
339
+ return false;
340
+ }
341
+ if (event !== null) {
342
+ event.preventDefault();
343
+ event.stopImmediatePropagation();
344
+ }
345
+ selectOptionAndCleanUp(options[selectedIndex]);
346
+ return true;
347
+ }, commandPriority));
348
+ }, [selectOptionAndCleanUp, close, editor, options, selectedIndex, updateSelectedIndex, commandPriority]);
349
+ const listItemProps = useMemo(() => ({
350
+ options,
351
+ selectOptionAndCleanUp,
352
+ selectedIndex,
353
+ setHighlightedIndex
354
+ }), [selectOptionAndCleanUp, selectedIndex, options]);
355
+ return menuRenderFn(anchorElementRef, listItemProps, resolution.match ? resolution.match.matchingString : '');
356
+ }
357
+ function setContainerDivAttributes(containerDiv, className) {
358
+ if (className != null) {
359
+ containerDiv.className = className;
360
+ }
361
+ containerDiv.setAttribute('aria-label', 'Typeahead menu');
362
+ containerDiv.setAttribute('role', 'listbox');
363
+ containerDiv.style.display = 'block';
364
+ containerDiv.style.position = 'absolute';
365
+ }
366
+ function useMenuAnchorRef(resolution, setResolution, className, parent = CAN_USE_DOM ? document.body : undefined, shouldIncludePageYOffset__EXPERIMENTAL = true) {
367
+ const [editor] = useLexicalComposerContext();
368
+ const initialAnchorElement = CAN_USE_DOM ? document.createElement('div') : null;
369
+ const anchorElementRef = useRef(initialAnchorElement);
370
+ const positionMenu = useCallback(() => {
371
+ if (anchorElementRef.current === null || parent === undefined) {
372
+ return;
373
+ }
374
+ anchorElementRef.current.style.top = anchorElementRef.current.style.bottom;
375
+ const rootElement = editor.getRootElement();
376
+ const containerDiv = anchorElementRef.current;
377
+ const menuEle = containerDiv.firstChild;
378
+ if (rootElement !== null && resolution !== null) {
379
+ const {
380
+ left,
381
+ top,
382
+ width,
383
+ height
384
+ } = resolution.getRect();
385
+ const anchorHeight = anchorElementRef.current.offsetHeight; // use to position under anchor
386
+ containerDiv.style.top = `${top + anchorHeight + 3 + (shouldIncludePageYOffset__EXPERIMENTAL ? window.pageYOffset : 0)}px`;
387
+ containerDiv.style.left = `${left + window.pageXOffset}px`;
388
+ containerDiv.style.height = `${height}px`;
389
+ containerDiv.style.width = `${width}px`;
390
+ if (menuEle !== null) {
391
+ menuEle.style.top = `${top}`;
392
+ const menuRect = menuEle.getBoundingClientRect();
393
+ const menuHeight = menuRect.height;
394
+ const menuWidth = menuRect.width;
395
+ const rootElementRect = rootElement.getBoundingClientRect();
396
+ if (left + menuWidth > rootElementRect.right) {
397
+ containerDiv.style.left = `${rootElementRect.right - menuWidth + window.pageXOffset}px`;
398
+ }
399
+ if ((top + menuHeight > window.innerHeight || top + menuHeight > rootElementRect.bottom) && top - rootElementRect.top > menuHeight + height) {
400
+ containerDiv.style.top = `${top - menuHeight - height + (shouldIncludePageYOffset__EXPERIMENTAL ? window.pageYOffset : 0)}px`;
401
+ }
402
+ }
403
+ if (!containerDiv.isConnected) {
404
+ setContainerDivAttributes(containerDiv, className);
405
+ parent.append(containerDiv);
406
+ }
407
+ containerDiv.setAttribute('id', 'typeahead-menu');
408
+ rootElement.setAttribute('aria-controls', 'typeahead-menu');
409
+ }
410
+ }, [editor, resolution, shouldIncludePageYOffset__EXPERIMENTAL, className, parent]);
411
+ useEffect(() => {
412
+ const rootElement = editor.getRootElement();
413
+ if (resolution !== null) {
414
+ positionMenu();
415
+ }
416
+ return () => {
417
+ if (rootElement !== null) {
418
+ rootElement.removeAttribute('aria-controls');
419
+ }
420
+ // eslint-disable-next-line react-hooks/exhaustive-deps
421
+ const containerDiv = anchorElementRef.current;
422
+ if (containerDiv !== null && containerDiv.isConnected) {
423
+ containerDiv.remove();
424
+ containerDiv.removeAttribute('id');
425
+ }
426
+ };
427
+ }, [editor, positionMenu, resolution]);
428
+ const onVisibilityChange = useCallback(isInView => {
429
+ if (resolution !== null) {
430
+ if (!isInView) {
431
+ setResolution(null);
432
+ }
433
+ }
434
+ }, [resolution, setResolution]);
435
+ useDynamicPositioning(resolution, anchorElementRef.current, positionMenu, onVisibilityChange);
436
+
437
+ // Append the context for the menu immediately
438
+ if (initialAnchorElement != null && initialAnchorElement === anchorElementRef.current) {
439
+ setContainerDivAttributes(initialAnchorElement, className);
440
+ if (parent != null) {
441
+ parent.append(initialAnchorElement);
442
+ }
443
+ }
444
+ return anchorElementRef;
445
+ }
446
+
447
+ /**
448
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
449
+ *
450
+ * This source code is licensed under the MIT license found in the
451
+ * LICENSE file in the root directory of this source tree.
452
+ *
453
+ */
454
+
455
+ function LexicalNodeMenuPlugin({
456
+ options,
457
+ nodeKey,
458
+ onClose,
459
+ onOpen,
460
+ onSelectOption,
461
+ menuRenderFn,
462
+ anchorClassName,
463
+ commandPriority = COMMAND_PRIORITY_LOW,
464
+ parent
465
+ }) {
466
+ const [editor] = useLexicalComposerContext();
467
+ const [resolution, setResolution] = useState(null);
468
+ const anchorElementRef = useMenuAnchorRef(resolution, setResolution, anchorClassName, parent);
469
+ const closeNodeMenu = useCallback(() => {
470
+ setResolution(null);
471
+ if (onClose != null && resolution !== null) {
472
+ onClose();
473
+ }
474
+ }, [onClose, resolution]);
475
+ const openNodeMenu = useCallback(res => {
476
+ setResolution(res);
477
+ if (onOpen != null && resolution === null) {
478
+ onOpen(res);
479
+ }
480
+ }, [onOpen, resolution]);
481
+ const positionOrCloseMenu = useCallback(() => {
482
+ if (nodeKey) {
483
+ editor.update(() => {
484
+ const node = $getNodeByKey(nodeKey);
485
+ const domElement = editor.getElementByKey(nodeKey);
486
+ if (node != null && domElement != null) {
487
+ if (resolution == null) {
488
+ startTransition(() => openNodeMenu({
489
+ getRect: () => domElement.getBoundingClientRect()
490
+ }));
491
+ }
492
+ }
493
+ });
494
+ } else if (nodeKey == null && resolution != null) {
495
+ closeNodeMenu();
496
+ }
497
+ }, [closeNodeMenu, editor, nodeKey, openNodeMenu, resolution]);
498
+ useEffect(() => {
499
+ positionOrCloseMenu();
500
+ }, [positionOrCloseMenu, nodeKey]);
501
+ useEffect(() => {
502
+ if (nodeKey != null) {
503
+ return editor.registerUpdateListener(({
504
+ dirtyElements
505
+ }) => {
506
+ if (dirtyElements.get(nodeKey)) {
507
+ positionOrCloseMenu();
508
+ }
509
+ });
510
+ }
511
+ }, [editor, positionOrCloseMenu, nodeKey]);
512
+ return anchorElementRef.current === null || resolution === null || editor === null ? null : /*#__PURE__*/jsx(LexicalMenu, {
513
+ close: closeNodeMenu,
514
+ resolution: resolution,
515
+ editor: editor,
516
+ anchorElementRef: anchorElementRef,
517
+ options: options,
518
+ menuRenderFn: menuRenderFn,
519
+ onSelectOption: onSelectOption,
520
+ commandPriority: commandPriority
521
+ });
522
+ }
523
+
524
+ export { LexicalNodeMenuPlugin, MenuOption };
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ */
8
+
9
+ 'use strict'
10
+ const LexicalNodeMenuPlugin = process.env.NODE_ENV !== 'production' ? require('./LexicalNodeMenuPlugin.dev.js') : require('./LexicalNodeMenuPlugin.prod.js');
11
+ module.exports = LexicalNodeMenuPlugin;
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ * @flow strict
8
+ */
9
+
10
+ import type {LexicalCommand, LexicalEditor, NodeKey, TextNode} from 'lexical';
11
+ import * as React from 'react';
12
+
13
+ export type MenuTextMatch = {
14
+ leadOffset: number,
15
+ matchingString: string,
16
+ replaceableString: string,
17
+ };
18
+
19
+ export type MenuResolution = {
20
+ match?: MenuTextMatch,
21
+ getRect: () => ClientRect,
22
+ };
23
+
24
+ declare export class MenuOption {
25
+ key: string;
26
+ ref: {current: HTMLElement | null};
27
+ constructor(key: string): void;
28
+ setRefElement(element: HTMLElement | null): void;
29
+ }
30
+
31
+ export type MenuRenderFn<TOption> = (
32
+ anchorElementRef: {current: HTMLElement | null},
33
+ itemProps: {
34
+ selectedIndex: number | null,
35
+ selectOptionAndCleanUp: (option: TOption) => void,
36
+ setHighlightedIndex: (index: number) => void,
37
+ options: Array<TOption>,
38
+ },
39
+ matchingString: string,
40
+ ) => React.Portal | React.MixedElement | null;
41
+
42
+ export type TriggerFn = (
43
+ text: string,
44
+ editor: LexicalEditor,
45
+ ) => MenuTextMatch | null;
46
+
47
+ type NodeMenuPluginProps<TOption> = {
48
+ onSelectOption: (
49
+ option: TOption,
50
+ textNodeContainingQuery: TextNode | null,
51
+ closeMenu: () => void,
52
+ matchingString: string,
53
+ ) => void,
54
+ options: Array<TOption>,
55
+ nodeKey: NodeKey | null,
56
+ onClose?: () => void,
57
+ onOpen?: (resolution: MenuResolution) => void,
58
+ menuRenderFn: MenuRenderFn<TOption>,
59
+ anchorClassName?: string,
60
+ };
61
+
62
+ declare export function LexicalNodeMenuPlugin<TOption>(
63
+ options: NodeMenuPluginProps<TOption>,
64
+ ): React.MixedElement | null;
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ */
8
+
9
+ import * as modDev from './LexicalNodeMenuPlugin.dev.mjs';
10
+ import * as modProd from './LexicalNodeMenuPlugin.prod.mjs';
11
+ const mod = process.env.NODE_ENV !== 'production' ? modDev : modProd;
12
+ export const LexicalNodeMenuPlugin = mod.LexicalNodeMenuPlugin;
13
+ export const MenuOption = mod.MenuOption;
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ */
8
+
9
+ const mod = await (process.env.NODE_ENV !== 'production' ? import('./LexicalNodeMenuPlugin.dev.mjs') : import('./LexicalNodeMenuPlugin.prod.mjs'));
10
+ export const LexicalNodeMenuPlugin = mod.LexicalNodeMenuPlugin;
11
+ export const MenuOption = mod.MenuOption;
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ */
8
+
9
+ "use strict";var e=require("@lexical/react/LexicalComposerContext"),t=require("lexical"),n=require("react"),o=require("@lexical/utils"),l=require("react/jsx-runtime");const r="startTransition";const i="undefined"!=typeof window&&void 0!==window.document&&void 0!==window.document.createElement,u=i?n.useLayoutEffect:n.useEffect;const s=e=>{const t=document.getElementById("typeahead-menu");if(!t)return;const n=t.getBoundingClientRect();n.top+n.height>window.innerHeight&&t.scrollIntoView({block:"center"}),n.top<0&&t.scrollIntoView({block:"center"}),e.scrollIntoView({block:"nearest"})};function c(e,t){const n=e.getBoundingClientRect(),o=t.getBoundingClientRect();return n.top>=o.top-6&&n.top<=o.bottom+6}function a(t,o,l,r){const[i]=e.useLexicalComposerContext();n.useEffect(()=>{if(null!=o&&null!=t){const e=i.getRootElement(),t=null!=e?function(e){let t=getComputedStyle(e);const n="absolute"===t.position,o=/(auto|scroll)/;if("fixed"===t.position)return document.body;for(let l=e;l=l.parentElement;)if(t=getComputedStyle(l),(!n||"static"!==t.position)&&o.test(t.overflow+t.overflowY+t.overflowX))return l;return document.body}(e):document.body;let n=!1,u=c(o,t);const s=function(){n||(window.requestAnimationFrame(function(){l(),n=!1}),n=!0);const e=c(o,t);e!==u&&(u=e,null!=r&&r(e))},a=new ResizeObserver(l);return window.addEventListener("resize",l),document.addEventListener("scroll",s,{capture:!0,passive:!0}),a.observe(o),()=>{a.unobserve(o),window.removeEventListener("resize",l),document.removeEventListener("scroll",s,!0)}}},[o,i,r,l,t])}const d=t.createCommand("SCROLL_TYPEAHEAD_OPTION_INTO_VIEW_COMMAND");function m({close:e,editor:l,anchorElementRef:r,resolution:i,options:c,menuRenderFn:a,onSelectOption:m,shouldSplitNodeWithQuery:f=!1,commandPriority:p=t.COMMAND_PRIORITY_LOW,preselectFirstItem:g=!0}){const[h,C]=n.useState(null),E=null!==h?Math.min(c.length-1,h):null,y=i.match&&i.match.matchingString;n.useEffect(()=>{g&&C(0)},[y,g]);const b=n.useCallback(n=>{l.update(()=>{const o=null!=i.match&&f?function(e){const n=t.$getSelection();if(!t.$isRangeSelection(n)||!n.isCollapsed())return null;const o=n.anchor;if("text"!==o.type)return null;const l=o.getNode();if(!l.isSimpleText())return null;const r=o.offset,i=l.getTextContent().slice(0,r),u=e.replaceableString.length,s=r-function(e,t,n){let o=n;for(let n=o;n<=t.length;n++)e.slice(-n)===t.substring(0,n)&&(o=n);return o}(i,e.matchingString,u);if(s<0)return null;let c;return 0===s?[c]=l.splitText(r):[,c]=l.splitText(s,r),c}(i.match):null;m(n,o,e,i.match?i.match.matchingString:"")})},[l,f,i.match,m,e]),R=n.useCallback(e=>{const t=l.getRootElement();null!==t&&(t.setAttribute("aria-activedescendant","typeahead-item-"+e),C(e))},[l]);n.useEffect(()=>()=>{const e=l.getRootElement();null!==e&&e.removeAttribute("aria-activedescendant")},[l]),u(()=>{null===c?C(null):null===E&&g&&R(0)},[c,E,R,g]),n.useEffect(()=>o.mergeRegister(l.registerCommand(d,({option:e})=>!(!e.ref||null==e.ref.current)&&(s(e.ref.current),!0),p)),[l,R,p]),n.useEffect(()=>o.mergeRegister(l.registerCommand(t.KEY_ARROW_DOWN_COMMAND,e=>{const t=e;if(null!==c&&c.length){const e=null===E?0:E!==c.length-1?E+1:0;R(e);const n=c[e];if(!n)return R(-1),t.preventDefault(),t.stopImmediatePropagation(),!0;n.ref&&n.ref.current&&l.dispatchCommand(d,{index:e,option:n}),t.preventDefault(),t.stopImmediatePropagation()}return!0},p),l.registerCommand(t.KEY_ARROW_UP_COMMAND,e=>{const t=e;if(null!==c&&c.length){const e=null===E?c.length-1:0!==E?E-1:c.length-1;R(e);const n=c[e];if(!n)return R(-1),t.preventDefault(),t.stopImmediatePropagation(),!0;n.ref&&n.ref.current&&s(n.ref.current),t.preventDefault(),t.stopImmediatePropagation()}return!0},p),l.registerCommand(t.KEY_ESCAPE_COMMAND,t=>{const n=t;return n.preventDefault(),n.stopImmediatePropagation(),e(),!0},p),l.registerCommand(t.KEY_TAB_COMMAND,e=>{const t=e;return null!==c&&null!==E&&null!=c[E]&&(t.preventDefault(),t.stopImmediatePropagation(),b(c[E]),!0)},p),l.registerCommand(t.KEY_ENTER_COMMAND,e=>null!==c&&null!==E&&null!=c[E]&&(null!==e&&(e.preventDefault(),e.stopImmediatePropagation()),b(c[E]),!0),p)),[b,e,l,c,E,R,p]);return a(r,n.useMemo(()=>({options:c,selectOptionAndCleanUp:b,selectedIndex:E,setHighlightedIndex:C}),[b,E,c]),i.match?i.match.matchingString:"")}function f(e,t){null!=t&&(e.className=t),e.setAttribute("aria-label","Typeahead menu"),e.setAttribute("role","listbox"),e.style.display="block",e.style.position="absolute"}exports.LexicalNodeMenuPlugin=function({options:o,nodeKey:u,onClose:s,onOpen:c,onSelectOption:d,menuRenderFn:p,anchorClassName:g,commandPriority:h=t.COMMAND_PRIORITY_LOW,parent:C}){const[E]=e.useLexicalComposerContext(),[y,b]=n.useState(null),R=function(t,o,l,r=(i?document.body:void 0),u=!0){const[s]=e.useLexicalComposerContext(),c=i?document.createElement("div"):null,d=n.useRef(c),m=n.useCallback(()=>{if(null===d.current||void 0===r)return;d.current.style.top=d.current.style.bottom;const e=s.getRootElement(),n=d.current,o=n.firstChild;if(null!==e&&null!==t){const{left:i,top:s,width:c,height:a}=t.getRect(),m=d.current.offsetHeight;if(n.style.top=`${s+m+3+(u?window.pageYOffset:0)}px`,n.style.left=`${i+window.pageXOffset}px`,n.style.height=`${a}px`,n.style.width=`${c}px`,null!==o){o.style.top=`${s}`;const t=o.getBoundingClientRect(),l=t.height,r=t.width,c=e.getBoundingClientRect();i+r>c.right&&(n.style.left=`${c.right-r+window.pageXOffset}px`),(s+l>window.innerHeight||s+l>c.bottom)&&s-c.top>l+a&&(n.style.top=`${s-l-a+(u?window.pageYOffset:0)}px`)}n.isConnected||(f(n,l),r.append(n)),n.setAttribute("id","typeahead-menu"),e.setAttribute("aria-controls","typeahead-menu")}},[s,t,u,l,r]);n.useEffect(()=>{const e=s.getRootElement();return null!==t&&m(),()=>{null!==e&&e.removeAttribute("aria-controls");const t=d.current;null!==t&&t.isConnected&&(t.remove(),t.removeAttribute("id"))}},[s,m,t]);const p=n.useCallback(e=>{null!==t&&(e||o(null))},[t,o]);return a(t,d.current,m,p),null!=c&&c===d.current&&(f(c,l),null!=r&&r.append(c)),d}(y,b,g,C),w=n.useCallback(()=>{b(null),null!=s&&null!==y&&s()},[s,y]),v=n.useCallback(e=>{b(e),null!=c&&null===y&&c(e)},[c,y]),x=n.useCallback(()=>{u?E.update(()=>{const e=t.$getNodeByKey(u),o=E.getElementByKey(u);var l;null!=e&&null!=o&&null==y&&(l=()=>v({getRect:()=>o.getBoundingClientRect()}),r in n?n[r](l):l())}):null==u&&null!=y&&w()},[w,E,u,v,y]);return n.useEffect(()=>{x()},[x,u]),n.useEffect(()=>{if(null!=u)return E.registerUpdateListener(({dirtyElements:e})=>{e.get(u)&&x()})},[E,x,u]),null===R.current||null===y||null===E?null:l.jsx(m,{close:w,resolution:y,editor:E,anchorElementRef:R,options:o,menuRenderFn:p,onSelectOption:d,commandPriority:h})},exports.MenuOption=class{key;ref;constructor(e){this.key=e,this.ref={current:null},this.setRefElement=this.setRefElement.bind(this)}setRefElement(e){this.ref={current:e}}};
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ */
8
+
9
+ import{useLexicalComposerContext as t}from"@lexical/react/LexicalComposerContext";import{createCommand as e,COMMAND_PRIORITY_LOW as n,KEY_ARROW_DOWN_COMMAND as o,KEY_ARROW_UP_COMMAND as l,KEY_ESCAPE_COMMAND as r,KEY_TAB_COMMAND as i,KEY_ENTER_COMMAND as u,$getSelection as s,$isRangeSelection as c,$getNodeByKey as a}from"lexical";import m,{useLayoutEffect as d,useEffect as p,useRef as f,useCallback as g,useState as h,useMemo as y}from"react";import{mergeRegister as w}from"@lexical/utils";import{jsx as v}from"react/jsx-runtime";const b="startTransition";const C="undefined"!=typeof window&&void 0!==window.document&&void 0!==window.document.createElement,x=C?d:p;class E{key;ref;constructor(t){this.key=t,this.ref={current:null},this.setRefElement=this.setRefElement.bind(this)}setRefElement(t){this.ref={current:t}}}const R=t=>{const e=document.getElementById("typeahead-menu");if(!e)return;const n=e.getBoundingClientRect();n.top+n.height>window.innerHeight&&e.scrollIntoView({block:"center"}),n.top<0&&e.scrollIntoView({block:"center"}),t.scrollIntoView({block:"nearest"})};function I(t,e){const n=t.getBoundingClientRect(),o=e.getBoundingClientRect();return n.top>=o.top-6&&n.top<=o.bottom+6}function O(e,n,o,l){const[r]=t();p(()=>{if(null!=n&&null!=e){const t=r.getRootElement(),e=null!=t?function(t){let e=getComputedStyle(t);const n="absolute"===e.position,o=/(auto|scroll)/;if("fixed"===e.position)return document.body;for(let l=t;l=l.parentElement;)if(e=getComputedStyle(l),(!n||"static"!==e.position)&&o.test(e.overflow+e.overflowY+e.overflowX))return l;return document.body}(t):document.body;let i=!1,u=I(n,e);const s=function(){i||(window.requestAnimationFrame(function(){o(),i=!1}),i=!0);const t=I(n,e);t!==u&&(u=t,null!=l&&l(t))},c=new ResizeObserver(o);return window.addEventListener("resize",o),document.addEventListener("scroll",s,{capture:!0,passive:!0}),c.observe(n),()=>{c.unobserve(n),window.removeEventListener("resize",o),document.removeEventListener("scroll",s,!0)}}},[n,r,l,o,e])}const A=e("SCROLL_TYPEAHEAD_OPTION_INTO_VIEW_COMMAND");function S({close:t,editor:e,anchorElementRef:a,resolution:m,options:d,menuRenderFn:f,onSelectOption:v,shouldSplitNodeWithQuery:b=!1,commandPriority:C=n,preselectFirstItem:E=!0}){const[I,O]=h(null),S=null!==I?Math.min(d.length-1,I):null,P=m.match&&m.match.matchingString;p(()=>{E&&O(0)},[P,E]);const D=g(n=>{e.update(()=>{const e=null!=m.match&&b?function(t){const e=s();if(!c(e)||!e.isCollapsed())return null;const n=e.anchor;if("text"!==n.type)return null;const o=n.getNode();if(!o.isSimpleText())return null;const l=n.offset,r=o.getTextContent().slice(0,l),i=t.replaceableString.length,u=l-function(t,e,n){let o=n;for(let n=o;n<=e.length;n++)t.slice(-n)===e.substring(0,n)&&(o=n);return o}(r,t.matchingString,i);if(u<0)return null;let a;return 0===u?[a]=o.splitText(l):[,a]=o.splitText(u,l),a}(m.match):null;v(n,e,t,m.match?m.match.matchingString:"")})},[e,b,m.match,v,t]),T=g(t=>{const n=e.getRootElement();null!==n&&(n.setAttribute("aria-activedescendant","typeahead-item-"+t),O(t))},[e]);p(()=>()=>{const t=e.getRootElement();null!==t&&t.removeAttribute("aria-activedescendant")},[e]),x(()=>{null===d?O(null):null===S&&E&&T(0)},[d,S,T,E]),p(()=>w(e.registerCommand(A,({option:t})=>!(!t.ref||null==t.ref.current)&&(R(t.ref.current),!0),C)),[e,T,C]),p(()=>w(e.registerCommand(o,t=>{const n=t;if(null!==d&&d.length){const t=null===S?0:S!==d.length-1?S+1:0;T(t);const o=d[t];if(!o)return T(-1),n.preventDefault(),n.stopImmediatePropagation(),!0;o.ref&&o.ref.current&&e.dispatchCommand(A,{index:t,option:o}),n.preventDefault(),n.stopImmediatePropagation()}return!0},C),e.registerCommand(l,t=>{const e=t;if(null!==d&&d.length){const t=null===S?d.length-1:0!==S?S-1:d.length-1;T(t);const n=d[t];if(!n)return T(-1),e.preventDefault(),e.stopImmediatePropagation(),!0;n.ref&&n.ref.current&&R(n.ref.current),e.preventDefault(),e.stopImmediatePropagation()}return!0},C),e.registerCommand(r,e=>{const n=e;return n.preventDefault(),n.stopImmediatePropagation(),t(),!0},C),e.registerCommand(i,t=>{const e=t;return null!==d&&null!==S&&null!=d[S]&&(e.preventDefault(),e.stopImmediatePropagation(),D(d[S]),!0)},C),e.registerCommand(u,t=>null!==d&&null!==S&&null!=d[S]&&(null!==t&&(t.preventDefault(),t.stopImmediatePropagation()),D(d[S]),!0),C)),[D,t,e,d,S,T,C]);return f(a,y(()=>({options:d,selectOptionAndCleanUp:D,selectedIndex:S,setHighlightedIndex:O}),[D,S,d]),m.match?m.match.matchingString:"")}function P(t,e){null!=e&&(t.className=e),t.setAttribute("aria-label","Typeahead menu"),t.setAttribute("role","listbox"),t.style.display="block",t.style.position="absolute"}function D({options:e,nodeKey:o,onClose:l,onOpen:r,onSelectOption:i,menuRenderFn:u,anchorClassName:s,commandPriority:c=n,parent:d}){const[y]=t(),[w,x]=h(null),E=function(e,n,o,l=(C?document.body:void 0),r=!0){const[i]=t(),u=C?document.createElement("div"):null,s=f(u),c=g(()=>{if(null===s.current||void 0===l)return;s.current.style.top=s.current.style.bottom;const t=i.getRootElement(),n=s.current,u=n.firstChild;if(null!==t&&null!==e){const{left:i,top:c,width:a,height:m}=e.getRect(),d=s.current.offsetHeight;if(n.style.top=`${c+d+3+(r?window.pageYOffset:0)}px`,n.style.left=`${i+window.pageXOffset}px`,n.style.height=`${m}px`,n.style.width=`${a}px`,null!==u){u.style.top=`${c}`;const e=u.getBoundingClientRect(),o=e.height,l=e.width,s=t.getBoundingClientRect();i+l>s.right&&(n.style.left=`${s.right-l+window.pageXOffset}px`),(c+o>window.innerHeight||c+o>s.bottom)&&c-s.top>o+m&&(n.style.top=`${c-o-m+(r?window.pageYOffset:0)}px`)}n.isConnected||(P(n,o),l.append(n)),n.setAttribute("id","typeahead-menu"),t.setAttribute("aria-controls","typeahead-menu")}},[i,e,r,o,l]);p(()=>{const t=i.getRootElement();return null!==e&&c(),()=>{null!==t&&t.removeAttribute("aria-controls");const e=s.current;null!==e&&e.isConnected&&(e.remove(),e.removeAttribute("id"))}},[i,c,e]);const a=g(t=>{null!==e&&(t||n(null))},[e,n]);return O(e,s.current,c,a),null!=u&&u===s.current&&(P(u,o),null!=l&&l.append(u)),s}(w,x,s,d),R=g(()=>{x(null),null!=l&&null!==w&&l()},[l,w]),I=g(t=>{x(t),null!=r&&null===w&&r(t)},[r,w]),A=g(()=>{o?y.update(()=>{const t=a(o),e=y.getElementByKey(o);var n;null!=t&&null!=e&&null==w&&(n=()=>I({getRect:()=>e.getBoundingClientRect()}),b in m?m[b](n):n())}):null==o&&null!=w&&R()},[R,y,o,I,w]);return p(()=>{A()},[A,o]),p(()=>{if(null!=o)return y.registerUpdateListener(({dirtyElements:t})=>{t.get(o)&&A()})},[y,A,o]),null===E.current||null===w||null===y?null:v(S,{close:R,resolution:w,editor:y,anchorElementRef:E,options:e,menuRenderFn:u,onSelectOption:i,commandPriority:c})}export{D as LexicalNodeMenuPlugin,E as MenuOption};