@byline/richtext-lexical 1.11.2 → 1.12.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 (256) hide show
  1. package/dist/field/apply-value-plugin.js +1 -3
  2. package/dist/field/config/default-extensions.d.ts +32 -0
  3. package/dist/field/config/default-extensions.js +49 -0
  4. package/dist/field/config/default.d.ts +8 -0
  5. package/dist/field/config/default.js +0 -28
  6. package/dist/field/config/editor-config-context.js +2 -6
  7. package/dist/field/config/extensions-list.d.ts +44 -0
  8. package/dist/field/config/extensions-list.js +55 -0
  9. package/dist/field/config/types.d.ts +28 -1
  10. package/dist/field/editor-context.d.ts +1 -1
  11. package/dist/field/editor-context.js +39 -35
  12. package/dist/field/editor.js +11 -57
  13. package/dist/field/{plugins/admonition-plugin/index.d.ts → extensions/admonition/admonition-extension.d.ts} +2 -1
  14. package/dist/field/{plugins/admonition-plugin/index.js → extensions/admonition/admonition-extension.js} +51 -4
  15. package/dist/field/{nodes/admonition-node → extensions/admonition}/admonition-node-component.d.ts +1 -1
  16. package/dist/field/{nodes/admonition-node → extensions/admonition}/admonition-node-component.js +1 -1
  17. package/dist/field/{nodes/admonition-node → extensions/admonition}/admonition-node.d.ts +1 -1
  18. package/dist/field/{plugins/admonition-plugin → extensions/admonition}/fields.d.ts +1 -1
  19. package/dist/field/{nodes/admonition-node → extensions/admonition}/index.js +1 -1
  20. package/dist/field/{plugins/admonition-plugin → extensions/admonition}/types.d.ts +1 -1
  21. package/dist/field/{plugins/auto-embed-plugin/index.d.ts → extensions/auto-embed/auto-embed-extension.d.ts} +1 -0
  22. package/dist/field/{plugins/auto-embed-plugin/index.js → extensions/auto-embed/auto-embed-extension.js} +47 -4
  23. package/dist/field/{plugins/auto-embed-plugin → extensions/auto-embed}/auto-embed-modal.d.ts +1 -1
  24. package/dist/field/extensions/byline-floating-ui/byline-floating-ui-extension.d.ts +68 -0
  25. package/dist/field/extensions/byline-floating-ui/byline-floating-ui-extension.js +19 -0
  26. package/dist/field/{nodes/admonition-node → extensions/byline-floating-ui}/index.d.ts +1 -2
  27. package/dist/field/extensions/byline-floating-ui/index.js +1 -0
  28. package/dist/field/extensions/byline-toolbar/byline-toolbar-extension.d.ts +69 -0
  29. package/dist/field/extensions/byline-toolbar/byline-toolbar-extension.js +19 -0
  30. package/dist/field/{nodes/inline-image-node → extensions/byline-toolbar}/index.d.ts +1 -2
  31. package/dist/field/extensions/byline-toolbar/index.js +1 -0
  32. package/dist/field/extensions/code-highlight/code-highlight-extension.d.ts +10 -0
  33. package/dist/field/extensions/code-highlight/code-highlight-extension.js +11 -0
  34. package/dist/field/extensions/floating-text-format/floating-text-format-extension.d.ts +18 -0
  35. package/dist/field/extensions/floating-text-format/floating-text-format-extension.js +17 -0
  36. package/dist/field/{plugins/floating-text-format-toolbar-plugin → extensions/floating-text-format}/index.js +1 -1
  37. package/dist/field/extensions/horizontal-rule/horizontal-rule-extension.d.ts +6 -0
  38. package/dist/field/extensions/horizontal-rule/horizontal-rule-extension.js +45 -0
  39. package/dist/field/{nodes/inline-image-node → extensions/inline-image}/index.js +1 -1
  40. package/dist/field/{plugins/inline-image-plugin/index.d.ts → extensions/inline-image/inline-image-extension.d.ts} +6 -3
  41. package/dist/field/{plugins/inline-image-plugin/index.js → extensions/inline-image/inline-image-extension.js} +57 -5
  42. package/dist/field/{nodes/inline-image-node → extensions/inline-image}/inline-image-node-component.d.ts +2 -2
  43. package/dist/field/{nodes/inline-image-node → extensions/inline-image}/inline-image-node-component.js +4 -4
  44. package/dist/field/{nodes/inline-image-node → extensions/inline-image}/inline-image-node.d.ts +2 -2
  45. package/dist/field/{nodes/inline-image-node/types.d.ts → extensions/inline-image/node-types.d.ts} +1 -1
  46. package/dist/field/{plugins/inline-image-plugin → extensions/inline-image}/types.d.ts +1 -1
  47. package/dist/field/{plugins/inline-image-plugin → extensions/inline-image}/utils.d.ts +1 -1
  48. package/dist/field/{plugins/layout-plugin/layout-plugin.d.ts → extensions/layout/layout-extension.d.ts} +1 -0
  49. package/dist/field/{plugins/layout-plugin/layout-plugin.js → extensions/layout/layout-extension.js} +53 -5
  50. package/dist/field/extensions/link/auto-link-extension.d.ts +12 -0
  51. package/dist/field/{plugins/link-plugin/auto-link/index.js → extensions/link/auto-link-extension.js} +14 -2
  52. package/dist/field/{plugins/link-plugin/auto-link → extensions/link}/auto-link-plugin.d.ts +1 -1
  53. package/dist/field/{plugins/link-plugin/auto-link → extensions/link}/auto-link-plugin.js +2 -2
  54. package/dist/field/{plugins/link-plugin → extensions}/link/floating-link-editor.css +2 -2
  55. package/dist/field/{plugins/link-plugin → extensions}/link/floating-link-editor.js +4 -4
  56. package/dist/field/extensions/link/index.d.ts +5 -0
  57. package/dist/field/extensions/link/index.js +5 -0
  58. package/dist/field/extensions/link/link-extension.d.ts +14 -0
  59. package/dist/field/extensions/link/link-extension.js +66 -0
  60. package/dist/field/{plugins/link-plugin/link/types.d.ts → extensions/link/link-modal-types.d.ts} +1 -1
  61. package/dist/field/{plugins/link-plugin → extensions}/link/link-modal.d.ts +1 -1
  62. package/dist/field/{plugins/link-plugin → extensions}/link/link-modal.js +3 -3
  63. package/dist/field/{nodes/link-nodes → extensions/link}/types.d.ts +1 -1
  64. package/dist/field/extensions/table/table-action-menu-plugin/index.d.ts +4 -0
  65. package/dist/field/{plugins → extensions/table}/table-action-menu-plugin/index.js +8 -6
  66. package/dist/field/extensions/table/table-extension.d.ts +17 -0
  67. package/dist/field/extensions/table/table-extension.js +58 -0
  68. package/dist/field/extensions/vimeo/vimeo-extension.d.ts +12 -0
  69. package/dist/field/extensions/vimeo/vimeo-extension.js +16 -0
  70. package/dist/field/extensions/youtube/youtube-extension.d.ts +12 -0
  71. package/dist/field/extensions/youtube/youtube-extension.js +16 -0
  72. package/dist/field/nodes/index.js +7 -7
  73. package/dist/field/plugins/table-plugin/index.js +5 -6
  74. package/dist/field/plugins/toolbar-plugin/index.js +40 -114
  75. package/dist/field/plugins/toolbar-plugin/toolbar-active-editor.d.ts +25 -0
  76. package/dist/field/plugins/toolbar-plugin/toolbar-active-editor.js +17 -0
  77. package/dist/field/themes/lexical-editor-theme.css +13 -3
  78. package/dist/field/themes/lexical-editor-theme.js +1 -0
  79. package/dist/index.d.ts +17 -1
  80. package/dist/index.js +16 -0
  81. package/dist/lexical-editor.d.ts +25 -13
  82. package/dist/lexical-editor.js +9 -1
  83. package/dist/richtext-field.js +6 -1
  84. package/dist/server.d.ts +2 -2
  85. package/dist/server.js +2 -2
  86. package/package.json +7 -10
  87. package/src/field/apply-value-plugin.tsx +6 -6
  88. package/src/field/config/default-extensions.ts +104 -0
  89. package/src/field/config/default.ts +8 -28
  90. package/src/field/config/editor-config-context.tsx +1 -7
  91. package/src/field/config/extensions-list.ts +107 -0
  92. package/src/field/config/types.ts +28 -28
  93. package/src/field/editor-context.tsx +77 -41
  94. package/src/field/editor.tsx +24 -72
  95. package/src/field/extensions/README.md +31 -0
  96. package/src/field/{plugins/admonition-plugin/index.tsx → extensions/admonition/admonition-extension.tsx} +45 -2
  97. package/src/field/{plugins/admonition-plugin → extensions/admonition}/admonition-modal.tsx +1 -1
  98. package/src/field/{nodes/admonition-node → extensions/admonition}/admonition-node-component.tsx +5 -5
  99. package/src/field/{nodes/admonition-node → extensions/admonition}/admonition-node.tsx +1 -1
  100. package/src/field/{plugins/admonition-plugin → extensions/admonition}/fields.ts +1 -1
  101. package/src/field/{nodes/admonition-node → extensions/admonition}/index.ts +5 -1
  102. package/src/field/{plugins/admonition-plugin → extensions/admonition}/types.ts +1 -1
  103. package/src/field/{plugins/auto-embed-plugin/index.tsx → extensions/auto-embed/auto-embed-extension.tsx} +46 -3
  104. package/src/field/{plugins/auto-embed-plugin → extensions/auto-embed}/auto-embed-modal.tsx +1 -1
  105. package/src/field/extensions/byline-floating-ui/byline-floating-ui-extension.ts +90 -0
  106. package/src/field/extensions/byline-floating-ui/index.ts +15 -0
  107. package/src/field/extensions/byline-toolbar/byline-toolbar-extension.ts +95 -0
  108. package/src/field/extensions/byline-toolbar/index.ts +15 -0
  109. package/src/field/extensions/code-highlight/code-highlight-extension.ts +18 -0
  110. package/src/field/extensions/floating-text-format/floating-text-format-extension.ts +39 -0
  111. package/src/field/{plugins/floating-text-format-toolbar-plugin → extensions/floating-text-format}/index.tsx +1 -1
  112. package/src/field/extensions/horizontal-rule/horizontal-rule-extension.tsx +57 -0
  113. package/src/field/{nodes/inline-image-node → extensions/inline-image}/index.ts +1 -1
  114. package/src/field/{plugins/inline-image-plugin/index.tsx → extensions/inline-image/inline-image-extension.tsx} +54 -6
  115. package/src/field/{plugins/inline-image-plugin → extensions/inline-image}/inline-image-modal.tsx +1 -1
  116. package/src/field/{nodes/inline-image-node → extensions/inline-image}/inline-image-node-component.tsx +6 -6
  117. package/src/field/{nodes/inline-image-node → extensions/inline-image}/inline-image-node.tsx +2 -2
  118. package/src/field/{nodes/inline-image-node/types.ts → extensions/inline-image/node-types.ts} +1 -1
  119. package/src/field/{plugins/inline-image-plugin → extensions/inline-image}/types.ts +1 -1
  120. package/src/field/{plugins/inline-image-plugin → extensions/inline-image}/utils.ts +1 -1
  121. package/src/field/{plugins/layout-plugin/layout-plugin.tsx → extensions/layout/layout-extension.tsx} +47 -8
  122. package/src/field/{plugins/link-plugin/auto-link/index.tsx → extensions/link/auto-link-extension.tsx} +13 -3
  123. package/src/field/{plugins/link-plugin/auto-link → extensions/link}/auto-link-plugin.tsx +2 -2
  124. package/src/field/{plugins/link-plugin → extensions}/link/floating-link-editor.css +2 -2
  125. package/src/field/{plugins/link-plugin → extensions}/link/floating-link-editor.tsx +5 -5
  126. package/src/field/extensions/link/index.ts +5 -0
  127. package/src/field/extensions/link/link-extension.tsx +131 -0
  128. package/src/field/{plugins/link-plugin/link/types.ts → extensions/link/link-modal-types.ts} +1 -1
  129. package/src/field/{plugins/link-plugin → extensions}/link/link-modal.tsx +6 -6
  130. package/src/field/{nodes/link-nodes → extensions/link}/types.ts +1 -1
  131. package/src/field/{plugins → extensions/table}/table-action-menu-plugin/index.tsx +12 -8
  132. package/src/field/extensions/table/table-extension.tsx +86 -0
  133. package/src/field/extensions/vimeo/vimeo-extension.ts +36 -0
  134. package/src/field/extensions/youtube/youtube-extension.ts +37 -0
  135. package/src/field/nodes/index.ts +7 -7
  136. package/src/field/plugins/table-plugin/index.tsx +10 -10
  137. package/src/field/plugins/toolbar-plugin/index.tsx +59 -122
  138. package/src/field/plugins/toolbar-plugin/toolbar-active-editor.tsx +48 -0
  139. package/src/field/themes/lexical-editor-theme.css +18 -3
  140. package/src/field/themes/lexical-editor-theme.tsx +1 -0
  141. package/src/index.ts +45 -2
  142. package/src/lexical-editor.tsx +35 -14
  143. package/src/richtext-field.tsx +8 -1
  144. package/src/server.ts +4 -4
  145. package/dist/field/nodes/link-nodes/index.d.ts +0 -3
  146. package/dist/field/nodes/link-nodes/index.js +0 -3
  147. package/dist/field/plugins/code-highlight-plugin/index.d.ts +0 -9
  148. package/dist/field/plugins/code-highlight-plugin/index.js +0 -11
  149. package/dist/field/plugins/link-plugin/auto-link/index.d.ts +0 -9
  150. package/dist/field/plugins/link-plugin/link/index.d.ts +0 -1
  151. package/dist/field/plugins/link-plugin/link/index.js +0 -43
  152. package/dist/field/plugins/table-action-menu-plugin/index.d.ts +0 -5
  153. package/dist/field/plugins/vimeo-plugin/index.d.ts +0 -3
  154. package/dist/field/plugins/vimeo-plugin/index.js +0 -24
  155. package/dist/field/plugins/youtube-plugin/index.d.ts +0 -3
  156. package/dist/field/plugins/youtube-plugin/index.js +0 -24
  157. package/dist/field/toolbar-extensions.d.ts +0 -31
  158. package/dist/field/toolbar-extensions.js +0 -56
  159. package/src/field/nodes/link-nodes/index.ts +0 -3
  160. package/src/field/plugins/code-highlight-plugin/index.ts +0 -23
  161. package/src/field/plugins/link-plugin/link/index.tsx +0 -99
  162. package/src/field/plugins/vimeo-plugin/index.ts +0 -42
  163. package/src/field/plugins/youtube-plugin/index.ts +0 -43
  164. package/src/field/themes/lexical-editor-theme.js +0 -104
  165. package/src/field/toolbar-extensions.tsx +0 -93
  166. /package/dist/field/{plugins/admonition-plugin → extensions/admonition}/admonition-modal.css +0 -0
  167. /package/dist/field/{plugins/admonition-plugin → extensions/admonition}/admonition-modal.d.ts +0 -0
  168. /package/dist/field/{plugins/admonition-plugin → extensions/admonition}/admonition-modal.js +0 -0
  169. /package/dist/field/{nodes/admonition-node → extensions/admonition}/admonition-node-component.css +0 -0
  170. /package/dist/field/{nodes/admonition-node → extensions/admonition}/admonition-node.js +0 -0
  171. /package/dist/field/{plugins/admonition-plugin → extensions/admonition}/fields.js +0 -0
  172. /package/dist/field/{nodes/admonition-node → extensions/admonition}/icons/danger-icon.css +0 -0
  173. /package/dist/field/{nodes/admonition-node → extensions/admonition}/icons/danger-icon.d.ts +0 -0
  174. /package/dist/field/{nodes/admonition-node → extensions/admonition}/icons/danger-icon.js +0 -0
  175. /package/dist/field/{nodes/admonition-node → extensions/admonition}/icons/index.d.ts +0 -0
  176. /package/dist/field/{nodes/admonition-node → extensions/admonition}/icons/index.js +0 -0
  177. /package/dist/field/{nodes/admonition-node → extensions/admonition}/icons/note-icon.css +0 -0
  178. /package/dist/field/{nodes/admonition-node → extensions/admonition}/icons/note-icon.d.ts +0 -0
  179. /package/dist/field/{nodes/admonition-node → extensions/admonition}/icons/note-icon.js +0 -0
  180. /package/dist/field/{nodes/admonition-node → extensions/admonition}/icons/tip-icon.css +0 -0
  181. /package/dist/field/{nodes/admonition-node → extensions/admonition}/icons/tip-icon.d.ts +0 -0
  182. /package/dist/field/{nodes/admonition-node → extensions/admonition}/icons/tip-icon.js +0 -0
  183. /package/dist/field/{nodes/admonition-node → extensions/admonition}/icons/warning-icon.css +0 -0
  184. /package/dist/field/{nodes/admonition-node → extensions/admonition}/icons/warning-icon.d.ts +0 -0
  185. /package/dist/field/{nodes/admonition-node → extensions/admonition}/icons/warning-icon.js +0 -0
  186. /package/dist/field/{nodes/admonition-node/types.d.ts → extensions/admonition/node-types.d.ts} +0 -0
  187. /package/dist/field/{nodes/admonition-node/types.js → extensions/admonition/node-types.js} +0 -0
  188. /package/dist/field/{nodes/inline-image-node → extensions/admonition}/types.js +0 -0
  189. /package/dist/field/{plugins/auto-embed-plugin → extensions/auto-embed}/auto-embed-modal.css +0 -0
  190. /package/dist/field/{plugins/auto-embed-plugin → extensions/auto-embed}/auto-embed-modal.js +0 -0
  191. /package/dist/field/{plugins/floating-text-format-toolbar-plugin → extensions/floating-text-format}/index.css +0 -0
  192. /package/dist/field/{plugins/floating-text-format-toolbar-plugin → extensions/floating-text-format}/index.d.ts +0 -0
  193. /package/dist/field/{plugins/inline-image-plugin → extensions/inline-image}/fields.d.ts +0 -0
  194. /package/dist/field/{plugins/inline-image-plugin → extensions/inline-image}/fields.js +0 -0
  195. /package/dist/field/{plugins/inline-image-plugin → extensions/inline-image}/inline-image-modal.css +0 -0
  196. /package/dist/field/{plugins/inline-image-plugin → extensions/inline-image}/inline-image-modal.d.ts +0 -0
  197. /package/dist/field/{plugins/inline-image-plugin → extensions/inline-image}/inline-image-modal.js +0 -0
  198. /package/dist/field/{nodes/inline-image-node → extensions/inline-image}/inline-image-node-component.css +0 -0
  199. /package/dist/field/{nodes/inline-image-node → extensions/inline-image}/inline-image-node.js +0 -0
  200. /package/dist/field/{nodes/link-nodes/types.js → extensions/inline-image/node-types.js} +0 -0
  201. /package/dist/field/{plugins/inline-image-plugin → extensions/inline-image}/populate.d.ts +0 -0
  202. /package/dist/field/{plugins/inline-image-plugin → extensions/inline-image}/populate.js +0 -0
  203. /package/dist/field/{plugins/admonition-plugin → extensions/inline-image}/types.js +0 -0
  204. /package/dist/field/{plugins/inline-image-plugin → extensions/inline-image}/utils.js +0 -0
  205. /package/dist/field/{plugins/layout-plugin → extensions/layout}/insert-layout-modal.css +0 -0
  206. /package/dist/field/{plugins/layout-plugin → extensions/layout}/insert-layout-modal.d.ts +0 -0
  207. /package/dist/field/{plugins/layout-plugin → extensions/layout}/insert-layout-modal.js +0 -0
  208. /package/dist/field/{nodes/layout-container-node → extensions/layout}/layout-container-node.d.ts +0 -0
  209. /package/dist/field/{nodes/layout-container-node → extensions/layout}/layout-container-node.js +0 -0
  210. /package/dist/field/{nodes/layout-container-node → extensions/layout}/layout-item-node.d.ts +0 -0
  211. /package/dist/field/{nodes/layout-container-node → extensions/layout}/layout-item-node.js +0 -0
  212. /package/dist/field/{nodes/link-nodes → extensions/link}/auto-link-node.d.ts +0 -0
  213. /package/dist/field/{nodes/link-nodes → extensions/link}/auto-link-node.js +0 -0
  214. /package/dist/field/{plugins/link-plugin → extensions}/link/floating-link-editor.d.ts +0 -0
  215. /package/dist/field/{plugins/inline-image-plugin/types.js → extensions/link/link-modal-types.js} +0 -0
  216. /package/dist/field/{nodes/link-nodes → extensions/link}/link-node.d.ts +0 -0
  217. /package/dist/field/{nodes/link-nodes → extensions/link}/link-node.js +0 -0
  218. /package/dist/field/{plugins/link-plugin → extensions/link}/populate.d.ts +0 -0
  219. /package/dist/field/{plugins/link-plugin → extensions/link}/populate.js +0 -0
  220. /package/dist/field/{plugins/link-plugin → extensions}/link/types.js +0 -0
  221. /package/dist/field/{nodes/vimeo-node/index.d.ts → extensions/vimeo/vimeo-node.d.ts} +0 -0
  222. /package/dist/field/{nodes/vimeo-node/index.js → extensions/vimeo/vimeo-node.js} +0 -0
  223. /package/dist/field/{nodes/youtube-node/index.d.ts → extensions/youtube/youtube-node.d.ts} +0 -0
  224. /package/dist/field/{nodes/youtube-node/index.js → extensions/youtube/youtube-node.js} +0 -0
  225. /package/src/field/{plugins/admonition-plugin → extensions/admonition}/admonition-modal.css +0 -0
  226. /package/src/field/{nodes/admonition-node → extensions/admonition}/admonition-node-component.css +0 -0
  227. /package/src/field/{nodes/admonition-node → extensions/admonition}/icons/danger-icon.css +0 -0
  228. /package/src/field/{nodes/admonition-node → extensions/admonition}/icons/danger-icon.js +0 -0
  229. /package/src/field/{nodes/admonition-node → extensions/admonition}/icons/danger-icon.tsx +0 -0
  230. /package/src/field/{nodes/admonition-node → extensions/admonition}/icons/index.js +0 -0
  231. /package/src/field/{nodes/admonition-node → extensions/admonition}/icons/index.ts +0 -0
  232. /package/src/field/{nodes/admonition-node → extensions/admonition}/icons/note-icon.css +0 -0
  233. /package/src/field/{nodes/admonition-node → extensions/admonition}/icons/note-icon.js +0 -0
  234. /package/src/field/{nodes/admonition-node → extensions/admonition}/icons/note-icon.tsx +0 -0
  235. /package/src/field/{nodes/admonition-node → extensions/admonition}/icons/tip-icon.css +0 -0
  236. /package/src/field/{nodes/admonition-node → extensions/admonition}/icons/tip-icon.js +0 -0
  237. /package/src/field/{nodes/admonition-node → extensions/admonition}/icons/tip-icon.tsx +0 -0
  238. /package/src/field/{nodes/admonition-node → extensions/admonition}/icons/warning-icon.css +0 -0
  239. /package/src/field/{nodes/admonition-node → extensions/admonition}/icons/warning-icon.js +0 -0
  240. /package/src/field/{nodes/admonition-node → extensions/admonition}/icons/warning-icon.tsx +0 -0
  241. /package/src/field/{nodes/admonition-node/types.ts → extensions/admonition/node-types.ts} +0 -0
  242. /package/src/field/{plugins/auto-embed-plugin → extensions/auto-embed}/auto-embed-modal.css +0 -0
  243. /package/src/field/{plugins/floating-text-format-toolbar-plugin → extensions/floating-text-format}/index.css +0 -0
  244. /package/src/field/{plugins/inline-image-plugin → extensions/inline-image}/fields.ts +0 -0
  245. /package/src/field/{plugins/inline-image-plugin → extensions/inline-image}/inline-image-modal.css +0 -0
  246. /package/src/field/{nodes/inline-image-node → extensions/inline-image}/inline-image-node-component.css +0 -0
  247. /package/src/field/{plugins/inline-image-plugin → extensions/inline-image}/populate.ts +0 -0
  248. /package/src/field/{plugins/layout-plugin → extensions/layout}/insert-layout-modal.css +0 -0
  249. /package/src/field/{plugins/layout-plugin → extensions/layout}/insert-layout-modal.tsx +0 -0
  250. /package/src/field/{nodes/layout-container-node → extensions/layout}/layout-container-node.ts +0 -0
  251. /package/src/field/{nodes/layout-container-node → extensions/layout}/layout-item-node.ts +0 -0
  252. /package/src/field/{nodes/link-nodes → extensions/link}/auto-link-node.ts +0 -0
  253. /package/src/field/{nodes/link-nodes → extensions/link}/link-node.ts +0 -0
  254. /package/src/field/{plugins/link-plugin → extensions/link}/populate.ts +0 -0
  255. /package/src/field/{nodes/vimeo-node/index.tsx → extensions/vimeo/vimeo-node.tsx} +0 -0
  256. /package/src/field/{nodes/youtube-node/index.tsx → extensions/youtube/youtube-node.tsx} +0 -0
