@payloadcms/richtext-lexical 3.0.0-beta.24 → 3.0.0-beta.26

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 (359) hide show
  1. package/dist/exports/components.d.ts +8 -2
  2. package/dist/exports/components.d.ts.map +1 -1
  3. package/dist/exports/components.js +8 -2
  4. package/dist/exports/components.js.map +1 -1
  5. package/dist/field/features/align/feature.client.d.ts.map +1 -1
  6. package/dist/field/features/align/feature.client.js +126 -46
  7. package/dist/field/features/align/feature.client.js.map +1 -1
  8. package/dist/field/features/align/toolbarAlignGroup.d.ts +3 -0
  9. package/dist/field/features/align/toolbarAlignGroup.d.ts.map +1 -0
  10. package/dist/field/features/align/{inlineToolbarAlignGroup.js → toolbarAlignGroup.js} +3 -3
  11. package/dist/field/features/align/toolbarAlignGroup.js.map +1 -0
  12. package/dist/field/features/blockquote/feature.client.d.ts +1 -1
  13. package/dist/field/features/blockquote/feature.client.d.ts.map +1 -1
  14. package/dist/field/features/blockquote/feature.client.js +39 -25
  15. package/dist/field/features/blockquote/feature.client.js.map +1 -1
  16. package/dist/field/features/blockquote/feature.server.d.ts +1 -1
  17. package/dist/field/features/blockquote/feature.server.js +3 -3
  18. package/dist/field/features/blockquote/feature.server.js.map +1 -1
  19. package/dist/field/features/blocks/component/index.d.ts.map +1 -1
  20. package/dist/field/features/blocks/component/index.js +1 -1
  21. package/dist/field/features/blocks/component/index.js.map +1 -1
  22. package/dist/field/features/blocks/feature.client.d.ts.map +1 -1
  23. package/dist/field/features/blocks/feature.client.js +39 -8
  24. package/dist/field/features/blocks/feature.client.js.map +1 -1
  25. package/dist/field/features/blocks/feature.server.d.ts +2 -5
  26. package/dist/field/features/blocks/feature.server.d.ts.map +1 -1
  27. package/dist/field/features/blocks/feature.server.js +2 -2
  28. package/dist/field/features/blocks/feature.server.js.map +1 -1
  29. package/dist/field/features/blocks/plugin/index.d.ts +3 -2
  30. package/dist/field/features/blocks/plugin/index.d.ts.map +1 -1
  31. package/dist/field/features/blocks/plugin/index.js +2 -2
  32. package/dist/field/features/blocks/plugin/index.js.map +1 -1
  33. package/dist/field/features/blocks/populationPromise.d.ts.map +1 -1
  34. package/dist/field/features/blocks/populationPromise.js +2 -1
  35. package/dist/field/features/blocks/populationPromise.js.map +1 -1
  36. package/dist/field/features/debug/testRecorder/plugin/index.d.ts +2 -2
  37. package/dist/field/features/debug/testRecorder/plugin/index.d.ts.map +1 -1
  38. package/dist/field/features/debug/testRecorder/plugin/index.js.map +1 -1
  39. package/dist/field/features/debug/treeView/plugin/index.d.ts +2 -2
  40. package/dist/field/features/debug/treeView/plugin/index.d.ts.map +1 -1
  41. package/dist/field/features/debug/treeView/plugin/index.js +2 -2
  42. package/dist/field/features/debug/treeView/plugin/index.js.map +1 -1
  43. package/dist/field/features/format/bold/feature.client.d.ts.map +1 -1
  44. package/dist/field/features/format/bold/feature.client.js +23 -19
  45. package/dist/field/features/format/bold/feature.client.js.map +1 -1
  46. package/dist/field/features/format/inlineCode/feature.client.d.ts.map +1 -1
  47. package/dist/field/features/format/inlineCode/feature.client.js +23 -19
  48. package/dist/field/features/format/inlineCode/feature.client.js.map +1 -1
  49. package/dist/field/features/format/italic/feature.client.d.ts.map +1 -1
  50. package/dist/field/features/format/italic/feature.client.js +23 -19
  51. package/dist/field/features/format/italic/feature.client.js.map +1 -1
  52. package/dist/field/features/format/shared/toolbarFormatGroup.d.ts +3 -0
  53. package/dist/field/features/format/shared/toolbarFormatGroup.d.ts.map +1 -0
  54. package/dist/field/features/format/shared/toolbarFormatGroup.js +10 -0
  55. package/dist/field/features/format/shared/toolbarFormatGroup.js.map +1 -0
  56. package/dist/field/features/format/strikethrough/feature.client.d.ts.map +1 -1
  57. package/dist/field/features/format/strikethrough/feature.client.js +23 -19
  58. package/dist/field/features/format/strikethrough/feature.client.js.map +1 -1
  59. package/dist/field/features/format/subscript/feature.client.d.ts.map +1 -1
  60. package/dist/field/features/format/subscript/feature.client.js +23 -19
  61. package/dist/field/features/format/subscript/feature.client.js.map +1 -1
  62. package/dist/field/features/format/superscript/feature.client.d.ts.map +1 -1
  63. package/dist/field/features/format/superscript/feature.client.js +23 -19
  64. package/dist/field/features/format/superscript/feature.client.js.map +1 -1
  65. package/dist/field/features/format/underline/feature.client.d.ts.map +1 -1
  66. package/dist/field/features/format/underline/feature.client.js +23 -19
  67. package/dist/field/features/format/underline/feature.client.js.map +1 -1
  68. package/dist/field/features/heading/feature.client.d.ts.map +1 -1
  69. package/dist/field/features/heading/feature.client.js +49 -29
  70. package/dist/field/features/heading/feature.client.js.map +1 -1
  71. package/dist/field/features/horizontalRule/feature.client.d.ts.map +1 -1
  72. package/dist/field/features/horizontalRule/feature.client.js +27 -4
  73. package/dist/field/features/horizontalRule/feature.client.js.map +1 -1
  74. package/dist/field/features/horizontalRule/plugin/index.d.ts +2 -1
  75. package/dist/field/features/horizontalRule/plugin/index.d.ts.map +1 -1
  76. package/dist/field/features/horizontalRule/plugin/index.js +2 -2
  77. package/dist/field/features/horizontalRule/plugin/index.js.map +1 -1
  78. package/dist/field/features/indent/feature.client.d.ts.map +1 -1
  79. package/dist/field/features/indent/feature.client.js +41 -37
  80. package/dist/field/features/indent/feature.client.js.map +1 -1
  81. package/dist/field/features/indent/toolbarIndentGroup.d.ts +3 -0
  82. package/dist/field/features/indent/toolbarIndentGroup.d.ts.map +1 -0
  83. package/dist/field/features/indent/toolbarIndentGroup.js +10 -0
  84. package/dist/field/features/indent/toolbarIndentGroup.js.map +1 -0
  85. package/dist/field/features/link/drawer/baseFields.d.ts +2 -2
  86. package/dist/field/features/link/drawer/baseFields.d.ts.map +1 -1
  87. package/dist/field/features/link/drawer/baseFields.js +2 -1
  88. package/dist/field/features/link/drawer/baseFields.js.map +1 -1
  89. package/dist/field/features/link/drawer/types.d.ts +2 -2
  90. package/dist/field/features/link/drawer/types.d.ts.map +1 -1
  91. package/dist/field/features/link/drawer/types.js.map +1 -1
  92. package/dist/field/features/link/feature.client.d.ts.map +1 -1
  93. package/dist/field/features/link/feature.client.js +54 -40
  94. package/dist/field/features/link/feature.client.js.map +1 -1
  95. package/dist/field/features/link/feature.server.d.ts +10 -3
  96. package/dist/field/features/link/feature.server.d.ts.map +1 -1
  97. package/dist/field/features/link/feature.server.js +3 -3
  98. package/dist/field/features/link/feature.server.js.map +1 -1
  99. package/dist/field/features/link/plugins/autoLink/index.d.ts +3 -2
  100. package/dist/field/features/link/plugins/autoLink/index.d.ts.map +1 -1
  101. package/dist/field/features/link/plugins/autoLink/index.js +2 -2
  102. package/dist/field/features/link/plugins/autoLink/index.js.map +1 -1
  103. package/dist/field/features/link/plugins/clickableLink/index.d.ts +3 -2
  104. package/dist/field/features/link/plugins/clickableLink/index.d.ts.map +1 -1
  105. package/dist/field/features/link/plugins/clickableLink/index.js +2 -2
  106. package/dist/field/features/link/plugins/clickableLink/index.js.map +1 -1
  107. package/dist/field/features/link/plugins/floatingLinkEditor/LinkEditor/index.d.ts.map +1 -1
  108. package/dist/field/features/link/plugins/floatingLinkEditor/LinkEditor/index.js +75 -68
  109. package/dist/field/features/link/plugins/floatingLinkEditor/LinkEditor/index.js.map +1 -1
  110. package/dist/field/features/link/plugins/floatingLinkEditor/index.d.ts +3 -4
  111. package/dist/field/features/link/plugins/floatingLinkEditor/index.d.ts.map +1 -1
  112. package/dist/field/features/link/plugins/floatingLinkEditor/index.js.map +1 -1
  113. package/dist/field/features/link/plugins/floatingLinkEditor/index.scss +2 -2
  114. package/dist/field/features/link/plugins/floatingLinkEditor/utilities.d.ts +3 -3
  115. package/dist/field/features/link/plugins/floatingLinkEditor/utilities.d.ts.map +1 -1
  116. package/dist/field/features/link/plugins/floatingLinkEditor/utilities.js +2 -2
  117. package/dist/field/features/link/plugins/floatingLinkEditor/utilities.js.map +1 -1
  118. package/dist/field/features/link/plugins/link/index.d.ts +3 -1
  119. package/dist/field/features/link/plugins/link/index.d.ts.map +1 -1
  120. package/dist/field/features/link/plugins/link/index.js +2 -2
  121. package/dist/field/features/link/plugins/link/index.js.map +1 -1
  122. package/dist/field/features/link/populationPromise.d.ts.map +1 -1
  123. package/dist/field/features/link/populationPromise.js +2 -1
  124. package/dist/field/features/link/populationPromise.js.map +1 -1
  125. package/dist/field/features/link/validate.js.map +1 -1
  126. package/dist/field/features/lists/checklist/feature.client.d.ts.map +1 -1
  127. package/dist/field/features/lists/checklist/feature.client.js +44 -19
  128. package/dist/field/features/lists/checklist/feature.client.js.map +1 -1
  129. package/dist/field/features/lists/checklist/plugin/index.d.ts +2 -2
  130. package/dist/field/features/lists/checklist/plugin/index.d.ts.map +1 -1
  131. package/dist/field/features/lists/checklist/plugin/index.js +2 -2
  132. package/dist/field/features/lists/checklist/plugin/index.js.map +1 -1
  133. package/dist/field/features/lists/orderedList/feature.client.d.ts.map +1 -1
  134. package/dist/field/features/lists/orderedList/feature.client.js +44 -19
  135. package/dist/field/features/lists/orderedList/feature.client.js.map +1 -1
  136. package/dist/field/features/lists/plugin/index.d.ts +2 -2
  137. package/dist/field/features/lists/plugin/index.d.ts.map +1 -1
  138. package/dist/field/features/lists/plugin/index.js +2 -2
  139. package/dist/field/features/lists/plugin/index.js.map +1 -1
  140. package/dist/field/features/lists/unorderedList/feature.client.d.ts.map +1 -1
  141. package/dist/field/features/lists/unorderedList/feature.client.js +44 -19
  142. package/dist/field/features/lists/unorderedList/feature.client.js.map +1 -1
  143. package/dist/field/features/migrations/slateToLexical/converter/converters/blockquote/client.d.ts +1 -1
  144. package/dist/field/features/migrations/slateToLexical/converter/converters/blockquote/client.js +1 -1
  145. package/dist/field/features/migrations/slateToLexical/converter/converters/blockquote/client.js.map +1 -1
  146. package/dist/field/features/migrations/slateToLexical/converter/converters/blockquote/index.js +2 -2
  147. package/dist/field/features/migrations/slateToLexical/converter/converters/blockquote/index.js.map +1 -1
  148. package/dist/field/features/paragraph/feature.client.d.ts.map +1 -1
  149. package/dist/field/features/paragraph/feature.client.js +36 -22
  150. package/dist/field/features/paragraph/feature.client.js.map +1 -1
  151. package/dist/field/features/relationship/feature.client.d.ts.map +1 -1
  152. package/dist/field/features/relationship/feature.client.js +31 -9
  153. package/dist/field/features/relationship/feature.client.js.map +1 -1
  154. package/dist/field/features/relationship/feature.server.d.ts +10 -1
  155. package/dist/field/features/relationship/feature.server.d.ts.map +1 -1
  156. package/dist/field/features/relationship/feature.server.js +2 -2
  157. package/dist/field/features/relationship/feature.server.js.map +1 -1
  158. package/dist/field/features/relationship/nodes/components/RelationshipComponent.d.ts.map +1 -1
  159. package/dist/field/features/relationship/nodes/components/RelationshipComponent.js +4 -2
  160. package/dist/field/features/relationship/nodes/components/RelationshipComponent.js.map +1 -1
  161. package/dist/field/features/relationship/plugins/index.d.ts +2 -2
  162. package/dist/field/features/relationship/plugins/index.d.ts.map +1 -1
  163. package/dist/field/features/relationship/plugins/index.js +6 -6
  164. package/dist/field/features/relationship/plugins/index.js.map +1 -1
  165. package/dist/field/features/relationship/populationPromise.d.ts +2 -1
  166. package/dist/field/features/relationship/populationPromise.d.ts.map +1 -1
  167. package/dist/field/features/relationship/populationPromise.js +25 -20
  168. package/dist/field/features/relationship/populationPromise.js.map +1 -1
  169. package/dist/field/features/shared/toolbar/addDropdownGroup.d.ts +3 -0
  170. package/dist/field/features/shared/toolbar/addDropdownGroup.d.ts.map +1 -0
  171. package/dist/field/features/shared/toolbar/addDropdownGroup.js +12 -0
  172. package/dist/field/features/shared/toolbar/addDropdownGroup.js.map +1 -0
  173. package/dist/field/features/shared/toolbar/featureButtonsGroup.d.ts +3 -0
  174. package/dist/field/features/shared/toolbar/featureButtonsGroup.d.ts.map +1 -0
  175. package/dist/field/features/shared/toolbar/featureButtonsGroup.js +10 -0
  176. package/dist/field/features/shared/toolbar/featureButtonsGroup.js.map +1 -0
  177. package/dist/field/features/shared/toolbar/textDropdownGroup.d.ts +3 -0
  178. package/dist/field/features/shared/toolbar/textDropdownGroup.d.ts.map +1 -0
  179. package/dist/field/features/shared/{inlineToolbar → toolbar}/textDropdownGroup.js +2 -2
  180. package/dist/field/features/shared/toolbar/textDropdownGroup.js.map +1 -0
  181. package/dist/field/features/toolbars/fixed/Toolbar/index.d.ts +4 -0
  182. package/dist/field/features/toolbars/fixed/Toolbar/index.d.ts.map +1 -0
  183. package/dist/field/features/toolbars/fixed/Toolbar/index.js +152 -0
  184. package/dist/field/features/toolbars/fixed/Toolbar/index.js.map +1 -0
  185. package/dist/field/features/toolbars/fixed/Toolbar/index.scss +81 -0
  186. package/dist/field/features/toolbars/fixed/feature.client.d.ts +3 -0
  187. package/dist/field/features/toolbars/fixed/feature.client.d.ts.map +1 -0
  188. package/dist/field/features/toolbars/fixed/feature.client.js +20 -0
  189. package/dist/field/features/toolbars/fixed/feature.client.js.map +1 -0
  190. package/dist/field/features/toolbars/fixed/feature.server.d.ts +3 -0
  191. package/dist/field/features/toolbars/fixed/feature.server.d.ts.map +1 -0
  192. package/dist/field/features/toolbars/fixed/feature.server.js +16 -0
  193. package/dist/field/features/toolbars/fixed/feature.server.js.map +1 -0
  194. package/dist/field/features/toolbars/inline/Toolbar/index.d.ts +4 -0
  195. package/dist/field/features/toolbars/inline/Toolbar/index.d.ts.map +1 -0
  196. package/dist/field/{lexical/plugins → features}/toolbars/inline/Toolbar/index.js +67 -23
  197. package/dist/field/features/toolbars/inline/Toolbar/index.js.map +1 -0
  198. package/dist/field/{lexical/plugins → features}/toolbars/inline/Toolbar/index.scss +3 -8
  199. package/dist/field/features/toolbars/inline/feature.client.d.ts +3 -0
  200. package/dist/field/features/toolbars/inline/feature.client.d.ts.map +1 -0
  201. package/dist/field/features/toolbars/inline/feature.client.js +20 -0
  202. package/dist/field/features/toolbars/inline/feature.client.js.map +1 -0
  203. package/dist/field/features/toolbars/inline/feature.server.d.ts +3 -0
  204. package/dist/field/features/toolbars/inline/feature.server.d.ts.map +1 -0
  205. package/dist/field/features/toolbars/inline/feature.server.js +16 -0
  206. package/dist/field/features/toolbars/inline/feature.server.js.map +1 -0
  207. package/dist/field/features/toolbars/shared/ToolbarButton/index.d.ts +10 -0
  208. package/dist/field/features/toolbars/shared/ToolbarButton/index.d.ts.map +1 -0
  209. package/dist/field/{lexical/plugins/toolbars/inline → features/toolbars/shared}/ToolbarButton/index.js +21 -8
  210. package/dist/field/features/toolbars/shared/ToolbarButton/index.js.map +1 -0
  211. package/dist/field/{lexical/plugins/toolbars/inline → features/toolbars/shared}/ToolbarButton/index.scss +3 -1
  212. package/dist/field/features/toolbars/shared/ToolbarDropdown/DropDown.d.ts +23 -0
  213. package/dist/field/features/toolbars/shared/ToolbarDropdown/DropDown.d.ts.map +1 -0
  214. package/dist/field/{lexical/plugins/toolbars/inline → features/toolbars/shared}/ToolbarDropdown/DropDown.js +25 -67
  215. package/dist/field/features/toolbars/shared/ToolbarDropdown/DropDown.js.map +1 -0
  216. package/dist/field/features/toolbars/shared/ToolbarDropdown/index.d.ts +23 -0
  217. package/dist/field/features/toolbars/shared/ToolbarDropdown/index.d.ts.map +1 -0
  218. package/dist/field/features/toolbars/shared/ToolbarDropdown/index.js +139 -0
  219. package/dist/field/features/toolbars/shared/ToolbarDropdown/index.js.map +1 -0
  220. package/dist/field/{lexical/plugins/toolbars/inline → features/toolbars/shared}/ToolbarDropdown/index.scss +25 -13
  221. package/dist/field/{lexical/plugins/toolbars/inline → features/toolbars}/types.d.ts +16 -8
  222. package/dist/field/features/toolbars/types.d.ts.map +1 -0
  223. package/dist/field/features/toolbars/types.js.map +1 -0
  224. package/dist/field/features/types.d.ts +27 -19
  225. package/dist/field/features/types.d.ts.map +1 -1
  226. package/dist/field/features/types.js.map +1 -1
  227. package/dist/field/features/upload/component/index.d.ts.map +1 -1
  228. package/dist/field/features/upload/component/index.js +6 -2
  229. package/dist/field/features/upload/component/index.js.map +1 -1
  230. package/dist/field/features/upload/feature.client.d.ts.map +1 -1
  231. package/dist/field/features/upload/feature.client.js +29 -4
  232. package/dist/field/features/upload/feature.client.js.map +1 -1
  233. package/dist/field/features/upload/feature.server.d.ts +10 -3
  234. package/dist/field/features/upload/feature.server.d.ts.map +1 -1
  235. package/dist/field/features/upload/feature.server.js +2 -2
  236. package/dist/field/features/upload/feature.server.js.map +1 -1
  237. package/dist/field/features/upload/nodes/UploadNode.d.ts.map +1 -1
  238. package/dist/field/features/upload/nodes/UploadNode.js +18 -2
  239. package/dist/field/features/upload/nodes/UploadNode.js.map +1 -1
  240. package/dist/field/features/upload/plugin/index.d.ts +3 -2
  241. package/dist/field/features/upload/plugin/index.d.ts.map +1 -1
  242. package/dist/field/features/upload/plugin/index.js +2 -2
  243. package/dist/field/features/upload/plugin/index.js.map +1 -1
  244. package/dist/field/features/upload/populationPromise.d.ts.map +1 -1
  245. package/dist/field/features/upload/populationPromise.js +5 -2
  246. package/dist/field/features/upload/populationPromise.js.map +1 -1
  247. package/dist/field/features/upload/validate.d.ts.map +1 -1
  248. package/dist/field/features/upload/validate.js +3 -0
  249. package/dist/field/features/upload/validate.js.map +1 -1
  250. package/dist/field/lexical/EditorFocusProvider.d.ts +20 -0
  251. package/dist/field/lexical/EditorFocusProvider.d.ts.map +1 -0
  252. package/dist/field/lexical/EditorFocusProvider.js +78 -0
  253. package/dist/field/lexical/EditorFocusProvider.js.map +1 -0
  254. package/dist/field/lexical/EditorPlugin.d.ts +1 -0
  255. package/dist/field/lexical/EditorPlugin.d.ts.map +1 -1
  256. package/dist/field/lexical/EditorPlugin.js +6 -3
  257. package/dist/field/lexical/EditorPlugin.js.map +1 -1
  258. package/dist/field/lexical/LexicalEditor.d.ts.map +1 -1
  259. package/dist/field/lexical/LexicalEditor.js +25 -4
  260. package/dist/field/lexical/LexicalEditor.js.map +1 -1
  261. package/dist/field/lexical/LexicalProvider.d.ts.map +1 -1
  262. package/dist/field/lexical/LexicalProvider.js +3 -2
  263. package/dist/field/lexical/LexicalProvider.js.map +1 -1
  264. package/dist/field/lexical/config/client/EditorConfigProvider.d.ts +2 -3
  265. package/dist/field/lexical/config/client/EditorConfigProvider.d.ts.map +1 -1
  266. package/dist/field/lexical/config/client/EditorConfigProvider.js.map +1 -1
  267. package/dist/field/lexical/config/client/sanitize.d.ts.map +1 -1
  268. package/dist/field/lexical/config/client/sanitize.js +1 -0
  269. package/dist/field/lexical/config/client/sanitize.js.map +1 -1
  270. package/dist/field/lexical/config/server/default.d.ts.map +1 -1
  271. package/dist/field/lexical/config/server/default.js +5 -3
  272. package/dist/field/lexical/config/server/default.js.map +1 -1
  273. package/dist/field/lexical/config/server/loader.d.ts +2 -1
  274. package/dist/field/lexical/config/server/loader.d.ts.map +1 -1
  275. package/dist/field/lexical/config/server/loader.js +2 -1
  276. package/dist/field/lexical/config/server/loader.js.map +1 -1
  277. package/dist/field/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/types.d.ts +6 -6
  278. package/dist/field/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/types.d.ts.map +1 -1
  279. package/dist/field/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/types.js.map +1 -1
  280. package/dist/field/lexical/plugins/SlashMenu/index.d.ts.map +1 -1
  281. package/dist/field/lexical/plugins/SlashMenu/index.js +10 -10
  282. package/dist/field/lexical/plugins/SlashMenu/index.js.map +1 -1
  283. package/dist/field/lexical/plugins/handles/DraggableBlockPlugin/getNodeCloseToPoint.d.ts +1 -1
  284. package/dist/field/lexical/plugins/handles/DraggableBlockPlugin/getNodeCloseToPoint.d.ts.map +1 -1
  285. package/dist/field/lexical/plugins/handles/DraggableBlockPlugin/getNodeCloseToPoint.js +2 -2
  286. package/dist/field/lexical/plugins/handles/DraggableBlockPlugin/getNodeCloseToPoint.js.map +1 -1
  287. package/dist/field/lexical/plugins/handles/DraggableBlockPlugin/index.d.ts.map +1 -1
  288. package/dist/field/lexical/plugins/handles/DraggableBlockPlugin/index.js +6 -3
  289. package/dist/field/lexical/plugins/handles/DraggableBlockPlugin/index.js.map +1 -1
  290. package/dist/field/lexical/plugins/handles/DraggableBlockPlugin/index.scss +8 -0
  291. package/dist/field/lexical/plugins/handles/DraggableBlockPlugin/setTargetLine.d.ts.map +1 -1
  292. package/dist/field/lexical/plugins/handles/DraggableBlockPlugin/setTargetLine.js +25 -6
  293. package/dist/field/lexical/plugins/handles/DraggableBlockPlugin/setTargetLine.js.map +1 -1
  294. package/dist/field/lexical/ui/icons/Add/index.d.ts +3 -0
  295. package/dist/field/lexical/ui/icons/Add/index.d.ts.map +1 -0
  296. package/dist/field/lexical/ui/icons/Add/index.js +16 -0
  297. package/dist/field/lexical/ui/icons/Add/index.js.map +1 -0
  298. package/dist/field/lexical/utils/setFloatingElemPosition.d.ts +11 -1
  299. package/dist/field/lexical/utils/setFloatingElemPosition.d.ts.map +1 -1
  300. package/dist/field/lexical/utils/setFloatingElemPosition.js +3 -2
  301. package/dist/field/lexical/utils/setFloatingElemPosition.js.map +1 -1
  302. package/dist/index.d.ts +11 -9
  303. package/dist/index.d.ts.map +1 -1
  304. package/dist/index.js +11 -7
  305. package/dist/index.js.map +1 -1
  306. package/dist/populate/populate.d.ts +2 -1
  307. package/dist/populate/populate.d.ts.map +1 -1
  308. package/dist/populate/populate.js +13 -11
  309. package/dist/populate/populate.js.map +1 -1
  310. package/dist/populate/populateLexicalPopulationPromises.d.ts +1 -1
  311. package/dist/populate/populateLexicalPopulationPromises.d.ts.map +1 -1
  312. package/dist/populate/populateLexicalPopulationPromises.js +2 -1
  313. package/dist/populate/populateLexicalPopulationPromises.js.map +1 -1
  314. package/dist/populate/recurseNestedFields.d.ts +2 -1
  315. package/dist/populate/recurseNestedFields.d.ts.map +1 -1
  316. package/dist/populate/recurseNestedFields.js +2 -1
  317. package/dist/populate/recurseNestedFields.js.map +1 -1
  318. package/dist/types.d.ts +2 -1
  319. package/dist/types.d.ts.map +1 -1
  320. package/dist/types.js.map +1 -1
  321. package/package.json +11 -11
  322. package/dist/field/features/align/inlineToolbarAlignGroup.d.ts +0 -3
  323. package/dist/field/features/align/inlineToolbarAlignGroup.d.ts.map +0 -1
  324. package/dist/field/features/align/inlineToolbarAlignGroup.js.map +0 -1
  325. package/dist/field/features/format/shared/inlineToolbarFormatGroup.d.ts +0 -3
  326. package/dist/field/features/format/shared/inlineToolbarFormatGroup.d.ts.map +0 -1
  327. package/dist/field/features/format/shared/inlineToolbarFormatGroup.js +0 -10
  328. package/dist/field/features/format/shared/inlineToolbarFormatGroup.js.map +0 -1
  329. package/dist/field/features/indent/inlineToolbarIndentGroup.d.ts +0 -3
  330. package/dist/field/features/indent/inlineToolbarIndentGroup.d.ts.map +0 -1
  331. package/dist/field/features/indent/inlineToolbarIndentGroup.js +0 -10
  332. package/dist/field/features/indent/inlineToolbarIndentGroup.js.map +0 -1
  333. package/dist/field/features/shared/inlineToolbar/featureButtonsGroup.d.ts +0 -3
  334. package/dist/field/features/shared/inlineToolbar/featureButtonsGroup.d.ts.map +0 -1
  335. package/dist/field/features/shared/inlineToolbar/featureButtonsGroup.js +0 -10
  336. package/dist/field/features/shared/inlineToolbar/featureButtonsGroup.js.map +0 -1
  337. package/dist/field/features/shared/inlineToolbar/textDropdownGroup.d.ts +0 -3
  338. package/dist/field/features/shared/inlineToolbar/textDropdownGroup.d.ts.map +0 -1
  339. package/dist/field/features/shared/inlineToolbar/textDropdownGroup.js.map +0 -1
  340. package/dist/field/lexical/plugins/toolbars/fixed/types.d.ts +0 -40
  341. package/dist/field/lexical/plugins/toolbars/fixed/types.d.ts.map +0 -1
  342. package/dist/field/lexical/plugins/toolbars/fixed/types.js.map +0 -1
  343. package/dist/field/lexical/plugins/toolbars/inline/Toolbar/index.d.ts +0 -6
  344. package/dist/field/lexical/plugins/toolbars/inline/Toolbar/index.d.ts.map +0 -1
  345. package/dist/field/lexical/plugins/toolbars/inline/Toolbar/index.js.map +0 -1
  346. package/dist/field/lexical/plugins/toolbars/inline/ToolbarButton/index.d.ts +0 -8
  347. package/dist/field/lexical/plugins/toolbars/inline/ToolbarButton/index.d.ts.map +0 -1
  348. package/dist/field/lexical/plugins/toolbars/inline/ToolbarButton/index.js.map +0 -1
  349. package/dist/field/lexical/plugins/toolbars/inline/ToolbarDropdown/DropDown.d.ts +0 -17
  350. package/dist/field/lexical/plugins/toolbars/inline/ToolbarDropdown/DropDown.d.ts.map +0 -1
  351. package/dist/field/lexical/plugins/toolbars/inline/ToolbarDropdown/DropDown.js.map +0 -1
  352. package/dist/field/lexical/plugins/toolbars/inline/ToolbarDropdown/index.d.ts +0 -18
  353. package/dist/field/lexical/plugins/toolbars/inline/ToolbarDropdown/index.d.ts.map +0 -1
  354. package/dist/field/lexical/plugins/toolbars/inline/ToolbarDropdown/index.js +0 -42
  355. package/dist/field/lexical/plugins/toolbars/inline/ToolbarDropdown/index.js.map +0 -1
  356. package/dist/field/lexical/plugins/toolbars/inline/types.d.ts.map +0 -1
  357. package/dist/field/lexical/plugins/toolbars/inline/types.js +0 -3
  358. package/dist/field/lexical/plugins/toolbars/inline/types.js.map +0 -1
  359. /package/dist/field/{lexical/plugins/toolbars/fixed → features/toolbars}/types.js +0 -0
