@payloadcms/richtext-lexical 3.0.0-canary.a5aaf21 → 3.0.0-canary.a7293f6

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 (277) hide show
  1. package/dist/cell/index.js +1 -1
  2. package/dist/cell/index.js.map +1 -1
  3. package/dist/exports/client/Field-ETCEVZLL.js +2 -0
  4. package/dist/exports/client/Field-ETCEVZLL.js.map +7 -0
  5. package/dist/exports/client/RelationshipComponent-FTWR5YDX.js +2 -0
  6. package/dist/exports/client/RelationshipComponent-FTWR5YDX.js.map +7 -0
  7. package/dist/exports/client/bundled.css +1 -1
  8. package/dist/exports/client/{chunk-PY6JO5OH.js → chunk-32KXGBIQ.js} +2 -2
  9. package/dist/exports/client/{chunk-PY6JO5OH.js.map → chunk-32KXGBIQ.js.map} +2 -2
  10. package/dist/exports/client/chunk-6LZZDOEO.js +2 -0
  11. package/dist/exports/client/chunk-6LZZDOEO.js.map +7 -0
  12. package/dist/exports/client/{chunk-TXEIKM77.js → chunk-GD6LBQBJ.js} +2 -2
  13. package/dist/exports/client/chunk-GD6LBQBJ.js.map +7 -0
  14. package/dist/exports/client/{chunk-GK7ZKYHL.js → chunk-IIWHHN4J.js} +2 -2
  15. package/dist/exports/client/chunk-IIWHHN4J.js.map +7 -0
  16. package/dist/exports/client/{chunk-GTKNWSQW.js → chunk-QZNJUROL.js} +2 -2
  17. package/dist/exports/client/{chunk-GTKNWSQW.js.map → chunk-QZNJUROL.js.map} +2 -2
  18. package/dist/exports/client/chunk-WAMTSCVM.js +2 -0
  19. package/dist/exports/client/{chunk-F5DIILW3.js.map → chunk-WAMTSCVM.js.map} +2 -2
  20. package/dist/exports/client/{chunk-PECDZEZY.js → chunk-XCEM47RI.js} +2 -2
  21. package/dist/exports/client/{chunk-PECDZEZY.js.map → chunk-XCEM47RI.js.map} +2 -2
  22. package/dist/exports/client/component-6PBZ2U3Z.js +2 -0
  23. package/dist/exports/client/component-6PBZ2U3Z.js.map +7 -0
  24. package/dist/exports/client/component-6Y2K2RNP.js +2 -0
  25. package/dist/exports/client/component-6Y2K2RNP.js.map +7 -0
  26. package/dist/exports/client/component-ANB7VZLA.js +2 -0
  27. package/dist/exports/client/component-ANB7VZLA.js.map +7 -0
  28. package/dist/exports/client/componentInline-NUDJIIQ4.js +2 -0
  29. package/dist/exports/client/componentInline-NUDJIIQ4.js.map +7 -0
  30. package/dist/exports/client/index.d.ts +1 -0
  31. package/dist/exports/client/index.d.ts.map +1 -1
  32. package/dist/exports/client/index.js +7 -7
  33. package/dist/exports/client/index.js.map +4 -4
  34. package/dist/features/blockquote/markdownTransformer.js.map +1 -1
  35. package/dist/features/blockquote/server/index.d.ts +1 -1
  36. package/dist/features/blockquote/server/index.d.ts.map +1 -1
  37. package/dist/features/blocks/client/component/BlockContent.js +5 -4
  38. package/dist/features/blocks/client/component/BlockContent.js.map +1 -1
  39. package/dist/features/blocks/client/component/index.d.ts +1 -1
  40. package/dist/features/blocks/client/component/index.d.ts.map +1 -1
  41. package/dist/features/blocks/client/component/index.js +3 -3
  42. package/dist/features/blocks/client/component/index.js.map +1 -1
  43. package/dist/features/blocks/client/componentInline/index.d.ts +1 -1
  44. package/dist/features/blocks/client/componentInline/index.d.ts.map +1 -1
  45. package/dist/features/blocks/client/componentInline/index.js +14 -11
  46. package/dist/features/blocks/client/componentInline/index.js.map +1 -1
  47. package/dist/features/blocks/client/index.d.ts +1 -1
  48. package/dist/features/blocks/client/index.d.ts.map +1 -1
  49. package/dist/features/blocks/client/index.js +21 -11
  50. package/dist/features/blocks/client/index.js.map +1 -1
  51. package/dist/features/blocks/client/nodes/BlocksNode.d.ts +2 -2
  52. package/dist/features/blocks/client/nodes/BlocksNode.d.ts.map +1 -1
  53. package/dist/features/blocks/client/nodes/BlocksNode.js.map +1 -1
  54. package/dist/features/blocks/client/plugin/index.d.ts +2 -2
  55. package/dist/features/blocks/client/plugin/index.d.ts.map +1 -1
  56. package/dist/features/blocks/client/plugin/index.js +4 -4
  57. package/dist/features/blocks/client/plugin/index.js.map +1 -1
  58. package/dist/features/blocks/server/index.d.ts.map +1 -1
  59. package/dist/features/blocks/server/index.js +4 -2
  60. package/dist/features/blocks/server/index.js.map +1 -1
  61. package/dist/features/blocks/server/nodes/BlocksNode.d.ts +10 -4
  62. package/dist/features/blocks/server/nodes/BlocksNode.d.ts.map +1 -1
  63. package/dist/features/blocks/server/nodes/BlocksNode.js.map +1 -1
  64. package/dist/features/blocks/server/nodes/InlineBlocksNode.d.ts +2 -2
  65. package/dist/features/blocks/server/nodes/InlineBlocksNode.d.ts.map +1 -1
  66. package/dist/features/blocks/server/nodes/InlineBlocksNode.js.map +1 -1
  67. package/dist/features/blocks/server/validate.js.map +1 -1
  68. package/dist/features/converters/html/converter/index.js +2 -2
  69. package/dist/features/converters/html/converter/index.js.map +1 -1
  70. package/dist/features/converters/html/field/index.js.map +1 -1
  71. package/dist/features/debug/testRecorder/client/plugin/index.js.map +1 -1
  72. package/dist/features/experimental_table/client/plugins/TableActionMenuPlugin/index.d.ts.map +1 -1
  73. package/dist/features/experimental_table/client/plugins/TableActionMenuPlugin/index.js +29 -43
  74. package/dist/features/experimental_table/client/plugins/TableActionMenuPlugin/index.js.map +1 -1
  75. package/dist/features/experimental_table/client/plugins/TableCellResizerPlugin/index.d.ts.map +1 -1
  76. package/dist/features/experimental_table/client/plugins/TableCellResizerPlugin/index.js +39 -39
  77. package/dist/features/experimental_table/client/plugins/TableCellResizerPlugin/index.js.map +1 -1
  78. package/dist/features/experimental_table/client/plugins/TablePlugin/index.js +19 -18
  79. package/dist/features/experimental_table/client/plugins/TablePlugin/index.js.map +1 -1
  80. package/dist/features/experimental_table/server/index.js +2 -2
  81. package/dist/features/experimental_table/server/index.js.map +1 -1
  82. package/dist/features/horizontalRule/client/component/index.d.ts +1 -1
  83. package/dist/features/horizontalRule/client/component/index.d.ts.map +1 -1
  84. package/dist/features/horizontalRule/client/component/index.js +12 -9
  85. package/dist/features/horizontalRule/client/component/index.js.map +1 -1
  86. package/dist/features/horizontalRule/server/nodes/HorizontalRuleNode.d.ts +2 -2
  87. package/dist/features/horizontalRule/server/nodes/HorizontalRuleNode.d.ts.map +1 -1
  88. package/dist/features/horizontalRule/server/nodes/HorizontalRuleNode.js.map +1 -1
  89. package/dist/features/indent/client/index.d.ts.map +1 -1
  90. package/dist/features/indent/client/index.js +2 -1
  91. package/dist/features/indent/client/index.js.map +1 -1
  92. package/dist/features/link/client/index.js +1 -1
  93. package/dist/features/link/client/index.js.map +1 -1
  94. package/dist/features/link/client/plugins/autoLink/index.d.ts +1 -1
  95. package/dist/features/link/client/plugins/autoLink/index.d.ts.map +1 -1
  96. package/dist/features/link/client/plugins/autoLink/index.js.map +1 -1
  97. package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.d.ts.map +1 -1
  98. package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.js +3 -7
  99. package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.js.map +1 -1
  100. package/dist/features/link/nodes/AutoLinkNode.js +2 -2
  101. package/dist/features/link/nodes/AutoLinkNode.js.map +1 -1
  102. package/dist/features/link/nodes/LinkNode.js +11 -7
  103. package/dist/features/link/nodes/LinkNode.js.map +1 -1
  104. package/dist/features/link/nodes/types.d.ts +3 -3
  105. package/dist/features/link/nodes/types.d.ts.map +1 -1
  106. package/dist/features/link/nodes/types.js.map +1 -1
  107. package/dist/features/link/server/baseFields.d.ts +1 -1
  108. package/dist/features/link/server/baseFields.d.ts.map +1 -1
  109. package/dist/features/link/server/baseFields.js +3 -1
  110. package/dist/features/link/server/baseFields.js.map +1 -1
  111. package/dist/features/link/server/index.d.ts.map +1 -1
  112. package/dist/features/link/server/index.js +2 -2
  113. package/dist/features/link/server/index.js.map +1 -1
  114. package/dist/features/link/server/transformExtraFields.d.ts +1 -1
  115. package/dist/features/link/server/transformExtraFields.d.ts.map +1 -1
  116. package/dist/features/link/server/transformExtraFields.js.map +1 -1
  117. package/dist/features/link/server/validate.js.map +1 -1
  118. package/dist/features/lists/shared/markdown.js.map +1 -1
  119. package/dist/features/migrations/lexicalPluginToLexical/converter/index.d.ts.map +1 -1
  120. package/dist/features/migrations/lexicalPluginToLexical/converter/index.js +1 -0
  121. package/dist/features/migrations/lexicalPluginToLexical/converter/index.js.map +1 -1
  122. package/dist/features/migrations/lexicalPluginToLexical/nodes/unknownConvertedNode/index.d.ts +1 -1
  123. package/dist/features/migrations/lexicalPluginToLexical/nodes/unknownConvertedNode/index.d.ts.map +1 -1
  124. package/dist/features/migrations/lexicalPluginToLexical/nodes/unknownConvertedNode/index.js.map +1 -1
  125. package/dist/features/migrations/slateToLexical/converter/converters/blockquote/converter.js.map +1 -1
  126. package/dist/features/migrations/slateToLexical/converter/converters/heading/converter.js.map +1 -1
  127. package/dist/features/migrations/slateToLexical/converter/converters/link/converter.js.map +1 -1
  128. package/dist/features/migrations/slateToLexical/converter/converters/listItem/converter.js.map +1 -1
  129. package/dist/features/migrations/slateToLexical/converter/converters/orderedList/converter.js.map +1 -1
  130. package/dist/features/migrations/slateToLexical/converter/converters/unknown/converter.js.map +1 -1
  131. package/dist/features/migrations/slateToLexical/converter/converters/unorderedList/converter.js.map +1 -1
  132. package/dist/features/migrations/slateToLexical/converter/index.d.ts.map +1 -1
  133. package/dist/features/migrations/slateToLexical/converter/index.js +1 -0
  134. package/dist/features/migrations/slateToLexical/converter/index.js.map +1 -1
  135. package/dist/features/migrations/slateToLexical/nodes/unknownConvertedNode/index.d.ts +1 -1
  136. package/dist/features/migrations/slateToLexical/nodes/unknownConvertedNode/index.d.ts.map +1 -1
  137. package/dist/features/migrations/slateToLexical/nodes/unknownConvertedNode/index.js.map +1 -1
  138. package/dist/features/paragraph/server/index.d.ts +1 -1
  139. package/dist/features/paragraph/server/index.d.ts.map +1 -1
  140. package/dist/features/relationship/client/components/RelationshipComponent.d.ts.map +1 -1
  141. package/dist/features/relationship/client/components/RelationshipComponent.js +18 -13
  142. package/dist/features/relationship/client/components/RelationshipComponent.js.map +1 -1
  143. package/dist/features/relationship/client/drawer/index.js +3 -3
  144. package/dist/features/relationship/client/drawer/index.js.map +1 -1
  145. package/dist/features/relationship/client/plugins/index.js +1 -1
  146. package/dist/features/relationship/client/plugins/index.js.map +1 -1
  147. package/dist/features/relationship/client/utils/EnabledRelationshipsCondition.js +1 -1
  148. package/dist/features/relationship/client/utils/EnabledRelationshipsCondition.js.map +1 -1
  149. package/dist/features/relationship/server/nodes/RelationshipNode.d.ts +1 -1
  150. package/dist/features/relationship/server/nodes/RelationshipNode.d.ts.map +1 -1
  151. package/dist/features/relationship/server/nodes/RelationshipNode.js.map +1 -1
  152. package/dist/features/toolbars/fixed/client/Toolbar/index.d.ts.map +1 -1
  153. package/dist/features/toolbars/fixed/client/Toolbar/index.js +40 -41
  154. package/dist/features/toolbars/fixed/client/Toolbar/index.js.map +1 -1
  155. package/dist/features/toolbars/inline/client/Toolbar/index.d.ts.map +1 -1
  156. package/dist/features/toolbars/inline/client/Toolbar/index.js +33 -34
  157. package/dist/features/toolbars/inline/client/Toolbar/index.js.map +1 -1
  158. package/dist/features/toolbars/shared/ToolbarButton/index.d.ts.map +1 -1
  159. package/dist/features/toolbars/shared/ToolbarButton/index.js +4 -1
  160. package/dist/features/toolbars/shared/ToolbarButton/index.js.map +1 -1
  161. package/dist/features/toolbars/shared/ToolbarDropdown/DropDown.js +1 -1
  162. package/dist/features/toolbars/shared/ToolbarDropdown/DropDown.js.map +1 -1
  163. package/dist/features/toolbars/shared/ToolbarDropdown/index.d.ts +3 -4
  164. package/dist/features/toolbars/shared/ToolbarDropdown/index.d.ts.map +1 -1
  165. package/dist/features/toolbars/shared/ToolbarDropdown/index.js +82 -64
  166. package/dist/features/toolbars/shared/ToolbarDropdown/index.js.map +1 -1
  167. package/dist/features/toolbars/types.d.ts +21 -11
  168. package/dist/features/toolbars/types.d.ts.map +1 -1
  169. package/dist/features/toolbars/types.js.map +1 -1
  170. package/dist/features/typesServer.d.ts.map +1 -1
  171. package/dist/features/typesServer.js.map +1 -1
  172. package/dist/features/upload/client/component/index.d.ts.map +1 -1
  173. package/dist/features/upload/client/component/index.js +11 -8
  174. package/dist/features/upload/client/component/index.js.map +1 -1
  175. package/dist/features/upload/client/drawer/index.d.ts.map +1 -1
  176. package/dist/features/upload/client/drawer/index.js +2 -0
  177. package/dist/features/upload/client/drawer/index.js.map +1 -1
  178. package/dist/features/upload/client/plugin/index.js +1 -1
  179. package/dist/features/upload/client/plugin/index.js.map +1 -1
  180. package/dist/features/upload/server/feature.server.js +3 -4
  181. package/dist/features/upload/server/feature.server.js.map +1 -1
  182. package/dist/features/upload/server/validate.js.map +1 -1
  183. package/dist/field/Field.d.ts.map +1 -1
  184. package/dist/field/Field.js +11 -11
  185. package/dist/field/Field.js.map +1 -1
  186. package/dist/field/bundled.css +1 -1
  187. package/dist/field/index.js +1 -1
  188. package/dist/field/index.js.map +1 -1
  189. package/dist/index.d.ts.map +1 -1
  190. package/dist/index.js +67 -63
  191. package/dist/index.js.map +1 -1
  192. package/dist/lexical/EditorPlugin.d.ts.map +1 -1
  193. package/dist/lexical/EditorPlugin.js +2 -1
  194. package/dist/lexical/EditorPlugin.js.map +1 -1
  195. package/dist/lexical/LexicalEditor.d.ts +1 -1
  196. package/dist/lexical/LexicalEditor.d.ts.map +1 -1
  197. package/dist/lexical/LexicalEditor.js +5 -5
  198. package/dist/lexical/LexicalEditor.js.map +1 -1
  199. package/dist/lexical/config/client/EditorConfigProvider.d.ts +1 -1
  200. package/dist/lexical/config/client/EditorConfigProvider.d.ts.map +1 -1
  201. package/dist/lexical/config/client/EditorConfigProvider.js +8 -7
  202. package/dist/lexical/config/client/EditorConfigProvider.js.map +1 -1
  203. package/dist/lexical/config/client/sanitize.js +2 -2
  204. package/dist/lexical/config/client/sanitize.js.map +1 -1
  205. package/dist/lexical/config/server/loader.js.map +1 -1
  206. package/dist/lexical/config/server/sanitize.d.ts.map +1 -1
  207. package/dist/lexical/config/server/sanitize.js +11 -11
  208. package/dist/lexical/config/server/sanitize.js.map +1 -1
  209. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.js +2 -2
  210. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.js.map +1 -1
  211. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/types.d.ts +1 -1
  212. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/types.d.ts.map +1 -1
  213. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/types.js.map +1 -1
  214. package/dist/lexical/plugins/SlashMenu/index.d.ts.map +1 -1
  215. package/dist/lexical/plugins/SlashMenu/index.js +9 -6
  216. package/dist/lexical/plugins/SlashMenu/index.js.map +1 -1
  217. package/dist/lexical/plugins/handles/AddBlockHandlePlugin/index.d.ts.map +1 -1
  218. package/dist/lexical/plugins/handles/AddBlockHandlePlugin/index.js +5 -5
  219. package/dist/lexical/plugins/handles/AddBlockHandlePlugin/index.js.map +1 -1
  220. package/dist/lexical/plugins/handles/DraggableBlockPlugin/debounce.d.ts +1 -1
  221. package/dist/lexical/plugins/handles/DraggableBlockPlugin/debounce.d.ts.map +1 -1
  222. package/dist/lexical/plugins/handles/DraggableBlockPlugin/debounce.js +1 -1
  223. package/dist/lexical/plugins/handles/DraggableBlockPlugin/debounce.js.map +1 -1
  224. package/dist/lexical/plugins/handles/DraggableBlockPlugin/getBoundingRectWithoutTransform.js +1 -1
  225. package/dist/lexical/plugins/handles/DraggableBlockPlugin/getBoundingRectWithoutTransform.js.map +1 -1
  226. package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.d.ts.map +1 -1
  227. package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.js +9 -4
  228. package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.js.map +1 -1
  229. package/dist/lexical/plugins/handles/utils/getNodeCloseToPoint.d.ts.map +1 -1
  230. package/dist/lexical/plugins/handles/utils/getNodeCloseToPoint.js +3 -4
  231. package/dist/lexical/plugins/handles/utils/getNodeCloseToPoint.js.map +1 -1
  232. package/dist/lexical/theme/EditorTheme.d.ts.map +1 -1
  233. package/dist/lexical/theme/EditorTheme.js +1 -0
  234. package/dist/lexical/theme/EditorTheme.js.map +1 -1
  235. package/dist/lexical/utils/rect.d.ts +4 -4
  236. package/dist/lexical/utils/setFloatingElemPosition.d.ts +1 -1
  237. package/dist/lexical/utils/setFloatingElemPosition.d.ts.map +1 -1
  238. package/dist/lexical/utils/setFloatingElemPosition.js.map +1 -1
  239. package/dist/populateGraphQL/populate.js +1 -1
  240. package/dist/populateGraphQL/populate.js.map +1 -1
  241. package/dist/populateGraphQL/populateLexicalPopulationPromises.d.ts +1 -1
  242. package/dist/populateGraphQL/populateLexicalPopulationPromises.d.ts.map +1 -1
  243. package/dist/populateGraphQL/populateLexicalPopulationPromises.js +5 -4
  244. package/dist/populateGraphQL/populateLexicalPopulationPromises.js.map +1 -1
  245. package/dist/populateGraphQL/recursivelyPopulateFieldsForGraphQL.js.map +1 -1
  246. package/dist/utilities/fieldsDrawer/DrawerContent.d.ts.map +1 -1
  247. package/dist/utilities/fieldsDrawer/DrawerContent.js +1 -1
  248. package/dist/utilities/fieldsDrawer/DrawerContent.js.map +1 -1
  249. package/dist/utilities/generateComponentMap.d.ts.map +1 -1
  250. package/dist/utilities/generateComponentMap.js +1 -0
  251. package/dist/utilities/generateComponentMap.js.map +1 -1
  252. package/dist/utilities/migrateSlateToLexical/migrateDocumentFieldsRecursively.d.ts +1 -1
  253. package/dist/utilities/migrateSlateToLexical/migrateDocumentFieldsRecursively.d.ts.map +1 -1
  254. package/dist/utilities/migrateSlateToLexical/migrateDocumentFieldsRecursively.js +1 -1
  255. package/dist/utilities/migrateSlateToLexical/migrateDocumentFieldsRecursively.js.map +1 -1
  256. package/dist/utilities/upgradeLexicalData/upgradeDocumentFieldsRecursively.d.ts +1 -1
  257. package/dist/utilities/upgradeLexicalData/upgradeDocumentFieldsRecursively.d.ts.map +1 -1
  258. package/dist/utilities/upgradeLexicalData/upgradeDocumentFieldsRecursively.js.map +1 -1
  259. package/dist/validate/validateNodes.d.ts.map +1 -1
  260. package/dist/validate/validateNodes.js +2 -2
  261. package/dist/validate/validateNodes.js.map +1 -1
  262. package/package.json +30 -30
  263. package/dist/exports/client/Field-EL5TNVZW.js +0 -2
  264. package/dist/exports/client/Field-EL5TNVZW.js.map +0 -7
  265. package/dist/exports/client/RelationshipComponent-Z5SZ5FFT.js +0 -2
  266. package/dist/exports/client/RelationshipComponent-Z5SZ5FFT.js.map +0 -7
  267. package/dist/exports/client/chunk-F5DIILW3.js +0 -2
  268. package/dist/exports/client/chunk-GK7ZKYHL.js.map +0 -7
  269. package/dist/exports/client/chunk-TXEIKM77.js.map +0 -7
  270. package/dist/exports/client/component-ATPITPNI.js +0 -2
  271. package/dist/exports/client/component-ATPITPNI.js.map +0 -7
  272. package/dist/exports/client/component-GAX6BHKZ.js +0 -2
  273. package/dist/exports/client/component-GAX6BHKZ.js.map +0 -7
  274. package/dist/exports/client/component-M3ZCPXEG.js +0 -2
  275. package/dist/exports/client/component-M3ZCPXEG.js.map +0 -7
  276. package/dist/exports/client/componentInline-HAGGWKA7.js +0 -2
  277. package/dist/exports/client/componentInline-HAGGWKA7.js.map +0 -7