@@ -15,8 +15,8 @@ import { useEditorConfig } from "../../config/editor-config-context.js";
15
15
  import { ContentEditable } from "../../content-editable.js";
16
16
  import { useSharedHistoryContext } from "../../context/shared-history-context.js";
17
17
  import { useSharedOnChange } from "../../context/shared-on-change-context.js";
18
- import { AdmonitionModal } from "../../plugins/admonition-plugin/admonition-modal.js";
19
18
  import { Placeholder } from "../../ui/placeholder.js";
19
+ import { AdmonitionModal } from "./admonition-modal.js";
20
20
  import { $isAdmonitionNode } from "./admonition-node.js";
21
21
  import { DangerIcon, NoteIcon, TipIcon, WarningIcon } from "./icons/index.js";
22
22
  import "./admonition-node-component.css";
@@ -8,7 +8,7 @@
8
8
  import * as React from 'react';
9
9
  import type { DOMConversionMap, DOMExportOutput, EditorConfig, LexicalEditor, LexicalNode, NodeKey } from 'lexical';
10
10
  import { DecoratorNode } from 'lexical';
11
- import type { AdmonitionAttributes, AdmonitionType, SerializedAdmonitionNode } from './types';
11
+ import type { AdmonitionAttributes, AdmonitionType, SerializedAdmonitionNode } from './node-types';
12
12
  export declare class AdmonitionNode extends DecoratorNode<React.JSX.Element> {
13
13
  __admonitionType: AdmonitionType;
14
14
  __title: string;
@@ -6,7 +6,7 @@
6
6
  * Copyright (c) Infonomic Company Limited
7
7
  */
8
8
  import type { RadioGroupValue } from '@byline/ui/react';
9
- import type { AdmonitionType } from '../../nodes/admonition-node';
9
+ import type { AdmonitionType } from './node-types';
10
10
  import type { AdmonitionFormState } from './types';
11
11
  export declare const admonitionTypeOptions: RadioGroupValue[];
12
12
  export declare function getInitialState(data: {
@@ -1,2 +1,2 @@
1
1
  export * from "./admonition-node.js";
2
- export * from "./types.js";
2
+ export * from "./node-types.js";
@@ -5,7 +5,7 @@
5
5
  *
6
6
  * Copyright (c) Infonomic Company Limited
7
7
  */
8
- import type { AdmonitionType } from '../../nodes/admonition-node/types';
8
+ import type { AdmonitionType } from './node-types';
9
9
  export interface AdmonitionFormState {
10
10
  title: {
11
11
  value?: string;
@@ -18,3 +18,4 @@ export declare const YoutubeEmbedConfig: AutoEmbedConfig;
18
18
  export declare const VimeoEmbedConfig: AutoEmbedConfig;
19
19
  export declare const EmbedConfigs: AutoEmbedConfig[];
20
20
  export declare function AutoEmbedPlugin(): React.JSX.Element;
21
+ export declare const AutoEmbedExtension: import("lexical").LexicalExtension<import("lexical").ExtensionConfigBase, "@byline/richtext-lexical/AutoEmbed", unknown, unknown>;
@@ -1,9 +1,14 @@
1
1
  "use client";
2
2
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
3
3
  import { useState } from "react";
4
- import { AutoEmbedOption, LexicalAutoEmbedPlugin } from "@lexical/react/LexicalAutoEmbedPlugin";
5
- import { INSERT_VIMEO_COMMAND } from "../vimeo-plugin/index.js";
6
- import { INSERT_YOUTUBE_COMMAND } from "../youtube-plugin/index.js";
4
+ import { AutoEmbedOption, INSERT_EMBED_COMMAND, LexicalAutoEmbedPlugin } from "@lexical/react/LexicalAutoEmbedPlugin";
5
+ import { ReactExtension } from "@lexical/react/ReactExtension";
6
+ import { configExtension, declarePeerDependency, defineExtension } from "lexical";
7
+ import { useToolbarActiveEditor } from "../../plugins/toolbar-plugin/toolbar-active-editor.js";
8
+ import { DropDownItem } from "../../ui/dropdown.js";
9
+ import { BylineToolbarExtension } from "../byline-toolbar/byline-toolbar-extension.js";
10
+ import { INSERT_VIMEO_COMMAND } from "../vimeo/vimeo-extension.js";
11
+ import { INSERT_YOUTUBE_COMMAND } from "../youtube/youtube-extension.js";
7
12
  import { AutoEmbedModal } from "./auto-embed-modal.js";
8
13
  import * as __rspack_external_react_dom_7136dc57 from "react-dom";
9
14
  const YoutubeEmbedConfig = {
@@ -149,4 +154,42 @@ function AutoEmbedPlugin() {
149
154
  ]
150
155
  });
151
156
  }
152
- export { AutoEmbedPlugin, EmbedConfigs, VimeoEmbedConfig, YoutubeEmbedConfig };
157
+ function EmbedInsertItem({ embedConfig }) {
158
+ const editor = useToolbarActiveEditor();
159
+ return /*#__PURE__*/ jsxs(DropDownItem, {
160
+ onClick: ()=>{
161
+ editor.dispatchCommand(INSERT_EMBED_COMMAND, embedConfig.type);
162
+ },
163
+ className: "item",
164
+ children: [
165
+ embedConfig.icon,
166
+ /*#__PURE__*/ jsx("span", {
167
+ className: "text",
168
+ children: embedConfig.contentName
169
+ })
170
+ ]
171
+ });
172
+ }
173
+ const AutoEmbedExtension = defineExtension({
174
+ name: '@byline/richtext-lexical/AutoEmbed',
175
+ dependencies: [
176
+ configExtension(ReactExtension, {
177
+ decorators: [
178
+ /*#__PURE__*/ jsx(AutoEmbedPlugin, {}, "d")
179
+ ]
180
+ })
181
+ ],
182
+ peerDependencies: [
183
+ declarePeerDependency(BylineToolbarExtension.name, {
184
+ items: EmbedConfigs.map((embedConfig, idx)=>({
185
+ id: `@byline/richtext-lexical/AutoEmbed/${embedConfig.type}`,
186
+ placement: 'insert-menu',
187
+ order: 60 + idx,
188
+ node: /*#__PURE__*/ jsx(EmbedInsertItem, {
189
+ embedConfig: embedConfig
190
+ })
191
+ }))
192
+ })
193
+ ]
194
+ });
195
+ export { AutoEmbedExtension, AutoEmbedPlugin, EmbedConfigs, VimeoEmbedConfig, YoutubeEmbedConfig };
@@ -1,4 +1,4 @@
1
- import type { AutoEmbedConfig } from './index';
1
+ import type { AutoEmbedConfig } from './auto-embed-extension';
2
2
  import './auto-embed-modal.css';
3
3
  export declare function AutoEmbedModal({ open, embedConfig, onClose, }: {
4
4
  open: boolean;
@@ -0,0 +1,68 @@
1
+ /**
2
+ * This Source Code is subject to the terms of the Mozilla Public
3
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
4
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
5
+ *
6
+ * Copyright (c) Infonomic Company Limited
7
+ */
8
+ import type * as React from 'react';
9
+ /**
10
+ * Props passed by `Editor.tsx` to every registered floating-UI component.
11
+ * The component renders itself (usually via `createPortal(..., anchorElem)`)
12
+ * inside the editor's floating slot.
13
+ */
14
+ export interface BylineFloatingUIProps {
15
+ anchorElem: HTMLElement;
16
+ }
17
+ export interface BylineFloatingUIItem {
18
+ /**
19
+ * Stable identifier — used as React key and for de-duplication.
20
+ * Convention: `<extension-name>/<purpose>`, e.g.
21
+ * `'@byline/richtext-lexical/Link/floating-editor'`.
22
+ */
23
+ id: string;
24
+ /**
25
+ * The floating UI component. Receives `anchorElem` (the editor's
26
+ * inner content-editable wrapper) as a prop and is expected to portal
27
+ * itself into that element.
28
+ */
29
+ Component: React.ComponentType<BylineFloatingUIProps>;
30
+ /** Sort key — lower numbers render first. Mostly cosmetic. */
31
+ order?: number;
32
+ }
33
+ export interface BylineFloatingUIConfig {
34
+ items: BylineFloatingUIItem[];
35
+ }
36
+ /**
37
+ * The floating-UI contract. Other extensions contribute floating UIs by
38
+ * listing `BylineFloatingUIExtension` in their `peerDependencies` and
39
+ * supplying an `items` array. The editor's floating slot reads the merged
40
+ * list once and renders every contributor under the shared anchor.
41
+ *
42
+ * Mirror of `BylineToolbarExtension` for the floating-UI surface — same
43
+ * pattern, same authoring shape.
44
+ *
45
+ * @example
46
+ * ```ts
47
+ * import { declarePeerDependency, defineExtension } from 'lexical'
48
+ * import { BylineFloatingUIExtension } from '@byline/richtext-lexical'
49
+ *
50
+ * export const MyExtension = defineExtension({
51
+ * name: '@example/MyExtension',
52
+ * peerDependencies: [
53
+ * declarePeerDependency<typeof BylineFloatingUIExtension>(
54
+ * BylineFloatingUIExtension.name,
55
+ * {
56
+ * items: [{
57
+ * id: '@example/MyExtension/floating',
58
+ * Component: MyFloatingPopover,
59
+ * }],
60
+ * }
61
+ * ),
62
+ * ],
63
+ * })
64
+ * ```
65
+ */
66
+ export declare const BylineFloatingUIExtension: import("lexical").LexicalExtension<BylineFloatingUIConfig, "@byline/richtext-lexical/FloatingUI", unknown, unknown>;
67
+ /** Sort helper used by the editor's floating-UI slot. */
68
+ export declare function selectFloatingUIItems(items: ReadonlyArray<BylineFloatingUIItem>): BylineFloatingUIItem[];
@@ -0,0 +1,19 @@
1
+ import { defineExtension, safeCast, shallowMergeConfig } from "lexical";
2
+ const BylineFloatingUIExtension = defineExtension({
3
+ name: '@byline/richtext-lexical/FloatingUI',
4
+ config: safeCast({
5
+ items: []
6
+ }),
7
+ mergeConfig (a, b) {
8
+ const merged = shallowMergeConfig(a, b);
9
+ if (b.items && b.items.length > 0) merged.items = [
10
+ ...a.items,
11
+ ...b.items
12
+ ];
13
+ return merged;
14
+ }
15
+ });
16
+ function selectFloatingUIItems(items) {
17
+ return items.slice().sort((a, b)=>(a.order ?? 0) - (b.order ?? 0));
18
+ }
19
+ export { BylineFloatingUIExtension, selectFloatingUIItems };
@@ -5,5 +5,4 @@
5
5
  *
6
6
  * Copyright (c) Infonomic Company Limited
7
7
  */
8
- export * from './admonition-node';
9
- export * from './types';
8
+ export { type BylineFloatingUIConfig, BylineFloatingUIExtension, type BylineFloatingUIItem, type BylineFloatingUIProps, selectFloatingUIItems, } from './byline-floating-ui-extension';
@@ -0,0 +1 @@
1
+ export { BylineFloatingUIExtension, selectFloatingUIItems } from "./byline-floating-ui-extension.js";
@@ -0,0 +1,69 @@
1
+ /**
2
+ * This Source Code is subject to the terms of the Mozilla Public
3
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
4
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
5
+ *
6
+ * Copyright (c) Infonomic Company Limited
7
+ */
8
+ import type * as React from 'react';
9
+ /**
10
+ * Where in the Byline toolbar a contributed item is rendered. Built-in
11
+ * extensions and third-party extensions both contribute against these
12
+ * placements via `peerDependencies`; the toolbar plugin reads the merged
13
+ * list and dispatches by `placement`.
14
+ *
15
+ * - `'toolbar'` — appended to the end of the main toolbar row.
16
+ * - `'insert-menu'` — listed inside the "Insert" dropdown that the
17
+ * toolbar shows when at least one insert-menu contribution exists.
18
+ */
19
+ export type BylineToolbarPlacement = 'toolbar' | 'insert-menu';
20
+ export interface BylineToolbarItem {
21
+ /**
22
+ * Stable identifier — used as React key and for de-duplication.
23
+ * Convention: `<extension-name>/<purpose>`, e.g.
24
+ * `'@byline/richtext-lexical/InlineImage/insert'`.
25
+ */
26
+ id: string;
27
+ placement: BylineToolbarPlacement;
28
+ /** Sort key within `placement`. Lower numbers render first. */
29
+ order?: number;
30
+ node: React.ReactNode;
31
+ }
32
+ export interface BylineToolbarConfig {
33
+ items: BylineToolbarItem[];
34
+ }
35
+ /**
36
+ * The toolbar contract. Other extensions add toolbar entries by listing
37
+ * `BylineToolbarExtension` in their `peerDependencies` and supplying an
38
+ * `items` array — the configs are merged across every contributor and
39
+ * read once by the toolbar plugin.
40
+ *
41
+ * @example
42
+ * ```ts
43
+ * import { declarePeerDependency, defineExtension } from 'lexical'
44
+ * import { BylineToolbarExtension } from '@byline/richtext-lexical'
45
+ *
46
+ * export const MyExtension = defineExtension({
47
+ * name: '@example/MyExtension',
48
+ * peerDependencies: [
49
+ * declarePeerDependency<typeof BylineToolbarExtension>(
50
+ * BylineToolbarExtension.name,
51
+ * {
52
+ * items: [{
53
+ * id: '@example/MyExtension/insert',
54
+ * placement: 'insert-menu',
55
+ * order: 100,
56
+ * node: <MyInsertMenuItem />,
57
+ * }],
58
+ * }
59
+ * ),
60
+ * ],
61
+ * })
62
+ * ```
63
+ */
64
+ export declare const BylineToolbarExtension: import("lexical").LexicalExtension<BylineToolbarConfig, "@byline/richtext-lexical/Toolbar", unknown, unknown>;
65
+ /**
66
+ * Sort and filter helper used by `toolbar-plugin` and any external
67
+ * surface that wants to render Byline toolbar contributions itself.
68
+ */
69
+ export declare function selectToolbarItems(items: ReadonlyArray<BylineToolbarItem>, placement: BylineToolbarPlacement): BylineToolbarItem[];
@@ -0,0 +1,19 @@
1
+ import { defineExtension, safeCast, shallowMergeConfig } from "lexical";
2
+ const BylineToolbarExtension = defineExtension({
3
+ name: '@byline/richtext-lexical/Toolbar',
4
+ config: safeCast({
5
+ items: []
6
+ }),
7
+ mergeConfig (a, b) {
8
+ const merged = shallowMergeConfig(a, b);
9
+ if (b.items && b.items.length > 0) merged.items = [
10
+ ...a.items,
11
+ ...b.items
12
+ ];
13
+ return merged;
14
+ }
15
+ });
16
+ function selectToolbarItems(items, placement) {
17
+ return items.filter((item)=>item.placement === placement).slice().sort((a, b)=>(a.order ?? 0) - (b.order ?? 0));
18
+ }
19
+ export { BylineToolbarExtension, selectToolbarItems };
@@ -5,5 +5,4 @@
5
5
  *
6
6
  * Copyright (c) Infonomic Company Limited
7
7
  */
8
- export * from './inline-image-node';
9
- export * from './types';
8
+ export { type BylineToolbarConfig, BylineToolbarExtension, type BylineToolbarItem, type BylineToolbarPlacement, selectToolbarItems, } from './byline-toolbar-extension';
@@ -0,0 +1 @@
1
+ export { BylineToolbarExtension, selectToolbarItems } from "./byline-toolbar-extension.js";
@@ -0,0 +1,10 @@
1
+ /**
2
+ * This Source Code is subject to the terms of the Mozilla Public
3
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
4
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
5
+ *
6
+ * Copyright (c) Infonomic Company Limited
7
+ *
8
+ * Portions Copyright (c) Meta Platforms, Inc. and affiliates.
9
+ */
10
+ export declare const CodeHighlightExtension: import("lexical").LexicalExtension<import("lexical").ExtensionConfigBase, "@byline/richtext-lexical/CodeHighlight", unknown, unknown>;
@@ -0,0 +1,11 @@
1
+ import { CodeHighlightNode, CodeNode, registerCodeHighlighting } from "@lexical/code";
2
+ import { defineExtension } from "lexical";
3
+ const CodeHighlightExtension = defineExtension({
4
+ name: '@byline/richtext-lexical/CodeHighlight',
5
+ nodes: ()=>[
6
+ CodeNode,
7
+ CodeHighlightNode
8
+ ],
9
+ register: (editor)=>registerCodeHighlighting(editor)
10
+ });
11
+ export { CodeHighlightExtension };
@@ -0,0 +1,18 @@
1
+ /**
2
+ * This Source Code is subject to the terms of the Mozilla Public
3
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
4
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
5
+ *
6
+ * Copyright (c) Infonomic Company Limited
7
+ */
8
+ /**
9
+ * Standalone Byline extension that contributes the floating text-format
10
+ * toolbar (the popover shown above a non-collapsed range selection) to
11
+ * the editor. Removing this extension from the registered list hides the
12
+ * UI — `c.extensions.remove(FloatingTextFormatExtension)`.
13
+ *
14
+ * Lives in its own extension because the popover isn't owned by any
15
+ * single feature: it handles bold / italic / underline / strikethrough /
16
+ * subscript / superscript / inline-code / link toggle in one place.
17
+ */
18
+ export declare const FloatingTextFormatExtension: import("lexical").LexicalExtension<import("lexical").ExtensionConfigBase, "@byline/richtext-lexical/FloatingTextFormat", unknown, unknown>;
@@ -0,0 +1,17 @@
1
+ import { declarePeerDependency, defineExtension } from "lexical";
2
+ import { BylineFloatingUIExtension } from "../byline-floating-ui/byline-floating-ui-extension.js";
3
+ import { FloatingTextFormatToolbarPlugin } from "./index.js";
4
+ const FloatingTextFormatExtension = defineExtension({
5
+ name: '@byline/richtext-lexical/FloatingTextFormat',
6
+ peerDependencies: [
7
+ declarePeerDependency(BylineFloatingUIExtension.name, {
8
+ items: [
9
+ {
10
+ id: '@byline/richtext-lexical/FloatingTextFormat/popover',
11
+ Component: FloatingTextFormatToolbarPlugin
12
+ }
13
+ ]
14
+ })
15
+ ]
16
+ });
17
+ export { FloatingTextFormatExtension };
@@ -7,10 +7,10 @@ import { useLexicalComposerContext } from "@lexical/react/LexicalComposerContext
7
7
  import { mergeRegister } from "@lexical/utils";
8
8
  import { $getSelection, $isParagraphNode, $isRangeSelection, $isTextNode, COMMAND_PRIORITY_LOW, FORMAT_TEXT_COMMAND, SELECTION_CHANGE_COMMAND } from "lexical";
9
9
  import { createPortal } from "react-dom";
10
- import { $isLinkNode, TOGGLE_LINK_COMMAND } from "../../nodes/link-nodes/index.js";
11
10
  import { getDOMRangeRect } from "../../utils/getDOMRangeRect.js";
12
11
  import { getSelectedNode } from "../../utils/getSelectedNode.js";
13
12
  import { setFloatingElemPosition } from "../../utils/setFloatingElemPosition.js";
13
+ import { $isLinkNode, TOGGLE_LINK_COMMAND } from "../link/index.js";
14
14
  function TextFormatFloatingToolbar({ editor, anchorElem, isLink, isBold, isItalic, isUnderline, isCode, isStrikethrough, isSubscript, isSuperscript }) {
15
15
  const popupCharStylesEditorRef = useRef(null);
16
16
  const handleOnInsertLink = useCallback(()=>{
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Byline wrapper around the upstream `HorizontalRuleExtension`. Adds a
3
+ * single insert-menu contribution; the underlying extension still owns
4
+ * the node registration and command behaviour.
5
+ */
6
+ export declare const HorizontalRuleExtension: import("lexical").LexicalExtension<import("lexical").ExtensionConfigBase, "@byline/richtext-lexical/HorizontalRule", unknown, unknown>;
@@ -0,0 +1,45 @@
1
+ "use client";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import { HorizontalRuleExtension } from "@lexical/extension";
4
+ import { INSERT_HORIZONTAL_RULE_COMMAND } from "@lexical/react/LexicalHorizontalRuleNode";
5
+ import { declarePeerDependency, defineExtension } from "lexical";
6
+ import { useToolbarActiveEditor } from "../../plugins/toolbar-plugin/toolbar-active-editor.js";
7
+ import { DropDownItem } from "../../ui/dropdown.js";
8
+ import { BylineToolbarExtension } from "../byline-toolbar/byline-toolbar-extension.js";
9
+ function HorizontalRuleInsertItem() {
10
+ const editor = useToolbarActiveEditor();
11
+ return /*#__PURE__*/ jsxs(DropDownItem, {
12
+ onClick: ()=>{
13
+ editor.dispatchCommand(INSERT_HORIZONTAL_RULE_COMMAND, void 0);
14
+ },
15
+ className: "item",
16
+ children: [
17
+ /*#__PURE__*/ jsx("i", {
18
+ className: "icon horizontal-rule"
19
+ }),
20
+ /*#__PURE__*/ jsx("span", {
21
+ className: "text",
22
+ children: "Horizontal Rule"
23
+ })
24
+ ]
25
+ });
26
+ }
27
+ const horizontal_rule_extension_HorizontalRuleExtension = defineExtension({
28
+ name: '@byline/richtext-lexical/HorizontalRule',
29
+ dependencies: [
30
+ HorizontalRuleExtension
31
+ ],
32
+ peerDependencies: [
33
+ declarePeerDependency(BylineToolbarExtension.name, {
34
+ items: [
35
+ {
36
+ id: '@byline/richtext-lexical/HorizontalRule/insert',
37
+ placement: 'insert-menu',
38
+ order: 10,
39
+ node: /*#__PURE__*/ jsx(HorizontalRuleInsertItem, {})
40
+ }
41
+ ]
42
+ })
43
+ ]
44
+ });
45
+ export { horizontal_rule_extension_HorizontalRuleExtension as HorizontalRuleExtension };
@@ -1,2 +1,2 @@
1
1
  export * from "./inline-image-node.js";
2
- export * from "./types.js";
2
+ export * from "./node-types.js";
@@ -9,7 +9,7 @@
9
9
  */
10
10
  import type * as React from 'react';
11
11
  import { type LexicalCommand, type NodeKey } from 'lexical';
12
- import type { InlineImageAttributes } from '../../nodes/inline-image-node/types';
12
+ import type { InlineImageAttributes } from './node-types';
13
13
  export type InsertInlineImagePayload = Readonly<InlineImageAttributes>;
14
14
  export type UpdateInlineImagePayload = Readonly<{
15
15
  nodeKey: NodeKey;
@@ -28,6 +28,9 @@ export declare const OPEN_INLINE_IMAGE_MODAL_COMMAND: LexicalCommand<OpenInlineI
28
28
  export declare const INSERT_INLINE_IMAGE_COMMAND: LexicalCommand<InsertInlineImagePayload>;
29
29
  /** Updates the InlineImageNode identified by `nodeKey` in place. */
30
30
  export declare const UPDATE_INLINE_IMAGE_COMMAND: LexicalCommand<UpdateInlineImagePayload>;
31
- export declare function InlineImagePlugin({ collection }: {
31
+ export declare function InlineImagePlugin(): React.JSX.Element;
32
+ export interface InlineImageConfig {
33
+ /** Upload collection that the inline-image modal targets. Required. */
32
34
  collection: string;
33
- }): React.JSX.Element;
35
+ }
36
+ export declare const InlineImageExtension: import("lexical").LexicalExtension<InlineImageConfig, "@byline/richtext-lexical/InlineImage", unknown, unknown>;
@@ -1,11 +1,16 @@
1
1
  "use client";
2
- import { jsx } from "react/jsx-runtime";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
3
  import { useCallback, useEffect, useState } from "react";
4
4
  import { useLexicalComposerContext } from "@lexical/react/LexicalComposerContext";
5
+ import { ReactExtension } from "@lexical/react/ReactExtension";
6
+ import { useExtensionDependency } from "@lexical/react/useExtensionComponent";
5
7
  import { $wrapNodeInElement, mergeRegister } from "@lexical/utils";
6
- import { $createParagraphNode, $getNodeByKey, $insertNodes, $isRootOrShadowRoot, COMMAND_PRIORITY_EDITOR, COMMAND_PRIORITY_NORMAL, createCommand } from "lexical";
7
- import { $createInlineImageNode, $isInlineImageNode, InlineImageNode } from "../../nodes/inline-image-node/index.js";
8
+ import { $createParagraphNode, $getNodeByKey, $insertNodes, $isRootOrShadowRoot, COMMAND_PRIORITY_EDITOR, COMMAND_PRIORITY_NORMAL, configExtension, createCommand, declarePeerDependency, defineExtension, safeCast } from "lexical";
9
+ import { useToolbarActiveEditor } from "../../plugins/toolbar-plugin/toolbar-active-editor.js";
10
+ import { DropDownItem } from "../../ui/dropdown.js";
11
+ import { BylineToolbarExtension } from "../byline-toolbar/byline-toolbar-extension.js";
8
12
  import { InlineImageModal } from "./inline-image-modal.js";
13
+ import { $createInlineImageNode, $isInlineImageNode, InlineImageNode } from "./inline-image-node.js";
9
14
  const OPEN_INLINE_IMAGE_MODAL_COMMAND = createCommand('OPEN_INLINE_IMAGE_MODAL_COMMAND');
10
15
  const INSERT_INLINE_IMAGE_COMMAND = createCommand('INSERT_INLINE_IMAGE_COMMAND');
11
16
  const UPDATE_INLINE_IMAGE_COMMAND = createCommand('UPDATE_INLINE_IMAGE_COMMAND');
@@ -30,8 +35,9 @@ function readNodeAsInitialData(editor, nodeKey) {
30
35
  });
31
36
  return data;
32
37
  }
33
- function InlineImagePlugin({ collection }) {
38
+ function InlineImagePlugin() {
34
39
  const [editor] = useLexicalComposerContext();
40
+ const { collection } = useExtensionDependency(InlineImageExtension).config;
35
41
  const [modalState, setModalState] = useState(CLOSED_STATE);
36
42
  useEffect(()=>{
37
43
  if (!editor.hasNodes([
@@ -104,4 +110,50 @@ function InlineImagePlugin({ collection }) {
104
110
  onClose: handleClose
105
111
  });
106
112
  }
107
- export { INSERT_INLINE_IMAGE_COMMAND, InlineImagePlugin, OPEN_INLINE_IMAGE_MODAL_COMMAND, UPDATE_INLINE_IMAGE_COMMAND };
113
+ function InlineImageInsertItem() {
114
+ const editor = useToolbarActiveEditor();
115
+ return /*#__PURE__*/ jsxs(DropDownItem, {
116
+ onClick: ()=>{
117
+ editor.dispatchCommand(OPEN_INLINE_IMAGE_MODAL_COMMAND, null);
118
+ },
119
+ className: "item",
120
+ children: [
121
+ /*#__PURE__*/ jsx("i", {
122
+ className: "icon image"
123
+ }),
124
+ /*#__PURE__*/ jsx("span", {
125
+ className: "text",
126
+ children: "Inline Image"
127
+ })
128
+ ]
129
+ });
130
+ }
131
+ const InlineImageExtension = defineExtension({
132
+ name: '@byline/richtext-lexical/InlineImage',
133
+ nodes: ()=>[
134
+ InlineImageNode
135
+ ],
136
+ config: safeCast({
137
+ collection: ''
138
+ }),
139
+ dependencies: [
140
+ configExtension(ReactExtension, {
141
+ decorators: [
142
+ /*#__PURE__*/ jsx(InlineImagePlugin, {}, "d")
143
+ ]
144
+ })
145
+ ],
146
+ peerDependencies: [
147
+ declarePeerDependency(BylineToolbarExtension.name, {
148
+ items: [
149
+ {
150
+ id: '@byline/richtext-lexical/InlineImage/insert',
151
+ placement: 'insert-menu',
152
+ order: 40,
153
+ node: /*#__PURE__*/ jsx(InlineImageInsertItem, {})
154
+ }
155
+ ]
156
+ })
157
+ ]
158
+ });
159
+ export { INSERT_INLINE_IMAGE_COMMAND, InlineImageExtension, InlineImagePlugin, OPEN_INLINE_IMAGE_MODAL_COMMAND, UPDATE_INLINE_IMAGE_COMMAND };
@@ -7,8 +7,8 @@
7
7
  */
8
8
  import type * as React from 'react';
9
9
  import type { LexicalEditor, NodeKey } from 'lexical';
10
- import type { DocumentRelation } from '../document-relation';
11
- import type { Position } from './types';
10
+ import type { DocumentRelation } from '../../nodes/document-relation';
11
+ import type { Position } from './node-types';
12
12
  import './inline-image-node-component.css';
13
13
  export default function InlineImageComponent({ relation, src, position, altText, width, height, showCaption, caption, nodeKey, }: {
14
14
  relation: DocumentRelation;
@@ -13,11 +13,11 @@ import { $getNodeByKey, $getSelection, $isNodeSelection, $setSelection, CLICK_CO
13
13
  import content_editable_inline from "../../content-editable-inline.js";
14
14
  import { useSharedHistoryContext } from "../../context/shared-history-context.js";
15
15
  import { useSharedOnChange } from "../../context/shared-on-change-context.js";
16
- import { FloatingTextFormatToolbarPlugin } from "../../plugins/floating-text-format-toolbar-plugin/index.js";
17
- import { OPEN_INLINE_IMAGE_MODAL_COMMAND } from "../../plugins/inline-image-plugin/index.js";
18
- import { LinkPlugin } from "../../plugins/link-plugin/link/index.js";
19
- import { FloatingLinkEditorPlugin } from "../../plugins/link-plugin/link/floating-link-editor.js";
20
16
  import placeholder_inline from "../../ui/placeholder-inline.js";
17
+ import { FloatingTextFormatToolbarPlugin } from "../floating-text-format/index.js";
18
+ import { FloatingLinkEditorPlugin } from "../link/floating-link-editor.js";
19
+ import { LinkPlugin } from "../link/link-extension.js";
20
+ import { OPEN_INLINE_IMAGE_MODAL_COMMAND } from "./inline-image-extension.js";
21
21
  import { $isInlineImageNode } from "./inline-image-node.js";
22
22
  import "./inline-image-node-component.css";
23
23
  const imageCache = new Set();
@@ -8,8 +8,8 @@
8
8
  import * as React from 'react';
9
9
  import type { DOMConversionMap, DOMExportOutput, EditorConfig, LexicalEditor, LexicalNode, NodeKey } from 'lexical';
10
10
  import { DecoratorNode } from 'lexical';
11
- import type { DocumentRelation } from '../document-relation';
12
- import type { InlineImageAttributes, Position, SerializedInlineImageNode } from './types';
11
+ import type { DocumentRelation } from '../../nodes/document-relation';
12
+ import type { InlineImageAttributes, Position, SerializedInlineImageNode } from './node-types';
13
13
  export declare class InlineImageNode extends DecoratorNode<React.JSX.Element> {
14
14
  __relation: DocumentRelation;
15
15
  __src: string;
@@ -6,7 +6,7 @@
6
6
  * Copyright (c) Infonomic Company Limited
7
7
  */
8
8
  import type { LexicalEditor, NodeKey, SerializedEditor, SerializedLexicalNode, Spread } from 'lexical';
9
- import type { DocumentRelation } from '../document-relation';
9
+ import type { DocumentRelation } from '../../nodes/document-relation';
10
10
  export type Position = 'left' | 'right' | 'full' | 'wide' | 'default' | undefined;
11
11
  export interface InlineImageAttributes extends DocumentRelation {
12
12
  src: string;
@@ -6,7 +6,7 @@
6
6
  * Copyright (c) Infonomic Company Limited
7
7
  */
8
8
  import type { DocumentRelation } from '../../nodes/document-relation';
9
- import type { Position } from '../../nodes/inline-image-node/types';
9
+ import type { Position } from './node-types';
10
10
  /**
11
11
  * The form-shape carried into / out of the inline image modal. Mirrors
12
12
  * `InlineImageAttributes` minus the Lexical-managed bits (`key`, `caption:
@@ -6,7 +6,7 @@
6
6
  * Copyright (c) Infonomic Company Limited
7
7
  */
8
8
  import type { StoredFileValue } from '@byline/core';
9
- import type { Position } from '../../nodes/inline-image-node/types';
9
+ import type { Position } from './node-types';
10
10
  export interface PreferredSize {
11
11
  url: string;
12
12
  width?: number;