@@ -22,22 +22,21 @@ const BlocksFeatureClient = (props)=>{
22
22
  slashMenu: {
23
23
  groups: [
24
24
  {
25
- displayName: 'Blocks',
26
25
  items: props.reducedBlocks.map((block)=>{
27
26
  return {
28
27
  Icon: BlockIcon,
29
- displayName: ({ i18n })=>{
30
- if (!block.labels.singular) {
31
- return block.slug;
32
- }
33
- return getTranslation(block.labels.singular, i18n);
34
- },
35
28
  key: 'block-' + block.slug,
36
29
  keywords: [
37
30
  'block',
38
31
  'blocks',
39
32
  block.slug
40
33
  ],
34
+ label: ({ i18n })=>{
35
+ if (!block.labels.singular) {
36
+ return block.slug;
37
+ }
38
+ return getTranslation(block.labels.singular, i18n);
39
+ },
41
40
  onSelect: ({ editor })=>{
42
41
  editor.dispatchCommand(INSERT_BLOCK_COMMAND, {
43
42
  id: null,
@@ -47,7 +46,39 @@ const BlocksFeatureClient = (props)=>{
47
46
  }
48
47
  };
49
48
  }),
50
- key: 'blocks'
49
+ key: 'blocks',
50
+ label: 'Blocks'
51
+ }
52
+ ]
53
+ },
54
+ toolbarFixed: {
55
+ groups: [
56
+ {
57
+ type: 'dropdown',
58
+ ChildComponent: BlockIcon,
59
+ items: props.reducedBlocks.map((block, index)=>{
60
+ return {
61
+ ChildComponent: BlockIcon,
62
+ isActive: undefined,
63
+ key: 'block-' + block.slug,
64
+ label: ({ i18n })=>{
65
+ if (!block.labels.singular) {
66
+ return block.slug;
67
+ }
68
+ return getTranslation(block.labels.singular, i18n);
69
+ },
70
+ onSelect: ({ editor })=>{
71
+ editor.dispatchCommand(INSERT_BLOCK_COMMAND, {
72
+ id: null,
73
+ blockName: '',
74
+ blockType: block.slug
75
+ });
76
+ },
77
+ order: index
78
+ };
79
+ }),
80
+ key: 'blocks',
81
+ order: 20
51
82
  }
52
83
  ]
53
84
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/field/features/blocks/feature.client.tsx"],"sourcesContent":["'use client'\n\nimport type { ReducedBlock } from '@payloadcms/ui/utilities/buildComponentMap'\n\nimport { getTranslation } from '@payloadcms/translations'\n\nimport type { FeatureProviderProviderClient } from '../types.js'\n\nimport { BlockIcon } from '../../lexical/ui/icons/Block/index.js'\nimport { createClientComponent } from '../createClientComponent.js'\nimport { BlockNode } from './nodes/BlocksNode.js'\nimport { INSERT_BLOCK_COMMAND } from './plugin/commands.js'\nimport { BlocksPlugin } from './plugin/index.js'\n\nexport type BlocksFeatureClientProps = {\n reducedBlocks: ReducedBlock[]\n}\n\nconst BlocksFeatureClient: FeatureProviderProviderClient<BlocksFeatureClientProps> = (props) => {\n return {\n clientFeatureProps: props,\n feature: () => ({\n clientFeatureProps: props,\n nodes: [BlockNode],\n plugins: [\n {\n Component: BlocksPlugin,\n position: 'normal',\n },\n ],\n slashMenu: {\n groups: [\n {\n displayName: 'Blocks',\n items: props.reducedBlocks.map((block) => {\n return {\n Icon: BlockIcon,\n displayName: ({ i18n }) => {\n if (!block.labels.singular) {\n return block.slug\n }\n\n return getTranslation(block.labels.singular, i18n)\n },\n key: 'block-' + block.slug,\n keywords: ['block', 'blocks', block.slug],\n onSelect: ({ editor }) => {\n editor.dispatchCommand(INSERT_BLOCK_COMMAND, {\n id: null,\n blockName: '',\n blockType: block.slug,\n })\n },\n }\n }),\n key: 'blocks',\n },\n ],\n },\n }),\n }\n}\n\nexport const BlocksFeatureClientComponent = createClientComponent(BlocksFeatureClient)\n"],"names":["getTranslation","BlockIcon","createClientComponent","BlockNode","INSERT_BLOCK_COMMAND","BlocksPlugin","BlocksFeatureClient","props","clientFeatureProps","feature","nodes","plugins","Component","position","slashMenu","groups","displayName","items","reducedBlocks","map","block","Icon","i18n","labels","singular","slug","key","keywords","onSelect","editor","dispatchCommand","id","blockName","blockType","BlocksFeatureClientComponent"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA;AAIA,SAASA,cAAc,QAAQ,2BAA0B;AAIzD,SAASC,SAAS,QAAQ,wCAAuC;AACjE,SAASC,qBAAqB,QAAQ,8BAA6B;AACnE,SAASC,SAAS,QAAQ,wBAAuB;AACjD,SAASC,oBAAoB,QAAQ,uBAAsB;AAC3D,SAASC,YAAY,QAAQ,oBAAmB;AAMhD,MAAMC,sBAA+E,CAACC;IACpF,OAAO;QACLC,oBAAoBD;QACpBE,SAAS,IAAO,CAAA;gBACdD,oBAAoBD;gBACpBG,OAAO;oBAACP;iBAAU;gBAClBQ,SAAS;oBACP;wBACEC,WAAWP;wBACXQ,UAAU;oBACZ;iBACD;gBACDC,WAAW;oBACTC,QAAQ;wBACN;4BACEC,aAAa;4BACbC,OAAOV,MAAMW,aAAa,CAACC,GAAG,CAAC,CAACC;gCAC9B,OAAO;oCACLC,MAAMpB;oCACNe,aAAa,CAAC,EAAEM,IAAI,EAAE;wCACpB,IAAI,CAACF,MAAMG,MAAM,CAACC,QAAQ,EAAE;4CAC1B,OAAOJ,MAAMK,IAAI;wCACnB;wCAEA,OAAOzB,eAAeoB,MAAMG,MAAM,CAACC,QAAQ,EAAEF;oCAC/C;oCACAI,KAAK,WAAWN,MAAMK,IAAI;oCAC1BE,UAAU;wCAAC;wCAAS;wCAAUP,MAAMK,IAAI;qCAAC;oCACzCG,UAAU,CAAC,EAAEC,MAAM,EAAE;wCACnBA,OAAOC,eAAe,CAAC1B,sBAAsB;4CAC3C2B,IAAI;4CACJC,WAAW;4CACXC,WAAWb,MAAMK,IAAI;wCACvB;oCACF;gCACF;4BACF;4BACAC,KAAK;wBACP;qBACD;gBACH;YACF,CAAA;IACF;AACF;AAEA,OAAO,MAAMQ,+BAA+BhC,sBAAsBI,qBAAoB"}
1
+ {"version":3,"sources":["../../../../src/field/features/blocks/feature.client.tsx"],"sourcesContent":["'use client'\n\nimport type { ReducedBlock } from '@payloadcms/ui/utilities/buildComponentMap'\n\nimport { getTranslation } from '@payloadcms/translations'\n\nimport type { FeatureProviderProviderClient } from '../types.js'\n\nimport { BlockIcon } from '../../lexical/ui/icons/Block/index.js'\nimport { createClientComponent } from '../createClientComponent.js'\nimport { BlockNode } from './nodes/BlocksNode.js'\nimport { INSERT_BLOCK_COMMAND } from './plugin/commands.js'\nimport { BlocksPlugin } from './plugin/index.js'\n\nexport type BlocksFeatureClientProps = {\n reducedBlocks: ReducedBlock[]\n}\n\nconst BlocksFeatureClient: FeatureProviderProviderClient<BlocksFeatureClientProps> = (props) => {\n return {\n clientFeatureProps: props,\n feature: () => ({\n clientFeatureProps: props,\n nodes: [BlockNode],\n plugins: [\n {\n Component: BlocksPlugin,\n position: 'normal',\n },\n ],\n slashMenu: {\n groups: [\n {\n items: props.reducedBlocks.map((block) => {\n return {\n Icon: BlockIcon,\n key: 'block-' + block.slug,\n keywords: ['block', 'blocks', block.slug],\n label: ({ i18n }) => {\n if (!block.labels.singular) {\n return block.slug\n }\n\n return getTranslation(block.labels.singular, i18n)\n },\n onSelect: ({ editor }) => {\n editor.dispatchCommand(INSERT_BLOCK_COMMAND, {\n id: null,\n blockName: '',\n blockType: block.slug,\n })\n },\n }\n }),\n key: 'blocks',\n label: 'Blocks',\n },\n ],\n },\n toolbarFixed: {\n groups: [\n {\n type: 'dropdown',\n ChildComponent: BlockIcon,\n items: props.reducedBlocks.map((block, index) => {\n return {\n ChildComponent: BlockIcon,\n isActive: undefined, // At this point, we would be inside a sub-richtext-editor. And at this point this will be run against the focused sub-editor, not the parent editor which has the actual block. Thus, no point in running this\n key: 'block-' + block.slug,\n label: ({ i18n }) => {\n if (!block.labels.singular) {\n return block.slug\n }\n\n return getTranslation(block.labels.singular, i18n)\n },\n onSelect: ({ editor }) => {\n editor.dispatchCommand(INSERT_BLOCK_COMMAND, {\n id: null,\n blockName: '',\n blockType: block.slug,\n })\n },\n order: index,\n }\n }),\n key: 'blocks',\n order: 20,\n },\n ],\n },\n }),\n }\n}\n\nexport const BlocksFeatureClientComponent = createClientComponent(BlocksFeatureClient)\n"],"names":["getTranslation","BlockIcon","createClientComponent","BlockNode","INSERT_BLOCK_COMMAND","BlocksPlugin","BlocksFeatureClient","props","clientFeatureProps","feature","nodes","plugins","Component","position","slashMenu","groups","items","reducedBlocks","map","block","Icon","key","slug","keywords","label","i18n","labels","singular","onSelect","editor","dispatchCommand","id","blockName","blockType","toolbarFixed","type","ChildComponent","index","isActive","undefined","order","BlocksFeatureClientComponent"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA;AAIA,SAASA,cAAc,QAAQ,2BAA0B;AAIzD,SAASC,SAAS,QAAQ,wCAAuC;AACjE,SAASC,qBAAqB,QAAQ,8BAA6B;AACnE,SAASC,SAAS,QAAQ,wBAAuB;AACjD,SAASC,oBAAoB,QAAQ,uBAAsB;AAC3D,SAASC,YAAY,QAAQ,oBAAmB;AAMhD,MAAMC,sBAA+E,CAACC;IACpF,OAAO;QACLC,oBAAoBD;QACpBE,SAAS,IAAO,CAAA;gBACdD,oBAAoBD;gBACpBG,OAAO;oBAACP;iBAAU;gBAClBQ,SAAS;oBACP;wBACEC,WAAWP;wBACXQ,UAAU;oBACZ;iBACD;gBACDC,WAAW;oBACTC,QAAQ;wBACN;4BACEC,OAAOT,MAAMU,aAAa,CAACC,GAAG,CAAC,CAACC;gCAC9B,OAAO;oCACLC,MAAMnB;oCACNoB,KAAK,WAAWF,MAAMG,IAAI;oCAC1BC,UAAU;wCAAC;wCAAS;wCAAUJ,MAAMG,IAAI;qCAAC;oCACzCE,OAAO,CAAC,EAAEC,IAAI,EAAE;wCACd,IAAI,CAACN,MAAMO,MAAM,CAACC,QAAQ,EAAE;4CAC1B,OAAOR,MAAMG,IAAI;wCACnB;wCAEA,OAAOtB,eAAemB,MAAMO,MAAM,CAACC,QAAQ,EAAEF;oCAC/C;oCACAG,UAAU,CAAC,EAAEC,MAAM,EAAE;wCACnBA,OAAOC,eAAe,CAAC1B,sBAAsB;4CAC3C2B,IAAI;4CACJC,WAAW;4CACXC,WAAWd,MAAMG,IAAI;wCACvB;oCACF;gCACF;4BACF;4BACAD,KAAK;4BACLG,OAAO;wBACT;qBACD;gBACH;gBACAU,cAAc;oBACZnB,QAAQ;wBACN;4BACEoB,MAAM;4BACNC,gBAAgBnC;4BAChBe,OAAOT,MAAMU,aAAa,CAACC,GAAG,CAAC,CAACC,OAAOkB;gCACrC,OAAO;oCACLD,gBAAgBnC;oCAChBqC,UAAUC;oCACVlB,KAAK,WAAWF,MAAMG,IAAI;oCAC1BE,OAAO,CAAC,EAAEC,IAAI,EAAE;wCACd,IAAI,CAACN,MAAMO,MAAM,CAACC,QAAQ,EAAE;4CAC1B,OAAOR,MAAMG,IAAI;wCACnB;wCAEA,OAAOtB,eAAemB,MAAMO,MAAM,CAACC,QAAQ,EAAEF;oCAC/C;oCACAG,UAAU,CAAC,EAAEC,MAAM,EAAE;wCACnBA,OAAOC,eAAe,CAAC1B,sBAAsB;4CAC3C2B,IAAI;4CACJC,WAAW;4CACXC,WAAWd,MAAMG,IAAI;wCACvB;oCACF;oCACAkB,OAAOH;gCACT;4BACF;4BACAhB,KAAK;4BACLmB,OAAO;wBACT;qBACD;gBACH;YACF,CAAA;IACF;AACF;AAEA,OAAO,MAAMC,+BAA+BvC,sBAAsBI,qBAAoB"}
@@ -1,11 +1,8 @@
1
- import type { Block, FieldWithRichTextRequiredEditor } from 'payload/types';
1
+ import type { Block } from 'payload/types';
2
2
  import type { FeatureProviderProviderServer } from '../types.js';
3
3
  import type { BlocksFeatureClientProps } from './feature.client.js';
4
- export type LexicalBlock = Omit<Block, 'fields'> & {
5
- fields: FieldWithRichTextRequiredEditor[];
6
- };
7
4
  export type BlocksFeatureProps = {
8
- blocks: LexicalBlock[];
5
+ blocks: Block[];
9
6
  };
10
7
  export declare const BlocksFeature: FeatureProviderProviderServer<BlocksFeatureProps, BlocksFeatureClientProps>;
11
8
  //# sourceMappingURL=feature.server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"feature.server.d.ts","sourceRoot":"","sources":["../../../../src/field/features/blocks/feature.server.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAqB,+BAA+B,EAAE,MAAM,eAAe,CAAA;AAM9F,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,aAAa,CAAA;AAChE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAA;AAQnE,MAAM,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG;IACjD,MAAM,EAAE,+BAA+B,EAAE,CAAA;CAC1C,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,EAAE,YAAY,EAAE,CAAA;CACvB,CAAA;AAED,eAAO,MAAM,aAAa,EAAE,6BAA6B,CACvD,kBAAkB,EAClB,wBAAwB,CAsKzB,CAAA"}
1
+ {"version":3,"file":"feature.server.d.ts","sourceRoot":"","sources":["../../../../src/field/features/blocks/feature.server.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAqB,MAAM,eAAe,CAAA;AAM7D,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,aAAa,CAAA;AAChE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAA;AAQnE,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,EAAE,KAAK,EAAE,CAAA;CAChB,CAAA;AAED,eAAO,MAAM,aAAa,EAAE,6BAA6B,CACvD,kBAAkB,EAClB,wBAAwB,CAsKzB,CAAA"}
@@ -8,7 +8,7 @@ import { blockPopulationPromiseHOC } from './populationPromise.js';
8
8
  import { blockValidationHOC } from './validate.js';
9
9
  export const BlocksFeature = (props)=>{
10
10
  return {
11
- feature: async ({ config: _config })=>{
11
+ feature: async ({ config: _config, isRoot })=>{
12
12
  if (props?.blocks?.length) {
13
13
  const validRelationships = _config.collections.map((c)=>c.slug) || [];
14
14
  for (const block of props.blocks){
@@ -17,7 +17,7 @@ export const BlocksFeature = (props)=>{
17
17
  block.fields = await sanitizeFields({
18
18
  config: _config,
19
19
  fields: block.fields,
20
- requireFieldLevelRichTextEditor: true,
20
+ requireFieldLevelRichTextEditor: isRoot,
21
21
  validRelationships
22
22
  });
23
23
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/field/features/blocks/feature.server.ts"],"sourcesContent":["import type { Config } from 'payload/config'\nimport type { Block, BlockField, Field, FieldWithRichTextRequiredEditor } from 'payload/types'\n\nimport { traverseFields } from '@payloadcms/next/utilities'\nimport { baseBlockFields, sanitizeFields } from 'payload/config'\nimport { fieldsToJSONSchema, formatLabels } from 'payload/utilities'\n\nimport type { FeatureProviderProviderServer } from '../types.js'\nimport type { BlocksFeatureClientProps } from './feature.client.js'\n\nimport { createNode } from '../typeUtilities.js'\nimport { BlocksFeatureClientComponent } from './feature.client.js'\nimport { BlockNode } from './nodes/BlocksNode.js'\nimport { blockPopulationPromiseHOC } from './populationPromise.js'\nimport { blockValidationHOC } from './validate.js'\n\nexport type LexicalBlock = Omit<Block, 'fields'> & {\n fields: FieldWithRichTextRequiredEditor[]\n}\n\nexport type BlocksFeatureProps = {\n blocks: LexicalBlock[]\n}\n\nexport const BlocksFeature: FeatureProviderProviderServer<\n BlocksFeatureProps,\n BlocksFeatureClientProps\n> = (props) => {\n return {\n feature: async ({ config: _config }) => {\n if (props?.blocks?.length) {\n const validRelationships = _config.collections.map((c) => c.slug) || []\n\n for (const block of props.blocks) {\n block.fields = block.fields.concat(baseBlockFields as FieldWithRichTextRequiredEditor[])\n block.labels = !block.labels ? formatLabels(block.slug) : block.labels\n\n block.fields = (await sanitizeFields({\n config: _config as unknown as Config,\n fields: block.fields,\n requireFieldLevelRichTextEditor: true,\n validRelationships,\n })) as FieldWithRichTextRequiredEditor[]\n }\n }\n\n // Build clientProps\n const clientProps: BlocksFeatureClientProps = {\n reducedBlocks: [],\n }\n for (const block of props.blocks) {\n clientProps.reducedBlocks.push({\n slug: block.slug,\n fieldMap: [],\n imageAltText: block.imageAltText,\n imageURL: block.imageURL,\n labels: block.labels,\n })\n }\n\n return {\n ClientComponent: BlocksFeatureClientComponent,\n clientFeatureProps: clientProps,\n generateSchemaMap: ({ config, i18n, props }) => {\n const validRelationships = config.collections.map((c) => c.slug) || []\n\n /**\n * Add sub-fields to the schemaMap. E.g. if you have an array field as part of the block, and it runs addRow, it will request these\n * sub-fields from the component map. Thus, we need to put them in the component map here.\n */\n const schemaMap = new Map<string, Field[]>()\n\n for (const block of props.blocks) {\n schemaMap.set(block.slug, block.fields || [])\n\n traverseFields({\n config,\n fields: block.fields,\n i18n,\n schemaMap,\n schemaPath: block.slug,\n validRelationships,\n })\n }\n\n return schemaMap\n },\n generatedTypes: {\n modifyOutputSchema: ({\n collectionIDFieldTypes,\n config,\n currentSchema,\n field,\n interfaceNameDefinitions,\n }) => {\n if (!props?.blocks?.length) {\n return currentSchema\n }\n\n const blocksField: BlockField = {\n name: field?.name + '_lexical_blocks',\n type: 'blocks',\n blocks: props.blocks,\n }\n // This is only done so that interfaceNameDefinitions sets those block's interfaceNames.\n // we don't actually use the JSON Schema itself in the generated types yet.\n fieldsToJSONSchema(\n collectionIDFieldTypes,\n [blocksField],\n interfaceNameDefinitions,\n config,\n )\n\n return currentSchema\n },\n },\n nodes: [\n createNode({\n /* // TODO: Implement these hooks once docWithLocales / originalSiblingDoc => node matching has been figured out\n hooks: {\n beforeChange: [\n async ({ context, findMany, node, operation, overrideAccess, req }) => {\n const blockType = node.fields.blockType\n\n const block = deepCopyObject(\n props.blocks.find((block) => block.slug === blockType),\n )\n\n\n await beforeChangeTraverseFields({\n id: null,\n collection: null,\n context,\n data: node.fields,\n doc: node.fields,\n fields: sanitizedBlock.fields,\n global: null,\n mergeLocaleActions: [],\n operation:\n operation === 'create' || operation === 'update' ? operation : 'update',\n overrideAccess,\n path: '',\n req,\n siblingData: node.fields,\n siblingDoc: node.fields,\n })\n\n\n return node\n },\n ],\n beforeValidate: [\n async ({ context, findMany, node, operation, overrideAccess, req }) => {\n const blockType = node.fields.blockType\n\n const block = deepCopyObject(\n props.blocks.find((block) => block.slug === blockType),\n )\n\n\n\n await beforeValidateTraverseFields({\n id: null,\n collection: null,\n context,\n data: node.fields,\n doc: node.fields,\n fields: sanitizedBlock.fields,\n global: null,\n operation:\n operation === 'create' || operation === 'update' ? operation : 'update',\n overrideAccess,\n req,\n siblingData: node.fields,\n siblingDoc: node.fields,\n })\n\n return node\n },\n ],\n },*/\n node: BlockNode,\n populationPromises: [blockPopulationPromiseHOC(props)],\n validations: [blockValidationHOC(props)],\n }),\n ],\n serverFeatureProps: props,\n }\n },\n key: 'blocks',\n serverFeatureProps: props,\n }\n}\n"],"names":["traverseFields","baseBlockFields","sanitizeFields","fieldsToJSONSchema","formatLabels","createNode","BlocksFeatureClientComponent","BlockNode","blockPopulationPromiseHOC","blockValidationHOC","BlocksFeature","props","feature","config","_config","blocks","length","validRelationships","collections","map","c","slug","block","fields","concat","labels","requireFieldLevelRichTextEditor","clientProps","reducedBlocks","push","fieldMap","imageAltText","imageURL","ClientComponent","clientFeatureProps","generateSchemaMap","i18n","schemaMap","Map","set","schemaPath","generatedTypes","modifyOutputSchema","collectionIDFieldTypes","currentSchema","field","interfaceNameDefinitions","blocksField","name","type","nodes","node","populationPromises","validations","serverFeatureProps","key"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/field/features/blocks/feature.server.ts"],"sourcesContent":["import type { Config } from 'payload/config'\nimport type { Block, BlockField, Field } from 'payload/types'\n\nimport { traverseFields } from '@payloadcms/next/utilities'\nimport { baseBlockFields, sanitizeFields } from 'payload/config'\nimport { fieldsToJSONSchema, formatLabels } from 'payload/utilities'\n\nimport type { FeatureProviderProviderServer } from '../types.js'\nimport type { BlocksFeatureClientProps } from './feature.client.js'\n\nimport { createNode } from '../typeUtilities.js'\nimport { BlocksFeatureClientComponent } from './feature.client.js'\nimport { BlockNode } from './nodes/BlocksNode.js'\nimport { blockPopulationPromiseHOC } from './populationPromise.js'\nimport { blockValidationHOC } from './validate.js'\n\nexport type BlocksFeatureProps = {\n blocks: Block[]\n}\n\nexport const BlocksFeature: FeatureProviderProviderServer<\n BlocksFeatureProps,\n BlocksFeatureClientProps\n> = (props) => {\n return {\n feature: async ({ config: _config, isRoot }) => {\n if (props?.blocks?.length) {\n const validRelationships = _config.collections.map((c) => c.slug) || []\n\n for (const block of props.blocks) {\n block.fields = block.fields.concat(baseBlockFields)\n block.labels = !block.labels ? formatLabels(block.slug) : block.labels\n\n block.fields = await sanitizeFields({\n config: _config as unknown as Config,\n fields: block.fields,\n requireFieldLevelRichTextEditor: isRoot,\n validRelationships,\n })\n }\n }\n\n // Build clientProps\n const clientProps: BlocksFeatureClientProps = {\n reducedBlocks: [],\n }\n for (const block of props.blocks) {\n clientProps.reducedBlocks.push({\n slug: block.slug,\n fieldMap: [],\n imageAltText: block.imageAltText,\n imageURL: block.imageURL,\n labels: block.labels,\n })\n }\n\n return {\n ClientComponent: BlocksFeatureClientComponent,\n clientFeatureProps: clientProps,\n generateSchemaMap: ({ config, i18n, props }) => {\n const validRelationships = config.collections.map((c) => c.slug) || []\n\n /**\n * Add sub-fields to the schemaMap. E.g. if you have an array field as part of the block, and it runs addRow, it will request these\n * sub-fields from the component map. Thus, we need to put them in the component map here.\n */\n const schemaMap = new Map<string, Field[]>()\n\n for (const block of props.blocks) {\n schemaMap.set(block.slug, block.fields || [])\n\n traverseFields({\n config,\n fields: block.fields,\n i18n,\n schemaMap,\n schemaPath: block.slug,\n validRelationships,\n })\n }\n\n return schemaMap\n },\n generatedTypes: {\n modifyOutputSchema: ({\n collectionIDFieldTypes,\n config,\n currentSchema,\n field,\n interfaceNameDefinitions,\n }) => {\n if (!props?.blocks?.length) {\n return currentSchema\n }\n\n const blocksField: BlockField = {\n name: field?.name + '_lexical_blocks',\n type: 'blocks',\n blocks: props.blocks,\n }\n // This is only done so that interfaceNameDefinitions sets those block's interfaceNames.\n // we don't actually use the JSON Schema itself in the generated types yet.\n fieldsToJSONSchema(\n collectionIDFieldTypes,\n [blocksField],\n interfaceNameDefinitions,\n config,\n )\n\n return currentSchema\n },\n },\n nodes: [\n createNode({\n /* // TODO: Implement these hooks once docWithLocales / originalSiblingDoc => node matching has been figured out\n hooks: {\n beforeChange: [\n async ({ context, findMany, node, operation, overrideAccess, req }) => {\n const blockType = node.fields.blockType\n\n const block = deepCopyObject(\n props.blocks.find((block) => block.slug === blockType),\n )\n\n\n await beforeChangeTraverseFields({\n id: null,\n collection: null,\n context,\n data: node.fields,\n doc: node.fields,\n fields: sanitizedBlock.fields,\n global: null,\n mergeLocaleActions: [],\n operation:\n operation === 'create' || operation === 'update' ? operation : 'update',\n overrideAccess,\n path: '',\n req,\n siblingData: node.fields,\n siblingDoc: node.fields,\n })\n\n\n return node\n },\n ],\n beforeValidate: [\n async ({ context, findMany, node, operation, overrideAccess, req }) => {\n const blockType = node.fields.blockType\n\n const block = deepCopyObject(\n props.blocks.find((block) => block.slug === blockType),\n )\n\n\n\n await beforeValidateTraverseFields({\n id: null,\n collection: null,\n context,\n data: node.fields,\n doc: node.fields,\n fields: sanitizedBlock.fields,\n global: null,\n operation:\n operation === 'create' || operation === 'update' ? operation : 'update',\n overrideAccess,\n req,\n siblingData: node.fields,\n siblingDoc: node.fields,\n })\n\n return node\n },\n ],\n },*/\n node: BlockNode,\n populationPromises: [blockPopulationPromiseHOC(props)],\n validations: [blockValidationHOC(props)],\n }),\n ],\n serverFeatureProps: props,\n }\n },\n key: 'blocks',\n serverFeatureProps: props,\n }\n}\n"],"names":["traverseFields","baseBlockFields","sanitizeFields","fieldsToJSONSchema","formatLabels","createNode","BlocksFeatureClientComponent","BlockNode","blockPopulationPromiseHOC","blockValidationHOC","BlocksFeature","props","feature","config","_config","isRoot","blocks","length","validRelationships","collections","map","c","slug","block","fields","concat","labels","requireFieldLevelRichTextEditor","clientProps","reducedBlocks","push","fieldMap","imageAltText","imageURL","ClientComponent","clientFeatureProps","generateSchemaMap","i18n","schemaMap","Map","set","schemaPath","generatedTypes","modifyOutputSchema","collectionIDFieldTypes","currentSchema","field","interfaceNameDefinitions","blocksField","name","type","nodes","node","populationPromises","validations","serverFeatureProps","key"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
@@ -1,5 +1,6 @@
1
- import React from 'react';
1
+ import type { PluginComponent } from '../../types.js';
2
+ import type { BlocksFeatureClientProps } from '../feature.client.js';
2
3
  import type { BlockFields } from '../nodes/BlocksNode.js';
3
4
  export type InsertBlockPayload = Exclude<BlockFields, 'id'>;
4
- export declare function BlocksPlugin(): React.ReactNode;
5
+ export declare const BlocksPlugin: PluginComponent<BlocksFeatureClientProps>;
5
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/field/features/blocks/plugin/index.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAoB,MAAM,OAAO,CAAA;AAExC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAMzD,MAAM,MAAM,kBAAkB,GAAG,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA;AAE3D,wBAAgB,YAAY,IAAI,KAAK,CAAC,SAAS,CA8C9C"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/field/features/blocks/plugin/index.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAA;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAMzD,MAAM,MAAM,kBAAkB,GAAG,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA;AAE3D,eAAO,MAAM,YAAY,EAAE,eAAe,CAAC,wBAAwB,CA8ClE,CAAA"}
@@ -6,7 +6,7 @@ import React, { useEffect } from 'react';
6
6
  import { BlocksDrawerComponent } from '../drawer/index.js';
7
7
  import { $createBlockNode, BlockNode } from '../nodes/BlocksNode.js';
8
8
  import { INSERT_BLOCK_COMMAND } from './commands.js';
9
- export function BlocksPlugin() {
9
+ export const BlocksPlugin = ()=>{
10
10
  const [editor] = useLexicalComposerContext();
11
11
  useEffect(()=>{
12
12
  if (!editor.hasNodes([
@@ -35,6 +35,6 @@ export function BlocksPlugin() {
35
35
  editor
36
36
  ]);
37
37
  return /*#__PURE__*/ React.createElement(BlocksDrawerComponent, null);
38
- }
38
+ };
39
39
 
40
40
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/field/features/blocks/plugin/index.tsx"],"sourcesContent":["'use client'\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { $insertNodeToNearestRoot, mergeRegister } from '@lexical/utils'\nimport {\n $getPreviousSelection,\n $getSelection,\n $isParagraphNode,\n $isRangeSelection,\n COMMAND_PRIORITY_EDITOR,\n} from 'lexical'\nimport React, { useEffect } from 'react'\n\nimport type { BlockFields } from '../nodes/BlocksNode.js'\n\nimport { BlocksDrawerComponent } from '../drawer/index.js'\nimport { $createBlockNode, BlockNode } from '../nodes/BlocksNode.js'\nimport { INSERT_BLOCK_COMMAND } from './commands.js'\n\nexport type InsertBlockPayload = Exclude<BlockFields, 'id'>\n\nexport function BlocksPlugin(): React.ReactNode {\n const [editor] = useLexicalComposerContext()\n\n useEffect(() => {\n if (!editor.hasNodes([BlockNode])) {\n throw new Error('BlocksPlugin: BlocksNode not registered on editor')\n }\n\n return mergeRegister(\n editor.registerCommand<InsertBlockPayload>(\n INSERT_BLOCK_COMMAND,\n (payload: InsertBlockPayload) => {\n editor.update(() => {\n const blockNode = $createBlockNode(payload)\n\n const selection = $getSelection() || $getPreviousSelection()\n\n if ($isRangeSelection(selection)) {\n const { focus } = selection\n const focusNode = focus.getNode()\n\n // First, delete currently selected node if it's an empty paragraph and if there are sufficient\n // paragraph nodes (more than 1) left in the parent node, so that we don't \"trap\" the user\n if (\n $isParagraphNode(focusNode) &&\n focusNode.getTextContentSize() === 0 &&\n focusNode\n .getParent()\n .getChildren()\n .filter((node) => $isParagraphNode(node)).length > 1\n ) {\n focusNode.remove()\n }\n\n $insertNodeToNearestRoot(blockNode)\n }\n })\n\n return true\n },\n COMMAND_PRIORITY_EDITOR,\n ),\n )\n }, [editor])\n\n return <BlocksDrawerComponent />\n}\n"],"names":["useLexicalComposerContext","$insertNodeToNearestRoot","mergeRegister","$getPreviousSelection","$getSelection","$isParagraphNode","$isRangeSelection","COMMAND_PRIORITY_EDITOR","React","useEffect","BlocksDrawerComponent","$createBlockNode","BlockNode","INSERT_BLOCK_COMMAND","BlocksPlugin","editor","hasNodes","Error","registerCommand","payload","update","blockNode","selection","focus","focusNode","getNode","getTextContentSize","getParent","getChildren","filter","node","length","remove"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA;AACA,SAASA,yBAAyB,QAAQ,2CAA0C;AACpF,SAASC,wBAAwB,EAAEC,aAAa,QAAQ,iBAAgB;AACxE,SACEC,qBAAqB,EACrBC,aAAa,EACbC,gBAAgB,EAChBC,iBAAiB,EACjBC,uBAAuB,QAClB,UAAS;AAChB,OAAOC,SAASC,SAAS,QAAQ,QAAO;AAIxC,SAASC,qBAAqB,QAAQ,qBAAoB;AAC1D,SAASC,gBAAgB,EAAEC,SAAS,QAAQ,yBAAwB;AACpE,SAASC,oBAAoB,QAAQ,gBAAe;AAIpD,OAAO,SAASC;IACd,MAAM,CAACC,OAAO,GAAGf;IAEjBS,UAAU;QACR,IAAI,CAACM,OAAOC,QAAQ,CAAC;YAACJ;SAAU,GAAG;YACjC,MAAM,IAAIK,MAAM;QAClB;QAEA,OAAOf,cACLa,OAAOG,eAAe,CACpBL,sBACA,CAACM;YACCJ,OAAOK,MAAM,CAAC;gBACZ,MAAMC,YAAYV,iBAAiBQ;gBAEnC,MAAMG,YAAYlB,mBAAmBD;gBAErC,IAAIG,kBAAkBgB,YAAY;oBAChC,MAAM,EAAEC,KAAK,EAAE,GAAGD;oBAClB,MAAME,YAAYD,MAAME,OAAO;oBAE/B,+FAA+F;oBAC/F,0FAA0F;oBAC1F,IACEpB,iBAAiBmB,cACjBA,UAAUE,kBAAkB,OAAO,KACnCF,UACGG,SAAS,GACTC,WAAW,GACXC,MAAM,CAAC,CAACC,OAASzB,iBAAiByB,OAAOC,MAAM,GAAG,GACrD;wBACAP,UAAUQ,MAAM;oBAClB;oBAEA/B,yBAAyBoB;gBAC3B;YACF;YAEA,OAAO;QACT,GACAd;IAGN,GAAG;QAACQ;KAAO;IAEX,qBAAO,oBAACL;AACV"}
1
+ {"version":3,"sources":["../../../../../src/field/features/blocks/plugin/index.tsx"],"sourcesContent":["'use client'\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { $insertNodeToNearestRoot, mergeRegister } from '@lexical/utils'\nimport {\n $getPreviousSelection,\n $getSelection,\n $isParagraphNode,\n $isRangeSelection,\n COMMAND_PRIORITY_EDITOR,\n} from 'lexical'\nimport React, { useEffect } from 'react'\n\nimport type { PluginComponent } from '../../types.js'\nimport type { BlocksFeatureClientProps } from '../feature.client.js'\nimport type { BlockFields } from '../nodes/BlocksNode.js'\n\nimport { BlocksDrawerComponent } from '../drawer/index.js'\nimport { $createBlockNode, BlockNode } from '../nodes/BlocksNode.js'\nimport { INSERT_BLOCK_COMMAND } from './commands.js'\n\nexport type InsertBlockPayload = Exclude<BlockFields, 'id'>\n\nexport const BlocksPlugin: PluginComponent<BlocksFeatureClientProps> = () => {\n const [editor] = useLexicalComposerContext()\n\n useEffect(() => {\n if (!editor.hasNodes([BlockNode])) {\n throw new Error('BlocksPlugin: BlocksNode not registered on editor')\n }\n\n return mergeRegister(\n editor.registerCommand<InsertBlockPayload>(\n INSERT_BLOCK_COMMAND,\n (payload: InsertBlockPayload) => {\n editor.update(() => {\n const blockNode = $createBlockNode(payload)\n\n const selection = $getSelection() || $getPreviousSelection()\n\n if ($isRangeSelection(selection)) {\n const { focus } = selection\n const focusNode = focus.getNode()\n\n // First, delete currently selected node if it's an empty paragraph and if there are sufficient\n // paragraph nodes (more than 1) left in the parent node, so that we don't \"trap\" the user\n if (\n $isParagraphNode(focusNode) &&\n focusNode.getTextContentSize() === 0 &&\n focusNode\n .getParent()\n .getChildren()\n .filter((node) => $isParagraphNode(node)).length > 1\n ) {\n focusNode.remove()\n }\n\n $insertNodeToNearestRoot(blockNode)\n }\n })\n\n return true\n },\n COMMAND_PRIORITY_EDITOR,\n ),\n )\n }, [editor])\n\n return <BlocksDrawerComponent />\n}\n"],"names":["useLexicalComposerContext","$insertNodeToNearestRoot","mergeRegister","$getPreviousSelection","$getSelection","$isParagraphNode","$isRangeSelection","COMMAND_PRIORITY_EDITOR","React","useEffect","BlocksDrawerComponent","$createBlockNode","BlockNode","INSERT_BLOCK_COMMAND","BlocksPlugin","editor","hasNodes","Error","registerCommand","payload","update","blockNode","selection","focus","focusNode","getNode","getTextContentSize","getParent","getChildren","filter","node","length","remove"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA;AACA,SAASA,yBAAyB,QAAQ,2CAA0C;AACpF,SAASC,wBAAwB,EAAEC,aAAa,QAAQ,iBAAgB;AACxE,SACEC,qBAAqB,EACrBC,aAAa,EACbC,gBAAgB,EAChBC,iBAAiB,EACjBC,uBAAuB,QAClB,UAAS;AAChB,OAAOC,SAASC,SAAS,QAAQ,QAAO;AAMxC,SAASC,qBAAqB,QAAQ,qBAAoB;AAC1D,SAASC,gBAAgB,EAAEC,SAAS,QAAQ,yBAAwB;AACpE,SAASC,oBAAoB,QAAQ,gBAAe;AAIpD,OAAO,MAAMC,eAA0D;IACrE,MAAM,CAACC,OAAO,GAAGf;IAEjBS,UAAU;QACR,IAAI,CAACM,OAAOC,QAAQ,CAAC;YAACJ;SAAU,GAAG;YACjC,MAAM,IAAIK,MAAM;QAClB;QAEA,OAAOf,cACLa,OAAOG,eAAe,CACpBL,sBACA,CAACM;YACCJ,OAAOK,MAAM,CAAC;gBACZ,MAAMC,YAAYV,iBAAiBQ;gBAEnC,MAAMG,YAAYlB,mBAAmBD;gBAErC,IAAIG,kBAAkBgB,YAAY;oBAChC,MAAM,EAAEC,KAAK,EAAE,GAAGD;oBAClB,MAAME,YAAYD,MAAME,OAAO;oBAE/B,+FAA+F;oBAC/F,0FAA0F;oBAC1F,IACEpB,iBAAiBmB,cACjBA,UAAUE,kBAAkB,OAAO,KACnCF,UACGG,SAAS,GACTC,WAAW,GACXC,MAAM,CAAC,CAACC,OAASzB,iBAAiByB,OAAOC,MAAM,GAAG,GACrD;wBACAP,UAAUQ,MAAM;oBAClB;oBAEA/B,yBAAyBoB;gBAC3B;YACF;YAEA,OAAO;QACT,GACAd;IAGN,GAAG;QAACQ;KAAO;IAEX,qBAAO,oBAACL;AACV,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"populationPromise.d.ts","sourceRoot":"","sources":["../../../../src/field/features/blocks/populationPromise.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AACpD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAC7D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAIhE,eAAO,MAAM,yBAAyB,UAC7B,kBAAkB,KACxB,kBAAkB,mBAAmB,CA4CvC,CAAA"}
1
+ {"version":3,"file":"populationPromise.d.ts","sourceRoot":"","sources":["../../../../src/field/features/blocks/populationPromise.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AACpD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAC7D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAIhE,eAAO,MAAM,yBAAyB,UAC7B,kBAAkB,KACxB,kBAAkB,mBAAmB,CA8CvC,CAAA"}
@@ -1,6 +1,6 @@
1
1
  import { recurseNestedFields } from '../../../populate/recurseNestedFields.js';
2
2
  export const blockPopulationPromiseHOC = (props)=>{
3
- const blockPopulationPromise = ({ context, currentDepth, depth, editorPopulationPromises, fieldPromises, findMany, flattenLocales, node, overrideAccess, populationPromises, req, showHiddenFields, siblingDoc })=>{
3
+ const blockPopulationPromise = ({ context, currentDepth, depth, draft, editorPopulationPromises, fieldPromises, findMany, flattenLocales, node, overrideAccess, populationPromises, req, showHiddenFields, siblingDoc })=>{
4
4
  const blockFieldData = node.fields;
5
5
  // find block used in this node
6
6
  const block = props.blocks.find((block)=>block.slug === blockFieldData.blockType);
@@ -22,6 +22,7 @@ export const blockPopulationPromiseHOC = (props)=>{
22
22
  req,
23
23
  showHiddenFields,
24
24
  // The afterReadPromise gets its data from looking for field.name inside the siblingDoc. Thus, here we cannot pass the whole document's siblingDoc, but only the siblingDoc (sibling fields) of the current field.
25
+ draft,
25
26
  siblingDoc: blockFieldData
26
27
  });
27
28
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/field/features/blocks/populationPromise.ts"],"sourcesContent":["import type { PopulationPromise } from '../types.js'\nimport type { BlocksFeatureProps } from './feature.server.js'\nimport type { SerializedBlockNode } from './nodes/BlocksNode.js'\n\nimport { recurseNestedFields } from '../../../populate/recurseNestedFields.js'\n\nexport const blockPopulationPromiseHOC = (\n props: BlocksFeatureProps,\n): PopulationPromise<SerializedBlockNode> => {\n const blockPopulationPromise: PopulationPromise<SerializedBlockNode> = ({\n context,\n currentDepth,\n depth,\n editorPopulationPromises,\n fieldPromises,\n findMany,\n flattenLocales,\n node,\n overrideAccess,\n populationPromises,\n req,\n showHiddenFields,\n siblingDoc,\n }) => {\n const blockFieldData = node.fields\n\n // find block used in this node\n const block = props.blocks.find((block) => block.slug === blockFieldData.blockType)\n if (!block || !block?.fields?.length || !blockFieldData) {\n return\n }\n\n recurseNestedFields({\n context,\n currentDepth,\n data: blockFieldData,\n depth,\n editorPopulationPromises,\n fieldPromises,\n fields: block.fields,\n findMany,\n flattenLocales,\n overrideAccess,\n populationPromises,\n req,\n showHiddenFields,\n // The afterReadPromise gets its data from looking for field.name inside the siblingDoc. Thus, here we cannot pass the whole document's siblingDoc, but only the siblingDoc (sibling fields) of the current field.\n siblingDoc: blockFieldData,\n })\n }\n\n return blockPopulationPromise\n}\n"],"names":["recurseNestedFields","blockPopulationPromiseHOC","props","blockPopulationPromise","context","currentDepth","depth","editorPopulationPromises","fieldPromises","findMany","flattenLocales","node","overrideAccess","populationPromises","req","showHiddenFields","siblingDoc","blockFieldData","fields","block","blocks","find","slug","blockType","length","data"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAIA,SAASA,mBAAmB,QAAQ,2CAA0C;AAE9E,OAAO,MAAMC,4BAA4B,CACvCC;IAEA,MAAMC,yBAAiE,CAAC,EACtEC,OAAO,EACPC,YAAY,EACZC,KAAK,EACLC,wBAAwB,EACxBC,aAAa,EACbC,QAAQ,EACRC,cAAc,EACdC,IAAI,EACJC,cAAc,EACdC,kBAAkB,EAClBC,GAAG,EACHC,gBAAgB,EAChBC,UAAU,EACX;QACC,MAAMC,iBAAiBN,KAAKO,MAAM;QAElC,+BAA+B;QAC/B,MAAMC,QAAQjB,MAAMkB,MAAM,CAACC,IAAI,CAAC,CAACF,QAAUA,MAAMG,IAAI,KAAKL,eAAeM,SAAS;QAClF,IAAI,CAACJ,SAAS,CAACA,OAAOD,QAAQM,UAAU,CAACP,gBAAgB;YACvD;QACF;QAEAjB,oBAAoB;YAClBI;YACAC;YACAoB,MAAMR;YACNX;YACAC;YACAC;YACAU,QAAQC,MAAMD,MAAM;YACpBT;YACAC;YACAE;YACAC;YACAC;YACAC;YACA,kNAAkN;YAClNC,YAAYC;QACd;IACF;IAEA,OAAOd;AACT,EAAC"}
1
+ {"version":3,"sources":["../../../../src/field/features/blocks/populationPromise.ts"],"sourcesContent":["import type { PopulationPromise } from '../types.js'\nimport type { BlocksFeatureProps } from './feature.server.js'\nimport type { SerializedBlockNode } from './nodes/BlocksNode.js'\n\nimport { recurseNestedFields } from '../../../populate/recurseNestedFields.js'\n\nexport const blockPopulationPromiseHOC = (\n props: BlocksFeatureProps,\n): PopulationPromise<SerializedBlockNode> => {\n const blockPopulationPromise: PopulationPromise<SerializedBlockNode> = ({\n context,\n currentDepth,\n depth,\n draft,\n editorPopulationPromises,\n fieldPromises,\n findMany,\n flattenLocales,\n node,\n overrideAccess,\n populationPromises,\n req,\n showHiddenFields,\n siblingDoc,\n }) => {\n const blockFieldData = node.fields\n\n // find block used in this node\n const block = props.blocks.find((block) => block.slug === blockFieldData.blockType)\n if (!block || !block?.fields?.length || !blockFieldData) {\n return\n }\n\n recurseNestedFields({\n context,\n currentDepth,\n data: blockFieldData,\n depth,\n editorPopulationPromises,\n fieldPromises,\n fields: block.fields,\n findMany,\n flattenLocales,\n overrideAccess,\n populationPromises,\n req,\n showHiddenFields,\n // The afterReadPromise gets its data from looking for field.name inside the siblingDoc. Thus, here we cannot pass the whole document's siblingDoc, but only the siblingDoc (sibling fields) of the current field.\n draft,\n siblingDoc: blockFieldData,\n })\n }\n\n return blockPopulationPromise\n}\n"],"names":["recurseNestedFields","blockPopulationPromiseHOC","props","blockPopulationPromise","context","currentDepth","depth","draft","editorPopulationPromises","fieldPromises","findMany","flattenLocales","node","overrideAccess","populationPromises","req","showHiddenFields","siblingDoc","blockFieldData","fields","block","blocks","find","slug","blockType","length","data"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAIA,SAASA,mBAAmB,QAAQ,2CAA0C;AAE9E,OAAO,MAAMC,4BAA4B,CACvCC;IAEA,MAAMC,yBAAiE,CAAC,EACtEC,OAAO,EACPC,YAAY,EACZC,KAAK,EACLC,KAAK,EACLC,wBAAwB,EACxBC,aAAa,EACbC,QAAQ,EACRC,cAAc,EACdC,IAAI,EACJC,cAAc,EACdC,kBAAkB,EAClBC,GAAG,EACHC,gBAAgB,EAChBC,UAAU,EACX;QACC,MAAMC,iBAAiBN,KAAKO,MAAM;QAElC,+BAA+B;QAC/B,MAAMC,QAAQlB,MAAMmB,MAAM,CAACC,IAAI,CAAC,CAACF,QAAUA,MAAMG,IAAI,KAAKL,eAAeM,SAAS;QAClF,IAAI,CAACJ,SAAS,CAACA,OAAOD,QAAQM,UAAU,CAACP,gBAAgB;YACvD;QACF;QAEAlB,oBAAoB;YAClBI;YACAC;YACAqB,MAAMR;YACNZ;YACAE;YACAC;YACAU,QAAQC,MAAMD,MAAM;YACpBT;YACAC;YACAE;YACAC;YACAC;YACAC;YACA,kNAAkN;YAClNT;YACAU,YAAYC;QACd;IACF;IAEA,OAAOf;AACT,EAAC"}
@@ -1,5 +1,5 @@
1
- import * as React from 'react';
1
+ import type { PluginComponent } from '../../../types.js';
2
2
  import './index.scss';
3
3
  export declare function isSelectAll(event: KeyboardEvent): boolean;
4
- export declare const TestRecorderPlugin: React.FC;
4
+ export declare const TestRecorderPlugin: PluginComponent<undefined>;
5
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/field/features/debug/testRecorder/plugin/index.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAI9B,OAAO,cAAc,CAAA;AA8ErB,wBAAgB,WAAW,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAEzD;AAmWD,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAYtC,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/field/features/debug/testRecorder/plugin/index.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAGxD,OAAO,cAAc,CAAA;AA8ErB,wBAAgB,WAAW,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAEzD;AAmWD,eAAO,MAAM,kBAAkB,EAAE,eAAe,CAAC,SAAS,CAYzD,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/field/features/debug/testRecorder/plugin/index.tsx"],"sourcesContent":["'use client'\nimport type { BaseSelection, LexicalEditor } from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { $createParagraphNode, $createTextNode, $getRoot } from 'lexical'\nimport * as React from 'react'\nimport { useCallback, useEffect, useLayoutEffect, useRef, useState } from 'react'\n\nimport { IS_APPLE } from '../../../../lexical/utils/environment.js'\nimport './index.scss'\n\nconst copy = (text: null | string) => {\n const textArea = document.createElement('textarea')\n textArea.value = text || ''\n textArea.style.position = 'absolute'\n textArea.style.opacity = '0'\n document.body?.appendChild(textArea)\n textArea.focus()\n textArea.select()\n try {\n const result = document.execCommand('copy')\n // eslint-disable-next-line no-console\n console.log(result)\n } catch (error) {\n console.error(error)\n }\n document.body?.removeChild(textArea)\n}\n\nconst download = (filename: string, text: null | string) => {\n const a = document.createElement('a')\n a.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text || ''))\n a.setAttribute('download', filename)\n a.style.display = 'none'\n document.body?.appendChild(a)\n a.click()\n document.body?.removeChild(a)\n}\n\nconst formatStep = (step: Step) => {\n const formatOneStep = (name: string, value: Step['value']) => {\n switch (name) {\n case 'click': {\n return ` await page.mouse.click(${value.x}, ${value.y});`\n }\n case 'press': {\n return ` await page.keyboard.press('${value}');`\n }\n case 'keydown': {\n return ` await page.keyboard.keydown('${value}');`\n }\n case 'keyup': {\n return ` await page.keyboard.keyup('${value}');`\n }\n case 'type': {\n return ` await page.keyboard.type('${value}');`\n }\n case 'selectAll': {\n return ` await selectAll(page);`\n }\n case 'snapshot': {\n return ` await assertHTMLSnapshot(page);\n await assertSelection(page, {\n anchorPath: [${value.anchorPath.toString()}],\n anchorOffset: ${value.anchorOffset},\n focusPath: [${value.focusPath.toString()}],\n focusOffset: ${value.focusOffset},\n });\n`\n }\n default:\n return ``\n }\n }\n const formattedStep = formatOneStep(step.name, step.value)\n switch (step.count) {\n case 1:\n return formattedStep\n case 2:\n return [formattedStep, formattedStep].join(`\\n`)\n default:\n return ` await repeat(${step.count}, async () => {\n ${formattedStep}\n );`\n }\n}\n\nexport function isSelectAll(event: KeyboardEvent): boolean {\n return event.keyCode === 65 && (IS_APPLE ? event.metaKey : event.ctrlKey)\n}\n\n// stolen from LexicalSelection-test\nfunction sanitizeSelection(selection: Selection) {\n const { anchorNode, focusNode } = selection\n let { anchorOffset, focusOffset } = selection\n if (anchorOffset !== 0) {\n anchorOffset--\n }\n if (focusOffset !== 0) {\n focusOffset--\n }\n return { anchorNode, anchorOffset, focusNode, focusOffset }\n}\n\nfunction getPathFromNodeToEditor(node: Node, rootElement: HTMLElement | null) {\n let currentNode: Node | null | undefined = node\n const path = []\n while (currentNode !== rootElement) {\n if (currentNode !== null && currentNode !== undefined) {\n path.unshift(\n Array.from(currentNode?.parentNode?.childNodes ?? []).indexOf(currentNode as ChildNode),\n )\n }\n currentNode = currentNode?.parentNode\n }\n return path\n}\n\nconst keyPresses = new Set([\n 'Enter',\n 'Backspace',\n 'Delete',\n 'Escape',\n 'ArrowLeft',\n 'ArrowRight',\n 'ArrowUp',\n 'ArrowDown',\n])\n\ntype Step = {\n count: number\n name: string\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: any\n}\n\ntype Steps = Step[]\n\nfunction useTestRecorder(editor: LexicalEditor): [JSX.Element, JSX.Element | null] {\n const [steps, setSteps] = useState<Steps>([])\n const [isRecording, setIsRecording] = useState(false)\n const [, setCurrentInnerHTML] = useState('')\n const [templatedTest, setTemplatedTest] = useState('')\n const previousSelectionRef = useRef<BaseSelection | null>(null)\n const skipNextSelectionChangeRef = useRef(false)\n const preRef = useRef<HTMLPreElement>(null)\n\n const getCurrentEditor = useCallback(() => {\n return editor\n }, [editor])\n\n const generateTestContent = useCallback(() => {\n const rootElement = editor.getRootElement()\n const browserSelection = window.getSelection()\n\n if (\n rootElement == null ||\n browserSelection == null ||\n browserSelection.anchorNode == null ||\n browserSelection.focusNode == null ||\n !rootElement.contains(browserSelection.anchorNode) ||\n !rootElement.contains(browserSelection.focusNode)\n ) {\n return null\n }\n\n return `\nimport {\n initializeE2E,\n assertHTMLSnapshot,\n assertSelection,\n repeat,\n} from '../utils';\nimport {selectAll} from '../keyboardShortcuts';\nimport { RangeSelection } from 'lexical';\nimport { NodeSelection } from 'lexical';\n\ndescribe('Test case', () => {\n initializeE2E((e2e) => {\n it('Should pass this test', async () => {\n const {page} = e2e;\n\n await page.focus('div[contenteditable=\"true\"]');\n${steps.map(formatStep).join(`\\n`)}\n });\n});\n `\n }, [editor, steps])\n\n // just a wrapper around inserting new actions so that we can\n // coalesce some actions like insertText/moveNativeSelection\n const pushStep = useCallback(\n (name: string, value: Step['value']) => {\n setSteps((currentSteps) => {\n // trying to group steps\n const currentIndex = steps.length - 1\n const lastStep = steps[currentIndex]\n if (lastStep) {\n if (lastStep.name === name) {\n if (name === 'type') {\n // for typing events we just append the text\n return [\n ...steps.slice(0, currentIndex),\n { ...lastStep, value: lastStep.value + value },\n ]\n } else {\n // for other events we bump the counter if their values are the same\n if (lastStep.value === value) {\n return [...steps.slice(0, currentIndex), { ...lastStep, count: lastStep.count + 1 }]\n }\n }\n }\n }\n // could not group, just append a new one\n return [...currentSteps, { name, count: 1, value }]\n })\n },\n [steps, setSteps],\n )\n\n useLayoutEffect(() => {\n const onKeyDown = (event: KeyboardEvent) => {\n if (!isRecording) {\n return\n }\n const key = event.key\n if (isSelectAll(event)) {\n pushStep('selectAll', '')\n } else if (keyPresses.has(key)) {\n pushStep('press', event.key)\n } else if ([...key].length > 1) {\n pushStep('keydown', event.key)\n } else {\n pushStep('type', event.key)\n }\n }\n\n const onKeyUp = (event: KeyboardEvent) => {\n if (!isRecording) {\n return\n }\n const key = event.key\n if (!keyPresses.has(key) && [...key].length > 1) {\n pushStep('keyup', event.key)\n }\n }\n\n return editor.registerRootListener(\n (rootElement: HTMLElement | null, prevRootElement: HTMLElement | null) => {\n if (prevRootElement !== null) {\n prevRootElement.removeEventListener('keydown', onKeyDown)\n prevRootElement.removeEventListener('keyup', onKeyUp)\n }\n if (rootElement !== null) {\n rootElement.addEventListener('keydown', onKeyDown)\n rootElement.addEventListener('keyup', onKeyUp)\n }\n },\n )\n }, [editor, isRecording, pushStep])\n\n useLayoutEffect(() => {\n if (preRef.current) {\n preRef.current.scrollTo(0, preRef.current.scrollHeight)\n }\n }, [generateTestContent])\n\n useEffect(() => {\n if (steps) {\n const testContent = generateTestContent()\n if (testContent !== null) {\n setTemplatedTest(testContent)\n }\n if (preRef.current) {\n preRef.current.scrollTo(0, preRef.current.scrollHeight)\n }\n }\n }, [generateTestContent, steps])\n\n useEffect(() => {\n const removeUpdateListener = editor.registerUpdateListener(\n ({ dirtyElements, dirtyLeaves, editorState }) => {\n if (!isRecording) {\n return\n }\n const currentSelection = editorState._selection\n const previousSelection = previousSelectionRef.current\n const skipNextSelectionChange = skipNextSelectionChangeRef.current\n if (previousSelection !== currentSelection) {\n if (dirtyLeaves.size === 0 && dirtyElements.size === 0 && !skipNextSelectionChange) {\n const browserSelection = window.getSelection()\n if (\n browserSelection &&\n (browserSelection.anchorNode == null || browserSelection.focusNode == null)\n ) {\n return\n }\n }\n previousSelectionRef.current = currentSelection\n }\n skipNextSelectionChangeRef.current = false\n const testContent = generateTestContent()\n if (testContent !== null) {\n setTemplatedTest(testContent)\n }\n },\n )\n return removeUpdateListener\n }, [editor, generateTestContent, isRecording, pushStep])\n\n // save innerHTML\n useEffect(() => {\n if (!isRecording) {\n return\n }\n const removeUpdateListener = editor.registerUpdateListener(() => {\n const rootElement = editor.getRootElement()\n if (rootElement !== null) {\n setCurrentInnerHTML(rootElement?.innerHTML)\n }\n })\n return removeUpdateListener\n }, [editor, isRecording])\n\n // clear editor and start recording\n const toggleEditorSelection = useCallback(\n (currentEditor: LexicalEditor) => {\n if (!isRecording) {\n currentEditor.update(() => {\n const root = $getRoot()\n root.clear()\n const text = $createTextNode()\n root.append($createParagraphNode().append(text))\n text.select()\n })\n setSteps([])\n }\n setIsRecording((currentIsRecording) => !currentIsRecording)\n },\n [isRecording],\n )\n\n const onSnapshotClick = useCallback(() => {\n if (!isRecording) {\n return\n }\n const browserSelection = window.getSelection()\n if (\n browserSelection === null ||\n browserSelection.anchorNode == null ||\n browserSelection.focusNode == null\n ) {\n return\n }\n const { anchorNode, anchorOffset, focusNode, focusOffset } = sanitizeSelection(browserSelection)\n const rootElement = getCurrentEditor().getRootElement()\n let anchorPath\n if (anchorNode !== null) {\n anchorPath = getPathFromNodeToEditor(anchorNode, rootElement)\n }\n let focusPath\n if (focusNode !== null) {\n focusPath = getPathFromNodeToEditor(focusNode, rootElement)\n }\n pushStep('snapshot', {\n anchorNode,\n anchorOffset,\n anchorPath,\n focusNode,\n focusOffset,\n focusPath,\n })\n }, [pushStep, isRecording, getCurrentEditor])\n\n const onCopyClick = useCallback(() => {\n copy(generateTestContent())\n }, [generateTestContent])\n\n const onDownloadClick = useCallback(() => {\n download('test.js', generateTestContent())\n }, [generateTestContent])\n\n const button = (\n <button\n className={`editor-dev-button ${isRecording ? 'active' : ''}`}\n id=\"test-recorder-button\"\n onClick={(e) => {\n toggleEditorSelection(getCurrentEditor())\n e.preventDefault()\n }}\n title={isRecording ? 'Disable test recorder' : 'Enable test recorder'}\n type=\"button\"\n >\n {isRecording ? 'Disable test recorder' : 'Enable test recorder'}\n </button>\n )\n const output = isRecording ? (\n <div className=\"test-recorder-output\">\n <div className=\"test-recorder-toolbar\">\n <button\n className=\"test-recorder-button\"\n id=\"test-recorder-button-snapshot\"\n onClick={(e) => {\n onSnapshotClick()\n e.preventDefault()\n }}\n title=\"Insert snapshot\"\n type=\"button\"\n >\n Insert Snapshot\n </button>\n <button\n className=\"test-recorder-button\"\n id=\"test-recorder-button-copy\"\n onClick={(e) => {\n onCopyClick()\n e.preventDefault()\n }}\n title=\"Copy to clipboard\"\n type=\"button\"\n >\n Copy\n </button>\n <button\n className=\"test-recorder-button\"\n id=\"test-recorder-button-download\"\n onClick={(e) => {\n onDownloadClick()\n e.preventDefault()\n }}\n title=\"Download as a file\"\n type=\"button\"\n >\n Download\n </button>\n </div>\n <pre id=\"test-recorder\" ref={preRef}>\n {templatedTest}\n </pre>\n </div>\n ) : null\n\n return [button, output]\n}\nexport const TestRecorderPlugin: React.FC = () => {\n const [editor] = useLexicalComposerContext()\n const [testRecorderButton, testRecorderOutput] = useTestRecorder(editor)\n\n return (\n <React.Fragment>\n <p>HI</p>\n {testRecorderButton}\n {testRecorderOutput}\n <p>DONE</p>\n </React.Fragment>\n )\n}\n"],"names":["useLexicalComposerContext","$createParagraphNode","$createTextNode","$getRoot","React","useCallback","useEffect","useLayoutEffect","useRef","useState","IS_APPLE","copy","text","textArea","document","createElement","value","style","position","opacity","body","appendChild","focus","select","result","execCommand","console","log","error","removeChild","download","filename","a","setAttribute","encodeURIComponent","display","click","formatStep","step","formatOneStep","name","x","y","anchorPath","toString","anchorOffset","focusPath","focusOffset","formattedStep","count","join","isSelectAll","event","keyCode","metaKey","ctrlKey","sanitizeSelection","selection","anchorNode","focusNode","getPathFromNodeToEditor","node","rootElement","currentNode","path","undefined","unshift","Array","from","parentNode","childNodes","indexOf","keyPresses","Set","useTestRecorder","editor","steps","setSteps","isRecording","setIsRecording","setCurrentInnerHTML","templatedTest","setTemplatedTest","previousSelectionRef","skipNextSelectionChangeRef","preRef","getCurrentEditor","generateTestContent","getRootElement","browserSelection","window","getSelection","contains","map","pushStep","currentSteps","currentIndex","length","lastStep","slice","onKeyDown","key","has","onKeyUp","registerRootListener","prevRootElement","removeEventListener","addEventListener","current","scrollTo","scrollHeight","testContent","removeUpdateListener","registerUpdateListener","dirtyElements","dirtyLeaves","editorState","currentSelection","_selection","previousSelection","skipNextSelectionChange","size","innerHTML","toggleEditorSelection","currentEditor","update","root","clear","append","currentIsRecording","onSnapshotClick","onCopyClick","onDownloadClick","button","className","id","onClick","e","preventDefault","title","type","output","div","pre","ref","TestRecorderPlugin","testRecorderButton","testRecorderOutput","Fragment","p"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA;AAGA,SAASA,yBAAyB,QAAQ,2CAA0C;AACpF,SAASC,oBAAoB,EAAEC,eAAe,EAAEC,QAAQ,QAAQ,UAAS;AACzE,YAAYC,WAAW,QAAO;AAC9B,SAASC,WAAW,EAAEC,SAAS,EAAEC,eAAe,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,QAAO;AAEjF,SAASC,QAAQ,QAAQ,2CAA0C;AACnE,OAAO,eAAc;AAErB,MAAMC,OAAO,CAACC;IACZ,MAAMC,WAAWC,SAASC,aAAa,CAAC;IACxCF,SAASG,KAAK,GAAGJ,QAAQ;IACzBC,SAASI,KAAK,CAACC,QAAQ,GAAG;IAC1BL,SAASI,KAAK,CAACE,OAAO,GAAG;IACzBL,SAASM,IAAI,EAAEC,YAAYR;IAC3BA,SAASS,KAAK;IACdT,SAASU,MAAM;IACf,IAAI;QACF,MAAMC,SAASV,SAASW,WAAW,CAAC;QACpC,sCAAsC;QACtCC,QAAQC,GAAG,CAACH;IACd,EAAE,OAAOI,OAAO;QACdF,QAAQE,KAAK,CAACA;IAChB;IACAd,SAASM,IAAI,EAAES,YAAYhB;AAC7B;AAEA,MAAMiB,WAAW,CAACC,UAAkBnB;IAClC,MAAMoB,IAAIlB,SAASC,aAAa,CAAC;IACjCiB,EAAEC,YAAY,CAAC,QAAQ,mCAAmCC,mBAAmBtB,QAAQ;IACrFoB,EAAEC,YAAY,CAAC,YAAYF;IAC3BC,EAAEf,KAAK,CAACkB,OAAO,GAAG;IAClBrB,SAASM,IAAI,EAAEC,YAAYW;IAC3BA,EAAEI,KAAK;IACPtB,SAASM,IAAI,EAAES,YAAYG;AAC7B;AAEA,MAAMK,aAAa,CAACC;IAClB,MAAMC,gBAAgB,CAACC,MAAcxB;QACnC,OAAQwB;YACN,KAAK;gBAAS;oBACZ,OAAO,CAAC,6BAA6B,EAAExB,MAAMyB,CAAC,CAAC,EAAE,EAAEzB,MAAM0B,CAAC,CAAC,EAAE,CAAC;gBAChE;YACA,KAAK;gBAAS;oBACZ,OAAO,CAAC,iCAAiC,EAAE1B,MAAM,GAAG,CAAC;gBACvD;YACA,KAAK;gBAAW;oBACd,OAAO,CAAC,mCAAmC,EAAEA,MAAM,GAAG,CAAC;gBACzD;YACA,KAAK;gBAAS;oBACZ,OAAO,CAAC,iCAAiC,EAAEA,MAAM,GAAG,CAAC;gBACvD;YACA,KAAK;gBAAQ;oBACX,OAAO,CAAC,gCAAgC,EAAEA,MAAM,GAAG,CAAC;gBACtD;YACA,KAAK;gBAAa;oBAChB,OAAO,CAAC,4BAA4B,CAAC;gBACvC;YACA,KAAK;gBAAY;oBACf,OAAO,CAAC;;qBAEK,EAAEA,MAAM2B,UAAU,CAACC,QAAQ,GAAG;sBAC7B,EAAE5B,MAAM6B,YAAY,CAAC;oBACvB,EAAE7B,MAAM8B,SAAS,CAACF,QAAQ,GAAG;qBAC5B,EAAE5B,MAAM+B,WAAW,CAAC;;AAEzC,CAAC;gBACK;YACA;gBACE,OAAO,CAAC,CAAC;QACb;IACF;IACA,MAAMC,gBAAgBT,cAAcD,KAAKE,IAAI,EAAEF,KAAKtB,KAAK;IACzD,OAAQsB,KAAKW,KAAK;QAChB,KAAK;YACH,OAAOD;QACT,KAAK;YACH,OAAO;gBAACA;gBAAeA;aAAc,CAACE,IAAI,CAAC,CAAC,EAAE,CAAC;QACjD;YACE,OAAO,CAAC,mBAAmB,EAAEZ,KAAKW,KAAK,CAAC;EAC5C,EAAED,cAAc;QACV,CAAC;IACP;AACF;AAEA,OAAO,SAASG,YAAYC,KAAoB;IAC9C,OAAOA,MAAMC,OAAO,KAAK,MAAO3C,CAAAA,WAAW0C,MAAME,OAAO,GAAGF,MAAMG,OAAO,AAAD;AACzE;AAEA,oCAAoC;AACpC,SAASC,kBAAkBC,SAAoB;IAC7C,MAAM,EAAEC,UAAU,EAAEC,SAAS,EAAE,GAAGF;IAClC,IAAI,EAAEZ,YAAY,EAAEE,WAAW,EAAE,GAAGU;IACpC,IAAIZ,iBAAiB,GAAG;QACtBA;IACF;IACA,IAAIE,gBAAgB,GAAG;QACrBA;IACF;IACA,OAAO;QAAEW;QAAYb;QAAcc;QAAWZ;IAAY;AAC5D;AAEA,SAASa,wBAAwBC,IAAU,EAAEC,WAA+B;IAC1E,IAAIC,cAAuCF;IAC3C,MAAMG,OAAO,EAAE;IACf,MAAOD,gBAAgBD,YAAa;QAClC,IAAIC,gBAAgB,QAAQA,gBAAgBE,WAAW;YACrDD,KAAKE,OAAO,CACVC,MAAMC,IAAI,CAACL,aAAaM,YAAYC,cAAc,EAAE,EAAEC,OAAO,CAACR;QAElE;QACAA,cAAcA,aAAaM;IAC7B;IACA,OAAOL;AACT;AAEA,MAAMQ,aAAa,IAAIC,IAAI;IACzB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;CACD;AAWD,SAASC,gBAAgBC,MAAqB;IAC5C,MAAM,CAACC,OAAOC,SAAS,GAAGpE,SAAgB,EAAE;IAC5C,MAAM,CAACqE,aAAaC,eAAe,GAAGtE,SAAS;IAC/C,MAAM,GAAGuE,oBAAoB,GAAGvE,SAAS;IACzC,MAAM,CAACwE,eAAeC,iBAAiB,GAAGzE,SAAS;IACnD,MAAM0E,uBAAuB3E,OAA6B;IAC1D,MAAM4E,6BAA6B5E,OAAO;IAC1C,MAAM6E,SAAS7E,OAAuB;IAEtC,MAAM8E,mBAAmBjF,YAAY;QACnC,OAAOsE;IACT,GAAG;QAACA;KAAO;IAEX,MAAMY,sBAAsBlF,YAAY;QACtC,MAAMyD,cAAca,OAAOa,cAAc;QACzC,MAAMC,mBAAmBC,OAAOC,YAAY;QAE5C,IACE7B,eAAe,QACf2B,oBAAoB,QACpBA,iBAAiB/B,UAAU,IAAI,QAC/B+B,iBAAiB9B,SAAS,IAAI,QAC9B,CAACG,YAAY8B,QAAQ,CAACH,iBAAiB/B,UAAU,KACjD,CAACI,YAAY8B,QAAQ,CAACH,iBAAiB9B,SAAS,GAChD;YACA,OAAO;QACT;QAEA,OAAO,CAAC;;;;;;;;;;;;;;;;;AAiBZ,EAAEiB,MAAMiB,GAAG,CAACxD,YAAYa,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE;;;IAG/B,CAAC;IACH,GAAG;QAACyB;QAAQC;KAAM;IAElB,6DAA6D;IAC7D,4DAA4D;IAC5D,MAAMkB,WAAWzF,YACf,CAACmC,MAAcxB;QACb6D,SAAS,CAACkB;YACR,wBAAwB;YACxB,MAAMC,eAAepB,MAAMqB,MAAM,GAAG;YACpC,MAAMC,WAAWtB,KAAK,CAACoB,aAAa;YACpC,IAAIE,UAAU;gBACZ,IAAIA,SAAS1D,IAAI,KAAKA,MAAM;oBAC1B,IAAIA,SAAS,QAAQ;wBACnB,4CAA4C;wBAC5C,OAAO;+BACFoC,MAAMuB,KAAK,CAAC,GAAGH;4BAClB;gCAAE,GAAGE,QAAQ;gCAAElF,OAAOkF,SAASlF,KAAK,GAAGA;4BAAM;yBAC9C;oBACH,OAAO;wBACL,oEAAoE;wBACpE,IAAIkF,SAASlF,KAAK,KAAKA,OAAO;4BAC5B,OAAO;mCAAI4D,MAAMuB,KAAK,CAAC,GAAGH;gCAAe;oCAAE,GAAGE,QAAQ;oCAAEjD,OAAOiD,SAASjD,KAAK,GAAG;gCAAE;6BAAE;wBACtF;oBACF;gBACF;YACF;YACA,yCAAyC;YACzC,OAAO;mBAAI8C;gBAAc;oBAAEvD;oBAAMS,OAAO;oBAAGjC;gBAAM;aAAE;QACrD;IACF,GACA;QAAC4D;QAAOC;KAAS;IAGnBtE,gBAAgB;QACd,MAAM6F,YAAY,CAAChD;YACjB,IAAI,CAAC0B,aAAa;gBAChB;YACF;YACA,MAAMuB,MAAMjD,MAAMiD,GAAG;YACrB,IAAIlD,YAAYC,QAAQ;gBACtB0C,SAAS,aAAa;YACxB,OAAO,IAAItB,WAAW8B,GAAG,CAACD,MAAM;gBAC9BP,SAAS,SAAS1C,MAAMiD,GAAG;YAC7B,OAAO,IAAI;mBAAIA;aAAI,CAACJ,MAAM,GAAG,GAAG;gBAC9BH,SAAS,WAAW1C,MAAMiD,GAAG;YAC/B,OAAO;gBACLP,SAAS,QAAQ1C,MAAMiD,GAAG;YAC5B;QACF;QAEA,MAAME,UAAU,CAACnD;YACf,IAAI,CAAC0B,aAAa;gBAChB;YACF;YACA,MAAMuB,MAAMjD,MAAMiD,GAAG;YACrB,IAAI,CAAC7B,WAAW8B,GAAG,CAACD,QAAQ;mBAAIA;aAAI,CAACJ,MAAM,GAAG,GAAG;gBAC/CH,SAAS,SAAS1C,MAAMiD,GAAG;YAC7B;QACF;QAEA,OAAO1B,OAAO6B,oBAAoB,CAChC,CAAC1C,aAAiC2C;YAChC,IAAIA,oBAAoB,MAAM;gBAC5BA,gBAAgBC,mBAAmB,CAAC,WAAWN;gBAC/CK,gBAAgBC,mBAAmB,CAAC,SAASH;YAC/C;YACA,IAAIzC,gBAAgB,MAAM;gBACxBA,YAAY6C,gBAAgB,CAAC,WAAWP;gBACxCtC,YAAY6C,gBAAgB,CAAC,SAASJ;YACxC;QACF;IAEJ,GAAG;QAAC5B;QAAQG;QAAagB;KAAS;IAElCvF,gBAAgB;QACd,IAAI8E,OAAOuB,OAAO,EAAE;YAClBvB,OAAOuB,OAAO,CAACC,QAAQ,CAAC,GAAGxB,OAAOuB,OAAO,CAACE,YAAY;QACxD;IACF,GAAG;QAACvB;KAAoB;IAExBjF,UAAU;QACR,IAAIsE,OAAO;YACT,MAAMmC,cAAcxB;YACpB,IAAIwB,gBAAgB,MAAM;gBACxB7B,iBAAiB6B;YACnB;YACA,IAAI1B,OAAOuB,OAAO,EAAE;gBAClBvB,OAAOuB,OAAO,CAACC,QAAQ,CAAC,GAAGxB,OAAOuB,OAAO,CAACE,YAAY;YACxD;QACF;IACF,GAAG;QAACvB;QAAqBX;KAAM;IAE/BtE,UAAU;QACR,MAAM0G,uBAAuBrC,OAAOsC,sBAAsB,CACxD,CAAC,EAAEC,aAAa,EAAEC,WAAW,EAAEC,WAAW,EAAE;YAC1C,IAAI,CAACtC,aAAa;gBAChB;YACF;YACA,MAAMuC,mBAAmBD,YAAYE,UAAU;YAC/C,MAAMC,oBAAoBpC,qBAAqByB,OAAO;YACtD,MAAMY,0BAA0BpC,2BAA2BwB,OAAO;YAClE,IAAIW,sBAAsBF,kBAAkB;gBAC1C,IAAIF,YAAYM,IAAI,KAAK,KAAKP,cAAcO,IAAI,KAAK,KAAK,CAACD,yBAAyB;oBAClF,MAAM/B,mBAAmBC,OAAOC,YAAY;oBAC5C,IACEF,oBACCA,CAAAA,iBAAiB/B,UAAU,IAAI,QAAQ+B,iBAAiB9B,SAAS,IAAI,IAAG,GACzE;wBACA;oBACF;gBACF;gBACAwB,qBAAqByB,OAAO,GAAGS;YACjC;YACAjC,2BAA2BwB,OAAO,GAAG;YACrC,MAAMG,cAAcxB;YACpB,IAAIwB,gBAAgB,MAAM;gBACxB7B,iBAAiB6B;YACnB;QACF;QAEF,OAAOC;IACT,GAAG;QAACrC;QAAQY;QAAqBT;QAAagB;KAAS;IAEvD,iBAAiB;IACjBxF,UAAU;QACR,IAAI,CAACwE,aAAa;YAChB;QACF;QACA,MAAMkC,uBAAuBrC,OAAOsC,sBAAsB,CAAC;YACzD,MAAMnD,cAAca,OAAOa,cAAc;YACzC,IAAI1B,gBAAgB,MAAM;gBACxBkB,oBAAoBlB,aAAa4D;YACnC;QACF;QACA,OAAOV;IACT,GAAG;QAACrC;QAAQG;KAAY;IAExB,mCAAmC;IACnC,MAAM6C,wBAAwBtH,YAC5B,CAACuH;QACC,IAAI,CAAC9C,aAAa;YAChB8C,cAAcC,MAAM,CAAC;gBACnB,MAAMC,OAAO3H;gBACb2H,KAAKC,KAAK;gBACV,MAAMnH,OAAOV;gBACb4H,KAAKE,MAAM,CAAC/H,uBAAuB+H,MAAM,CAACpH;gBAC1CA,KAAKW,MAAM;YACb;YACAsD,SAAS,EAAE;QACb;QACAE,eAAe,CAACkD,qBAAuB,CAACA;IAC1C,GACA;QAACnD;KAAY;IAGf,MAAMoD,kBAAkB7H,YAAY;QAClC,IAAI,CAACyE,aAAa;YAChB;QACF;QACA,MAAMW,mBAAmBC,OAAOC,YAAY;QAC5C,IACEF,qBAAqB,QACrBA,iBAAiB/B,UAAU,IAAI,QAC/B+B,iBAAiB9B,SAAS,IAAI,MAC9B;YACA;QACF;QACA,MAAM,EAAED,UAAU,EAAEb,YAAY,EAAEc,SAAS,EAAEZ,WAAW,EAAE,GAAGS,kBAAkBiC;QAC/E,MAAM3B,cAAcwB,mBAAmBE,cAAc;QACrD,IAAI7C;QACJ,IAAIe,eAAe,MAAM;YACvBf,aAAaiB,wBAAwBF,YAAYI;QACnD;QACA,IAAIhB;QACJ,IAAIa,cAAc,MAAM;YACtBb,YAAYc,wBAAwBD,WAAWG;QACjD;QACAgC,SAAS,YAAY;YACnBpC;YACAb;YACAF;YACAgB;YACAZ;YACAD;QACF;IACF,GAAG;QAACgD;QAAUhB;QAAaQ;KAAiB;IAE5C,MAAM6C,cAAc9H,YAAY;QAC9BM,KAAK4E;IACP,GAAG;QAACA;KAAoB;IAExB,MAAM6C,kBAAkB/H,YAAY;QAClCyB,SAAS,WAAWyD;IACtB,GAAG;QAACA;KAAoB;IAExB,MAAM8C,uBACJ,oBAACA;QACCC,WAAW,CAAC,kBAAkB,EAAExD,cAAc,WAAW,GAAG,CAAC;QAC7DyD,IAAG;QACHC,SAAS,CAACC;YACRd,sBAAsBrC;YACtBmD,EAAEC,cAAc;QAClB;QACAC,OAAO7D,cAAc,0BAA0B;QAC/C8D,MAAK;OAEJ9D,cAAc,0BAA0B;IAG7C,MAAM+D,SAAS/D,4BACb,oBAACgE;QAAIR,WAAU;qBACb,oBAACQ;QAAIR,WAAU;qBACb,oBAACD;QACCC,WAAU;QACVC,IAAG;QACHC,SAAS,CAACC;YACRP;YACAO,EAAEC,cAAc;QAClB;QACAC,OAAM;QACNC,MAAK;OACN,kCAGD,oBAACP;QACCC,WAAU;QACVC,IAAG;QACHC,SAAS,CAACC;YACRN;YACAM,EAAEC,cAAc;QAClB;QACAC,OAAM;QACNC,MAAK;OACN,uBAGD,oBAACP;QACCC,WAAU;QACVC,IAAG;QACHC,SAAS,CAACC;YACRL;YACAK,EAAEC,cAAc;QAClB;QACAC,OAAM;QACNC,MAAK;OACN,4BAIH,oBAACG;QAAIR,IAAG;QAAgBS,KAAK3D;OAC1BJ,kBAGH;IAEJ,OAAO;QAACoD;QAAQQ;KAAO;AACzB;AACA,OAAO,MAAMI,qBAA+B;IAC1C,MAAM,CAACtE,OAAO,GAAG3E;IACjB,MAAM,CAACkJ,oBAAoBC,mBAAmB,GAAGzE,gBAAgBC;IAEjE,qBACE,oBAACvE,MAAMgJ,QAAQ,sBACb,oBAACC,WAAE,OACFH,oBACAC,kCACD,oBAACE,WAAE;AAGT,EAAC"}
1
+ {"version":3,"sources":["../../../../../../src/field/features/debug/testRecorder/plugin/index.tsx"],"sourcesContent":["'use client'\nimport type { BaseSelection, LexicalEditor } from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { $createParagraphNode, $createTextNode, $getRoot } from 'lexical'\nimport * as React from 'react'\nimport { useCallback, useEffect, useLayoutEffect, useRef, useState } from 'react'\n\nimport type { PluginComponent } from '../../../types.js'\n\nimport { IS_APPLE } from '../../../../lexical/utils/environment.js'\nimport './index.scss'\n\nconst copy = (text: null | string) => {\n const textArea = document.createElement('textarea')\n textArea.value = text || ''\n textArea.style.position = 'absolute'\n textArea.style.opacity = '0'\n document.body?.appendChild(textArea)\n textArea.focus()\n textArea.select()\n try {\n const result = document.execCommand('copy')\n // eslint-disable-next-line no-console\n console.log(result)\n } catch (error) {\n console.error(error)\n }\n document.body?.removeChild(textArea)\n}\n\nconst download = (filename: string, text: null | string) => {\n const a = document.createElement('a')\n a.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text || ''))\n a.setAttribute('download', filename)\n a.style.display = 'none'\n document.body?.appendChild(a)\n a.click()\n document.body?.removeChild(a)\n}\n\nconst formatStep = (step: Step) => {\n const formatOneStep = (name: string, value: Step['value']) => {\n switch (name) {\n case 'click': {\n return ` await page.mouse.click(${value.x}, ${value.y});`\n }\n case 'press': {\n return ` await page.keyboard.press('${value}');`\n }\n case 'keydown': {\n return ` await page.keyboard.keydown('${value}');`\n }\n case 'keyup': {\n return ` await page.keyboard.keyup('${value}');`\n }\n case 'type': {\n return ` await page.keyboard.type('${value}');`\n }\n case 'selectAll': {\n return ` await selectAll(page);`\n }\n case 'snapshot': {\n return ` await assertHTMLSnapshot(page);\n await assertSelection(page, {\n anchorPath: [${value.anchorPath.toString()}],\n anchorOffset: ${value.anchorOffset},\n focusPath: [${value.focusPath.toString()}],\n focusOffset: ${value.focusOffset},\n });\n`\n }\n default:\n return ``\n }\n }\n const formattedStep = formatOneStep(step.name, step.value)\n switch (step.count) {\n case 1:\n return formattedStep\n case 2:\n return [formattedStep, formattedStep].join(`\\n`)\n default:\n return ` await repeat(${step.count}, async () => {\n ${formattedStep}\n );`\n }\n}\n\nexport function isSelectAll(event: KeyboardEvent): boolean {\n return event.keyCode === 65 && (IS_APPLE ? event.metaKey : event.ctrlKey)\n}\n\n// stolen from LexicalSelection-test\nfunction sanitizeSelection(selection: Selection) {\n const { anchorNode, focusNode } = selection\n let { anchorOffset, focusOffset } = selection\n if (anchorOffset !== 0) {\n anchorOffset--\n }\n if (focusOffset !== 0) {\n focusOffset--\n }\n return { anchorNode, anchorOffset, focusNode, focusOffset }\n}\n\nfunction getPathFromNodeToEditor(node: Node, rootElement: HTMLElement | null) {\n let currentNode: Node | null | undefined = node\n const path = []\n while (currentNode !== rootElement) {\n if (currentNode !== null && currentNode !== undefined) {\n path.unshift(\n Array.from(currentNode?.parentNode?.childNodes ?? []).indexOf(currentNode as ChildNode),\n )\n }\n currentNode = currentNode?.parentNode\n }\n return path\n}\n\nconst keyPresses = new Set([\n 'Enter',\n 'Backspace',\n 'Delete',\n 'Escape',\n 'ArrowLeft',\n 'ArrowRight',\n 'ArrowUp',\n 'ArrowDown',\n])\n\ntype Step = {\n count: number\n name: string\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: any\n}\n\ntype Steps = Step[]\n\nfunction useTestRecorder(editor: LexicalEditor): [JSX.Element, JSX.Element | null] {\n const [steps, setSteps] = useState<Steps>([])\n const [isRecording, setIsRecording] = useState(false)\n const [, setCurrentInnerHTML] = useState('')\n const [templatedTest, setTemplatedTest] = useState('')\n const previousSelectionRef = useRef<BaseSelection | null>(null)\n const skipNextSelectionChangeRef = useRef(false)\n const preRef = useRef<HTMLPreElement>(null)\n\n const getCurrentEditor = useCallback(() => {\n return editor\n }, [editor])\n\n const generateTestContent = useCallback(() => {\n const rootElement = editor.getRootElement()\n const browserSelection = window.getSelection()\n\n if (\n rootElement == null ||\n browserSelection == null ||\n browserSelection.anchorNode == null ||\n browserSelection.focusNode == null ||\n !rootElement.contains(browserSelection.anchorNode) ||\n !rootElement.contains(browserSelection.focusNode)\n ) {\n return null\n }\n\n return `\nimport {\n initializeE2E,\n assertHTMLSnapshot,\n assertSelection,\n repeat,\n} from '../utils';\nimport {selectAll} from '../keyboardShortcuts';\nimport { RangeSelection } from 'lexical';\nimport { NodeSelection } from 'lexical';\n\ndescribe('Test case', () => {\n initializeE2E((e2e) => {\n it('Should pass this test', async () => {\n const {page} = e2e;\n\n await page.focus('div[contenteditable=\"true\"]');\n${steps.map(formatStep).join(`\\n`)}\n });\n});\n `\n }, [editor, steps])\n\n // just a wrapper around inserting new actions so that we can\n // coalesce some actions like insertText/moveNativeSelection\n const pushStep = useCallback(\n (name: string, value: Step['value']) => {\n setSteps((currentSteps) => {\n // trying to group steps\n const currentIndex = steps.length - 1\n const lastStep = steps[currentIndex]\n if (lastStep) {\n if (lastStep.name === name) {\n if (name === 'type') {\n // for typing events we just append the text\n return [\n ...steps.slice(0, currentIndex),\n { ...lastStep, value: lastStep.value + value },\n ]\n } else {\n // for other events we bump the counter if their values are the same\n if (lastStep.value === value) {\n return [...steps.slice(0, currentIndex), { ...lastStep, count: lastStep.count + 1 }]\n }\n }\n }\n }\n // could not group, just append a new one\n return [...currentSteps, { name, count: 1, value }]\n })\n },\n [steps, setSteps],\n )\n\n useLayoutEffect(() => {\n const onKeyDown = (event: KeyboardEvent) => {\n if (!isRecording) {\n return\n }\n const key = event.key\n if (isSelectAll(event)) {\n pushStep('selectAll', '')\n } else if (keyPresses.has(key)) {\n pushStep('press', event.key)\n } else if ([...key].length > 1) {\n pushStep('keydown', event.key)\n } else {\n pushStep('type', event.key)\n }\n }\n\n const onKeyUp = (event: KeyboardEvent) => {\n if (!isRecording) {\n return\n }\n const key = event.key\n if (!keyPresses.has(key) && [...key].length > 1) {\n pushStep('keyup', event.key)\n }\n }\n\n return editor.registerRootListener(\n (rootElement: HTMLElement | null, prevRootElement: HTMLElement | null) => {\n if (prevRootElement !== null) {\n prevRootElement.removeEventListener('keydown', onKeyDown)\n prevRootElement.removeEventListener('keyup', onKeyUp)\n }\n if (rootElement !== null) {\n rootElement.addEventListener('keydown', onKeyDown)\n rootElement.addEventListener('keyup', onKeyUp)\n }\n },\n )\n }, [editor, isRecording, pushStep])\n\n useLayoutEffect(() => {\n if (preRef.current) {\n preRef.current.scrollTo(0, preRef.current.scrollHeight)\n }\n }, [generateTestContent])\n\n useEffect(() => {\n if (steps) {\n const testContent = generateTestContent()\n if (testContent !== null) {\n setTemplatedTest(testContent)\n }\n if (preRef.current) {\n preRef.current.scrollTo(0, preRef.current.scrollHeight)\n }\n }\n }, [generateTestContent, steps])\n\n useEffect(() => {\n const removeUpdateListener = editor.registerUpdateListener(\n ({ dirtyElements, dirtyLeaves, editorState }) => {\n if (!isRecording) {\n return\n }\n const currentSelection = editorState._selection\n const previousSelection = previousSelectionRef.current\n const skipNextSelectionChange = skipNextSelectionChangeRef.current\n if (previousSelection !== currentSelection) {\n if (dirtyLeaves.size === 0 && dirtyElements.size === 0 && !skipNextSelectionChange) {\n const browserSelection = window.getSelection()\n if (\n browserSelection &&\n (browserSelection.anchorNode == null || browserSelection.focusNode == null)\n ) {\n return\n }\n }\n previousSelectionRef.current = currentSelection\n }\n skipNextSelectionChangeRef.current = false\n const testContent = generateTestContent()\n if (testContent !== null) {\n setTemplatedTest(testContent)\n }\n },\n )\n return removeUpdateListener\n }, [editor, generateTestContent, isRecording, pushStep])\n\n // save innerHTML\n useEffect(() => {\n if (!isRecording) {\n return\n }\n const removeUpdateListener = editor.registerUpdateListener(() => {\n const rootElement = editor.getRootElement()\n if (rootElement !== null) {\n setCurrentInnerHTML(rootElement?.innerHTML)\n }\n })\n return removeUpdateListener\n }, [editor, isRecording])\n\n // clear editor and start recording\n const toggleEditorSelection = useCallback(\n (currentEditor: LexicalEditor) => {\n if (!isRecording) {\n currentEditor.update(() => {\n const root = $getRoot()\n root.clear()\n const text = $createTextNode()\n root.append($createParagraphNode().append(text))\n text.select()\n })\n setSteps([])\n }\n setIsRecording((currentIsRecording) => !currentIsRecording)\n },\n [isRecording],\n )\n\n const onSnapshotClick = useCallback(() => {\n if (!isRecording) {\n return\n }\n const browserSelection = window.getSelection()\n if (\n browserSelection === null ||\n browserSelection.anchorNode == null ||\n browserSelection.focusNode == null\n ) {\n return\n }\n const { anchorNode, anchorOffset, focusNode, focusOffset } = sanitizeSelection(browserSelection)\n const rootElement = getCurrentEditor().getRootElement()\n let anchorPath\n if (anchorNode !== null) {\n anchorPath = getPathFromNodeToEditor(anchorNode, rootElement)\n }\n let focusPath\n if (focusNode !== null) {\n focusPath = getPathFromNodeToEditor(focusNode, rootElement)\n }\n pushStep('snapshot', {\n anchorNode,\n anchorOffset,\n anchorPath,\n focusNode,\n focusOffset,\n focusPath,\n })\n }, [pushStep, isRecording, getCurrentEditor])\n\n const onCopyClick = useCallback(() => {\n copy(generateTestContent())\n }, [generateTestContent])\n\n const onDownloadClick = useCallback(() => {\n download('test.js', generateTestContent())\n }, [generateTestContent])\n\n const button = (\n <button\n className={`editor-dev-button ${isRecording ? 'active' : ''}`}\n id=\"test-recorder-button\"\n onClick={(e) => {\n toggleEditorSelection(getCurrentEditor())\n e.preventDefault()\n }}\n title={isRecording ? 'Disable test recorder' : 'Enable test recorder'}\n type=\"button\"\n >\n {isRecording ? 'Disable test recorder' : 'Enable test recorder'}\n </button>\n )\n const output = isRecording ? (\n <div className=\"test-recorder-output\">\n <div className=\"test-recorder-toolbar\">\n <button\n className=\"test-recorder-button\"\n id=\"test-recorder-button-snapshot\"\n onClick={(e) => {\n onSnapshotClick()\n e.preventDefault()\n }}\n title=\"Insert snapshot\"\n type=\"button\"\n >\n Insert Snapshot\n </button>\n <button\n className=\"test-recorder-button\"\n id=\"test-recorder-button-copy\"\n onClick={(e) => {\n onCopyClick()\n e.preventDefault()\n }}\n title=\"Copy to clipboard\"\n type=\"button\"\n >\n Copy\n </button>\n <button\n className=\"test-recorder-button\"\n id=\"test-recorder-button-download\"\n onClick={(e) => {\n onDownloadClick()\n e.preventDefault()\n }}\n title=\"Download as a file\"\n type=\"button\"\n >\n Download\n </button>\n </div>\n <pre id=\"test-recorder\" ref={preRef}>\n {templatedTest}\n </pre>\n </div>\n ) : null\n\n return [button, output]\n}\nexport const TestRecorderPlugin: PluginComponent<undefined> = () => {\n const [editor] = useLexicalComposerContext()\n const [testRecorderButton, testRecorderOutput] = useTestRecorder(editor)\n\n return (\n <React.Fragment>\n <p>HI</p>\n {testRecorderButton}\n {testRecorderOutput}\n <p>DONE</p>\n </React.Fragment>\n )\n}\n"],"names":["useLexicalComposerContext","$createParagraphNode","$createTextNode","$getRoot","React","useCallback","useEffect","useLayoutEffect","useRef","useState","IS_APPLE","copy","text","textArea","document","createElement","value","style","position","opacity","body","appendChild","focus","select","result","execCommand","console","log","error","removeChild","download","filename","a","setAttribute","encodeURIComponent","display","click","formatStep","step","formatOneStep","name","x","y","anchorPath","toString","anchorOffset","focusPath","focusOffset","formattedStep","count","join","isSelectAll","event","keyCode","metaKey","ctrlKey","sanitizeSelection","selection","anchorNode","focusNode","getPathFromNodeToEditor","node","rootElement","currentNode","path","undefined","unshift","Array","from","parentNode","childNodes","indexOf","keyPresses","Set","useTestRecorder","editor","steps","setSteps","isRecording","setIsRecording","setCurrentInnerHTML","templatedTest","setTemplatedTest","previousSelectionRef","skipNextSelectionChangeRef","preRef","getCurrentEditor","generateTestContent","getRootElement","browserSelection","window","getSelection","contains","map","pushStep","currentSteps","currentIndex","length","lastStep","slice","onKeyDown","key","has","onKeyUp","registerRootListener","prevRootElement","removeEventListener","addEventListener","current","scrollTo","scrollHeight","testContent","removeUpdateListener","registerUpdateListener","dirtyElements","dirtyLeaves","editorState","currentSelection","_selection","previousSelection","skipNextSelectionChange","size","innerHTML","toggleEditorSelection","currentEditor","update","root","clear","append","currentIsRecording","onSnapshotClick","onCopyClick","onDownloadClick","button","className","id","onClick","e","preventDefault","title","type","output","div","pre","ref","TestRecorderPlugin","testRecorderButton","testRecorderOutput","Fragment","p"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA;AAGA,SAASA,yBAAyB,QAAQ,2CAA0C;AACpF,SAASC,oBAAoB,EAAEC,eAAe,EAAEC,QAAQ,QAAQ,UAAS;AACzE,YAAYC,WAAW,QAAO;AAC9B,SAASC,WAAW,EAAEC,SAAS,EAAEC,eAAe,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,QAAO;AAIjF,SAASC,QAAQ,QAAQ,2CAA0C;AACnE,OAAO,eAAc;AAErB,MAAMC,OAAO,CAACC;IACZ,MAAMC,WAAWC,SAASC,aAAa,CAAC;IACxCF,SAASG,KAAK,GAAGJ,QAAQ;IACzBC,SAASI,KAAK,CAACC,QAAQ,GAAG;IAC1BL,SAASI,KAAK,CAACE,OAAO,GAAG;IACzBL,SAASM,IAAI,EAAEC,YAAYR;IAC3BA,SAASS,KAAK;IACdT,SAASU,MAAM;IACf,IAAI;QACF,MAAMC,SAASV,SAASW,WAAW,CAAC;QACpC,sCAAsC;QACtCC,QAAQC,GAAG,CAACH;IACd,EAAE,OAAOI,OAAO;QACdF,QAAQE,KAAK,CAACA;IAChB;IACAd,SAASM,IAAI,EAAES,YAAYhB;AAC7B;AAEA,MAAMiB,WAAW,CAACC,UAAkBnB;IAClC,MAAMoB,IAAIlB,SAASC,aAAa,CAAC;IACjCiB,EAAEC,YAAY,CAAC,QAAQ,mCAAmCC,mBAAmBtB,QAAQ;IACrFoB,EAAEC,YAAY,CAAC,YAAYF;IAC3BC,EAAEf,KAAK,CAACkB,OAAO,GAAG;IAClBrB,SAASM,IAAI,EAAEC,YAAYW;IAC3BA,EAAEI,KAAK;IACPtB,SAASM,IAAI,EAAES,YAAYG;AAC7B;AAEA,MAAMK,aAAa,CAACC;IAClB,MAAMC,gBAAgB,CAACC,MAAcxB;QACnC,OAAQwB;YACN,KAAK;gBAAS;oBACZ,OAAO,CAAC,6BAA6B,EAAExB,MAAMyB,CAAC,CAAC,EAAE,EAAEzB,MAAM0B,CAAC,CAAC,EAAE,CAAC;gBAChE;YACA,KAAK;gBAAS;oBACZ,OAAO,CAAC,iCAAiC,EAAE1B,MAAM,GAAG,CAAC;gBACvD;YACA,KAAK;gBAAW;oBACd,OAAO,CAAC,mCAAmC,EAAEA,MAAM,GAAG,CAAC;gBACzD;YACA,KAAK;gBAAS;oBACZ,OAAO,CAAC,iCAAiC,EAAEA,MAAM,GAAG,CAAC;gBACvD;YACA,KAAK;gBAAQ;oBACX,OAAO,CAAC,gCAAgC,EAAEA,MAAM,GAAG,CAAC;gBACtD;YACA,KAAK;gBAAa;oBAChB,OAAO,CAAC,4BAA4B,CAAC;gBACvC;YACA,KAAK;gBAAY;oBACf,OAAO,CAAC;;qBAEK,EAAEA,MAAM2B,UAAU,CAACC,QAAQ,GAAG;sBAC7B,EAAE5B,MAAM6B,YAAY,CAAC;oBACvB,EAAE7B,MAAM8B,SAAS,CAACF,QAAQ,GAAG;qBAC5B,EAAE5B,MAAM+B,WAAW,CAAC;;AAEzC,CAAC;gBACK;YACA;gBACE,OAAO,CAAC,CAAC;QACb;IACF;IACA,MAAMC,gBAAgBT,cAAcD,KAAKE,IAAI,EAAEF,KAAKtB,KAAK;IACzD,OAAQsB,KAAKW,KAAK;QAChB,KAAK;YACH,OAAOD;QACT,KAAK;YACH,OAAO;gBAACA;gBAAeA;aAAc,CAACE,IAAI,CAAC,CAAC,EAAE,CAAC;QACjD;YACE,OAAO,CAAC,mBAAmB,EAAEZ,KAAKW,KAAK,CAAC;EAC5C,EAAED,cAAc;QACV,CAAC;IACP;AACF;AAEA,OAAO,SAASG,YAAYC,KAAoB;IAC9C,OAAOA,MAAMC,OAAO,KAAK,MAAO3C,CAAAA,WAAW0C,MAAME,OAAO,GAAGF,MAAMG,OAAO,AAAD;AACzE;AAEA,oCAAoC;AACpC,SAASC,kBAAkBC,SAAoB;IAC7C,MAAM,EAAEC,UAAU,EAAEC,SAAS,EAAE,GAAGF;IAClC,IAAI,EAAEZ,YAAY,EAAEE,WAAW,EAAE,GAAGU;IACpC,IAAIZ,iBAAiB,GAAG;QACtBA;IACF;IACA,IAAIE,gBAAgB,GAAG;QACrBA;IACF;IACA,OAAO;QAAEW;QAAYb;QAAcc;QAAWZ;IAAY;AAC5D;AAEA,SAASa,wBAAwBC,IAAU,EAAEC,WAA+B;IAC1E,IAAIC,cAAuCF;IAC3C,MAAMG,OAAO,EAAE;IACf,MAAOD,gBAAgBD,YAAa;QAClC,IAAIC,gBAAgB,QAAQA,gBAAgBE,WAAW;YACrDD,KAAKE,OAAO,CACVC,MAAMC,IAAI,CAACL,aAAaM,YAAYC,cAAc,EAAE,EAAEC,OAAO,CAACR;QAElE;QACAA,cAAcA,aAAaM;IAC7B;IACA,OAAOL;AACT;AAEA,MAAMQ,aAAa,IAAIC,IAAI;IACzB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;CACD;AAWD,SAASC,gBAAgBC,MAAqB;IAC5C,MAAM,CAACC,OAAOC,SAAS,GAAGpE,SAAgB,EAAE;IAC5C,MAAM,CAACqE,aAAaC,eAAe,GAAGtE,SAAS;IAC/C,MAAM,GAAGuE,oBAAoB,GAAGvE,SAAS;IACzC,MAAM,CAACwE,eAAeC,iBAAiB,GAAGzE,SAAS;IACnD,MAAM0E,uBAAuB3E,OAA6B;IAC1D,MAAM4E,6BAA6B5E,OAAO;IAC1C,MAAM6E,SAAS7E,OAAuB;IAEtC,MAAM8E,mBAAmBjF,YAAY;QACnC,OAAOsE;IACT,GAAG;QAACA;KAAO;IAEX,MAAMY,sBAAsBlF,YAAY;QACtC,MAAMyD,cAAca,OAAOa,cAAc;QACzC,MAAMC,mBAAmBC,OAAOC,YAAY;QAE5C,IACE7B,eAAe,QACf2B,oBAAoB,QACpBA,iBAAiB/B,UAAU,IAAI,QAC/B+B,iBAAiB9B,SAAS,IAAI,QAC9B,CAACG,YAAY8B,QAAQ,CAACH,iBAAiB/B,UAAU,KACjD,CAACI,YAAY8B,QAAQ,CAACH,iBAAiB9B,SAAS,GAChD;YACA,OAAO;QACT;QAEA,OAAO,CAAC;;;;;;;;;;;;;;;;;AAiBZ,EAAEiB,MAAMiB,GAAG,CAACxD,YAAYa,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE;;;IAG/B,CAAC;IACH,GAAG;QAACyB;QAAQC;KAAM;IAElB,6DAA6D;IAC7D,4DAA4D;IAC5D,MAAMkB,WAAWzF,YACf,CAACmC,MAAcxB;QACb6D,SAAS,CAACkB;YACR,wBAAwB;YACxB,MAAMC,eAAepB,MAAMqB,MAAM,GAAG;YACpC,MAAMC,WAAWtB,KAAK,CAACoB,aAAa;YACpC,IAAIE,UAAU;gBACZ,IAAIA,SAAS1D,IAAI,KAAKA,MAAM;oBAC1B,IAAIA,SAAS,QAAQ;wBACnB,4CAA4C;wBAC5C,OAAO;+BACFoC,MAAMuB,KAAK,CAAC,GAAGH;4BAClB;gCAAE,GAAGE,QAAQ;gCAAElF,OAAOkF,SAASlF,KAAK,GAAGA;4BAAM;yBAC9C;oBACH,OAAO;wBACL,oEAAoE;wBACpE,IAAIkF,SAASlF,KAAK,KAAKA,OAAO;4BAC5B,OAAO;mCAAI4D,MAAMuB,KAAK,CAAC,GAAGH;gCAAe;oCAAE,GAAGE,QAAQ;oCAAEjD,OAAOiD,SAASjD,KAAK,GAAG;gCAAE;6BAAE;wBACtF;oBACF;gBACF;YACF;YACA,yCAAyC;YACzC,OAAO;mBAAI8C;gBAAc;oBAAEvD;oBAAMS,OAAO;oBAAGjC;gBAAM;aAAE;QACrD;IACF,GACA;QAAC4D;QAAOC;KAAS;IAGnBtE,gBAAgB;QACd,MAAM6F,YAAY,CAAChD;YACjB,IAAI,CAAC0B,aAAa;gBAChB;YACF;YACA,MAAMuB,MAAMjD,MAAMiD,GAAG;YACrB,IAAIlD,YAAYC,QAAQ;gBACtB0C,SAAS,aAAa;YACxB,OAAO,IAAItB,WAAW8B,GAAG,CAACD,MAAM;gBAC9BP,SAAS,SAAS1C,MAAMiD,GAAG;YAC7B,OAAO,IAAI;mBAAIA;aAAI,CAACJ,MAAM,GAAG,GAAG;gBAC9BH,SAAS,WAAW1C,MAAMiD,GAAG;YAC/B,OAAO;gBACLP,SAAS,QAAQ1C,MAAMiD,GAAG;YAC5B;QACF;QAEA,MAAME,UAAU,CAACnD;YACf,IAAI,CAAC0B,aAAa;gBAChB;YACF;YACA,MAAMuB,MAAMjD,MAAMiD,GAAG;YACrB,IAAI,CAAC7B,WAAW8B,GAAG,CAACD,QAAQ;mBAAIA;aAAI,CAACJ,MAAM,GAAG,GAAG;gBAC/CH,SAAS,SAAS1C,MAAMiD,GAAG;YAC7B;QACF;QAEA,OAAO1B,OAAO6B,oBAAoB,CAChC,CAAC1C,aAAiC2C;YAChC,IAAIA,oBAAoB,MAAM;gBAC5BA,gBAAgBC,mBAAmB,CAAC,WAAWN;gBAC/CK,gBAAgBC,mBAAmB,CAAC,SAASH;YAC/C;YACA,IAAIzC,gBAAgB,MAAM;gBACxBA,YAAY6C,gBAAgB,CAAC,WAAWP;gBACxCtC,YAAY6C,gBAAgB,CAAC,SAASJ;YACxC;QACF;IAEJ,GAAG;QAAC5B;QAAQG;QAAagB;KAAS;IAElCvF,gBAAgB;QACd,IAAI8E,OAAOuB,OAAO,EAAE;YAClBvB,OAAOuB,OAAO,CAACC,QAAQ,CAAC,GAAGxB,OAAOuB,OAAO,CAACE,YAAY;QACxD;IACF,GAAG;QAACvB;KAAoB;IAExBjF,UAAU;QACR,IAAIsE,OAAO;YACT,MAAMmC,cAAcxB;YACpB,IAAIwB,gBAAgB,MAAM;gBACxB7B,iBAAiB6B;YACnB;YACA,IAAI1B,OAAOuB,OAAO,EAAE;gBAClBvB,OAAOuB,OAAO,CAACC,QAAQ,CAAC,GAAGxB,OAAOuB,OAAO,CAACE,YAAY;YACxD;QACF;IACF,GAAG;QAACvB;QAAqBX;KAAM;IAE/BtE,UAAU;QACR,MAAM0G,uBAAuBrC,OAAOsC,sBAAsB,CACxD,CAAC,EAAEC,aAAa,EAAEC,WAAW,EAAEC,WAAW,EAAE;YAC1C,IAAI,CAACtC,aAAa;gBAChB;YACF;YACA,MAAMuC,mBAAmBD,YAAYE,UAAU;YAC/C,MAAMC,oBAAoBpC,qBAAqByB,OAAO;YACtD,MAAMY,0BAA0BpC,2BAA2BwB,OAAO;YAClE,IAAIW,sBAAsBF,kBAAkB;gBAC1C,IAAIF,YAAYM,IAAI,KAAK,KAAKP,cAAcO,IAAI,KAAK,KAAK,CAACD,yBAAyB;oBAClF,MAAM/B,mBAAmBC,OAAOC,YAAY;oBAC5C,IACEF,oBACCA,CAAAA,iBAAiB/B,UAAU,IAAI,QAAQ+B,iBAAiB9B,SAAS,IAAI,IAAG,GACzE;wBACA;oBACF;gBACF;gBACAwB,qBAAqByB,OAAO,GAAGS;YACjC;YACAjC,2BAA2BwB,OAAO,GAAG;YACrC,MAAMG,cAAcxB;YACpB,IAAIwB,gBAAgB,MAAM;gBACxB7B,iBAAiB6B;YACnB;QACF;QAEF,OAAOC;IACT,GAAG;QAACrC;QAAQY;QAAqBT;QAAagB;KAAS;IAEvD,iBAAiB;IACjBxF,UAAU;QACR,IAAI,CAACwE,aAAa;YAChB;QACF;QACA,MAAMkC,uBAAuBrC,OAAOsC,sBAAsB,CAAC;YACzD,MAAMnD,cAAca,OAAOa,cAAc;YACzC,IAAI1B,gBAAgB,MAAM;gBACxBkB,oBAAoBlB,aAAa4D;YACnC;QACF;QACA,OAAOV;IACT,GAAG;QAACrC;QAAQG;KAAY;IAExB,mCAAmC;IACnC,MAAM6C,wBAAwBtH,YAC5B,CAACuH;QACC,IAAI,CAAC9C,aAAa;YAChB8C,cAAcC,MAAM,CAAC;gBACnB,MAAMC,OAAO3H;gBACb2H,KAAKC,KAAK;gBACV,MAAMnH,OAAOV;gBACb4H,KAAKE,MAAM,CAAC/H,uBAAuB+H,MAAM,CAACpH;gBAC1CA,KAAKW,MAAM;YACb;YACAsD,SAAS,EAAE;QACb;QACAE,eAAe,CAACkD,qBAAuB,CAACA;IAC1C,GACA;QAACnD;KAAY;IAGf,MAAMoD,kBAAkB7H,YAAY;QAClC,IAAI,CAACyE,aAAa;YAChB;QACF;QACA,MAAMW,mBAAmBC,OAAOC,YAAY;QAC5C,IACEF,qBAAqB,QACrBA,iBAAiB/B,UAAU,IAAI,QAC/B+B,iBAAiB9B,SAAS,IAAI,MAC9B;YACA;QACF;QACA,MAAM,EAAED,UAAU,EAAEb,YAAY,EAAEc,SAAS,EAAEZ,WAAW,EAAE,GAAGS,kBAAkBiC;QAC/E,MAAM3B,cAAcwB,mBAAmBE,cAAc;QACrD,IAAI7C;QACJ,IAAIe,eAAe,MAAM;YACvBf,aAAaiB,wBAAwBF,YAAYI;QACnD;QACA,IAAIhB;QACJ,IAAIa,cAAc,MAAM;YACtBb,YAAYc,wBAAwBD,WAAWG;QACjD;QACAgC,SAAS,YAAY;YACnBpC;YACAb;YACAF;YACAgB;YACAZ;YACAD;QACF;IACF,GAAG;QAACgD;QAAUhB;QAAaQ;KAAiB;IAE5C,MAAM6C,cAAc9H,YAAY;QAC9BM,KAAK4E;IACP,GAAG;QAACA;KAAoB;IAExB,MAAM6C,kBAAkB/H,YAAY;QAClCyB,SAAS,WAAWyD;IACtB,GAAG;QAACA;KAAoB;IAExB,MAAM8C,uBACJ,oBAACA;QACCC,WAAW,CAAC,kBAAkB,EAAExD,cAAc,WAAW,GAAG,CAAC;QAC7DyD,IAAG;QACHC,SAAS,CAACC;YACRd,sBAAsBrC;YACtBmD,EAAEC,cAAc;QAClB;QACAC,OAAO7D,cAAc,0BAA0B;QAC/C8D,MAAK;OAEJ9D,cAAc,0BAA0B;IAG7C,MAAM+D,SAAS/D,4BACb,oBAACgE;QAAIR,WAAU;qBACb,oBAACQ;QAAIR,WAAU;qBACb,oBAACD;QACCC,WAAU;QACVC,IAAG;QACHC,SAAS,CAACC;YACRP;YACAO,EAAEC,cAAc;QAClB;QACAC,OAAM;QACNC,MAAK;OACN,kCAGD,oBAACP;QACCC,WAAU;QACVC,IAAG;QACHC,SAAS,CAACC;YACRN;YACAM,EAAEC,cAAc;QAClB;QACAC,OAAM;QACNC,MAAK;OACN,uBAGD,oBAACP;QACCC,WAAU;QACVC,IAAG;QACHC,SAAS,CAACC;YACRL;YACAK,EAAEC,cAAc;QAClB;QACAC,OAAM;QACNC,MAAK;OACN,4BAIH,oBAACG;QAAIR,IAAG;QAAgBS,KAAK3D;OAC1BJ,kBAGH;IAEJ,OAAO;QAACoD;QAAQQ;KAAO;AACzB;AACA,OAAO,MAAMI,qBAAiD;IAC5D,MAAM,CAACtE,OAAO,GAAG3E;IACjB,MAAM,CAACkJ,oBAAoBC,mBAAmB,GAAGzE,gBAAgBC;IAEjE,qBACE,oBAACvE,MAAMgJ,QAAQ,sBACb,oBAACC,WAAE,OACFH,oBACAC,kCACD,oBAACE,WAAE;AAGT,EAAC"}
@@ -1,4 +1,4 @@
1
- import * as React from 'react';
1
+ import type { PluginComponent } from '../../../types.js';
2
2
  import './index.scss';
3
- export declare function TreeViewPlugin(): React.ReactNode;
3
+ export declare const TreeViewPlugin: PluginComponent<undefined>;
4
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/field/features/debug/treeView/plugin/index.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,cAAc,CAAA;AAErB,wBAAgB,cAAc,IAAI,KAAK,CAAC,SAAS,CAahD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/field/features/debug/treeView/plugin/index.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAExD,OAAO,cAAc,CAAA;AAErB,eAAO,MAAM,cAAc,EAAE,eAAe,CAAC,SAAS,CAarD,CAAA"}
@@ -3,7 +3,7 @@ import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext
3
3
  import { TreeView } from '@lexical/react/LexicalTreeView.js';
4
4
  import * as React from 'react';
5
5
  import './index.scss';
6
- export function TreeViewPlugin() {
6
+ export const TreeViewPlugin = ()=>{
7
7
  const [editor] = useLexicalComposerContext();
8
8
  return /*#__PURE__*/ React.createElement(TreeView, {
9
9
  editor: editor,
@@ -14,6 +14,6 @@ export function TreeViewPlugin() {
14
14
  treeTypeButtonClassName: "debug-treetype-button",
15
15
  viewClassName: "tree-view-output"
16
16
  });
17
- }
17
+ };
18
18
 
19
19
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/field/features/debug/treeView/plugin/index.tsx"],"sourcesContent":["'use client'\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { TreeView } from '@lexical/react/LexicalTreeView.js'\nimport * as React from 'react'\n\nimport './index.scss'\n\nexport function TreeViewPlugin(): React.ReactNode {\n const [editor] = useLexicalComposerContext()\n return (\n <TreeView\n editor={editor}\n timeTravelButtonClassName=\"debug-timetravel-button\"\n timeTravelPanelButtonClassName=\"debug-timetravel-panel-button\"\n timeTravelPanelClassName=\"debug-timetravel-panel\"\n timeTravelPanelSliderClassName=\"debug-timetravel-panel-slider\"\n treeTypeButtonClassName=\"debug-treetype-button\"\n viewClassName=\"tree-view-output\"\n />\n )\n}\n"],"names":["useLexicalComposerContext","TreeView","React","TreeViewPlugin","editor","timeTravelButtonClassName","timeTravelPanelButtonClassName","timeTravelPanelClassName","timeTravelPanelSliderClassName","treeTypeButtonClassName","viewClassName"],"rangeMappings":";;;;;;;;;;;;;;;;","mappings":"AAAA;AACA,SAASA,yBAAyB,QAAQ,2CAA0C;AACpF,SAASC,QAAQ,QAAQ,oCAAmC;AAC5D,YAAYC,WAAW,QAAO;AAE9B,OAAO,eAAc;AAErB,OAAO,SAASC;IACd,MAAM,CAACC,OAAO,GAAGJ;IACjB,qBACE,oBAACC;QACCG,QAAQA;QACRC,2BAA0B;QAC1BC,gCAA+B;QAC/BC,0BAAyB;QACzBC,gCAA+B;QAC/BC,yBAAwB;QACxBC,eAAc;;AAGpB"}
1
+ {"version":3,"sources":["../../../../../../src/field/features/debug/treeView/plugin/index.tsx"],"sourcesContent":["'use client'\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { TreeView } from '@lexical/react/LexicalTreeView.js'\nimport * as React from 'react'\n\nimport type { PluginComponent } from '../../../types.js'\n\nimport './index.scss'\n\nexport const TreeViewPlugin: PluginComponent<undefined> = () => {\n const [editor] = useLexicalComposerContext()\n return (\n <TreeView\n editor={editor}\n timeTravelButtonClassName=\"debug-timetravel-button\"\n timeTravelPanelButtonClassName=\"debug-timetravel-panel-button\"\n timeTravelPanelClassName=\"debug-timetravel-panel\"\n timeTravelPanelSliderClassName=\"debug-timetravel-panel-slider\"\n treeTypeButtonClassName=\"debug-treetype-button\"\n viewClassName=\"tree-view-output\"\n />\n )\n}\n"],"names":["useLexicalComposerContext","TreeView","React","TreeViewPlugin","editor","timeTravelButtonClassName","timeTravelPanelButtonClassName","timeTravelPanelClassName","timeTravelPanelSliderClassName","treeTypeButtonClassName","viewClassName"],"rangeMappings":";;;;;;;;;;;;;;;;","mappings":"AAAA;AACA,SAASA,yBAAyB,QAAQ,2CAA0C;AACpF,SAASC,QAAQ,QAAQ,oCAAmC;AAC5D,YAAYC,WAAW,QAAO;AAI9B,OAAO,eAAc;AAErB,OAAO,MAAMC,iBAA6C;IACxD,MAAM,CAACC,OAAO,GAAGJ;IACjB,qBACE,oBAACC;QACCG,QAAQA;QACRC,2BAA0B;QAC1BC,gCAA+B;QAC/BC,0BAAyB;QACzBC,gCAA+B;QAC/BC,yBAAwB;QACxBC,eAAc;;AAGpB,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"feature.client.d.ts","sourceRoot":"","sources":["../../../../../src/field/features/format/bold/feature.client.tsx"],"names":[],"mappings":";AAoDA,eAAO,MAAM,0BAA0B,+BAA2C,CAAA"}
1
+ {"version":3,"file":"feature.client.d.ts","sourceRoot":"","sources":["../../../../../src/field/features/format/bold/feature.client.tsx"],"names":[],"mappings":";AA0DA,eAAO,MAAM,0BAA0B,+BAA2C,CAAA"}
@@ -2,8 +2,26 @@
2
2
  import { $isRangeSelection, FORMAT_TEXT_COMMAND } from 'lexical';
3
3
  import { BoldIcon } from '../../../lexical/ui/icons/Bold/index.js';
4
4
  import { createClientComponent } from '../../createClientComponent.js';
5
- import { inlineToolbarFormatGroupWithItems } from '../shared/inlineToolbarFormatGroup.js';
5
+ import { toolbarFormatGroupWithItems } from '../shared/toolbarFormatGroup.js';
6
6
  import { BOLD_ITALIC_STAR, BOLD_ITALIC_UNDERSCORE, BOLD_STAR, BOLD_UNDERSCORE } from './markdownTransformers.js';
7
+ const toolbarGroups = [
8
+ toolbarFormatGroupWithItems([
9
+ {
10
+ ChildComponent: BoldIcon,
11
+ isActive: ({ selection })=>{
12
+ if ($isRangeSelection(selection)) {
13
+ return selection.hasFormat('bold');
14
+ }
15
+ return false;
16
+ },
17
+ key: 'bold',
18
+ onSelect: ({ editor })=>{
19
+ editor.dispatchCommand(FORMAT_TEXT_COMMAND, 'bold');
20
+ },
21
+ order: 1
22
+ }
23
+ ])
24
+ ];
7
25
  const BoldFeatureClient = (props)=>{
8
26
  return {
9
27
  clientFeatureProps: props,
@@ -18,25 +36,11 @@ const BoldFeatureClient = (props)=>{
18
36
  return {
19
37
  clientFeatureProps: props,
20
38
  markdownTransformers,
39
+ toolbarFixed: {
40
+ groups: toolbarGroups
41
+ },
21
42
  toolbarInline: {
22
- groups: [
23
- inlineToolbarFormatGroupWithItems([
24
- {
25
- ChildComponent: BoldIcon,
26
- isActive: ({ selection })=>{
27
- if ($isRangeSelection(selection)) {
28
- return selection.hasFormat('bold');
29
- }
30
- return false;
31
- },
32
- key: 'bold',
33
- onSelect: ({ editor })=>{
34
- editor.dispatchCommand(FORMAT_TEXT_COMMAND, 'bold');
35
- },
36
- order: 1
37
- }
38
- ])
39
- ]
43
+ groups: toolbarGroups
40
44
  }
41
45
  };
42
46
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/field/features/format/bold/feature.client.tsx"],"sourcesContent":["'use client'\nimport { $isRangeSelection, FORMAT_TEXT_COMMAND } from 'lexical'\n\nimport type { FeatureProviderProviderClient } from '../../types.js'\n\nimport { BoldIcon } from '../../../lexical/ui/icons/Bold/index.js'\nimport { createClientComponent } from '../../createClientComponent.js'\nimport { inlineToolbarFormatGroupWithItems } from '../shared/inlineToolbarFormatGroup.js'\nimport {\n BOLD_ITALIC_STAR,\n BOLD_ITALIC_UNDERSCORE,\n BOLD_STAR,\n BOLD_UNDERSCORE,\n} from './markdownTransformers.js'\n\nconst BoldFeatureClient: FeatureProviderProviderClient<undefined> = (props) => {\n return {\n clientFeatureProps: props,\n feature: ({ featureProviderMap }) => {\n const markdownTransformers = [BOLD_STAR, BOLD_UNDERSCORE]\n if (featureProviderMap.get('italic')) {\n markdownTransformers.push(BOLD_ITALIC_UNDERSCORE, BOLD_ITALIC_STAR)\n }\n\n return {\n clientFeatureProps: props,\n markdownTransformers,\n toolbarInline: {\n groups: [\n inlineToolbarFormatGroupWithItems([\n {\n ChildComponent: BoldIcon,\n isActive: ({ selection }) => {\n if ($isRangeSelection(selection)) {\n return selection.hasFormat('bold')\n }\n return false\n },\n key: 'bold',\n onSelect: ({ editor }) => {\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, 'bold')\n },\n order: 1,\n },\n ]),\n ],\n },\n }\n },\n }\n}\n\nexport const BoldFeatureClientComponent = createClientComponent(BoldFeatureClient)\n"],"names":["$isRangeSelection","FORMAT_TEXT_COMMAND","BoldIcon","createClientComponent","inlineToolbarFormatGroupWithItems","BOLD_ITALIC_STAR","BOLD_ITALIC_UNDERSCORE","BOLD_STAR","BOLD_UNDERSCORE","BoldFeatureClient","props","clientFeatureProps","feature","featureProviderMap","markdownTransformers","get","push","toolbarInline","groups","ChildComponent","isActive","selection","hasFormat","key","onSelect","editor","dispatchCommand","order","BoldFeatureClientComponent"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA;AACA,SAASA,iBAAiB,EAAEC,mBAAmB,QAAQ,UAAS;AAIhE,SAASC,QAAQ,QAAQ,0CAAyC;AAClE,SAASC,qBAAqB,QAAQ,iCAAgC;AACtE,SAASC,iCAAiC,QAAQ,wCAAuC;AACzF,SACEC,gBAAgB,EAChBC,sBAAsB,EACtBC,SAAS,EACTC,eAAe,QACV,4BAA2B;AAElC,MAAMC,oBAA8D,CAACC;IACnE,OAAO;QACLC,oBAAoBD;QACpBE,SAAS,CAAC,EAAEC,kBAAkB,EAAE;YAC9B,MAAMC,uBAAuB;gBAACP;gBAAWC;aAAgB;YACzD,IAAIK,mBAAmBE,GAAG,CAAC,WAAW;gBACpCD,qBAAqBE,IAAI,CAACV,wBAAwBD;YACpD;YAEA,OAAO;gBACLM,oBAAoBD;gBACpBI;gBACAG,eAAe;oBACbC,QAAQ;wBACNd,kCAAkC;4BAChC;gCACEe,gBAAgBjB;gCAChBkB,UAAU,CAAC,EAAEC,SAAS,EAAE;oCACtB,IAAIrB,kBAAkBqB,YAAY;wCAChC,OAAOA,UAAUC,SAAS,CAAC;oCAC7B;oCACA,OAAO;gCACT;gCACAC,KAAK;gCACLC,UAAU,CAAC,EAAEC,MAAM,EAAE;oCACnBA,OAAOC,eAAe,CAACzB,qBAAqB;gCAC9C;gCACA0B,OAAO;4BACT;yBACD;qBACF;gBACH;YACF;QACF;IACF;AACF;AAEA,OAAO,MAAMC,6BAA6BzB,sBAAsBM,mBAAkB"}
1
+ {"version":3,"sources":["../../../../../src/field/features/format/bold/feature.client.tsx"],"sourcesContent":["'use client'\nimport { $isRangeSelection, FORMAT_TEXT_COMMAND } from 'lexical'\n\nimport type { ToolbarGroup } from '../../toolbars/types.js'\nimport type { FeatureProviderProviderClient } from '../../types.js'\n\nimport { BoldIcon } from '../../../lexical/ui/icons/Bold/index.js'\nimport { createClientComponent } from '../../createClientComponent.js'\nimport { toolbarFormatGroupWithItems } from '../shared/toolbarFormatGroup.js'\nimport {\n BOLD_ITALIC_STAR,\n BOLD_ITALIC_UNDERSCORE,\n BOLD_STAR,\n BOLD_UNDERSCORE,\n} from './markdownTransformers.js'\n\nconst toolbarGroups: ToolbarGroup[] = [\n toolbarFormatGroupWithItems([\n {\n ChildComponent: BoldIcon,\n isActive: ({ selection }) => {\n if ($isRangeSelection(selection)) {\n return selection.hasFormat('bold')\n }\n return false\n },\n key: 'bold',\n onSelect: ({ editor }) => {\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, 'bold')\n },\n order: 1,\n },\n ]),\n]\n\nconst BoldFeatureClient: FeatureProviderProviderClient<undefined> = (props) => {\n return {\n clientFeatureProps: props,\n feature: ({ featureProviderMap }) => {\n const markdownTransformers = [BOLD_STAR, BOLD_UNDERSCORE]\n if (featureProviderMap.get('italic')) {\n markdownTransformers.push(BOLD_ITALIC_UNDERSCORE, BOLD_ITALIC_STAR)\n }\n\n return {\n clientFeatureProps: props,\n markdownTransformers,\n toolbarFixed: {\n groups: toolbarGroups,\n },\n toolbarInline: {\n groups: toolbarGroups,\n },\n }\n },\n }\n}\n\nexport const BoldFeatureClientComponent = createClientComponent(BoldFeatureClient)\n"],"names":["$isRangeSelection","FORMAT_TEXT_COMMAND","BoldIcon","createClientComponent","toolbarFormatGroupWithItems","BOLD_ITALIC_STAR","BOLD_ITALIC_UNDERSCORE","BOLD_STAR","BOLD_UNDERSCORE","toolbarGroups","ChildComponent","isActive","selection","hasFormat","key","onSelect","editor","dispatchCommand","order","BoldFeatureClient","props","clientFeatureProps","feature","featureProviderMap","markdownTransformers","get","push","toolbarFixed","groups","toolbarInline","BoldFeatureClientComponent"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA;AACA,SAASA,iBAAiB,EAAEC,mBAAmB,QAAQ,UAAS;AAKhE,SAASC,QAAQ,QAAQ,0CAAyC;AAClE,SAASC,qBAAqB,QAAQ,iCAAgC;AACtE,SAASC,2BAA2B,QAAQ,kCAAiC;AAC7E,SACEC,gBAAgB,EAChBC,sBAAsB,EACtBC,SAAS,EACTC,eAAe,QACV,4BAA2B;AAElC,MAAMC,gBAAgC;IACpCL,4BAA4B;QAC1B;YACEM,gBAAgBR;YAChBS,UAAU,CAAC,EAAEC,SAAS,EAAE;gBACtB,IAAIZ,kBAAkBY,YAAY;oBAChC,OAAOA,UAAUC,SAAS,CAAC;gBAC7B;gBACA,OAAO;YACT;YACAC,KAAK;YACLC,UAAU,CAAC,EAAEC,MAAM,EAAE;gBACnBA,OAAOC,eAAe,CAAChB,qBAAqB;YAC9C;YACAiB,OAAO;QACT;KACD;CACF;AAED,MAAMC,oBAA8D,CAACC;IACnE,OAAO;QACLC,oBAAoBD;QACpBE,SAAS,CAAC,EAAEC,kBAAkB,EAAE;YAC9B,MAAMC,uBAAuB;gBAACjB;gBAAWC;aAAgB;YACzD,IAAIe,mBAAmBE,GAAG,CAAC,WAAW;gBACpCD,qBAAqBE,IAAI,CAACpB,wBAAwBD;YACpD;YAEA,OAAO;gBACLgB,oBAAoBD;gBACpBI;gBACAG,cAAc;oBACZC,QAAQnB;gBACV;gBACAoB,eAAe;oBACbD,QAAQnB;gBACV;YACF;QACF;IACF;AACF;AAEA,OAAO,MAAMqB,6BAA6B3B,sBAAsBgB,mBAAkB"}
@@ -1 +1 @@
1
- {"version":3,"file":"feature.client.d.ts","sourceRoot":"","sources":["../../../../../src/field/features/format/inlineCode/feature.client.tsx"],"names":[],"mappings":";AA4CA,eAAO,MAAM,gCAAgC,+BAAiD,CAAA"}
1
+ {"version":3,"file":"feature.client.d.ts","sourceRoot":"","sources":["../../../../../src/field/features/format/inlineCode/feature.client.tsx"],"names":[],"mappings":";AAkDA,eAAO,MAAM,gCAAgC,+BAAiD,CAAA"}