@@ -21,14 +21,17 @@ function ButtonGroupItem({
21
21
  item: item
22
22
  }, item.key);
23
23
  }
24
+ if (!item.ChildComponent) {
25
+ return null;
26
+ }
24
27
  return /*#__PURE__*/_jsx(ToolbarButton, {
25
28
  editor: editor,
26
29
  item: item,
27
- children: item?.ChildComponent && /*#__PURE__*/_jsx(item.ChildComponent, {})
30
+ children: /*#__PURE__*/_jsx(item.ChildComponent, {})
28
31
  }, item.key);
29
32
  }
30
33
  function ToolbarGroupComponent(t0) {
31
- const $ = _c(27);
34
+ const $ = _c(25);
32
35
  const {
33
36
  anchorElem,
34
37
  editor,
@@ -45,8 +48,8 @@ function ToolbarGroupComponent(t0) {
45
48
  const {
46
49
  richTextComponentMap
47
50
  } = t1;
48
- const [dropdownLabel, setDropdownLabel] = React.useState(null);
49
- const [DropdownIcon, setDropdownIcon] = React.useState(null);
51
+ const [dropdownLabel, setDropdownLabel] = React.useState(undefined);
52
+ const [DropdownIcon, setDropdownIcon] = React.useState(undefined);
50
53
  let t2;
51
54
  let t3;
52
55
  if ($[0] !== group) {
@@ -54,7 +57,7 @@ function ToolbarGroupComponent(t0) {
54
57
  if (group?.type === "dropdown" && group.items.length && group.ChildComponent) {
55
58
  setDropdownIcon(() => group.ChildComponent);
56
59
  } else {
57
- setDropdownIcon(null);
60
+ setDropdownIcon(undefined);
58
61
  }
59
62
  };
60
63
  t3 = [group];
@@ -75,10 +78,10 @@ function ToolbarGroupComponent(t0) {
75
78
  if (!activeItems.length) {
76
79
  if (group?.type === "dropdown" && group.items.length && group.ChildComponent) {
77
80
  setDropdownIcon(() => group.ChildComponent);
78
- setDropdownLabel(null);
81
+ setDropdownLabel(undefined);
79
82
  } else {
80
- setDropdownIcon(null);
81
- setDropdownLabel(null);
83
+ setDropdownIcon(undefined);
84
+ setDropdownLabel(undefined);
82
85
  }
83
86
  return;
84
87
  }
@@ -106,13 +109,12 @@ function ToolbarGroupComponent(t0) {
106
109
  const onActiveChange = t4;
107
110
  const t5 = `fixed-toolbar__group fixed-toolbar__group-${group.key}`;
108
111
  let t6;
109
- if ($[7] !== group.type || $[8] !== group.items || $[9] !== group.key || $[10] !== DropdownIcon || $[11] !== anchorElem || $[12] !== editor || $[13] !== dropdownLabel || $[14] !== onActiveChange) {
112
+ if ($[7] !== group || $[8] !== DropdownIcon || $[9] !== anchorElem || $[10] !== editor || $[11] !== dropdownLabel || $[12] !== onActiveChange) {
110
113
  t6 = group.type === "dropdown" && group.items.length && (DropdownIcon ? _jsx(ToolbarDropdown, {
111
114
  anchorElem,
112
115
  editor,
113
- groupKey: group.key,
116
+ group,
114
117
  Icon: DropdownIcon,
115
- items: group.items,
116
118
  itemsContainerClassNames: ["fixed-toolbar__dropdown-items"],
117
119
  label: dropdownLabel,
118
120
  maxActiveItems: 1,
@@ -120,56 +122,53 @@ function ToolbarGroupComponent(t0) {
120
122
  }) : _jsx(ToolbarDropdown, {
121
123
  anchorElem,
122
124
  editor,
123
- groupKey: group.key,
124
- items: group.items,
125
+ group,
125
126
  itemsContainerClassNames: ["fixed-toolbar__dropdown-items"],
126
127
  label: dropdownLabel,
127
128
  maxActiveItems: 1,
128
129
  onActiveChange
129
130
  }));
130
- $[7] = group.type;
131
- $[8] = group.items;
132
- $[9] = group.key;
133
- $[10] = DropdownIcon;
134
- $[11] = anchorElem;
135
- $[12] = editor;
136
- $[13] = dropdownLabel;
137
- $[14] = onActiveChange;
138
- $[15] = t6;
131
+ $[7] = group;
132
+ $[8] = DropdownIcon;
133
+ $[9] = anchorElem;
134
+ $[10] = editor;
135
+ $[11] = dropdownLabel;
136
+ $[12] = onActiveChange;
137
+ $[13] = t6;
139
138
  } else {
140
- t6 = $[15];
139
+ t6 = $[13];
141
140
  }
142
141
  let t7;
143
- if ($[16] !== group || $[17] !== anchorElem || $[18] !== editor) {
142
+ if ($[14] !== group || $[15] !== anchorElem || $[16] !== editor) {
144
143
  t7 = group.type === "buttons" && group.items.length && group.items.map(item_0 => _jsx(ButtonGroupItem, {
145
144
  anchorElem,
146
145
  editor,
147
146
  item: item_0
148
147
  }, item_0.key));
149
- $[16] = group;
150
- $[17] = anchorElem;
151
- $[18] = editor;
152
- $[19] = t7;
148
+ $[14] = group;
149
+ $[15] = anchorElem;
150
+ $[16] = editor;
151
+ $[17] = t7;
153
152
  } else {
154
- t7 = $[19];
153
+ t7 = $[17];
155
154
  }
156
155
  let t8;
157
- if ($[20] !== editorConfig.features.toolbarFixed || $[21] !== index || $[22] !== t6 || $[23] !== t7 || $[24] !== t5 || $[25] !== group.key) {
156
+ if ($[18] !== editorConfig.features.toolbarFixed || $[19] !== index || $[20] !== t6 || $[21] !== t7 || $[22] !== t5 || $[23] !== group.key) {
158
157
  t8 = _jsxs("div", {
159
158
  className: t5,
160
159
  children: [t6, t7, index < editorConfig.features.toolbarFixed?.groups.length - 1 && _jsx("div", {
161
160
  className: "divider"
162
161
  })]
163
162
  }, group.key);
164
- $[20] = editorConfig.features.toolbarFixed;
165
- $[21] = index;
166
- $[22] = t6;
167
- $[23] = t7;
168
- $[24] = t5;
169
- $[25] = group.key;
170
- $[26] = t8;
163
+ $[18] = editorConfig.features.toolbarFixed;
164
+ $[19] = index;
165
+ $[20] = t6;
166
+ $[21] = t7;
167
+ $[22] = t5;
168
+ $[23] = group.key;
169
+ $[24] = t8;
171
170
  } else {
172
- t8 = $[26];
171
+ t8 = $[24];
173
172
  }
174
173
  return t8;
175
174
  }
@@ -213,13 +212,13 @@ function FixedToolbar({
213
212
  // we only need to check for vertical overlap
214
213
  const overlapping = !(currentRect.bottom < parentRect.top || currentRect.top > parentRect.bottom);
215
214
  if (overlapping) {
216
- currentToolbarRef.current.className = 'fixed-toolbar fixed-toolbar--overlapping';
215
+ currentToolbarElem.className = 'fixed-toolbar fixed-toolbar--overlapping';
217
216
  parentToolbarElem.className = 'fixed-toolbar fixed-toolbar--hide';
218
217
  } else {
219
- if (!currentToolbarRef.current.classList.contains('fixed-toolbar--overlapping')) {
218
+ if (!currentToolbarElem.classList.contains('fixed-toolbar--overlapping')) {
220
219
  return;
221
220
  }
222
- currentToolbarRef.current.className = 'fixed-toolbar';
221
+ currentToolbarElem.className = 'fixed-toolbar';
223
222
  parentToolbarElem.className = 'fixed-toolbar';
224
223
  }
225
224
  }, 50, [currentToolbarRef, parentToolbarElem, y]);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["c","_c","useLexicalComposerContext","useScrollInfo","useThrottledEffect","useTranslation","React","useMemo","useEditorConfigContext","ToolbarButton","ToolbarDropdown","ButtonGroupItem","anchorElem","editor","item","Component","_jsx","key","ChildComponent","ToolbarGroupComponent","t0","$","editorConfig","group","index","i18n","field","t1","richTextComponentMap","dropdownLabel","setDropdownLabel","useState","DropdownIcon","setDropdownIcon","t2","t3","type","items","length","useEffect","t4","t5","activeItems","label","substring","onActiveChange","t6","groupKey","Icon","itemsContainerClassNames","maxActiveItems","t7","map","item_0","t8","features","toolbarFixed","_jsxs","className","children","groups","FixedToolbar","clientProps","parentWithFixedToolbar","currentToolbarRef","useRef","y","parentToolbarElem","disableIfParentHasFixedToolbar","parentEditorElem","editorContainerRef","current","sibling","previousElementSibling","classList","contains","currentToolbarElem","currentRect","getBoundingClientRect","parentRect","overlapping","bottom","top","onFocus","event","stopPropagation","ref","isEditable","Fragment","i","getParentEditorWithFixedToolbar","editorConfigContext","parentEditor","resolvedFeatureMap","has","FixedToolbarPlugin","currentEditor","currentEditorConfig","applyToFocusedEditor","focusedEditor"],"sources":["../../../../../../src/features/toolbars/fixed/client/Toolbar/index.tsx"],"sourcesContent":["'use client'\nimport type { LexicalEditor } from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { useScrollInfo, useThrottledEffect, useTranslation } from '@payloadcms/ui'\nimport * as React from 'react'\nimport { useMemo } from 'react'\n\nimport type { EditorConfigContextType } from '../../../../../lexical/config/client/EditorConfigProvider.js'\nimport type { SanitizedClientEditorConfig } from '../../../../../lexical/config/types.js'\nimport type { PluginComponentWithAnchor } from '../../../../typesClient.js'\nimport type { ToolbarGroup, ToolbarGroupItem } from '../../../types.js'\nimport type { FixedToolbarFeatureProps } from '../../server/index.js'\n\nimport { useEditorConfigContext } from '../../../../../lexical/config/client/EditorConfigProvider.js'\nimport { ToolbarButton } from '../../../shared/ToolbarButton/index.js'\nimport { ToolbarDropdown } from '../../../shared/ToolbarDropdown/index.js'\nimport './index.scss'\n\nfunction ButtonGroupItem({\n anchorElem,\n editor,\n item,\n}: {\n anchorElem: HTMLElement\n editor: LexicalEditor\n item: ToolbarGroupItem\n}): React.ReactNode {\n if (item.Component) {\n return (\n item?.Component && (\n <item.Component anchorElem={anchorElem} editor={editor} item={item} key={item.key} />\n )\n )\n }\n\n return (\n <ToolbarButton editor={editor} item={item} key={item.key}>\n {item?.ChildComponent && <item.ChildComponent />}\n </ToolbarButton>\n )\n}\n\nfunction ToolbarGroupComponent({\n anchorElem,\n editor,\n editorConfig,\n group,\n index,\n}: {\n anchorElem: HTMLElement\n editor: LexicalEditor\n editorConfig: SanitizedClientEditorConfig\n group: ToolbarGroup\n index: number\n}): React.ReactNode {\n const { i18n } = useTranslation()\n const {\n field: { richTextComponentMap },\n } = useEditorConfigContext()\n const [dropdownLabel, setDropdownLabel] = React.useState<null | string>(null)\n const [DropdownIcon, setDropdownIcon] = React.useState<null | React.FC>(null)\n\n React.useEffect(() => {\n if (group?.type === 'dropdown' && group.items.length && group.ChildComponent) {\n setDropdownIcon(() => group.ChildComponent)\n } else {\n setDropdownIcon(null)\n }\n }, [group])\n\n const onActiveChange = React.useCallback(\n ({ activeItems }: { activeItems: ToolbarGroupItem[] }) => {\n if (!activeItems.length) {\n if (group?.type === 'dropdown' && group.items.length && group.ChildComponent) {\n setDropdownIcon(() => group.ChildComponent)\n setDropdownLabel(null)\n } else {\n setDropdownIcon(null)\n setDropdownLabel(null)\n }\n return\n }\n const item = activeItems[0]\n\n let label = item.key\n if (item.label) {\n label =\n typeof item.label === 'function' ? item.label({ i18n, richTextComponentMap }) : item.label\n }\n // Crop title to max. 25 characters\n if (label.length > 25) {\n label = label.substring(0, 25) + '...'\n }\n setDropdownLabel(label)\n setDropdownIcon(() => item.ChildComponent)\n },\n [group, i18n, richTextComponentMap],\n )\n\n return (\n <div className={`fixed-toolbar__group fixed-toolbar__group-${group.key}`} key={group.key}>\n {group.type === 'dropdown' &&\n group.items.length &&\n (DropdownIcon ? (\n <ToolbarDropdown\n anchorElem={anchorElem}\n editor={editor}\n groupKey={group.key}\n Icon={DropdownIcon}\n items={group.items}\n itemsContainerClassNames={['fixed-toolbar__dropdown-items']}\n label={dropdownLabel}\n maxActiveItems={1}\n onActiveChange={onActiveChange}\n />\n ) : (\n <ToolbarDropdown\n anchorElem={anchorElem}\n editor={editor}\n groupKey={group.key}\n items={group.items}\n itemsContainerClassNames={['fixed-toolbar__dropdown-items']}\n label={dropdownLabel}\n maxActiveItems={1}\n onActiveChange={onActiveChange}\n />\n ))}\n {group.type === 'buttons' &&\n group.items.length &&\n group.items.map((item) => {\n return (\n <ButtonGroupItem anchorElem={anchorElem} editor={editor} item={item} key={item.key} />\n )\n })}\n {index < editorConfig.features.toolbarFixed?.groups.length - 1 && <div className=\"divider\" />}\n </div>\n )\n}\n\nfunction FixedToolbar({\n anchorElem,\n clientProps,\n editor,\n editorConfig,\n parentWithFixedToolbar,\n}: {\n anchorElem: HTMLElement\n clientProps?: FixedToolbarFeatureProps\n editor: LexicalEditor\n editorConfig: SanitizedClientEditorConfig\n parentWithFixedToolbar: EditorConfigContextType | false\n}): React.ReactNode {\n const currentToolbarRef = React.useRef<HTMLDivElement>(null)\n\n const { y } = useScrollInfo()\n\n // Memoize the parent toolbar element\n const parentToolbarElem = useMemo(() => {\n if (!parentWithFixedToolbar || clientProps?.disableIfParentHasFixedToolbar) {\n return null\n }\n\n const parentEditorElem = parentWithFixedToolbar.editorContainerRef.current\n let sibling = parentEditorElem.previousElementSibling\n while (sibling) {\n if (sibling.classList.contains('fixed-toolbar')) {\n return sibling\n }\n sibling = sibling.previousElementSibling\n }\n return null\n }, [clientProps?.disableIfParentHasFixedToolbar, parentWithFixedToolbar])\n\n useThrottledEffect(\n () => {\n if (!parentToolbarElem) {\n // this also checks for clientProps?.disableIfParentHasFixedToolbar indirectly, see the parentToolbarElem useMemo\n return\n }\n const currentToolbarElem = currentToolbarRef.current\n if (!currentToolbarElem) {\n return\n }\n\n const currentRect = currentToolbarElem.getBoundingClientRect()\n const parentRect = parentToolbarElem.getBoundingClientRect()\n\n // we only need to check for vertical overlap\n const overlapping = !(\n currentRect.bottom < parentRect.top || currentRect.top > parentRect.bottom\n )\n\n if (overlapping) {\n currentToolbarRef.current.className = 'fixed-toolbar fixed-toolbar--overlapping'\n parentToolbarElem.className = 'fixed-toolbar fixed-toolbar--hide'\n } else {\n if (!currentToolbarRef.current.classList.contains('fixed-toolbar--overlapping')) {\n return\n }\n currentToolbarRef.current.className = 'fixed-toolbar'\n parentToolbarElem.className = 'fixed-toolbar'\n }\n },\n 50,\n [currentToolbarRef, parentToolbarElem, y],\n )\n\n return (\n <div\n className=\"fixed-toolbar\"\n onFocus={(event) => {\n // Prevent other focus events being triggered. Otherwise, if this was to be clicked while in a child editor,\n // the parent editor will be focused, and the child editor will lose focus.\n event.stopPropagation()\n }}\n ref={currentToolbarRef}\n >\n {editor.isEditable() && (\n <React.Fragment>\n {editorConfig?.features &&\n editorConfig.features?.toolbarFixed?.groups.map((group, i) => {\n return (\n <ToolbarGroupComponent\n anchorElem={anchorElem}\n editor={editor}\n editorConfig={editorConfig}\n group={group}\n index={i}\n key={group.key}\n />\n )\n })}\n </React.Fragment>\n )}\n </div>\n )\n}\n\nconst getParentEditorWithFixedToolbar = (\n editorConfigContext: EditorConfigContextType,\n): EditorConfigContextType | false => {\n if (editorConfigContext.parentEditor?.editorConfig) {\n if (editorConfigContext.parentEditor?.editorConfig.resolvedFeatureMap.has('toolbarFixed')) {\n return editorConfigContext.parentEditor\n } else {\n if (editorConfigContext.parentEditor) {\n return getParentEditorWithFixedToolbar(editorConfigContext.parentEditor)\n }\n }\n }\n return false\n}\n\nexport const FixedToolbarPlugin: PluginComponentWithAnchor<FixedToolbarFeatureProps> = ({\n anchorElem,\n clientProps,\n}) => {\n const [currentEditor] = useLexicalComposerContext()\n const editorConfigContext = useEditorConfigContext()\n\n const { editorConfig: currentEditorConfig } = editorConfigContext\n\n const editor = clientProps.applyToFocusedEditor\n ? editorConfigContext.focusedEditor?.editor || currentEditor\n : currentEditor\n\n const editorConfig = clientProps.applyToFocusedEditor\n ? editorConfigContext.focusedEditor?.editorConfig || currentEditorConfig\n : currentEditorConfig\n\n const parentWithFixedToolbar = getParentEditorWithFixedToolbar(editorConfigContext)\n\n if (clientProps?.disableIfParentHasFixedToolbar) {\n if (parentWithFixedToolbar) {\n return null\n }\n }\n\n if (!editorConfig?.features?.toolbarFixed?.groups?.length) {\n return null\n }\n\n return (\n <FixedToolbar\n anchorElem={anchorElem}\n editor={editor}\n editorConfig={editorConfig}\n parentWithFixedToolbar={parentWithFixedToolbar}\n />\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["c","_c","useLexicalComposerContext","useScrollInfo","useThrottledEffect","useTranslation","React","useMemo","useEditorConfigContext","ToolbarButton","ToolbarDropdown","ButtonGroupItem","anchorElem","editor","item","Component","_jsx","key","ChildComponent","ToolbarGroupComponent","t0","$","editorConfig","group","index","i18n","field","t1","richTextComponentMap","dropdownLabel","setDropdownLabel","useState","undefined","DropdownIcon","setDropdownIcon","t2","t3","type","items","length","useEffect","t4","t5","activeItems","label","substring","onActiveChange","t6","Icon","itemsContainerClassNames","maxActiveItems","t7","map","item_0","t8","features","toolbarFixed","_jsxs","className","children","groups","FixedToolbar","clientProps","parentWithFixedToolbar","currentToolbarRef","useRef","y","parentToolbarElem","disableIfParentHasFixedToolbar","parentEditorElem","editorContainerRef","current","sibling","previousElementSibling","classList","contains","currentToolbarElem","currentRect","getBoundingClientRect","parentRect","overlapping","bottom","top","onFocus","event","stopPropagation","ref","isEditable","Fragment","i","getParentEditorWithFixedToolbar","editorConfigContext","parentEditor","resolvedFeatureMap","has","FixedToolbarPlugin","currentEditor","currentEditorConfig","applyToFocusedEditor","focusedEditor"],"sources":["../../../../../../src/features/toolbars/fixed/client/Toolbar/index.tsx"],"sourcesContent":["'use client'\nimport type { LexicalEditor } from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { useScrollInfo, useThrottledEffect, useTranslation } from '@payloadcms/ui'\nimport * as React from 'react'\nimport { useMemo } from 'react'\n\nimport type { EditorConfigContextType } from '../../../../../lexical/config/client/EditorConfigProvider.js'\nimport type { SanitizedClientEditorConfig } from '../../../../../lexical/config/types.js'\nimport type { PluginComponentWithAnchor } from '../../../../typesClient.js'\nimport type { ToolbarGroup, ToolbarGroupItem } from '../../../types.js'\nimport type { FixedToolbarFeatureProps } from '../../server/index.js'\n\nimport { useEditorConfigContext } from '../../../../../lexical/config/client/EditorConfigProvider.js'\nimport { ToolbarButton } from '../../../shared/ToolbarButton/index.js'\nimport { ToolbarDropdown } from '../../../shared/ToolbarDropdown/index.js'\nimport './index.scss'\n\nfunction ButtonGroupItem({\n anchorElem,\n editor,\n item,\n}: {\n anchorElem: HTMLElement\n editor: LexicalEditor\n item: ToolbarGroupItem\n}): React.ReactNode {\n if (item.Component) {\n return (\n item?.Component && (\n <item.Component anchorElem={anchorElem} editor={editor} item={item} key={item.key} />\n )\n )\n }\n\n if (!item.ChildComponent) {\n return null\n }\n\n return (\n <ToolbarButton editor={editor} item={item} key={item.key}>\n {<item.ChildComponent />}\n </ToolbarButton>\n )\n}\n\nfunction ToolbarGroupComponent({\n anchorElem,\n editor,\n editorConfig,\n group,\n index,\n}: {\n anchorElem: HTMLElement\n editor: LexicalEditor\n editorConfig: SanitizedClientEditorConfig\n group: ToolbarGroup\n index: number\n}): React.ReactNode {\n const { i18n } = useTranslation()\n const {\n field: { richTextComponentMap },\n } = useEditorConfigContext()\n const [dropdownLabel, setDropdownLabel] = React.useState<string | undefined>(undefined)\n const [DropdownIcon, setDropdownIcon] = React.useState<React.FC | undefined>(undefined)\n\n React.useEffect(() => {\n if (group?.type === 'dropdown' && group.items.length && group.ChildComponent) {\n setDropdownIcon(() => group.ChildComponent!)\n } else {\n setDropdownIcon(undefined)\n }\n }, [group])\n\n const onActiveChange = React.useCallback(\n ({ activeItems }: { activeItems: ToolbarGroupItem[] }) => {\n if (!activeItems.length) {\n if (group?.type === 'dropdown' && group.items.length && group.ChildComponent) {\n setDropdownIcon(() => group.ChildComponent!)\n setDropdownLabel(undefined)\n } else {\n setDropdownIcon(undefined)\n setDropdownLabel(undefined)\n }\n return\n }\n const item = activeItems[0]\n\n let label = item.key\n if (item.label) {\n label =\n typeof item.label === 'function' ? item.label({ i18n, richTextComponentMap }) : item.label\n }\n // Crop title to max. 25 characters\n if (label.length > 25) {\n label = label.substring(0, 25) + '...'\n }\n setDropdownLabel(label)\n setDropdownIcon(() => item.ChildComponent)\n },\n [group, i18n, richTextComponentMap],\n )\n\n return (\n <div className={`fixed-toolbar__group fixed-toolbar__group-${group.key}`} key={group.key}>\n {group.type === 'dropdown' &&\n group.items.length &&\n (DropdownIcon ? (\n <ToolbarDropdown\n anchorElem={anchorElem}\n editor={editor}\n group={group}\n Icon={DropdownIcon}\n itemsContainerClassNames={['fixed-toolbar__dropdown-items']}\n label={dropdownLabel}\n maxActiveItems={1}\n onActiveChange={onActiveChange}\n />\n ) : (\n <ToolbarDropdown\n anchorElem={anchorElem}\n editor={editor}\n group={group}\n itemsContainerClassNames={['fixed-toolbar__dropdown-items']}\n label={dropdownLabel}\n maxActiveItems={1}\n onActiveChange={onActiveChange}\n />\n ))}\n {group.type === 'buttons' &&\n group.items.length &&\n group.items.map((item) => {\n return (\n <ButtonGroupItem anchorElem={anchorElem} editor={editor} item={item} key={item.key} />\n )\n })}\n {index < editorConfig.features.toolbarFixed?.groups.length - 1 && <div className=\"divider\" />}\n </div>\n )\n}\n\nfunction FixedToolbar({\n anchorElem,\n clientProps,\n editor,\n editorConfig,\n parentWithFixedToolbar,\n}: {\n anchorElem: HTMLElement\n clientProps?: FixedToolbarFeatureProps\n editor: LexicalEditor\n editorConfig: SanitizedClientEditorConfig\n parentWithFixedToolbar: EditorConfigContextType | false\n}): React.ReactNode {\n const currentToolbarRef = React.useRef<HTMLDivElement>(null)\n\n const { y } = useScrollInfo()\n\n // Memoize the parent toolbar element\n const parentToolbarElem = useMemo(() => {\n if (!parentWithFixedToolbar || clientProps?.disableIfParentHasFixedToolbar) {\n return null\n }\n\n const parentEditorElem = parentWithFixedToolbar.editorContainerRef.current\n let sibling = parentEditorElem.previousElementSibling\n while (sibling) {\n if (sibling.classList.contains('fixed-toolbar')) {\n return sibling\n }\n sibling = sibling.previousElementSibling\n }\n return null\n }, [clientProps?.disableIfParentHasFixedToolbar, parentWithFixedToolbar])\n\n useThrottledEffect(\n () => {\n if (!parentToolbarElem) {\n // this also checks for clientProps?.disableIfParentHasFixedToolbar indirectly, see the parentToolbarElem useMemo\n return\n }\n const currentToolbarElem = currentToolbarRef.current\n if (!currentToolbarElem) {\n return\n }\n\n const currentRect = currentToolbarElem.getBoundingClientRect()\n const parentRect = parentToolbarElem.getBoundingClientRect()\n\n // we only need to check for vertical overlap\n const overlapping = !(\n currentRect.bottom < parentRect.top || currentRect.top > parentRect.bottom\n )\n\n if (overlapping) {\n currentToolbarElem.className = 'fixed-toolbar fixed-toolbar--overlapping'\n parentToolbarElem.className = 'fixed-toolbar fixed-toolbar--hide'\n } else {\n if (!currentToolbarElem.classList.contains('fixed-toolbar--overlapping')) {\n return\n }\n currentToolbarElem.className = 'fixed-toolbar'\n parentToolbarElem.className = 'fixed-toolbar'\n }\n },\n 50,\n [currentToolbarRef, parentToolbarElem, y],\n )\n\n return (\n <div\n className=\"fixed-toolbar\"\n onFocus={(event) => {\n // Prevent other focus events being triggered. Otherwise, if this was to be clicked while in a child editor,\n // the parent editor will be focused, and the child editor will lose focus.\n event.stopPropagation()\n }}\n ref={currentToolbarRef}\n >\n {editor.isEditable() && (\n <React.Fragment>\n {editorConfig?.features &&\n editorConfig.features?.toolbarFixed?.groups.map((group, i) => {\n return (\n <ToolbarGroupComponent\n anchorElem={anchorElem}\n editor={editor}\n editorConfig={editorConfig}\n group={group}\n index={i}\n key={group.key}\n />\n )\n })}\n </React.Fragment>\n )}\n </div>\n )\n}\n\nconst getParentEditorWithFixedToolbar = (\n editorConfigContext: EditorConfigContextType,\n): EditorConfigContextType | false => {\n if (editorConfigContext.parentEditor?.editorConfig) {\n if (editorConfigContext.parentEditor?.editorConfig.resolvedFeatureMap.has('toolbarFixed')) {\n return editorConfigContext.parentEditor\n } else {\n if (editorConfigContext.parentEditor) {\n return getParentEditorWithFixedToolbar(editorConfigContext.parentEditor)\n }\n }\n }\n return false\n}\n\nexport const FixedToolbarPlugin: PluginComponentWithAnchor<FixedToolbarFeatureProps> = ({\n anchorElem,\n clientProps,\n}) => {\n const [currentEditor] = useLexicalComposerContext()\n const editorConfigContext = useEditorConfigContext()\n\n const { editorConfig: currentEditorConfig } = editorConfigContext\n\n const editor = clientProps.applyToFocusedEditor\n ? editorConfigContext.focusedEditor?.editor || currentEditor\n : currentEditor\n\n const editorConfig = clientProps.applyToFocusedEditor\n ? editorConfigContext.focusedEditor?.editorConfig || currentEditorConfig\n : currentEditorConfig\n\n const parentWithFixedToolbar = getParentEditorWithFixedToolbar(editorConfigContext)\n\n if (clientProps?.disableIfParentHasFixedToolbar) {\n if (parentWithFixedToolbar) {\n return null\n }\n }\n\n if (!editorConfig?.features?.toolbarFixed?.groups?.length) {\n return null\n }\n\n return (\n <FixedToolbar\n anchorElem={anchorElem}\n editor={editor}\n editorConfig={editorConfig}\n parentWithFixedToolbar={parentWithFixedToolbar}\n />\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/features/toolbars/inline/client/Toolbar/index.tsx"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAA;AAQ3E,OAAO,cAAc,CAAA;AAwXrB,eAAO,MAAM,mBAAmB,EAAE,yBAAyB,CAAC,SAAS,CAIpE,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/features/toolbars/inline/client/Toolbar/index.tsx"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAA;AAQ3E,OAAO,cAAc,CAAA;AAyXrB,eAAO,MAAM,mBAAmB,EAAE,yBAAyB,CAAC,SAAS,CAIpE,CAAA"}
@@ -25,14 +25,17 @@ function ButtonGroupItem({
25
25
  item: item
26
26
  }, item.key);
27
27
  }
28
+ if (!item.ChildComponent) {
29
+ return null;
30
+ }
28
31
  return /*#__PURE__*/_jsx(ToolbarButton, {
29
32
  editor: editor,
30
33
  item: item,
31
- children: item?.ChildComponent && /*#__PURE__*/_jsx(item.ChildComponent, {})
34
+ children: /*#__PURE__*/_jsx(item.ChildComponent, {})
32
35
  }, item.key);
33
36
  }
34
37
  function ToolbarGroupComponent(t0) {
35
- const $ = _c(24);
38
+ const $ = _c(22);
36
39
  const {
37
40
  anchorElem,
38
41
  editor,
@@ -42,7 +45,7 @@ function ToolbarGroupComponent(t0) {
42
45
  const {
43
46
  editorConfig
44
47
  } = useEditorConfigContext();
45
- const [DropdownIcon, setDropdownIcon] = React.useState(null);
48
+ const [DropdownIcon, setDropdownIcon] = React.useState();
46
49
  let t1;
47
50
  let t2;
48
51
  if ($[0] !== group) {
@@ -50,7 +53,7 @@ function ToolbarGroupComponent(t0) {
50
53
  if (group?.type === "dropdown" && group.items.length && group.ChildComponent) {
51
54
  setDropdownIcon(() => group.ChildComponent);
52
55
  } else {
53
- setDropdownIcon(null);
56
+ setDropdownIcon(undefined);
54
57
  }
55
58
  };
56
59
  t2 = [group];
@@ -72,7 +75,7 @@ function ToolbarGroupComponent(t0) {
72
75
  if (group?.type === "dropdown" && group.items.length && group.ChildComponent) {
73
76
  setDropdownIcon(() => group.ChildComponent);
74
77
  } else {
75
- setDropdownIcon(null);
78
+ setDropdownIcon(undefined);
76
79
  }
77
80
  return;
78
81
  }
@@ -87,65 +90,61 @@ function ToolbarGroupComponent(t0) {
87
90
  const onActiveChange = t3;
88
91
  const t4 = `inline-toolbar-popup__group inline-toolbar-popup__group-${group.key}`;
89
92
  let t5;
90
- if ($[5] !== group.type || $[6] !== group.items || $[7] !== group.key || $[8] !== DropdownIcon || $[9] !== anchorElem || $[10] !== editor || $[11] !== onActiveChange) {
93
+ if ($[5] !== group || $[6] !== DropdownIcon || $[7] !== anchorElem || $[8] !== editor || $[9] !== onActiveChange) {
91
94
  t5 = group.type === "dropdown" && group.items.length && (DropdownIcon ? _jsx(ToolbarDropdown, {
92
95
  anchorElem,
93
96
  editor,
94
- groupKey: group.key,
97
+ group,
95
98
  Icon: DropdownIcon,
96
- items: group.items,
97
99
  maxActiveItems: 1,
98
100
  onActiveChange
99
101
  }) : _jsx(ToolbarDropdown, {
100
102
  anchorElem,
101
103
  editor,
102
- groupKey: group.key,
103
- items: group.items,
104
+ group,
104
105
  maxActiveItems: 1,
105
106
  onActiveChange
106
107
  }));
107
- $[5] = group.type;
108
- $[6] = group.items;
109
- $[7] = group.key;
110
- $[8] = DropdownIcon;
111
- $[9] = anchorElem;
112
- $[10] = editor;
113
- $[11] = onActiveChange;
114
- $[12] = t5;
108
+ $[5] = group;
109
+ $[6] = DropdownIcon;
110
+ $[7] = anchorElem;
111
+ $[8] = editor;
112
+ $[9] = onActiveChange;
113
+ $[10] = t5;
115
114
  } else {
116
- t5 = $[12];
115
+ t5 = $[10];
117
116
  }
118
117
  let t6;
119
- if ($[13] !== group || $[14] !== anchorElem || $[15] !== editor) {
118
+ if ($[11] !== group || $[12] !== anchorElem || $[13] !== editor) {
120
119
  t6 = group.type === "buttons" && group.items.length && group.items.map(item_0 => _jsx(ButtonGroupItem, {
121
120
  anchorElem,
122
121
  editor,
123
122
  item: item_0
124
123
  }, item_0.key));
125
- $[13] = group;
126
- $[14] = anchorElem;
127
- $[15] = editor;
128
- $[16] = t6;
124
+ $[11] = group;
125
+ $[12] = anchorElem;
126
+ $[13] = editor;
127
+ $[14] = t6;
129
128
  } else {
130
- t6 = $[16];
129
+ t6 = $[14];
131
130
  }
132
131
  let t7;
133
- if ($[17] !== editorConfig.features.toolbarInline || $[18] !== index || $[19] !== t5 || $[20] !== t6 || $[21] !== t4 || $[22] !== group.key) {
132
+ if ($[15] !== editorConfig.features.toolbarInline || $[16] !== index || $[17] !== t5 || $[18] !== t6 || $[19] !== t4 || $[20] !== group.key) {
134
133
  t7 = _jsxs("div", {
135
134
  className: t4,
136
135
  children: [t5, t6, index < editorConfig.features.toolbarInline?.groups.length - 1 && _jsx("div", {
137
136
  className: "divider"
138
137
  })]
139
138
  }, group.key);
140
- $[17] = editorConfig.features.toolbarInline;
141
- $[18] = index;
142
- $[19] = t5;
143
- $[20] = t6;
144
- $[21] = t4;
145
- $[22] = group.key;
146
- $[23] = t7;
139
+ $[15] = editorConfig.features.toolbarInline;
140
+ $[16] = index;
141
+ $[17] = t5;
142
+ $[18] = t6;
143
+ $[19] = t4;
144
+ $[20] = group.key;
145
+ $[21] = t7;
147
146
  } else {
148
- t7 = $[23];
147
+ t7 = $[21];
149
148
  }
150
149
  return t7;
151
150
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["c","_c","useLexicalComposerContext","mergeRegister","$getSelection","$isRangeSelection","$isTextNode","COMMAND_PRIORITY_LOW","SELECTION_CHANGE_COMMAND","useCallback","useEffect","useRef","useState","React","createPortal","useEditorConfigContext","getDOMRangeRect","setFloatingElemPosition","ToolbarButton","ToolbarDropdown","ButtonGroupItem","anchorElem","editor","item","Component","_jsx","key","ChildComponent","ToolbarGroupComponent","t0","$","group","index","editorConfig","DropdownIcon","setDropdownIcon","t1","t2","type","items","length","t3","t4","activeItems","onActiveChange","t5","groupKey","Icon","maxActiveItems","t6","map","item_0","t7","features","toolbarInline","_jsxs","className","children","groups","InlineToolbar","floatingToolbarRef","caretRef","closeFloatingToolbar","current","isOpacityZero","style","opacity","isPointerEventsNone","pointerEvents","mouseMoveListener","e","buttons","x","clientX","y","clientY","elementUnderMouse","document","elementFromPoint","contains","mouseUpListener","addEventListener","removeEventListener","$updateTextFormatFloatingToolbar","selection","nativeSelection","window","getSelection","possibleLinkEditor","querySelector","isLinkEditorVisible","rootElement","getRootElement","isCollapsed","anchorNode","rangeRect","offsetIfFlipped","alwaysDisplayOnTop","floatingElem","horizontalPosition","targetRect","anchorFlippedOffset","horizontalOffset","specialHandlingForCaret","verticalGap","scrollerElem","parentElement","update","getEditorState","read","registerUpdateListener","editorState","registerCommand","ref","isEditable","Fragment","i","useInlineToolbar","isText","setIsText","updatePopup","isComposing","getTextContent","nodes","getNodes","foundNodeWithText","node","rawTextContent","replace","registerRootListener","InlineToolbarPlugin"],"sources":["../../../../../../src/features/toolbars/inline/client/Toolbar/index.tsx"],"sourcesContent":["'use client'\nimport type { LexicalEditor } from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { mergeRegister } from '@lexical/utils'\nimport {\n $getSelection,\n $isRangeSelection,\n $isTextNode,\n COMMAND_PRIORITY_LOW,\n SELECTION_CHANGE_COMMAND,\n} from 'lexical'\nimport { useCallback, useEffect, useRef, useState } from 'react'\nimport * as React from 'react'\nimport { createPortal } from 'react-dom'\n\nimport type { PluginComponentWithAnchor } from '../../../../typesClient.js'\nimport type { ToolbarGroup, ToolbarGroupItem } from '../../../types.js'\n\nimport { useEditorConfigContext } from '../../../../../lexical/config/client/EditorConfigProvider.js'\nimport { getDOMRangeRect } from '../../../../../lexical/utils/getDOMRangeRect.js'\nimport { setFloatingElemPosition } from '../../../../../lexical/utils/setFloatingElemPosition.js'\nimport { ToolbarButton } from '../../../shared/ToolbarButton/index.js'\nimport { ToolbarDropdown } from '../../../shared/ToolbarDropdown/index.js'\nimport './index.scss'\n\nfunction ButtonGroupItem({\n anchorElem,\n editor,\n item,\n}: {\n anchorElem: HTMLElement\n editor: LexicalEditor\n item: ToolbarGroupItem\n}): React.ReactNode {\n if (item.Component) {\n return (\n item?.Component && (\n <item.Component anchorElem={anchorElem} editor={editor} item={item} key={item.key} />\n )\n )\n }\n\n return (\n <ToolbarButton editor={editor} item={item} key={item.key}>\n {item?.ChildComponent && <item.ChildComponent />}\n </ToolbarButton>\n )\n}\n\nfunction ToolbarGroupComponent({\n anchorElem,\n editor,\n group,\n index,\n}: {\n anchorElem: HTMLElement\n editor: LexicalEditor\n group: ToolbarGroup\n index: number\n}): React.ReactNode {\n const { editorConfig } = useEditorConfigContext()\n\n const [DropdownIcon, setDropdownIcon] = React.useState<null | React.FC>(null)\n\n React.useEffect(() => {\n if (group?.type === 'dropdown' && group.items.length && group.ChildComponent) {\n setDropdownIcon(() => group.ChildComponent)\n } else {\n setDropdownIcon(null)\n }\n }, [group])\n\n const onActiveChange = useCallback(\n ({ activeItems }: { activeItems: ToolbarGroupItem[] }) => {\n if (!activeItems.length) {\n if (group?.type === 'dropdown' && group.items.length && group.ChildComponent) {\n setDropdownIcon(() => group.ChildComponent)\n } else {\n setDropdownIcon(null)\n }\n return\n }\n const item = activeItems[0]\n setDropdownIcon(() => item.ChildComponent)\n },\n [group],\n )\n\n return (\n <div\n className={`inline-toolbar-popup__group inline-toolbar-popup__group-${group.key}`}\n key={group.key}\n >\n {group.type === 'dropdown' &&\n group.items.length &&\n (DropdownIcon ? (\n <ToolbarDropdown\n anchorElem={anchorElem}\n editor={editor}\n groupKey={group.key}\n Icon={DropdownIcon}\n items={group.items}\n maxActiveItems={1}\n onActiveChange={onActiveChange}\n />\n ) : (\n <ToolbarDropdown\n anchorElem={anchorElem}\n editor={editor}\n groupKey={group.key}\n items={group.items}\n maxActiveItems={1}\n onActiveChange={onActiveChange}\n />\n ))}\n {group.type === 'buttons' &&\n group.items.length &&\n group.items.map((item) => {\n return (\n <ButtonGroupItem anchorElem={anchorElem} editor={editor} item={item} key={item.key} />\n )\n })}\n {index < editorConfig.features.toolbarInline?.groups.length - 1 && (\n <div className=\"divider\" />\n )}\n </div>\n )\n}\n\nfunction InlineToolbar({\n anchorElem,\n editor,\n}: {\n anchorElem: HTMLElement\n editor: LexicalEditor\n}): React.ReactNode {\n const floatingToolbarRef = useRef<HTMLDivElement | null>(null)\n const caretRef = useRef<HTMLDivElement | null>(null)\n\n const { editorConfig } = useEditorConfigContext()\n\n const closeFloatingToolbar = useCallback(() => {\n if (floatingToolbarRef?.current) {\n const isOpacityZero = floatingToolbarRef.current.style.opacity === '0'\n const isPointerEventsNone = floatingToolbarRef.current.style.pointerEvents === 'none'\n\n if (!isOpacityZero) {\n floatingToolbarRef.current.style.opacity = '0'\n }\n if (!isPointerEventsNone) {\n floatingToolbarRef.current.style.pointerEvents = 'none'\n }\n }\n }, [floatingToolbarRef])\n\n const mouseMoveListener = useCallback(\n (e: MouseEvent) => {\n if (floatingToolbarRef?.current && (e.buttons === 1 || e.buttons === 3)) {\n const isOpacityZero = floatingToolbarRef.current.style.opacity === '0'\n const isPointerEventsNone = floatingToolbarRef.current.style.pointerEvents === 'none'\n if (!isOpacityZero || !isPointerEventsNone) {\n // Check if the mouse is not over the popup\n const x = e.clientX\n const y = e.clientY\n const elementUnderMouse = document.elementFromPoint(x, y)\n if (!floatingToolbarRef.current.contains(elementUnderMouse)) {\n // Mouse is not over the target element => not a normal click, but probably a drag\n closeFloatingToolbar()\n }\n }\n }\n },\n [closeFloatingToolbar],\n )\n\n const mouseUpListener = useCallback(() => {\n if (floatingToolbarRef?.current) {\n if (floatingToolbarRef.current.style.opacity !== '1') {\n floatingToolbarRef.current.style.opacity = '1'\n }\n if (floatingToolbarRef.current.style.pointerEvents !== 'auto') {\n floatingToolbarRef.current.style.pointerEvents = 'auto'\n }\n }\n }, [])\n\n useEffect(() => {\n document.addEventListener('mousemove', mouseMoveListener)\n document.addEventListener('mouseup', mouseUpListener)\n\n return () => {\n document.removeEventListener('mousemove', mouseMoveListener)\n document.removeEventListener('mouseup', mouseUpListener)\n }\n }, [floatingToolbarRef, mouseMoveListener, mouseUpListener])\n\n const $updateTextFormatFloatingToolbar = useCallback(() => {\n const selection = $getSelection()\n\n const nativeSelection = window.getSelection()\n\n if (floatingToolbarRef.current === null) {\n return\n }\n\n const possibleLinkEditor = anchorElem.querySelector(':scope > .link-editor')\n const isLinkEditorVisible =\n possibleLinkEditor !== null &&\n 'style' in possibleLinkEditor &&\n possibleLinkEditor?.style?.['opacity'] === '1'\n\n const rootElement = editor.getRootElement()\n if (\n selection !== null &&\n nativeSelection !== null &&\n !nativeSelection.isCollapsed &&\n rootElement !== null &&\n rootElement.contains(nativeSelection.anchorNode)\n ) {\n const rangeRect = getDOMRangeRect(nativeSelection, rootElement)\n\n // Position floating toolbar\n const offsetIfFlipped = setFloatingElemPosition({\n alwaysDisplayOnTop: isLinkEditorVisible,\n anchorElem,\n floatingElem: floatingToolbarRef.current,\n horizontalPosition: 'center',\n targetRect: rangeRect,\n })\n\n // Position caret\n if (caretRef.current) {\n setFloatingElemPosition({\n anchorElem: floatingToolbarRef.current,\n anchorFlippedOffset: offsetIfFlipped,\n floatingElem: caretRef.current,\n horizontalOffset: 5,\n horizontalPosition: 'center',\n specialHandlingForCaret: true,\n targetRect: rangeRect,\n verticalGap: 8,\n })\n }\n } else {\n closeFloatingToolbar()\n }\n }, [editor, closeFloatingToolbar, anchorElem])\n\n useEffect(() => {\n const scrollerElem = anchorElem.parentElement\n\n const update = () => {\n editor.getEditorState().read(() => {\n $updateTextFormatFloatingToolbar()\n })\n }\n\n window.addEventListener('resize', update)\n if (scrollerElem) {\n scrollerElem.addEventListener('scroll', update)\n }\n\n return () => {\n window.removeEventListener('resize', update)\n if (scrollerElem) {\n scrollerElem.removeEventListener('scroll', update)\n }\n }\n }, [editor, $updateTextFormatFloatingToolbar, anchorElem])\n\n useEffect(() => {\n editor.getEditorState().read(() => {\n $updateTextFormatFloatingToolbar()\n })\n return mergeRegister(\n editor.registerUpdateListener(({ editorState }) => {\n editorState.read(() => {\n $updateTextFormatFloatingToolbar()\n })\n }),\n\n editor.registerCommand(\n SELECTION_CHANGE_COMMAND,\n () => {\n $updateTextFormatFloatingToolbar()\n return false\n },\n COMMAND_PRIORITY_LOW,\n ),\n )\n }, [editor, $updateTextFormatFloatingToolbar])\n\n return (\n <div className=\"inline-toolbar-popup\" ref={floatingToolbarRef}>\n <div className=\"caret\" ref={caretRef} />\n {editor.isEditable() && (\n <React.Fragment>\n {editorConfig?.features &&\n editorConfig.features?.toolbarInline?.groups.map((group, i) => {\n return (\n <ToolbarGroupComponent\n anchorElem={anchorElem}\n editor={editor}\n group={group}\n index={i}\n key={group.key}\n />\n )\n })}\n </React.Fragment>\n )}\n </div>\n )\n}\n\nfunction useInlineToolbar(\n editor: LexicalEditor,\n anchorElem: HTMLElement,\n): null | React.ReactElement {\n const [isText, setIsText] = useState(false)\n\n const updatePopup = useCallback(() => {\n editor.getEditorState().read(() => {\n // Should not to pop up the floating toolbar when using IME input\n if (editor.isComposing()) {\n return\n }\n const selection = $getSelection()\n const nativeSelection = window.getSelection()\n const rootElement = editor.getRootElement()\n\n if (\n nativeSelection !== null &&\n (!$isRangeSelection(selection) ||\n rootElement === null ||\n !rootElement.contains(nativeSelection.anchorNode))\n ) {\n setIsText(false)\n return\n }\n\n if (!$isRangeSelection(selection)) {\n return\n }\n\n if (selection.getTextContent() !== '') {\n const nodes = selection.getNodes()\n let foundNodeWithText = false\n for (const node of nodes) {\n if ($isTextNode(node)) {\n setIsText(true)\n foundNodeWithText = true\n break\n }\n }\n if (!foundNodeWithText) {\n setIsText(false)\n }\n } else {\n setIsText(false)\n }\n\n const rawTextContent = selection.getTextContent().replace(/\\n/g, '')\n if (!selection.isCollapsed() && rawTextContent === '') {\n setIsText(false)\n return\n }\n })\n }, [editor])\n\n useEffect(() => {\n document.addEventListener('selectionchange', updatePopup)\n document.addEventListener('mouseup', updatePopup)\n return () => {\n document.removeEventListener('selectionchange', updatePopup)\n document.removeEventListener('mouseup', updatePopup)\n }\n }, [updatePopup])\n\n useEffect(() => {\n return mergeRegister(\n editor.registerUpdateListener(() => {\n updatePopup()\n }),\n editor.registerRootListener(() => {\n if (editor.getRootElement() === null) {\n setIsText(false)\n }\n }),\n )\n }, [editor, updatePopup])\n\n if (!isText) {\n return null\n }\n\n return createPortal(<InlineToolbar anchorElem={anchorElem} editor={editor} />, anchorElem)\n}\n\nexport const InlineToolbarPlugin: PluginComponentWithAnchor<undefined> = ({ anchorElem }) => {\n const [editor] = useLexicalComposerContext()\n\n return useInlineToolbar(editor, anchorElem)\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["c","_c","useLexicalComposerContext","mergeRegister","$getSelection","$isRangeSelection","$isTextNode","COMMAND_PRIORITY_LOW","SELECTION_CHANGE_COMMAND","useCallback","useEffect","useRef","useState","React","createPortal","useEditorConfigContext","getDOMRangeRect","setFloatingElemPosition","ToolbarButton","ToolbarDropdown","ButtonGroupItem","anchorElem","editor","item","Component","_jsx","key","ChildComponent","ToolbarGroupComponent","t0","$","group","index","editorConfig","DropdownIcon","setDropdownIcon","t1","t2","type","items","length","undefined","t3","t4","activeItems","onActiveChange","t5","Icon","maxActiveItems","t6","map","item_0","t7","features","toolbarInline","_jsxs","className","children","groups","InlineToolbar","floatingToolbarRef","caretRef","closeFloatingToolbar","current","isOpacityZero","style","opacity","isPointerEventsNone","pointerEvents","mouseMoveListener","e","buttons","x","clientX","y","clientY","elementUnderMouse","document","elementFromPoint","contains","mouseUpListener","addEventListener","removeEventListener","$updateTextFormatFloatingToolbar","selection","nativeSelection","window","getSelection","possibleLinkEditor","querySelector","isLinkEditorVisible","rootElement","getRootElement","isCollapsed","anchorNode","rangeRect","offsetIfFlipped","alwaysDisplayOnTop","floatingElem","horizontalPosition","targetRect","anchorFlippedOffset","horizontalOffset","specialHandlingForCaret","verticalGap","scrollerElem","parentElement","update","getEditorState","read","registerUpdateListener","editorState","registerCommand","ref","isEditable","Fragment","i","useInlineToolbar","isText","setIsText","updatePopup","isComposing","getTextContent","nodes","getNodes","foundNodeWithText","node","rawTextContent","replace","registerRootListener","InlineToolbarPlugin"],"sources":["../../../../../../src/features/toolbars/inline/client/Toolbar/index.tsx"],"sourcesContent":["'use client'\nimport type { LexicalEditor } from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { mergeRegister } from '@lexical/utils'\nimport {\n $getSelection,\n $isRangeSelection,\n $isTextNode,\n COMMAND_PRIORITY_LOW,\n SELECTION_CHANGE_COMMAND,\n} from 'lexical'\nimport { useCallback, useEffect, useRef, useState } from 'react'\nimport * as React from 'react'\nimport { createPortal } from 'react-dom'\n\nimport type { PluginComponentWithAnchor } from '../../../../typesClient.js'\nimport type { ToolbarGroup, ToolbarGroupItem } from '../../../types.js'\n\nimport { useEditorConfigContext } from '../../../../../lexical/config/client/EditorConfigProvider.js'\nimport { getDOMRangeRect } from '../../../../../lexical/utils/getDOMRangeRect.js'\nimport { setFloatingElemPosition } from '../../../../../lexical/utils/setFloatingElemPosition.js'\nimport { ToolbarButton } from '../../../shared/ToolbarButton/index.js'\nimport { ToolbarDropdown } from '../../../shared/ToolbarDropdown/index.js'\nimport './index.scss'\n\nfunction ButtonGroupItem({\n anchorElem,\n editor,\n item,\n}: {\n anchorElem: HTMLElement\n editor: LexicalEditor\n item: ToolbarGroupItem\n}): React.ReactNode {\n if (item.Component) {\n return (\n item?.Component && (\n <item.Component anchorElem={anchorElem} editor={editor} item={item} key={item.key} />\n )\n )\n }\n if (!item.ChildComponent) {\n return null\n }\n\n return (\n <ToolbarButton editor={editor} item={item} key={item.key}>\n <item.ChildComponent />\n </ToolbarButton>\n )\n}\n\nfunction ToolbarGroupComponent({\n anchorElem,\n editor,\n group,\n index,\n}: {\n anchorElem: HTMLElement\n editor: LexicalEditor\n group: ToolbarGroup\n index: number\n}): React.ReactNode {\n const { editorConfig } = useEditorConfigContext()\n\n const [DropdownIcon, setDropdownIcon] = React.useState<React.FC | undefined>()\n\n React.useEffect(() => {\n if (group?.type === 'dropdown' && group.items.length && group.ChildComponent) {\n setDropdownIcon(() => group.ChildComponent)\n } else {\n setDropdownIcon(undefined)\n }\n }, [group])\n\n const onActiveChange = useCallback(\n ({ activeItems }: { activeItems: ToolbarGroupItem[] }) => {\n if (!activeItems.length) {\n if (group?.type === 'dropdown' && group.items.length && group.ChildComponent) {\n setDropdownIcon(() => group.ChildComponent)\n } else {\n setDropdownIcon(undefined)\n }\n return\n }\n const item = activeItems[0]\n setDropdownIcon(() => item.ChildComponent)\n },\n [group],\n )\n\n return (\n <div\n className={`inline-toolbar-popup__group inline-toolbar-popup__group-${group.key}`}\n key={group.key}\n >\n {group.type === 'dropdown' &&\n group.items.length &&\n (DropdownIcon ? (\n <ToolbarDropdown\n anchorElem={anchorElem}\n editor={editor}\n group={group}\n Icon={DropdownIcon}\n maxActiveItems={1}\n onActiveChange={onActiveChange}\n />\n ) : (\n <ToolbarDropdown\n anchorElem={anchorElem}\n editor={editor}\n group={group}\n maxActiveItems={1}\n onActiveChange={onActiveChange}\n />\n ))}\n {group.type === 'buttons' &&\n group.items.length &&\n group.items.map((item) => {\n return (\n <ButtonGroupItem anchorElem={anchorElem} editor={editor} item={item} key={item.key} />\n )\n })}\n {index < editorConfig.features.toolbarInline?.groups.length - 1 && (\n <div className=\"divider\" />\n )}\n </div>\n )\n}\n\nfunction InlineToolbar({\n anchorElem,\n editor,\n}: {\n anchorElem: HTMLElement\n editor: LexicalEditor\n}): React.ReactNode {\n const floatingToolbarRef = useRef<HTMLDivElement | null>(null)\n const caretRef = useRef<HTMLDivElement | null>(null)\n\n const { editorConfig } = useEditorConfigContext()\n\n const closeFloatingToolbar = useCallback(() => {\n if (floatingToolbarRef?.current) {\n const isOpacityZero = floatingToolbarRef.current.style.opacity === '0'\n const isPointerEventsNone = floatingToolbarRef.current.style.pointerEvents === 'none'\n\n if (!isOpacityZero) {\n floatingToolbarRef.current.style.opacity = '0'\n }\n if (!isPointerEventsNone) {\n floatingToolbarRef.current.style.pointerEvents = 'none'\n }\n }\n }, [floatingToolbarRef])\n\n const mouseMoveListener = useCallback(\n (e: MouseEvent) => {\n if (floatingToolbarRef?.current && (e.buttons === 1 || e.buttons === 3)) {\n const isOpacityZero = floatingToolbarRef.current.style.opacity === '0'\n const isPointerEventsNone = floatingToolbarRef.current.style.pointerEvents === 'none'\n if (!isOpacityZero || !isPointerEventsNone) {\n // Check if the mouse is not over the popup\n const x = e.clientX\n const y = e.clientY\n const elementUnderMouse = document.elementFromPoint(x, y)\n if (!floatingToolbarRef.current.contains(elementUnderMouse)) {\n // Mouse is not over the target element => not a normal click, but probably a drag\n closeFloatingToolbar()\n }\n }\n }\n },\n [closeFloatingToolbar],\n )\n\n const mouseUpListener = useCallback(() => {\n if (floatingToolbarRef?.current) {\n if (floatingToolbarRef.current.style.opacity !== '1') {\n floatingToolbarRef.current.style.opacity = '1'\n }\n if (floatingToolbarRef.current.style.pointerEvents !== 'auto') {\n floatingToolbarRef.current.style.pointerEvents = 'auto'\n }\n }\n }, [])\n\n useEffect(() => {\n document.addEventListener('mousemove', mouseMoveListener)\n document.addEventListener('mouseup', mouseUpListener)\n\n return () => {\n document.removeEventListener('mousemove', mouseMoveListener)\n document.removeEventListener('mouseup', mouseUpListener)\n }\n }, [floatingToolbarRef, mouseMoveListener, mouseUpListener])\n\n const $updateTextFormatFloatingToolbar = useCallback(() => {\n const selection = $getSelection()\n\n const nativeSelection = window.getSelection()\n\n if (floatingToolbarRef.current === null) {\n return\n }\n\n const possibleLinkEditor = anchorElem.querySelector(':scope > .link-editor')\n const isLinkEditorVisible =\n possibleLinkEditor !== null &&\n 'style' in possibleLinkEditor &&\n possibleLinkEditor?.style?.['opacity'] === '1'\n\n const rootElement = editor.getRootElement()\n if (\n selection !== null &&\n nativeSelection !== null &&\n !nativeSelection.isCollapsed &&\n rootElement !== null &&\n rootElement.contains(nativeSelection.anchorNode)\n ) {\n const rangeRect = getDOMRangeRect(nativeSelection, rootElement)\n\n // Position floating toolbar\n const offsetIfFlipped = setFloatingElemPosition({\n alwaysDisplayOnTop: isLinkEditorVisible,\n anchorElem,\n floatingElem: floatingToolbarRef.current,\n horizontalPosition: 'center',\n targetRect: rangeRect,\n })\n\n // Position caret\n if (caretRef.current) {\n setFloatingElemPosition({\n anchorElem: floatingToolbarRef.current,\n anchorFlippedOffset: offsetIfFlipped,\n floatingElem: caretRef.current,\n horizontalOffset: 5,\n horizontalPosition: 'center',\n specialHandlingForCaret: true,\n targetRect: rangeRect,\n verticalGap: 8,\n })\n }\n } else {\n closeFloatingToolbar()\n }\n }, [editor, closeFloatingToolbar, anchorElem])\n\n useEffect(() => {\n const scrollerElem = anchorElem.parentElement\n\n const update = () => {\n editor.getEditorState().read(() => {\n $updateTextFormatFloatingToolbar()\n })\n }\n\n window.addEventListener('resize', update)\n if (scrollerElem) {\n scrollerElem.addEventListener('scroll', update)\n }\n\n return () => {\n window.removeEventListener('resize', update)\n if (scrollerElem) {\n scrollerElem.removeEventListener('scroll', update)\n }\n }\n }, [editor, $updateTextFormatFloatingToolbar, anchorElem])\n\n useEffect(() => {\n editor.getEditorState().read(() => {\n $updateTextFormatFloatingToolbar()\n })\n return mergeRegister(\n editor.registerUpdateListener(({ editorState }) => {\n editorState.read(() => {\n $updateTextFormatFloatingToolbar()\n })\n }),\n\n editor.registerCommand(\n SELECTION_CHANGE_COMMAND,\n () => {\n $updateTextFormatFloatingToolbar()\n return false\n },\n COMMAND_PRIORITY_LOW,\n ),\n )\n }, [editor, $updateTextFormatFloatingToolbar])\n\n return (\n <div className=\"inline-toolbar-popup\" ref={floatingToolbarRef}>\n <div className=\"caret\" ref={caretRef} />\n {editor.isEditable() && (\n <React.Fragment>\n {editorConfig?.features &&\n editorConfig.features?.toolbarInline?.groups.map((group, i) => {\n return (\n <ToolbarGroupComponent\n anchorElem={anchorElem}\n editor={editor}\n group={group}\n index={i}\n key={group.key}\n />\n )\n })}\n </React.Fragment>\n )}\n </div>\n )\n}\n\nfunction useInlineToolbar(\n editor: LexicalEditor,\n anchorElem: HTMLElement,\n): null | React.ReactElement {\n const [isText, setIsText] = useState(false)\n\n const updatePopup = useCallback(() => {\n editor.getEditorState().read(() => {\n // Should not to pop up the floating toolbar when using IME input\n if (editor.isComposing()) {\n return\n }\n const selection = $getSelection()\n const nativeSelection = window.getSelection()\n const rootElement = editor.getRootElement()\n\n if (\n nativeSelection !== null &&\n (!$isRangeSelection(selection) ||\n rootElement === null ||\n !rootElement.contains(nativeSelection.anchorNode))\n ) {\n setIsText(false)\n return\n }\n\n if (!$isRangeSelection(selection)) {\n return\n }\n\n if (selection.getTextContent() !== '') {\n const nodes = selection.getNodes()\n let foundNodeWithText = false\n for (const node of nodes) {\n if ($isTextNode(node)) {\n setIsText(true)\n foundNodeWithText = true\n break\n }\n }\n if (!foundNodeWithText) {\n setIsText(false)\n }\n } else {\n setIsText(false)\n }\n\n const rawTextContent = selection.getTextContent().replace(/\\n/g, '')\n if (!selection.isCollapsed() && rawTextContent === '') {\n setIsText(false)\n return\n }\n })\n }, [editor])\n\n useEffect(() => {\n document.addEventListener('selectionchange', updatePopup)\n document.addEventListener('mouseup', updatePopup)\n return () => {\n document.removeEventListener('selectionchange', updatePopup)\n document.removeEventListener('mouseup', updatePopup)\n }\n }, [updatePopup])\n\n useEffect(() => {\n return mergeRegister(\n editor.registerUpdateListener(() => {\n updatePopup()\n }),\n editor.registerRootListener(() => {\n if (editor.getRootElement() === null) {\n setIsText(false)\n }\n }),\n )\n }, [editor, updatePopup])\n\n if (!isText) {\n return null\n }\n\n return createPortal(<InlineToolbar anchorElem={anchorElem} editor={editor} />, anchorElem)\n}\n\nexport const InlineToolbarPlugin: PluginComponentWithAnchor<undefined> = ({ anchorElem }) => {\n const [editor] = useLexicalComposerContext()\n\n return useInlineToolbar(editor, anchorElem)\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/features/toolbars/shared/ToolbarButton/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAI5C,OAAO,KAA2C,MAAM,OAAO,CAAA;AAE/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAGtD,OAAO,cAAc,CAAA;AAIrB,eAAO,MAAM,aAAa,gCAIvB;IACD,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,CAAA;IAC3B,MAAM,EAAE,aAAa,CAAA;IACrB,IAAI,EAAE,gBAAgB,CAAA;CACvB,sBAqFA,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/features/toolbars/shared/ToolbarButton/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAI5C,OAAO,KAA2C,MAAM,OAAO,CAAA;AAE/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAGtD,OAAO,cAAc,CAAA;AAIrB,eAAO,MAAM,aAAa,gCAIvB;IACD,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,CAAA;IAC3B,MAAM,EAAE,aAAa,CAAA;IACrB,IAAI,EAAE,gBAAgB,CAAA;CACvB,sBAwFA,CAAA"}
@@ -18,6 +18,9 @@ export const ToolbarButton = ({
18
18
  const updateStates = useCallback(() => {
19
19
  editor.getEditorState().read(() => {
20
20
  const selection = $getSelection();
21
+ if (!selection) {
22
+ return;
23
+ }
21
24
  if (item.isActive) {
22
25
  const isActive = item.isActive({
23
26
  editor,
@@ -65,7 +68,7 @@ export const ToolbarButton = ({
65
68
  ;
66
69
  editor.focus(() => {
67
70
  // We need to wrap the onSelect in the callback, so the editor is properly focused before the onSelect is called.
68
- item.onSelect({
71
+ item.onSelect?.({
69
72
  editor,
70
73
  isActive: active
71
74
  });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["mergeRegister","$getSelection","React","useCallback","useEffect","useState","useEditorConfigContext","baseClass","ToolbarButton","children","editor","item","enabled","setEnabled","active","setActive","className","setClassName","editorConfigContext","updateStates","getEditorState","read","selection","isActive","isEnabled","document","addEventListener","removeEventListener","registerUpdateListener","key","filter","Boolean","join","_jsx","onClick","_updateTags","Set","focus","onSelect","onMouseDown","e","preventDefault","type"],"sources":["../../../../../src/features/toolbars/shared/ToolbarButton/index.tsx"],"sourcesContent":["'use client'\nimport type { LexicalEditor } from 'lexical'\n\nimport { mergeRegister } from '@lexical/utils'\nimport { $getSelection } from 'lexical'\nimport React, { useCallback, useEffect, useState } from 'react'\n\nimport type { ToolbarGroupItem } from '../../types.js'\n\nimport { useEditorConfigContext } from '../../../../lexical/config/client/EditorConfigProvider.js'\nimport './index.scss'\n\nconst baseClass = 'toolbar-popup__button'\n\nexport const ToolbarButton = ({\n children,\n editor,\n item,\n}: {\n children: React.JSX.Element\n editor: LexicalEditor\n item: ToolbarGroupItem\n}) => {\n const [enabled, setEnabled] = useState<boolean>(true)\n const [active, setActive] = useState<boolean>(false)\n const [className, setClassName] = useState<string>(baseClass)\n const editorConfigContext = useEditorConfigContext()\n\n const updateStates = useCallback(() => {\n editor.getEditorState().read(() => {\n const selection = $getSelection()\n if (item.isActive) {\n const isActive = item.isActive({ editor, editorConfigContext, selection })\n if (active !== isActive) {\n setActive(isActive)\n }\n }\n if (item.isEnabled) {\n const isEnabled = item.isEnabled({ editor, editorConfigContext, selection })\n if (enabled !== isEnabled) {\n setEnabled(isEnabled)\n }\n }\n })\n }, [active, editor, editorConfigContext, enabled, item])\n\n useEffect(() => {\n updateStates()\n }, [updateStates])\n\n useEffect(() => {\n document.addEventListener('mouseup', updateStates)\n return () => {\n document.removeEventListener('mouseup', updateStates)\n }\n }, [updateStates])\n\n useEffect(() => {\n return mergeRegister(\n editor.registerUpdateListener(() => {\n updateStates()\n }),\n )\n }, [editor, updateStates])\n\n useEffect(() => {\n setClassName(\n [\n baseClass,\n enabled === false ? 'disabled' : '',\n active ? 'active' : '',\n item?.key ? `${baseClass}-` + item.key : '',\n ]\n .filter(Boolean)\n .join(' '),\n )\n }, [enabled, active, className, item.key])\n\n return (\n <button\n className={className}\n onClick={() => {\n if (enabled !== false) {\n editor._updateTags = new Set([...editor._updateTags, 'toolbar']) // without setting the tags, our onSelect will not be able to trigger our onChange as focus onChanges are ignored.\n\n editor.focus(() => {\n // We need to wrap the onSelect in the callback, so the editor is properly focused before the onSelect is called.\n item.onSelect({\n editor,\n isActive: active,\n })\n })\n\n return true\n }\n }}\n onMouseDown={(e) => {\n // This fixes a bug where you are unable to click the button if you are in a NESTED editor (editor in blocks field in editor).\n // Thus only happens if you click on the SVG of the button. Clicking on the outside works. Related issue: https://github.com/payloadcms/payload/issues/4025\n // TODO: Find out why exactly it happens and why e.preventDefault() on the mouseDown fixes it. Write that down here, or potentially fix a root cause, if there is any.\n e.preventDefault()\n }}\n type=\"button\"\n >\n {children}\n </button>\n )\n}\n"],"mappings":"AAAA;;;AAGA,SAASA,aAAa,QAAQ;AAC9B,SAASC,aAAa,QAAQ;AAC9B,OAAOC,KAAA,IAASC,WAAW,EAAEC,SAAS,EAAEC,QAAQ,QAAQ;AAIxD,SAASC,sBAAsB,QAAQ;AAGvC,MAAMC,SAAA,GAAY;AAElB,OAAO,MAAMC,aAAA,GAAgBA,CAAC;EAC5BC,QAAQ;EACRC,MAAM;EACNC;AAAI,CAKL;EACC,MAAM,CAACC,OAAA,EAASC,UAAA,CAAW,GAAGR,QAAA,CAAkB;EAChD,MAAM,CAACS,MAAA,EAAQC,SAAA,CAAU,GAAGV,QAAA,CAAkB;EAC9C,MAAM,CAACW,SAAA,EAAWC,YAAA,CAAa,GAAGZ,QAAA,CAAiBE,SAAA;EACnD,MAAMW,mBAAA,GAAsBZ,sBAAA;EAE5B,MAAMa,YAAA,GAAehB,WAAA,CAAY;IAC/BO,MAAA,CAAOU,cAAc,GAAGC,IAAI,CAAC;MAC3B,MAAMC,SAAA,GAAYrB,aAAA;MAClB,IAAIU,IAAA,CAAKY,QAAQ,EAAE;QACjB,MAAMA,QAAA,GAAWZ,IAAA,CAAKY,QAAQ,CAAC;UAAEb,MAAA;UAAQQ,mBAAA;UAAqBI;QAAU;QACxE,IAAIR,MAAA,KAAWS,QAAA,EAAU;UACvBR,SAAA,CAAUQ,QAAA;QACZ;MACF;MACA,IAAIZ,IAAA,CAAKa,SAAS,EAAE;QAClB,MAAMA,SAAA,GAAYb,IAAA,CAAKa,SAAS,CAAC;UAAEd,MAAA;UAAQQ,mBAAA;UAAqBI;QAAU;QAC1E,IAAIV,OAAA,KAAYY,SAAA,EAAW;UACzBX,UAAA,CAAWW,SAAA;QACb;MACF;IACF;EACF,GAAG,CAACV,MAAA,EAAQJ,MAAA,EAAQQ,mBAAA,EAAqBN,OAAA,EAASD,IAAA,CAAK;EAEvDP,SAAA,CAAU;IACRe,YAAA;EACF,GAAG,CAACA,YAAA,CAAa;EAEjBf,SAAA,CAAU;IACRqB,QAAA,CAASC,gBAAgB,CAAC,WAAWP,YAAA;IACrC,OAAO;MACLM,QAAA,CAASE,mBAAmB,CAAC,WAAWR,YAAA;IAC1C;EACF,GAAG,CAACA,YAAA,CAAa;EAEjBf,SAAA,CAAU;IACR,OAAOJ,aAAA,CACLU,MAAA,CAAOkB,sBAAsB,CAAC;MAC5BT,YAAA;IACF;EAEJ,GAAG,CAACT,MAAA,EAAQS,YAAA,CAAa;EAEzBf,SAAA,CAAU;IACRa,YAAA,CACE,CACEV,SAAA,EACAK,OAAA,KAAY,QAAQ,aAAa,IACjCE,MAAA,GAAS,WAAW,IACpBH,IAAA,EAAMkB,GAAA,GAAM,GAAGtB,SAAA,GAAY,GAAGI,IAAA,CAAKkB,GAAG,GAAG,GAC1C,CACEC,MAAM,CAACC,OAAA,EACPC,IAAI,CAAC;EAEZ,GAAG,CAACpB,OAAA,EAASE,MAAA,EAAQE,SAAA,EAAWL,IAAA,CAAKkB,GAAG,CAAC;EAEzC,oBACEI,IAAA,CAAC;IACCjB,SAAA,EAAWA,SAAA;IACXkB,OAAA,EAASA,CAAA;MACP,IAAItB,OAAA,KAAY,OAAO;QACrBF,MAAA,CAAOyB,WAAW,GAAG,IAAIC,GAAA,CAAI,C,GAAI1B,MAAA,CAAOyB,WAAW,EAAE,UAAU,EAAE;QAAA;QAEjEzB,MAAA,CAAO2B,KAAK,CAAC;UACX;UACA1B,IAAA,CAAK2B,QAAQ,CAAC;YACZ5B,MAAA;YACAa,QAAA,EAAUT;UACZ;QACF;QAEA,OAAO;MACT;IACF;IACAyB,WAAA,EAAcC,CAAA;MACZ;MACA;MACA;MACAA,CAAA,CAAEC,cAAc;IAClB;IACAC,IAAA,EAAK;cAEJjC;;AAGP","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["mergeRegister","$getSelection","React","useCallback","useEffect","useState","useEditorConfigContext","baseClass","ToolbarButton","children","editor","item","enabled","setEnabled","active","setActive","className","setClassName","editorConfigContext","updateStates","getEditorState","read","selection","isActive","isEnabled","document","addEventListener","removeEventListener","registerUpdateListener","key","filter","Boolean","join","_jsx","onClick","_updateTags","Set","focus","onSelect","onMouseDown","e","preventDefault","type"],"sources":["../../../../../src/features/toolbars/shared/ToolbarButton/index.tsx"],"sourcesContent":["'use client'\nimport type { LexicalEditor } from 'lexical'\n\nimport { mergeRegister } from '@lexical/utils'\nimport { $getSelection } from 'lexical'\nimport React, { useCallback, useEffect, useState } from 'react'\n\nimport type { ToolbarGroupItem } from '../../types.js'\n\nimport { useEditorConfigContext } from '../../../../lexical/config/client/EditorConfigProvider.js'\nimport './index.scss'\n\nconst baseClass = 'toolbar-popup__button'\n\nexport const ToolbarButton = ({\n children,\n editor,\n item,\n}: {\n children: React.JSX.Element\n editor: LexicalEditor\n item: ToolbarGroupItem\n}) => {\n const [enabled, setEnabled] = useState<boolean>(true)\n const [active, setActive] = useState<boolean>(false)\n const [className, setClassName] = useState<string>(baseClass)\n const editorConfigContext = useEditorConfigContext()\n\n const updateStates = useCallback(() => {\n editor.getEditorState().read(() => {\n const selection = $getSelection()\n if (!selection) {\n return\n }\n if (item.isActive) {\n const isActive = item.isActive({ editor, editorConfigContext, selection })\n if (active !== isActive) {\n setActive(isActive)\n }\n }\n if (item.isEnabled) {\n const isEnabled = item.isEnabled({ editor, editorConfigContext, selection })\n if (enabled !== isEnabled) {\n setEnabled(isEnabled)\n }\n }\n })\n }, [active, editor, editorConfigContext, enabled, item])\n\n useEffect(() => {\n updateStates()\n }, [updateStates])\n\n useEffect(() => {\n document.addEventListener('mouseup', updateStates)\n return () => {\n document.removeEventListener('mouseup', updateStates)\n }\n }, [updateStates])\n\n useEffect(() => {\n return mergeRegister(\n editor.registerUpdateListener(() => {\n updateStates()\n }),\n )\n }, [editor, updateStates])\n\n useEffect(() => {\n setClassName(\n [\n baseClass,\n enabled === false ? 'disabled' : '',\n active ? 'active' : '',\n item?.key ? `${baseClass}-` + item.key : '',\n ]\n .filter(Boolean)\n .join(' '),\n )\n }, [enabled, active, className, item.key])\n\n return (\n <button\n className={className}\n onClick={() => {\n if (enabled !== false) {\n editor._updateTags = new Set([...editor._updateTags, 'toolbar']) // without setting the tags, our onSelect will not be able to trigger our onChange as focus onChanges are ignored.\n\n editor.focus(() => {\n // We need to wrap the onSelect in the callback, so the editor is properly focused before the onSelect is called.\n item.onSelect?.({\n editor,\n isActive: active,\n })\n })\n\n return true\n }\n }}\n onMouseDown={(e) => {\n // This fixes a bug where you are unable to click the button if you are in a NESTED editor (editor in blocks field in editor).\n // Thus only happens if you click on the SVG of the button. Clicking on the outside works. Related issue: https://github.com/payloadcms/payload/issues/4025\n // TODO: Find out why exactly it happens and why e.preventDefault() on the mouseDown fixes it. Write that down here, or potentially fix a root cause, if there is any.\n e.preventDefault()\n }}\n type=\"button\"\n >\n {children}\n </button>\n )\n}\n"],"mappings":"AAAA;;;AAGA,SAASA,aAAa,QAAQ;AAC9B,SAASC,aAAa,QAAQ;AAC9B,OAAOC,KAAA,IAASC,WAAW,EAAEC,SAAS,EAAEC,QAAQ,QAAQ;AAIxD,SAASC,sBAAsB,QAAQ;AAGvC,MAAMC,SAAA,GAAY;AAElB,OAAO,MAAMC,aAAA,GAAgBA,CAAC;EAC5BC,QAAQ;EACRC,MAAM;EACNC;AAAI,CAKL;EACC,MAAM,CAACC,OAAA,EAASC,UAAA,CAAW,GAAGR,QAAA,CAAkB;EAChD,MAAM,CAACS,MAAA,EAAQC,SAAA,CAAU,GAAGV,QAAA,CAAkB;EAC9C,MAAM,CAACW,SAAA,EAAWC,YAAA,CAAa,GAAGZ,QAAA,CAAiBE,SAAA;EACnD,MAAMW,mBAAA,GAAsBZ,sBAAA;EAE5B,MAAMa,YAAA,GAAehB,WAAA,CAAY;IAC/BO,MAAA,CAAOU,cAAc,GAAGC,IAAI,CAAC;MAC3B,MAAMC,SAAA,GAAYrB,aAAA;MAClB,IAAI,CAACqB,SAAA,EAAW;QACd;MACF;MACA,IAAIX,IAAA,CAAKY,QAAQ,EAAE;QACjB,MAAMA,QAAA,GAAWZ,IAAA,CAAKY,QAAQ,CAAC;UAAEb,MAAA;UAAQQ,mBAAA;UAAqBI;QAAU;QACxE,IAAIR,MAAA,KAAWS,QAAA,EAAU;UACvBR,SAAA,CAAUQ,QAAA;QACZ;MACF;MACA,IAAIZ,IAAA,CAAKa,SAAS,EAAE;QAClB,MAAMA,SAAA,GAAYb,IAAA,CAAKa,SAAS,CAAC;UAAEd,MAAA;UAAQQ,mBAAA;UAAqBI;QAAU;QAC1E,IAAIV,OAAA,KAAYY,SAAA,EAAW;UACzBX,UAAA,CAAWW,SAAA;QACb;MACF;IACF;EACF,GAAG,CAACV,MAAA,EAAQJ,MAAA,EAAQQ,mBAAA,EAAqBN,OAAA,EAASD,IAAA,CAAK;EAEvDP,SAAA,CAAU;IACRe,YAAA;EACF,GAAG,CAACA,YAAA,CAAa;EAEjBf,SAAA,CAAU;IACRqB,QAAA,CAASC,gBAAgB,CAAC,WAAWP,YAAA;IACrC,OAAO;MACLM,QAAA,CAASE,mBAAmB,CAAC,WAAWR,YAAA;IAC1C;EACF,GAAG,CAACA,YAAA,CAAa;EAEjBf,SAAA,CAAU;IACR,OAAOJ,aAAA,CACLU,MAAA,CAAOkB,sBAAsB,CAAC;MAC5BT,YAAA;IACF;EAEJ,GAAG,CAACT,MAAA,EAAQS,YAAA,CAAa;EAEzBf,SAAA,CAAU;IACRa,YAAA,CACE,CACEV,SAAA,EACAK,OAAA,KAAY,QAAQ,aAAa,IACjCE,MAAA,GAAS,WAAW,IACpBH,IAAA,EAAMkB,GAAA,GAAM,GAAGtB,SAAA,GAAY,GAAGI,IAAA,CAAKkB,GAAG,GAAG,GAC1C,CACEC,MAAM,CAACC,OAAA,EACPC,IAAI,CAAC;EAEZ,GAAG,CAACpB,OAAA,EAASE,MAAA,EAAQE,SAAA,EAAWL,IAAA,CAAKkB,GAAG,CAAC;EAEzC,oBACEI,IAAA,CAAC;IACCjB,SAAA,EAAWA,SAAA;IACXkB,OAAA,EAASA,CAAA;MACP,IAAItB,OAAA,KAAY,OAAO;QACrBF,MAAA,CAAOyB,WAAW,GAAG,IAAIC,GAAA,CAAI,C,GAAI1B,MAAA,CAAOyB,WAAW,EAAE,UAAU,EAAE;QAAA;QAEjEzB,MAAA,CAAO2B,KAAK,CAAC;UACX;UACA1B,IAAA,CAAK2B,QAAQ,GAAG;YACd5B,MAAA;YACAa,QAAA,EAAUT;UACZ;QACF;QAEA,OAAO;MACT;IACF;IACAyB,WAAA,EAAcC,CAAA;MACZ;MACA;MACA;MACAA,CAAA,CAAEC,cAAc;IAClB;IACAC,IAAA,EAAK;cAEJjC;;AAGP","ignoreList":[]}
@@ -38,7 +38,7 @@ export function DropDownItem({
38
38
  ;
39
39
  editor.focus(() => {
40
40
  // We need to wrap the onSelect in the callback, so the editor is properly focused before the onSelect is called.
41
- item.onSelect({
41
+ item.onSelect?.({
42
42
  editor,
43
43
  isActive: active
44
44
  });