@payloadcms/richtext-lexical 3.0.2 → 3.0.3-canary.5abb7d5

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 (162) hide show
  1. package/dist/exports/client/Field-CO3ZH6ER.js +2 -0
  2. package/dist/exports/client/Field-CO3ZH6ER.js.map +7 -0
  3. package/dist/exports/client/RelationshipComponent-XOQBVKA3.js +2 -0
  4. package/dist/exports/client/RelationshipComponent-XOQBVKA3.js.map +7 -0
  5. package/dist/exports/client/bundled.css +1 -1
  6. package/dist/exports/client/{chunk-C7S3V4EB.js → chunk-DOK5S7LE.js} +2 -2
  7. package/dist/exports/client/chunk-DOK5S7LE.js.map +7 -0
  8. package/dist/exports/client/{chunk-U7O7EYCP.js → chunk-FBDJRK3A.js} +2 -2
  9. package/dist/exports/client/{chunk-U7O7EYCP.js.map → chunk-FBDJRK3A.js.map} +2 -2
  10. package/dist/exports/client/chunk-LMCV6WAN.js +12 -0
  11. package/dist/exports/client/chunk-LMCV6WAN.js.map +7 -0
  12. package/dist/exports/client/chunk-ZTAS32RX.js +2 -0
  13. package/dist/exports/client/{chunk-MI5HS4QX.js.map → chunk-ZTAS32RX.js.map} +3 -3
  14. package/dist/exports/client/{component-H3EYQ5KG.js → component-D6PKVJ2K.js} +2 -2
  15. package/dist/exports/client/component-D6PKVJ2K.js.map +7 -0
  16. package/dist/exports/client/componentInline-XC7SFQPN.js +2 -0
  17. package/dist/exports/client/index.d.ts +3 -0
  18. package/dist/exports/client/index.d.ts.map +1 -1
  19. package/dist/exports/client/index.js +11 -11
  20. package/dist/exports/client/index.js.map +3 -3
  21. package/dist/exports/server/ast/mdx.d.ts.map +1 -1
  22. package/dist/exports/server/ast/mdx.js +6 -0
  23. package/dist/exports/server/ast/mdx.js.map +1 -1
  24. package/dist/features/blockquote/server/index.d.ts.map +1 -1
  25. package/dist/features/blockquote/server/index.js +2 -1
  26. package/dist/features/blockquote/server/index.js.map +1 -1
  27. package/dist/features/blocks/client/component/index.d.ts.map +1 -1
  28. package/dist/features/blocks/client/component/index.js +2 -0
  29. package/dist/features/blocks/client/component/index.js.map +1 -1
  30. package/dist/features/blocks/client/componentInline/components/InlineBlockContainer.d.ts +1 -1
  31. package/dist/features/blocks/client/componentInline/components/InlineBlockContainer.d.ts.map +1 -1
  32. package/dist/features/blocks/client/componentInline/components/InlineBlockContainer.js.map +1 -1
  33. package/dist/features/blocks/client/componentInline/index.d.ts.map +1 -1
  34. package/dist/features/blocks/client/componentInline/index.js +2 -0
  35. package/dist/features/blocks/client/componentInline/index.js.map +1 -1
  36. package/dist/features/blocks/client/index.d.ts.map +1 -1
  37. package/dist/features/blocks/client/index.js.map +1 -1
  38. package/dist/features/blocks/server/graphQLPopulationPromise.d.ts.map +1 -1
  39. package/dist/features/blocks/server/graphQLPopulationPromise.js.map +1 -1
  40. package/dist/features/converters/html/converter/converters/paragraph.d.ts.map +1 -1
  41. package/dist/features/converters/html/converter/converters/paragraph.js +2 -1
  42. package/dist/features/converters/html/converter/converters/paragraph.js.map +1 -1
  43. package/dist/features/converters/html/converter/defaultConverters.d.ts +1 -1
  44. package/dist/features/converters/html/converter/defaultConverters.d.ts.map +1 -1
  45. package/dist/features/converters/html/converter/defaultConverters.js.map +1 -1
  46. package/dist/features/experimental_table/client/plugins/TableCellResizerPlugin/index.d.ts.map +1 -1
  47. package/dist/features/experimental_table/client/plugins/TableCellResizerPlugin/index.js +23 -17
  48. package/dist/features/experimental_table/client/plugins/TableCellResizerPlugin/index.js.map +1 -1
  49. package/dist/features/experimental_table/client/plugins/TableHoverActionsPlugin/index.d.ts.map +1 -1
  50. package/dist/features/experimental_table/client/plugins/TableHoverActionsPlugin/index.js +4 -2
  51. package/dist/features/experimental_table/client/plugins/TableHoverActionsPlugin/index.js.map +1 -1
  52. package/dist/features/experimental_table/client/utils/debounce.d.ts.map +1 -1
  53. package/dist/features/experimental_table/client/utils/debounce.js +3 -0
  54. package/dist/features/experimental_table/client/utils/debounce.js.map +1 -1
  55. package/dist/features/experimental_table/client/utils/useDebounce.d.ts +1 -5
  56. package/dist/features/experimental_table/client/utils/useDebounce.d.ts.map +1 -1
  57. package/dist/features/experimental_table/client/utils/useDebounce.js +40 -10
  58. package/dist/features/experimental_table/client/utils/useDebounce.js.map +1 -1
  59. package/dist/features/heading/server/index.d.ts.map +1 -1
  60. package/dist/features/heading/server/index.js +2 -1
  61. package/dist/features/heading/server/index.js.map +1 -1
  62. package/dist/features/lists/checklist/server/index.js.map +1 -1
  63. package/dist/features/lists/orderedList/server/index.js.map +1 -1
  64. package/dist/features/lists/unorderedList/server/index.js.map +1 -1
  65. package/dist/features/relationship/client/components/RelationshipComponent.d.ts.map +1 -1
  66. package/dist/features/relationship/client/components/RelationshipComponent.js +1 -3
  67. package/dist/features/relationship/client/components/RelationshipComponent.js.map +1 -1
  68. package/dist/features/relationship/client/drawer/index.js.map +1 -1
  69. package/dist/features/relationship/server/nodes/RelationshipNode.d.ts +1 -1
  70. package/dist/features/relationship/server/nodes/RelationshipNode.d.ts.map +1 -1
  71. package/dist/features/relationship/server/nodes/RelationshipNode.js +3 -3
  72. package/dist/features/relationship/server/nodes/RelationshipNode.js.map +1 -1
  73. package/dist/features/toolbars/fixed/client/Toolbar/index.d.ts +2 -2
  74. package/dist/features/toolbars/fixed/client/Toolbar/index.d.ts.map +1 -1
  75. package/dist/features/toolbars/fixed/client/Toolbar/index.js +51 -69
  76. package/dist/features/toolbars/fixed/client/Toolbar/index.js.map +1 -1
  77. package/dist/features/toolbars/inline/client/Toolbar/index.js +31 -51
  78. package/dist/features/toolbars/inline/client/Toolbar/index.js.map +1 -1
  79. package/dist/features/toolbars/shared/ToolbarButton/index.d.ts.map +1 -1
  80. package/dist/features/toolbars/shared/ToolbarButton/index.js +152 -62
  81. package/dist/features/toolbars/shared/ToolbarButton/index.js.map +1 -1
  82. package/dist/features/toolbars/shared/ToolbarDropdown/DropDown.d.ts +1 -1
  83. package/dist/features/toolbars/shared/ToolbarDropdown/DropDown.d.ts.map +1 -1
  84. package/dist/features/toolbars/shared/ToolbarDropdown/DropDown.js +4 -2
  85. package/dist/features/toolbars/shared/ToolbarDropdown/DropDown.js.map +1 -1
  86. package/dist/features/toolbars/shared/ToolbarDropdown/index.d.ts.map +1 -1
  87. package/dist/features/toolbars/shared/ToolbarDropdown/index.js +8 -20
  88. package/dist/features/toolbars/shared/ToolbarDropdown/index.js.map +1 -1
  89. package/dist/features/typesClient.d.ts +39 -36
  90. package/dist/features/typesClient.d.ts.map +1 -1
  91. package/dist/features/typesClient.js.map +1 -1
  92. package/dist/features/typesServer.d.ts.map +1 -1
  93. package/dist/features/typesServer.js.map +1 -1
  94. package/dist/features/upload/client/component/index.js.map +1 -1
  95. package/dist/features/upload/client/drawer/index.js.map +1 -1
  96. package/dist/features/upload/client/nodes/UploadNode.d.ts +1 -1
  97. package/dist/features/upload/client/nodes/UploadNode.d.ts.map +1 -1
  98. package/dist/features/upload/client/nodes/UploadNode.js.map +1 -1
  99. package/dist/features/upload/client/plugin/index.d.ts +2 -2
  100. package/dist/features/upload/client/plugin/index.d.ts.map +1 -1
  101. package/dist/features/upload/client/plugin/index.js.map +1 -1
  102. package/dist/features/upload/server/nodes/UploadNode.d.ts +1 -1
  103. package/dist/features/upload/server/nodes/UploadNode.d.ts.map +1 -1
  104. package/dist/features/upload/server/nodes/UploadNode.js.map +1 -1
  105. package/dist/field/Field.d.ts +1 -1
  106. package/dist/field/Field.d.ts.map +1 -1
  107. package/dist/field/Field.js +2 -1
  108. package/dist/field/Field.js.map +1 -1
  109. package/dist/field/bundled.css +1 -1
  110. package/dist/field/rscEntry.js +1 -1
  111. package/dist/field/rscEntry.js.map +1 -1
  112. package/dist/index.d.ts.map +1 -1
  113. package/dist/index.js +5 -0
  114. package/dist/index.js.map +1 -1
  115. package/dist/lexical/LexicalProvider.d.ts.map +1 -1
  116. package/dist/lexical/LexicalProvider.js.map +1 -1
  117. package/dist/lexical/config/client/sanitize.js.map +1 -1
  118. package/dist/lexical/config/server/sanitize.d.ts.map +1 -1
  119. package/dist/lexical/config/server/sanitize.js +1 -0
  120. package/dist/lexical/config/server/sanitize.js.map +1 -1
  121. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.d.ts +2 -3
  122. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.d.ts.map +1 -1
  123. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.js +139 -88
  124. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.js.map +1 -1
  125. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.d.ts +2 -3
  126. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.d.ts.map +1 -1
  127. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.js +4 -7
  128. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.js.map +1 -1
  129. package/dist/lexical/plugins/SlashMenu/index.d.ts.map +1 -1
  130. package/dist/lexical/plugins/SlashMenu/index.js +8 -14
  131. package/dist/lexical/plugins/SlashMenu/index.js.map +1 -1
  132. package/dist/lexical/plugins/handles/AddBlockHandlePlugin/index.d.ts.map +1 -1
  133. package/dist/lexical/plugins/handles/AddBlockHandlePlugin/index.js +1 -0
  134. package/dist/lexical/plugins/handles/AddBlockHandlePlugin/index.js.map +1 -1
  135. package/dist/lexical/plugins/handles/DraggableBlockPlugin/debounce.d.ts +1 -1
  136. package/dist/lexical/plugins/handles/DraggableBlockPlugin/debounce.d.ts.map +1 -1
  137. package/dist/lexical/plugins/handles/DraggableBlockPlugin/debounce.js +1 -1
  138. package/dist/lexical/plugins/handles/DraggableBlockPlugin/debounce.js.map +1 -1
  139. package/dist/utilities/fieldsDrawer/DrawerContent.js.map +1 -1
  140. package/dist/utilities/generateImportMap.d.ts.map +1 -1
  141. package/dist/utilities/generateImportMap.js +4 -1
  142. package/dist/utilities/generateImportMap.js.map +1 -1
  143. package/dist/utilities/jsx/jsx.d.ts.map +1 -1
  144. package/dist/utilities/jsx/jsx.js +1 -0
  145. package/dist/utilities/jsx/jsx.js.map +1 -1
  146. package/dist/utilities/migrateSlateToLexical/index.d.ts.map +1 -1
  147. package/dist/utilities/migrateSlateToLexical/index.js +1 -1
  148. package/dist/utilities/migrateSlateToLexical/index.js.map +1 -1
  149. package/dist/validate/index.d.ts.map +1 -1
  150. package/dist/validate/index.js.map +1 -1
  151. package/package.json +6 -6
  152. package/dist/exports/client/Field-IS3XMKMO.js +0 -2
  153. package/dist/exports/client/Field-IS3XMKMO.js.map +0 -7
  154. package/dist/exports/client/RelationshipComponent-2RT3YXUT.js +0 -2
  155. package/dist/exports/client/RelationshipComponent-2RT3YXUT.js.map +0 -7
  156. package/dist/exports/client/chunk-C7S3V4EB.js.map +0 -7
  157. package/dist/exports/client/chunk-CBUZKU7S.js +0 -12
  158. package/dist/exports/client/chunk-CBUZKU7S.js.map +0 -7
  159. package/dist/exports/client/chunk-MI5HS4QX.js +0 -2
  160. package/dist/exports/client/component-H3EYQ5KG.js.map +0 -7
  161. package/dist/exports/client/componentInline-ZGO3K4TA.js +0 -2
  162. /package/dist/exports/client/{componentInline-ZGO3K4TA.js.map → componentInline-XC7SFQPN.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"LexicalMenu.d.ts","sourceRoot":"","sources":["../../../../../src/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAY,MAAM,SAAS,CAAA;AACtE,OAAO,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAiBxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,KAAK,EAAE,sBAAsB,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAI9F,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,EAAE,MAAM,OAAO,CAAA;IACtB,KAAK,CAAC,EAAE,aAAa,CAAA;CACtB,CAAA;AAID,MAAM,MAAM,YAAY,GAAG,CACzB,gBAAgB,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,EAC/C,SAAS,EAAE;IACT,MAAM,EAAE,KAAK,CAAC,sBAAsB,CAAC,CAAA;IACrC,eAAe,EAAE,IAAI,GAAG,MAAM,CAAA;IAC9B,oBAAoB,EAAE,CAAC,YAAY,EAAE,aAAa,KAAK,IAAI,CAAA;IAC3D,kBAAkB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;CAC9C,EACD,cAAc,EAAE,IAAI,GAAG,MAAM,KAC1B,GAAG,CAAC,OAAO,GAAG,IAAI,GAAG,WAAW,CAAA;AA2ErC,wBAAgB,eAAe,CAC7B,OAAO,EAAE,WAAW,EACpB,aAAa,EAAE,OAAO,GACrB,eAAe,GAAG,WAAW,CAiB/B;AAYD,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,cAAc,GAAG,IAAI,EACjC,aAAa,EAAE,WAAW,GAAG,IAAI,EACjC,YAAY,EAAE,MAAM,IAAI,EACxB,kBAAkB,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,QA2CjD;AAED,eAAO,MAAM,yCAAyC,EAAE,cAAc,CAAC;IACrE,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,qBAAqB,CAAA;CAC5B,CAA8D,CAAA;AAE/D,wBAAgB,WAAW,CAAC,EAC1B,gBAAgB,EAChB,KAAK,EACL,MAAM,EAEN,MAAM,EACN,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,wBAAgC,GACjC,EAAE;IACD,gBAAgB,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAA;IAC/C,KAAK,EAAE,MAAM,IAAI,CAAA;IACjB,MAAM,EAAE,aAAa,CAAA;IACrB,MAAM,EAAE,KAAK,CAAC,sBAAsB,CAAC,CAAA;IACrC,YAAY,EAAE,YAAY,CAAA;IAC1B,YAAY,EAAE,CAAC,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,IAAI,EAAE,cAAc,EAAE,MAAM,KAAK,IAAI,CAAA;IAC1F,UAAU,EAAE,cAAc,CAAA;IAC1B,wBAAwB,CAAC,EAAE,OAAO,CAAA;CACnC,GAAG,GAAG,CAAC,OAAO,GAAG,IAAI,CAiNrB;AAED,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,WAAW,EACvB,UAAU,EAAE,cAAc,GAAG,IAAI,EACjC,aAAa,EAAE,CAAC,CAAC,EAAE,cAAc,GAAG,IAAI,KAAK,IAAI,EACjD,SAAS,CAAC,EAAE,MAAM,GACjB,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAkG/B"}
1
+ {"version":3,"file":"LexicalMenu.d.ts","sourceRoot":"","sources":["../../../../../src/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAY,MAAM,SAAS,CAAA;AACtE,OAAO,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAiBxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,KAAK,EAAE,sBAAsB,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAI9F,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,EAAE,MAAM,OAAO,CAAA;IACtB,KAAK,CAAC,EAAE,aAAa,CAAA;CACtB,CAAA;AAID,MAAM,MAAM,YAAY,GAAG,CACzB,gBAAgB,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,EAC/C,SAAS,EAAE;IACT,MAAM,EAAE,KAAK,CAAC,sBAAsB,CAAC,CAAA;IACrC,eAAe,EAAE,IAAI,GAAG,MAAM,CAAA;IAC9B,oBAAoB,EAAE,CAAC,YAAY,EAAE,aAAa,KAAK,IAAI,CAAA;IAC3D,kBAAkB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;CAC9C,EACD,cAAc,EAAE,IAAI,GAAG,MAAM,KAC1B,GAAG,CAAC,OAAO,GAAG,IAAI,GAAG,WAAW,CAAA;AA2ErC,wBAAgB,eAAe,CAC7B,OAAO,EAAE,WAAW,EACpB,aAAa,EAAE,OAAO,GACrB,eAAe,GAAG,WAAW,CAiB/B;AAYD,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,cAAc,GAAG,IAAI,EACjC,gBAAgB,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,EAC/C,YAAY,EAAE,MAAM,IAAI,EACxB,kBAAkB,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,QA4CjD;AAED,eAAO,MAAM,yCAAyC,EAAE,cAAc,CAAC;IACrE,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,qBAAqB,CAAA;CAC5B,CAA8D,CAAA;AAE/D,wBAAgB,WAAW,CAAC,EAC1B,gBAAgB,EAChB,KAAK,EACL,MAAM,EAEN,MAAM,EACN,YAAY,EACZ,UAAU,EACV,wBAAgC,GACjC,EAAE;IACD,gBAAgB,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAA;IAC/C,KAAK,EAAE,MAAM,IAAI,CAAA;IACjB,MAAM,EAAE,aAAa,CAAA;IACrB,MAAM,EAAE,KAAK,CAAC,sBAAsB,CAAC,CAAA;IACrC,YAAY,EAAE,YAAY,CAAA;IAC1B,UAAU,EAAE,cAAc,CAAA;IAC1B,wBAAwB,CAAC,EAAE,OAAO,CAAA;CACnC,GAAG,GAAG,CAAC,OAAO,GAAG,IAAI,CAyNrB;AAED,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,WAAW,EACvB,UAAU,EAAE,cAAc,GAAG,IAAI,EACjC,aAAa,EAAE,CAAC,CAAC,EAAE,cAAc,GAAG,IAAI,KAAK,IAAI,EACjD,SAAS,CAAC,EAAE,MAAM,GACjB,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAkG/B"}
@@ -98,13 +98,13 @@ function isTriggerVisibleInNearestScrollContainer(targetElement, containerElemen
98
98
  return tRect.top > cRect.top && tRect.top < cRect.bottom;
99
99
  }
100
100
  // Reposition the menu on scroll, window resize, and element resize.
101
- export function useDynamicPositioning(resolution, targetElement, onReposition, onVisibilityChange) {
102
- const $ = _c(7);
101
+ export function useDynamicPositioning(resolution, targetElementRef, onReposition, onVisibilityChange) {
102
+ const $ = _c(12);
103
103
  const [editor] = useLexicalComposerContext();
104
104
  let t0;
105
- let t1;
106
- if ($[0] !== targetElement || $[1] !== resolution || $[2] !== editor || $[3] !== onReposition || $[4] !== onVisibilityChange) {
105
+ if ($[0] !== targetElementRef.current || $[1] !== resolution || $[2] !== editor || $[3] !== onReposition || $[4] !== onVisibilityChange) {
107
106
  t0 = () => {
107
+ const targetElement = targetElementRef.current;
108
108
  if (targetElement != null && resolution != null) {
109
109
  const rootElement = editor.getRootElement();
110
110
  const rootScrollParent = rootElement != null ? getScrollParent(rootElement, false) : document.body;
@@ -136,23 +136,32 @@ export function useDynamicPositioning(resolution, targetElement, onReposition, o
136
136
  });
137
137
  resizeObserver.observe(targetElement);
138
138
  return () => {
139
- resizeObserver.unobserve(targetElement);
139
+ resizeObserver.disconnect();
140
140
  window.removeEventListener("resize", onReposition);
141
141
  document.removeEventListener("scroll", handleScroll, true);
142
142
  };
143
143
  }
144
144
  };
145
- t1 = [targetElement, editor, onVisibilityChange, onReposition, resolution];
146
- $[0] = targetElement;
145
+ $[0] = targetElementRef.current;
147
146
  $[1] = resolution;
148
147
  $[2] = editor;
149
148
  $[3] = onReposition;
150
149
  $[4] = onVisibilityChange;
151
150
  $[5] = t0;
152
- $[6] = t1;
153
151
  } else {
154
152
  t0 = $[5];
155
- t1 = $[6];
153
+ }
154
+ let t1;
155
+ if ($[6] !== editor || $[7] !== onVisibilityChange || $[8] !== onReposition || $[9] !== resolution || $[10] !== targetElementRef) {
156
+ t1 = [editor, onVisibilityChange, onReposition, resolution, targetElementRef];
157
+ $[6] = editor;
158
+ $[7] = onVisibilityChange;
159
+ $[8] = onReposition;
160
+ $[9] = resolution;
161
+ $[10] = targetElementRef;
162
+ $[11] = t1;
163
+ } else {
164
+ t1 = $[11];
156
165
  }
157
166
  useEffect(t0, t1);
158
167
  }
@@ -164,7 +173,6 @@ export function LexicalMenu({
164
173
  // groups filtering is already handled in SlashMenu/index.tsx. Thus, groups always contains the matching items.
165
174
  groups,
166
175
  menuRenderFn,
167
- onSelectItem,
168
176
  resolution,
169
177
  shouldSplitNodeWithQuery = false
170
178
  }) {
@@ -192,16 +200,21 @@ export function LexicalMenu({
192
200
  setSelectedItemKeyToFirstMatchingItem();
193
201
  }, [matchingString, setSelectedItemKeyToFirstMatchingItem]);
194
202
  const selectItemAndCleanUp = useCallback(selectedItem => {
203
+ close();
195
204
  editor.update(() => {
196
205
  const textNodeContainingQuery = resolution.match != null && shouldSplitNodeWithQuery ? $splitNodeContainingQuery(resolution.match) : null;
197
206
  if (textNodeContainingQuery) {
198
207
  textNodeContainingQuery.remove();
199
208
  }
200
209
  }, {
201
- discrete: true
210
+ onUpdate() {
211
+ selectedItem.onSelect({
212
+ editor,
213
+ queryString: resolution.match ? resolution.match.matchingString : ''
214
+ });
215
+ }
202
216
  });
203
- onSelectItem(selectedItem, close, resolution.match ? resolution.match.matchingString : '');
204
- }, [editor, shouldSplitNodeWithQuery, resolution.match, onSelectItem, close]);
217
+ }, [editor, shouldSplitNodeWithQuery, resolution.match, close]);
205
218
  useEffect(() => {
206
219
  return () => {
207
220
  const rootElem_0 = editor.getRootElement();
@@ -308,88 +321,126 @@ export function LexicalMenu({
308
321
  return menuRenderFn(anchorElementRef, listItemProps, resolution.match ? resolution.match.matchingString : '');
309
322
  }
310
323
  export function useMenuAnchorRef(anchorElem, resolution, setResolution, className) {
324
+ const $ = _c(14);
311
325
  const [editor] = useLexicalComposerContext();
312
- const anchorElementRef = useRef(CAN_USE_DOM ? document.createElement('div') : null);
313
- const positionMenu = useCallback(() => {
314
- if (anchorElementRef.current === null || parent === undefined) {
315
- return;
316
- }
317
- const rootElement = editor.getRootElement();
318
- const containerDiv = anchorElementRef.current;
319
- const VERTICAL_OFFSET = 32;
320
- const menuEle = containerDiv.firstChild;
321
- if (rootElement !== null && resolution !== null) {
322
- const {
323
- height,
324
- width
325
- } = resolution.getRect();
326
- let {
327
- left,
328
- top
329
- } = resolution.getRect();
330
- const rawTop = top;
331
- top -= anchorElem.getBoundingClientRect().top + window.scrollY;
332
- left -= anchorElem.getBoundingClientRect().left + window.scrollX;
333
- containerDiv.style.left = `${left + window.scrollX}px`;
334
- containerDiv.style.height = `${height}px`;
335
- containerDiv.style.width = `${width}px`;
336
- if (menuEle !== null) {
337
- const menuRect = menuEle.getBoundingClientRect();
338
- const menuHeight = menuRect.height;
339
- const menuWidth = menuRect.width;
340
- const rootElementRect = rootElement.getBoundingClientRect();
341
- if (left + menuWidth > rootElementRect.right) {
342
- containerDiv.style.left = `${rootElementRect.right - menuWidth + window.scrollX}px`;
326
+ let t0;
327
+ if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
328
+ t0 = CAN_USE_DOM ? document.createElement("div") : null;
329
+ $[0] = t0;
330
+ } else {
331
+ t0 = $[0];
332
+ }
333
+ const anchorElementRef = useRef(t0);
334
+ let t1;
335
+ if ($[1] !== editor || $[2] !== resolution || $[3] !== anchorElem || $[4] !== className) {
336
+ t1 = () => {
337
+ if (anchorElementRef.current === null || parent === undefined) {
338
+ return;
339
+ }
340
+ const rootElement = editor.getRootElement();
341
+ const containerDiv = anchorElementRef.current;
342
+ const menuEle = containerDiv.firstChild;
343
+ if (rootElement !== null && resolution !== null) {
344
+ const {
345
+ height,
346
+ width
347
+ } = resolution.getRect();
348
+ let {
349
+ left,
350
+ top
351
+ } = resolution.getRect();
352
+ const rawTop = top;
353
+ top = top - (anchorElem.getBoundingClientRect().top + window.scrollY);
354
+ left = left - (anchorElem.getBoundingClientRect().left + window.scrollX);
355
+ containerDiv.style.left = `${left + window.scrollX}px`;
356
+ containerDiv.style.height = `${height}px`;
357
+ containerDiv.style.width = `${width}px`;
358
+ if (menuEle !== null) {
359
+ const menuRect = menuEle.getBoundingClientRect();
360
+ const menuHeight = menuRect.height;
361
+ const menuWidth = menuRect.width;
362
+ const rootElementRect = rootElement.getBoundingClientRect();
363
+ if (left + menuWidth > rootElementRect.right) {
364
+ containerDiv.style.left = `${rootElementRect.right - menuWidth + window.scrollX}px`;
365
+ }
366
+ const wouldGoOffBottomOfScreen = rawTop + menuHeight + 32 > window.innerHeight;
367
+ const wouldGoOffTopOfScreen = rawTop < 0;
368
+ if (wouldGoOffBottomOfScreen && !wouldGoOffTopOfScreen) {
369
+ containerDiv.style.top = `${top + 32 - menuHeight + window.scrollY - (height + 24)}px`;
370
+ } else {
371
+ containerDiv.style.top = `${top + window.scrollY + 32}px`;
372
+ }
343
373
  }
344
- const wouldGoOffBottomOfScreen = rawTop + menuHeight + VERTICAL_OFFSET > window.innerHeight;
345
- //const wouldGoOffBottomOfContainer = top + menuHeight > rootElementRect.bottom
346
- const wouldGoOffTopOfScreen = rawTop < 0;
347
- // Position slash menu above the cursor instead of below (default) if it would otherwise go off the bottom of the screen.
348
- if (wouldGoOffBottomOfScreen && !wouldGoOffTopOfScreen) {
349
- const margin = 24;
350
- containerDiv.style.top = `${top + VERTICAL_OFFSET - menuHeight + window.scrollY - (height + margin)}px`;
351
- } else {
352
- containerDiv.style.top = `${top + window.scrollY + VERTICAL_OFFSET}px`;
374
+ if (!containerDiv.isConnected) {
375
+ if (className != null) {
376
+ containerDiv.className = className;
377
+ }
378
+ containerDiv.setAttribute("aria-label", "Slash menu");
379
+ containerDiv.setAttribute("id", "slash-menu");
380
+ containerDiv.setAttribute("role", "listbox");
381
+ containerDiv.style.display = "block";
382
+ containerDiv.style.position = "absolute";
383
+ anchorElem.append(containerDiv);
353
384
  }
385
+ anchorElementRef.current = containerDiv;
386
+ rootElement.setAttribute("aria-controls", "slash-menu");
354
387
  }
355
- if (!containerDiv.isConnected) {
356
- if (className != null) {
357
- containerDiv.className = className;
358
- }
359
- containerDiv.setAttribute('aria-label', 'Slash menu');
360
- containerDiv.setAttribute('id', 'slash-menu');
361
- containerDiv.setAttribute('role', 'listbox');
362
- containerDiv.style.display = 'block';
363
- containerDiv.style.position = 'absolute';
364
- anchorElem.append(containerDiv);
388
+ };
389
+ $[1] = editor;
390
+ $[2] = resolution;
391
+ $[3] = anchorElem;
392
+ $[4] = className;
393
+ $[5] = t1;
394
+ } else {
395
+ t1 = $[5];
396
+ }
397
+ const positionMenu = t1;
398
+ let t2;
399
+ let t3;
400
+ if ($[6] !== editor || $[7] !== resolution || $[8] !== positionMenu) {
401
+ t2 = () => {
402
+ const rootElement_0 = editor.getRootElement();
403
+ if (resolution !== null) {
404
+ positionMenu();
405
+ return () => {
406
+ if (rootElement_0 !== null) {
407
+ rootElement_0.removeAttribute("aria-controls");
408
+ }
409
+ const containerDiv_0 = anchorElementRef.current;
410
+ if (containerDiv_0 !== null && containerDiv_0.isConnected) {
411
+ containerDiv_0.remove();
412
+ }
413
+ };
365
414
  }
366
- anchorElementRef.current = containerDiv;
367
- rootElement.setAttribute('aria-controls', 'slash-menu');
368
- }
369
- }, [editor, resolution, className, anchorElem]);
370
- useEffect(() => {
371
- const rootElement_0 = editor.getRootElement();
372
- if (resolution !== null) {
373
- positionMenu();
374
- return () => {
375
- if (rootElement_0 !== null) {
376
- rootElement_0.removeAttribute('aria-controls');
377
- }
378
- const containerDiv_0 = anchorElementRef.current;
379
- if (containerDiv_0 !== null && containerDiv_0.isConnected) {
380
- containerDiv_0.remove();
415
+ };
416
+ t3 = [editor, positionMenu, resolution];
417
+ $[6] = editor;
418
+ $[7] = resolution;
419
+ $[8] = positionMenu;
420
+ $[9] = t2;
421
+ $[10] = t3;
422
+ } else {
423
+ t2 = $[9];
424
+ t3 = $[10];
425
+ }
426
+ useEffect(t2, t3);
427
+ let t4;
428
+ if ($[11] !== resolution || $[12] !== setResolution) {
429
+ t4 = isInView => {
430
+ if (resolution !== null) {
431
+ if (!isInView) {
432
+ setResolution(null);
381
433
  }
382
- };
383
- }
384
- }, [editor, positionMenu, resolution]);
385
- const onVisibilityChange = useCallback(isInView => {
386
- if (resolution !== null) {
387
- if (!isInView) {
388
- setResolution(null);
389
434
  }
390
- }
391
- }, [resolution, setResolution]);
392
- useDynamicPositioning(resolution, anchorElementRef.current, positionMenu, onVisibilityChange);
435
+ };
436
+ $[11] = resolution;
437
+ $[12] = setResolution;
438
+ $[13] = t4;
439
+ } else {
440
+ t4 = $[13];
441
+ }
442
+ const onVisibilityChange = t4;
443
+ useDynamicPositioning(resolution, anchorElementRef, positionMenu, onVisibilityChange);
393
444
  return anchorElementRef;
394
445
  }
395
446
  //# sourceMappingURL=LexicalMenu.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"LexicalMenu.js","names":["c","_c","useLexicalComposerContext","mergeRegister","$getSelection","$isRangeSelection","COMMAND_PRIORITY_LOW","createCommand","KEY_ARROW_DOWN_COMMAND","KEY_ARROW_UP_COMMAND","KEY_ENTER_COMMAND","KEY_ESCAPE_COMMAND","KEY_TAB_COMMAND","useCallback","useEffect","useLayoutEffect","useMemo","useRef","useState","CAN_USE_DOM","baseClass","scrollIntoViewIfNeeded","target","typeaheadContainerNode","document","getElementById","typeaheadRect","getBoundingClientRect","top","height","window","innerHeight","scrollIntoView","block","getFullMatchOffset","documentText","entryText","offset","triggerOffset","i","length","substring","$splitNodeContainingQuery","match","selection","isCollapsed","anchor","type","anchorNode","getNode","isSimpleText","selectionOffset","textContent","getTextContent","slice","characterOffset","replaceableString","queryOffset","matchingString","startOffset","newNode","splitText","getScrollParent","element","includeHidden","style","getComputedStyle","excludeStaticParent","position","overflowRegex","body","parent1","parentElement","test","overflow","overflowY","overflowX","isTriggerVisibleInNearestScrollContainer","targetElement","containerElement","tRect","cRect","bottom","useDynamicPositioning","resolution","onReposition","onVisibilityChange","$","editor","t0","t1","rootElement","getRootElement","rootScrollParent","ticking","previousIsInView","handleScroll","requestAnimationFrame","isInView","resizeObserver","ResizeObserver","addEventListener","capture","passive","observe","unobserve","removeEventListener","SCROLL_TYPEAHEAD_OPTION_INTO_VIEW_COMMAND","LexicalMenu","anchorElementRef","close","groups","menuRenderFn","onSelectItem","shouldSplitNodeWithQuery","selectedItemKey","setSelectedItemKey","updateSelectedItem","item","rootElem","setAttribute","key","setSelectedItemKeyToFirstMatchingItem","allItems","flatMap","group","items","firstMatchingItem","selectItemAndCleanUp","selectedItem","update","textNodeContainingQuery","remove","discrete","removeAttribute","registerCommand","ref","current","payload","event","selectedIndex","findIndex","newSelectedIndex","newSelectedItem","dispatchCommand","index","preventDefault","stopImmediatePropagation","find","listItemProps","useMenuAnchorRef","anchorElem","setResolution","className","createElement","positionMenu","parent","undefined","containerDiv","VERTICAL_OFFSET","menuEle","firstChild","width","getRect","left","rawTop","scrollY","scrollX","menuRect","menuHeight","menuWidth","rootElementRect","right","wouldGoOffBottomOfScreen","wouldGoOffTopOfScreen","margin","isConnected","display","append"],"sources":["../../../../../src/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.tsx"],"sourcesContent":["'use client'\nimport type { LexicalCommand, LexicalEditor, TextNode } from 'lexical'\nimport type { JSX, ReactPortal, RefObject } from 'react'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { mergeRegister } from '@lexical/utils'\nimport {\n $getSelection,\n $isRangeSelection,\n COMMAND_PRIORITY_LOW,\n createCommand,\n KEY_ARROW_DOWN_COMMAND,\n KEY_ARROW_UP_COMMAND,\n KEY_ENTER_COMMAND,\n KEY_ESCAPE_COMMAND,\n KEY_TAB_COMMAND,\n} from 'lexical'\nimport { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react'\n\nimport type { MenuTextMatch } from '../useMenuTriggerMatch.js'\nimport type { SlashMenuGroupInternal, SlashMenuItem, SlashMenuItemInternal } from './types.js'\n\nimport { CAN_USE_DOM } from '../../../utils/canUseDOM.js'\n\nexport type MenuResolution = {\n getRect: () => DOMRect\n match?: MenuTextMatch\n}\n\nconst baseClass = 'slash-menu-popup'\n\nexport type MenuRenderFn = (\n anchorElementRef: RefObject<HTMLElement | null>,\n itemProps: {\n groups: Array<SlashMenuGroupInternal>\n selectedItemKey: null | string\n selectItemAndCleanUp: (selectedItem: SlashMenuItem) => void\n setSelectedItemKey: (itemKey: string) => void\n },\n matchingString: null | string,\n) => JSX.Element | null | ReactPortal\n\nconst scrollIntoViewIfNeeded = (target: HTMLElement) => {\n const typeaheadContainerNode = document.getElementById('slash-menu')\n if (!typeaheadContainerNode) {\n return\n }\n\n const typeaheadRect = typeaheadContainerNode.getBoundingClientRect()\n\n if (typeaheadRect.top + typeaheadRect.height > window.innerHeight) {\n typeaheadContainerNode.scrollIntoView({\n block: 'center',\n })\n }\n\n if (typeaheadRect.top < 0) {\n typeaheadContainerNode.scrollIntoView({\n block: 'center',\n })\n }\n\n target.scrollIntoView({ block: 'nearest' })\n}\n\n/**\n * Walk backwards along user input and forward through entity title to try\n * and replace more of the user's text with entity.\n */\nfunction getFullMatchOffset(documentText: string, entryText: string, offset: number) {\n let triggerOffset = offset\n for (let i = triggerOffset; i <= entryText.length; i++) {\n if (documentText.substring(documentText.length - i) === entryText.substring(0, i)) {\n triggerOffset = i\n }\n }\n return triggerOffset\n}\n\n/**\n * Split Lexical TextNode and return a new TextNode only containing matched text.\n * Common use cases include: removing the node, replacing with a new node.\n */\nfunction $splitNodeContainingQuery(match: MenuTextMatch): null | TextNode {\n const selection = $getSelection()\n if (!$isRangeSelection(selection) || !selection.isCollapsed()) {\n return null\n }\n const anchor = selection.anchor\n if (anchor.type !== 'text') {\n return null\n }\n const anchorNode = anchor.getNode()\n if (!anchorNode.isSimpleText()) {\n return null\n }\n const selectionOffset = anchor.offset\n const textContent = anchorNode.getTextContent().slice(0, selectionOffset)\n const characterOffset = match.replaceableString.length\n const queryOffset = getFullMatchOffset(textContent, match.matchingString, characterOffset)\n const startOffset = selectionOffset - queryOffset\n if (startOffset < 0) {\n return null\n }\n let newNode\n if (startOffset === 0) {\n ;[newNode] = anchorNode.splitText(selectionOffset)\n } else {\n ;[, newNode] = anchorNode.splitText(startOffset, selectionOffset)\n }\n\n return newNode\n}\n\n// Got from https://stackoverflow.com/a/42543908/2013580\nexport function getScrollParent(\n element: HTMLElement,\n includeHidden: boolean,\n): HTMLBodyElement | HTMLElement {\n let style = getComputedStyle(element)\n const excludeStaticParent = style.position === 'absolute'\n const overflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/\n if (style.position === 'fixed') {\n return document.body\n }\n for (let parent: HTMLElement | null = element; (parent = parent.parentElement); ) {\n style = getComputedStyle(parent)\n if (excludeStaticParent && style.position === 'static') {\n continue\n }\n if (overflowRegex.test(style.overflow + style.overflowY + style.overflowX)) {\n return parent\n }\n }\n return document.body\n}\n\nfunction isTriggerVisibleInNearestScrollContainer(\n targetElement: HTMLElement,\n containerElement: HTMLElement,\n): boolean {\n const tRect = targetElement.getBoundingClientRect()\n const cRect = containerElement.getBoundingClientRect()\n return tRect.top > cRect.top && tRect.top < cRect.bottom\n}\n\n// Reposition the menu on scroll, window resize, and element resize.\nexport function useDynamicPositioning(\n resolution: MenuResolution | null,\n targetElement: HTMLElement | null,\n onReposition: () => void,\n onVisibilityChange?: (isInView: boolean) => void,\n) {\n const [editor] = useLexicalComposerContext()\n useEffect(() => {\n if (targetElement != null && resolution != null) {\n const rootElement = editor.getRootElement()\n const rootScrollParent =\n rootElement != null ? getScrollParent(rootElement, false) : document.body\n let ticking = false\n let previousIsInView = isTriggerVisibleInNearestScrollContainer(\n targetElement,\n rootScrollParent,\n )\n const handleScroll = function () {\n if (!ticking) {\n window.requestAnimationFrame(function () {\n onReposition()\n ticking = false\n })\n ticking = true\n }\n const isInView = isTriggerVisibleInNearestScrollContainer(targetElement, rootScrollParent)\n if (isInView !== previousIsInView) {\n previousIsInView = isInView\n if (onVisibilityChange != null) {\n onVisibilityChange(isInView)\n }\n }\n }\n const resizeObserver = new ResizeObserver(onReposition)\n window.addEventListener('resize', onReposition)\n document.addEventListener('scroll', handleScroll, {\n capture: true,\n passive: true,\n })\n resizeObserver.observe(targetElement)\n return () => {\n resizeObserver.unobserve(targetElement)\n window.removeEventListener('resize', onReposition)\n document.removeEventListener('scroll', handleScroll, true)\n }\n }\n }, [targetElement, editor, onVisibilityChange, onReposition, resolution])\n}\n\nexport const SCROLL_TYPEAHEAD_OPTION_INTO_VIEW_COMMAND: LexicalCommand<{\n index: number\n item: SlashMenuItemInternal\n}> = createCommand('SCROLL_TYPEAHEAD_OPTION_INTO_VIEW_COMMAND')\n\nexport function LexicalMenu({\n anchorElementRef,\n close,\n editor,\n // groups filtering is already handled in SlashMenu/index.tsx. Thus, groups always contains the matching items.\n groups,\n menuRenderFn,\n onSelectItem,\n resolution,\n shouldSplitNodeWithQuery = false,\n}: {\n anchorElementRef: RefObject<HTMLElement | null>\n close: () => void\n editor: LexicalEditor\n groups: Array<SlashMenuGroupInternal>\n menuRenderFn: MenuRenderFn\n onSelectItem: (item: SlashMenuItem, closeMenu: () => void, matchingString: string) => void\n resolution: MenuResolution\n shouldSplitNodeWithQuery?: boolean\n}): JSX.Element | null {\n const [selectedItemKey, setSelectedItemKey] = useState<null | string>(null)\n\n const matchingString = (resolution.match && resolution.match.matchingString) || ''\n\n const updateSelectedItem = useCallback(\n (item: SlashMenuItem) => {\n const rootElem = editor.getRootElement()\n if (rootElem !== null) {\n rootElem.setAttribute('aria-activedescendant', `${baseClass}__item-${item.key}`)\n setSelectedItemKey(item.key)\n }\n },\n [editor],\n )\n\n const setSelectedItemKeyToFirstMatchingItem = useCallback(() => {\n // set selected item to the first of the matching ones\n if (groups !== null && matchingString != null) {\n // groups filtering is already handled in SlashMenu/index.tsx. Thus, groups always contains the matching items.\n const allItems = groups.flatMap((group) => group.items)\n\n if (allItems.length) {\n const firstMatchingItem = allItems[0]\n updateSelectedItem(firstMatchingItem)\n }\n }\n }, [groups, updateSelectedItem, matchingString])\n\n useEffect(() => {\n setSelectedItemKeyToFirstMatchingItem()\n }, [matchingString, setSelectedItemKeyToFirstMatchingItem])\n\n const selectItemAndCleanUp = useCallback(\n (selectedItem: SlashMenuItem) => {\n editor.update(\n () => {\n const textNodeContainingQuery =\n resolution.match != null && shouldSplitNodeWithQuery\n ? $splitNodeContainingQuery(resolution.match)\n : null\n\n if (textNodeContainingQuery) {\n textNodeContainingQuery.remove()\n }\n },\n { discrete: true },\n )\n onSelectItem(selectedItem, close, resolution.match ? resolution.match.matchingString : '')\n },\n [editor, shouldSplitNodeWithQuery, resolution.match, onSelectItem, close],\n )\n\n useEffect(() => {\n return () => {\n const rootElem = editor.getRootElement()\n if (rootElem !== null) {\n rootElem.removeAttribute('aria-activedescendant')\n }\n }\n }, [editor])\n\n useLayoutEffect(() => {\n if (groups === null) {\n setSelectedItemKey(null)\n } else if (selectedItemKey === null) {\n setSelectedItemKeyToFirstMatchingItem()\n }\n }, [groups, selectedItemKey, updateSelectedItem, setSelectedItemKeyToFirstMatchingItem])\n\n useEffect(() => {\n return mergeRegister(\n editor.registerCommand(\n SCROLL_TYPEAHEAD_OPTION_INTO_VIEW_COMMAND,\n ({ item }) => {\n if (item.ref && item.ref.current != null) {\n scrollIntoViewIfNeeded(item.ref.current)\n return true\n }\n\n return false\n },\n COMMAND_PRIORITY_LOW,\n ),\n )\n }, [editor, updateSelectedItem])\n\n useEffect(() => {\n return mergeRegister(\n editor.registerCommand<KeyboardEvent>(\n KEY_ARROW_DOWN_COMMAND,\n (payload) => {\n const event = payload\n if (groups !== null && groups.length && selectedItemKey !== null) {\n const allItems = groups.flatMap((group) => group.items)\n const selectedIndex = allItems.findIndex((item) => item.key === selectedItemKey)\n\n const newSelectedIndex = selectedIndex !== allItems.length - 1 ? selectedIndex + 1 : 0\n\n const newSelectedItem = allItems[newSelectedIndex]\n\n updateSelectedItem(newSelectedItem)\n if (newSelectedItem.ref != null && newSelectedItem.ref.current) {\n editor.dispatchCommand(SCROLL_TYPEAHEAD_OPTION_INTO_VIEW_COMMAND, {\n index: newSelectedIndex,\n item: newSelectedItem,\n })\n }\n event.preventDefault()\n event.stopImmediatePropagation()\n }\n return true\n },\n COMMAND_PRIORITY_LOW,\n ),\n editor.registerCommand<KeyboardEvent>(\n KEY_ARROW_UP_COMMAND,\n (payload) => {\n const event = payload\n if (groups !== null && groups.length && selectedItemKey !== null) {\n const allItems = groups.flatMap((group) => group.items)\n const selectedIndex = allItems.findIndex((item) => item.key === selectedItemKey)\n\n const newSelectedIndex = selectedIndex !== 0 ? selectedIndex - 1 : allItems.length - 1\n\n const newSelectedItem = allItems[newSelectedIndex]\n\n updateSelectedItem(newSelectedItem)\n if (newSelectedItem.ref != null && newSelectedItem.ref.current) {\n scrollIntoViewIfNeeded(newSelectedItem.ref.current)\n }\n event.preventDefault()\n event.stopImmediatePropagation()\n }\n return true\n },\n COMMAND_PRIORITY_LOW,\n ),\n editor.registerCommand<KeyboardEvent>(\n KEY_ESCAPE_COMMAND,\n (payload) => {\n const event = payload\n event.preventDefault()\n event.stopImmediatePropagation()\n close()\n return true\n },\n COMMAND_PRIORITY_LOW,\n ),\n editor.registerCommand<KeyboardEvent>(\n KEY_TAB_COMMAND,\n (payload) => {\n const event = payload\n\n if (groups === null || selectedItemKey === null) {\n return false\n }\n const allItems = groups.flatMap((group) => group.items)\n const selectedItem = allItems.find((item) => item.key === selectedItemKey)\n if (!selectedItem) {\n return false\n }\n\n event.preventDefault()\n event.stopImmediatePropagation()\n selectItemAndCleanUp(selectedItem)\n return true\n },\n COMMAND_PRIORITY_LOW,\n ),\n editor.registerCommand(\n KEY_ENTER_COMMAND,\n (event: KeyboardEvent | null) => {\n if (groups === null || selectedItemKey === null) {\n return false\n }\n const allItems = groups.flatMap((group) => group.items)\n const selectedItem = allItems.find((item) => item.key === selectedItemKey)\n if (!selectedItem) {\n return false\n }\n\n if (event !== null) {\n event.preventDefault()\n event.stopImmediatePropagation()\n }\n selectItemAndCleanUp(selectedItem)\n return true\n },\n COMMAND_PRIORITY_LOW,\n ),\n )\n }, [selectItemAndCleanUp, close, editor, groups, selectedItemKey, updateSelectedItem])\n\n const listItemProps = useMemo(\n () => ({\n groups,\n selectedItemKey,\n selectItemAndCleanUp,\n setSelectedItemKey,\n }),\n [selectItemAndCleanUp, selectedItemKey, groups],\n )\n\n return menuRenderFn(\n anchorElementRef,\n listItemProps,\n resolution.match ? resolution.match.matchingString : '',\n )\n}\n\nexport function useMenuAnchorRef(\n anchorElem: HTMLElement,\n resolution: MenuResolution | null,\n setResolution: (r: MenuResolution | null) => void,\n className?: string,\n): RefObject<HTMLElement | null> {\n const [editor] = useLexicalComposerContext()\n const anchorElementRef = useRef<HTMLElement | null>(\n CAN_USE_DOM ? document.createElement('div') : null,\n )\n const positionMenu = useCallback(() => {\n if (anchorElementRef.current === null || parent === undefined) {\n return\n }\n const rootElement = editor.getRootElement()\n const containerDiv = anchorElementRef.current\n\n const VERTICAL_OFFSET = 32\n\n const menuEle = containerDiv.firstChild as Element\n if (rootElement !== null && resolution !== null) {\n const { height, width } = resolution.getRect()\n let { left, top } = resolution.getRect()\n\n const rawTop = top\n top -= anchorElem.getBoundingClientRect().top + window.scrollY\n left -= anchorElem.getBoundingClientRect().left + window.scrollX\n containerDiv.style.left = `${left + window.scrollX}px`\n containerDiv.style.height = `${height}px`\n containerDiv.style.width = `${width}px`\n if (menuEle !== null) {\n const menuRect = menuEle.getBoundingClientRect()\n const menuHeight = menuRect.height\n const menuWidth = menuRect.width\n\n const rootElementRect = rootElement.getBoundingClientRect()\n\n if (left + menuWidth > rootElementRect.right) {\n containerDiv.style.left = `${rootElementRect.right - menuWidth + window.scrollX}px`\n }\n\n const wouldGoOffBottomOfScreen = rawTop + menuHeight + VERTICAL_OFFSET > window.innerHeight\n //const wouldGoOffBottomOfContainer = top + menuHeight > rootElementRect.bottom\n const wouldGoOffTopOfScreen = rawTop < 0\n\n // Position slash menu above the cursor instead of below (default) if it would otherwise go off the bottom of the screen.\n if (wouldGoOffBottomOfScreen && !wouldGoOffTopOfScreen) {\n const margin = 24\n containerDiv.style.top = `${\n top + VERTICAL_OFFSET - menuHeight + window.scrollY - (height + margin)\n }px`\n } else {\n containerDiv.style.top = `${top + window.scrollY + VERTICAL_OFFSET}px`\n }\n }\n\n if (!containerDiv.isConnected) {\n if (className != null) {\n containerDiv.className = className\n }\n containerDiv.setAttribute('aria-label', 'Slash menu')\n containerDiv.setAttribute('id', 'slash-menu')\n containerDiv.setAttribute('role', 'listbox')\n containerDiv.style.display = 'block'\n containerDiv.style.position = 'absolute'\n anchorElem.append(containerDiv)\n }\n anchorElementRef.current = containerDiv\n rootElement.setAttribute('aria-controls', 'slash-menu')\n }\n }, [editor, resolution, className, anchorElem])\n\n useEffect(() => {\n const rootElement = editor.getRootElement()\n if (resolution !== null) {\n positionMenu()\n return () => {\n if (rootElement !== null) {\n rootElement.removeAttribute('aria-controls')\n }\n\n const containerDiv = anchorElementRef.current\n if (containerDiv !== null && containerDiv.isConnected) {\n containerDiv.remove()\n }\n }\n }\n }, [editor, positionMenu, resolution])\n\n const onVisibilityChange = useCallback(\n (isInView: boolean) => {\n if (resolution !== null) {\n if (!isInView) {\n setResolution(null)\n }\n }\n },\n [resolution, setResolution],\n )\n\n useDynamicPositioning(resolution, anchorElementRef.current, positionMenu, onVisibilityChange)\n\n return anchorElementRef\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"LexicalMenu.js","names":["c","_c","useLexicalComposerContext","mergeRegister","$getSelection","$isRangeSelection","COMMAND_PRIORITY_LOW","createCommand","KEY_ARROW_DOWN_COMMAND","KEY_ARROW_UP_COMMAND","KEY_ENTER_COMMAND","KEY_ESCAPE_COMMAND","KEY_TAB_COMMAND","useCallback","useEffect","useLayoutEffect","useMemo","useRef","useState","CAN_USE_DOM","baseClass","scrollIntoViewIfNeeded","target","typeaheadContainerNode","document","getElementById","typeaheadRect","getBoundingClientRect","top","height","window","innerHeight","scrollIntoView","block","getFullMatchOffset","documentText","entryText","offset","triggerOffset","i","length","substring","$splitNodeContainingQuery","match","selection","isCollapsed","anchor","type","anchorNode","getNode","isSimpleText","selectionOffset","textContent","getTextContent","slice","characterOffset","replaceableString","queryOffset","matchingString","startOffset","newNode","splitText","getScrollParent","element","includeHidden","style","getComputedStyle","excludeStaticParent","position","overflowRegex","body","parent1","parentElement","test","overflow","overflowY","overflowX","isTriggerVisibleInNearestScrollContainer","targetElement","containerElement","tRect","cRect","bottom","useDynamicPositioning","resolution","targetElementRef","onReposition","onVisibilityChange","$","editor","t0","current","rootElement","getRootElement","rootScrollParent","ticking","previousIsInView","handleScroll","requestAnimationFrame","isInView","resizeObserver","ResizeObserver","addEventListener","capture","passive","observe","disconnect","removeEventListener","t1","SCROLL_TYPEAHEAD_OPTION_INTO_VIEW_COMMAND","LexicalMenu","anchorElementRef","close","groups","menuRenderFn","shouldSplitNodeWithQuery","selectedItemKey","setSelectedItemKey","updateSelectedItem","item","rootElem","setAttribute","key","setSelectedItemKeyToFirstMatchingItem","allItems","flatMap","group","items","firstMatchingItem","selectItemAndCleanUp","selectedItem","update","textNodeContainingQuery","remove","onUpdate","onSelect","queryString","removeAttribute","registerCommand","ref","payload","event","selectedIndex","findIndex","newSelectedIndex","newSelectedItem","dispatchCommand","index","preventDefault","stopImmediatePropagation","find","listItemProps","useMenuAnchorRef","anchorElem","setResolution","className","Symbol","for","createElement","parent","undefined","containerDiv","menuEle","firstChild","width","getRect","left","rawTop","scrollY","scrollX","menuRect","menuHeight","menuWidth","rootElementRect","right","wouldGoOffBottomOfScreen","wouldGoOffTopOfScreen","isConnected","display","append","positionMenu","t2","t3","rootElement_0","containerDiv_0","t4"],"sources":["../../../../../src/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.tsx"],"sourcesContent":["'use client'\nimport type { LexicalCommand, LexicalEditor, TextNode } from 'lexical'\nimport type { JSX, ReactPortal, RefObject } from 'react'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { mergeRegister } from '@lexical/utils'\nimport {\n $getSelection,\n $isRangeSelection,\n COMMAND_PRIORITY_LOW,\n createCommand,\n KEY_ARROW_DOWN_COMMAND,\n KEY_ARROW_UP_COMMAND,\n KEY_ENTER_COMMAND,\n KEY_ESCAPE_COMMAND,\n KEY_TAB_COMMAND,\n} from 'lexical'\nimport { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react'\n\nimport type { MenuTextMatch } from '../useMenuTriggerMatch.js'\nimport type { SlashMenuGroupInternal, SlashMenuItem, SlashMenuItemInternal } from './types.js'\n\nimport { CAN_USE_DOM } from '../../../utils/canUseDOM.js'\n\nexport type MenuResolution = {\n getRect: () => DOMRect\n match?: MenuTextMatch\n}\n\nconst baseClass = 'slash-menu-popup'\n\nexport type MenuRenderFn = (\n anchorElementRef: RefObject<HTMLElement | null>,\n itemProps: {\n groups: Array<SlashMenuGroupInternal>\n selectedItemKey: null | string\n selectItemAndCleanUp: (selectedItem: SlashMenuItem) => void\n setSelectedItemKey: (itemKey: string) => void\n },\n matchingString: null | string,\n) => JSX.Element | null | ReactPortal\n\nconst scrollIntoViewIfNeeded = (target: HTMLElement) => {\n const typeaheadContainerNode = document.getElementById('slash-menu')\n if (!typeaheadContainerNode) {\n return\n }\n\n const typeaheadRect = typeaheadContainerNode.getBoundingClientRect()\n\n if (typeaheadRect.top + typeaheadRect.height > window.innerHeight) {\n typeaheadContainerNode.scrollIntoView({\n block: 'center',\n })\n }\n\n if (typeaheadRect.top < 0) {\n typeaheadContainerNode.scrollIntoView({\n block: 'center',\n })\n }\n\n target.scrollIntoView({ block: 'nearest' })\n}\n\n/**\n * Walk backwards along user input and forward through entity title to try\n * and replace more of the user's text with entity.\n */\nfunction getFullMatchOffset(documentText: string, entryText: string, offset: number) {\n let triggerOffset = offset\n for (let i = triggerOffset; i <= entryText.length; i++) {\n if (documentText.substring(documentText.length - i) === entryText.substring(0, i)) {\n triggerOffset = i\n }\n }\n return triggerOffset\n}\n\n/**\n * Split Lexical TextNode and return a new TextNode only containing matched text.\n * Common use cases include: removing the node, replacing with a new node.\n */\nfunction $splitNodeContainingQuery(match: MenuTextMatch): null | TextNode {\n const selection = $getSelection()\n if (!$isRangeSelection(selection) || !selection.isCollapsed()) {\n return null\n }\n const anchor = selection.anchor\n if (anchor.type !== 'text') {\n return null\n }\n const anchorNode = anchor.getNode()\n if (!anchorNode.isSimpleText()) {\n return null\n }\n const selectionOffset = anchor.offset\n const textContent = anchorNode.getTextContent().slice(0, selectionOffset)\n const characterOffset = match.replaceableString.length\n const queryOffset = getFullMatchOffset(textContent, match.matchingString, characterOffset)\n const startOffset = selectionOffset - queryOffset\n if (startOffset < 0) {\n return null\n }\n let newNode\n if (startOffset === 0) {\n ;[newNode] = anchorNode.splitText(selectionOffset)\n } else {\n ;[, newNode] = anchorNode.splitText(startOffset, selectionOffset)\n }\n\n return newNode\n}\n\n// Got from https://stackoverflow.com/a/42543908/2013580\nexport function getScrollParent(\n element: HTMLElement,\n includeHidden: boolean,\n): HTMLBodyElement | HTMLElement {\n let style = getComputedStyle(element)\n const excludeStaticParent = style.position === 'absolute'\n const overflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/\n if (style.position === 'fixed') {\n return document.body\n }\n for (let parent: HTMLElement | null = element; (parent = parent.parentElement); ) {\n style = getComputedStyle(parent)\n if (excludeStaticParent && style.position === 'static') {\n continue\n }\n if (overflowRegex.test(style.overflow + style.overflowY + style.overflowX)) {\n return parent\n }\n }\n return document.body\n}\n\nfunction isTriggerVisibleInNearestScrollContainer(\n targetElement: HTMLElement,\n containerElement: HTMLElement,\n): boolean {\n const tRect = targetElement.getBoundingClientRect()\n const cRect = containerElement.getBoundingClientRect()\n return tRect.top > cRect.top && tRect.top < cRect.bottom\n}\n\n// Reposition the menu on scroll, window resize, and element resize.\nexport function useDynamicPositioning(\n resolution: MenuResolution | null,\n targetElementRef: RefObject<HTMLElement | null>,\n onReposition: () => void,\n onVisibilityChange?: (isInView: boolean) => void,\n) {\n const [editor] = useLexicalComposerContext()\n useEffect(() => {\n const targetElement = targetElementRef.current\n if (targetElement != null && resolution != null) {\n const rootElement = editor.getRootElement()\n const rootScrollParent =\n rootElement != null ? getScrollParent(rootElement, false) : document.body\n let ticking = false\n let previousIsInView = isTriggerVisibleInNearestScrollContainer(\n targetElement,\n rootScrollParent,\n )\n const handleScroll = function () {\n if (!ticking) {\n window.requestAnimationFrame(function () {\n onReposition()\n ticking = false\n })\n ticking = true\n }\n const isInView = isTriggerVisibleInNearestScrollContainer(targetElement, rootScrollParent)\n if (isInView !== previousIsInView) {\n previousIsInView = isInView\n if (onVisibilityChange != null) {\n onVisibilityChange(isInView)\n }\n }\n }\n const resizeObserver = new ResizeObserver(onReposition)\n window.addEventListener('resize', onReposition)\n document.addEventListener('scroll', handleScroll, {\n capture: true,\n passive: true,\n })\n resizeObserver.observe(targetElement)\n return () => {\n resizeObserver.disconnect()\n window.removeEventListener('resize', onReposition)\n document.removeEventListener('scroll', handleScroll, true)\n }\n }\n }, [editor, onVisibilityChange, onReposition, resolution, targetElementRef])\n}\n\nexport const SCROLL_TYPEAHEAD_OPTION_INTO_VIEW_COMMAND: LexicalCommand<{\n index: number\n item: SlashMenuItemInternal\n}> = createCommand('SCROLL_TYPEAHEAD_OPTION_INTO_VIEW_COMMAND')\n\nexport function LexicalMenu({\n anchorElementRef,\n close,\n editor,\n // groups filtering is already handled in SlashMenu/index.tsx. Thus, groups always contains the matching items.\n groups,\n menuRenderFn,\n resolution,\n shouldSplitNodeWithQuery = false,\n}: {\n anchorElementRef: RefObject<HTMLElement | null>\n close: () => void\n editor: LexicalEditor\n groups: Array<SlashMenuGroupInternal>\n menuRenderFn: MenuRenderFn\n resolution: MenuResolution\n shouldSplitNodeWithQuery?: boolean\n}): JSX.Element | null {\n const [selectedItemKey, setSelectedItemKey] = useState<null | string>(null)\n\n const matchingString = (resolution.match && resolution.match.matchingString) || ''\n\n const updateSelectedItem = useCallback(\n (item: SlashMenuItem) => {\n const rootElem = editor.getRootElement()\n if (rootElem !== null) {\n rootElem.setAttribute('aria-activedescendant', `${baseClass}__item-${item.key}`)\n setSelectedItemKey(item.key)\n }\n },\n [editor],\n )\n\n const setSelectedItemKeyToFirstMatchingItem = useCallback(() => {\n // set selected item to the first of the matching ones\n if (groups !== null && matchingString != null) {\n // groups filtering is already handled in SlashMenu/index.tsx. Thus, groups always contains the matching items.\n const allItems = groups.flatMap((group) => group.items)\n\n if (allItems.length) {\n const firstMatchingItem = allItems[0]\n updateSelectedItem(firstMatchingItem)\n }\n }\n }, [groups, updateSelectedItem, matchingString])\n\n useEffect(() => {\n setSelectedItemKeyToFirstMatchingItem()\n }, [matchingString, setSelectedItemKeyToFirstMatchingItem])\n\n const selectItemAndCleanUp = useCallback(\n (selectedItem: SlashMenuItem) => {\n close()\n\n editor.update(\n () => {\n const textNodeContainingQuery =\n resolution.match != null && shouldSplitNodeWithQuery\n ? $splitNodeContainingQuery(resolution.match)\n : null\n\n if (textNodeContainingQuery) {\n textNodeContainingQuery.remove()\n }\n },\n {\n onUpdate() {\n selectedItem.onSelect({\n editor,\n queryString: resolution.match ? resolution.match.matchingString : '',\n })\n },\n },\n )\n },\n [editor, shouldSplitNodeWithQuery, resolution.match, close],\n )\n\n useEffect(() => {\n return () => {\n const rootElem = editor.getRootElement()\n if (rootElem !== null) {\n rootElem.removeAttribute('aria-activedescendant')\n }\n }\n }, [editor])\n\n useLayoutEffect(() => {\n if (groups === null) {\n setSelectedItemKey(null)\n } else if (selectedItemKey === null) {\n setSelectedItemKeyToFirstMatchingItem()\n }\n }, [groups, selectedItemKey, updateSelectedItem, setSelectedItemKeyToFirstMatchingItem])\n\n useEffect(() => {\n return mergeRegister(\n editor.registerCommand(\n SCROLL_TYPEAHEAD_OPTION_INTO_VIEW_COMMAND,\n ({ item }) => {\n if (item.ref && item.ref.current != null) {\n scrollIntoViewIfNeeded(item.ref.current)\n return true\n }\n\n return false\n },\n COMMAND_PRIORITY_LOW,\n ),\n )\n }, [editor, updateSelectedItem])\n\n useEffect(() => {\n return mergeRegister(\n editor.registerCommand<KeyboardEvent>(\n KEY_ARROW_DOWN_COMMAND,\n (payload) => {\n const event = payload\n if (groups !== null && groups.length && selectedItemKey !== null) {\n const allItems = groups.flatMap((group) => group.items)\n const selectedIndex = allItems.findIndex((item) => item.key === selectedItemKey)\n\n const newSelectedIndex = selectedIndex !== allItems.length - 1 ? selectedIndex + 1 : 0\n\n const newSelectedItem = allItems[newSelectedIndex]\n\n updateSelectedItem(newSelectedItem)\n if (newSelectedItem.ref != null && newSelectedItem.ref.current) {\n editor.dispatchCommand(SCROLL_TYPEAHEAD_OPTION_INTO_VIEW_COMMAND, {\n index: newSelectedIndex,\n item: newSelectedItem,\n })\n }\n event.preventDefault()\n event.stopImmediatePropagation()\n }\n return true\n },\n COMMAND_PRIORITY_LOW,\n ),\n editor.registerCommand<KeyboardEvent>(\n KEY_ARROW_UP_COMMAND,\n (payload) => {\n const event = payload\n if (groups !== null && groups.length && selectedItemKey !== null) {\n const allItems = groups.flatMap((group) => group.items)\n const selectedIndex = allItems.findIndex((item) => item.key === selectedItemKey)\n\n const newSelectedIndex = selectedIndex !== 0 ? selectedIndex - 1 : allItems.length - 1\n\n const newSelectedItem = allItems[newSelectedIndex]\n\n updateSelectedItem(newSelectedItem)\n if (newSelectedItem.ref != null && newSelectedItem.ref.current) {\n scrollIntoViewIfNeeded(newSelectedItem.ref.current)\n }\n event.preventDefault()\n event.stopImmediatePropagation()\n }\n return true\n },\n COMMAND_PRIORITY_LOW,\n ),\n editor.registerCommand<KeyboardEvent>(\n KEY_ESCAPE_COMMAND,\n (payload) => {\n const event = payload\n event.preventDefault()\n event.stopImmediatePropagation()\n close()\n return true\n },\n COMMAND_PRIORITY_LOW,\n ),\n editor.registerCommand<KeyboardEvent>(\n KEY_TAB_COMMAND,\n (payload) => {\n const event = payload\n\n if (groups === null || selectedItemKey === null) {\n return false\n }\n const allItems = groups.flatMap((group) => group.items)\n const selectedItem = allItems.find((item) => item.key === selectedItemKey)\n if (!selectedItem) {\n return false\n }\n\n event.preventDefault()\n event.stopImmediatePropagation()\n selectItemAndCleanUp(selectedItem)\n return true\n },\n COMMAND_PRIORITY_LOW,\n ),\n editor.registerCommand(\n KEY_ENTER_COMMAND,\n (event: KeyboardEvent | null) => {\n if (groups === null || selectedItemKey === null) {\n return false\n }\n const allItems = groups.flatMap((group) => group.items)\n const selectedItem = allItems.find((item) => item.key === selectedItemKey)\n if (!selectedItem) {\n return false\n }\n\n if (event !== null) {\n event.preventDefault()\n event.stopImmediatePropagation()\n }\n selectItemAndCleanUp(selectedItem)\n return true\n },\n COMMAND_PRIORITY_LOW,\n ),\n )\n }, [selectItemAndCleanUp, close, editor, groups, selectedItemKey, updateSelectedItem])\n\n const listItemProps = useMemo(\n () => ({\n groups,\n selectedItemKey,\n selectItemAndCleanUp,\n setSelectedItemKey,\n }),\n [selectItemAndCleanUp, selectedItemKey, groups],\n )\n\n return menuRenderFn(\n anchorElementRef,\n listItemProps,\n resolution.match ? resolution.match.matchingString : '',\n )\n}\n\nexport function useMenuAnchorRef(\n anchorElem: HTMLElement,\n resolution: MenuResolution | null,\n setResolution: (r: MenuResolution | null) => void,\n className?: string,\n): RefObject<HTMLElement | null> {\n const [editor] = useLexicalComposerContext()\n const anchorElementRef = useRef<HTMLElement | null>(\n CAN_USE_DOM ? document.createElement('div') : null,\n )\n const positionMenu = useCallback(() => {\n if (anchorElementRef.current === null || parent === undefined) {\n return\n }\n const rootElement = editor.getRootElement()\n const containerDiv = anchorElementRef.current\n\n const VERTICAL_OFFSET = 32\n\n const menuEle = containerDiv.firstChild as Element\n if (rootElement !== null && resolution !== null) {\n const { height, width } = resolution.getRect()\n let { left, top } = resolution.getRect()\n\n const rawTop = top\n top -= anchorElem.getBoundingClientRect().top + window.scrollY\n left -= anchorElem.getBoundingClientRect().left + window.scrollX\n containerDiv.style.left = `${left + window.scrollX}px`\n containerDiv.style.height = `${height}px`\n containerDiv.style.width = `${width}px`\n if (menuEle !== null) {\n const menuRect = menuEle.getBoundingClientRect()\n const menuHeight = menuRect.height\n const menuWidth = menuRect.width\n\n const rootElementRect = rootElement.getBoundingClientRect()\n\n if (left + menuWidth > rootElementRect.right) {\n containerDiv.style.left = `${rootElementRect.right - menuWidth + window.scrollX}px`\n }\n\n const wouldGoOffBottomOfScreen = rawTop + menuHeight + VERTICAL_OFFSET > window.innerHeight\n //const wouldGoOffBottomOfContainer = top + menuHeight > rootElementRect.bottom\n const wouldGoOffTopOfScreen = rawTop < 0\n\n // Position slash menu above the cursor instead of below (default) if it would otherwise go off the bottom of the screen.\n if (wouldGoOffBottomOfScreen && !wouldGoOffTopOfScreen) {\n const margin = 24\n containerDiv.style.top = `${\n top + VERTICAL_OFFSET - menuHeight + window.scrollY - (height + margin)\n }px`\n } else {\n containerDiv.style.top = `${top + window.scrollY + VERTICAL_OFFSET}px`\n }\n }\n\n if (!containerDiv.isConnected) {\n if (className != null) {\n containerDiv.className = className\n }\n containerDiv.setAttribute('aria-label', 'Slash menu')\n containerDiv.setAttribute('id', 'slash-menu')\n containerDiv.setAttribute('role', 'listbox')\n containerDiv.style.display = 'block'\n containerDiv.style.position = 'absolute'\n anchorElem.append(containerDiv)\n }\n anchorElementRef.current = containerDiv\n rootElement.setAttribute('aria-controls', 'slash-menu')\n }\n }, [editor, resolution, className, anchorElem])\n\n useEffect(() => {\n const rootElement = editor.getRootElement()\n if (resolution !== null) {\n positionMenu()\n return () => {\n if (rootElement !== null) {\n rootElement.removeAttribute('aria-controls')\n }\n\n const containerDiv = anchorElementRef.current\n if (containerDiv !== null && containerDiv.isConnected) {\n containerDiv.remove()\n }\n }\n }\n }, [editor, positionMenu, resolution])\n\n const onVisibilityChange = useCallback(\n (isInView: boolean) => {\n if (resolution !== null) {\n if (!isInView) {\n setResolution(null)\n }\n }\n },\n [resolution, setResolution],\n )\n\n useDynamicPositioning(resolution, anchorElementRef, positionMenu, onVisibilityChange)\n\n return anchorElementRef\n}\n"],"mappings":"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","ignoreList":[]}
@@ -2,7 +2,7 @@ import type { LexicalCommand, ParagraphNode } from 'lexical';
2
2
  import { type JSX } from 'react';
3
3
  import type { MenuTextMatch, TriggerFn } from '../useMenuTriggerMatch.js';
4
4
  import type { MenuRenderFn, MenuResolution } from './LexicalMenu.js';
5
- import type { SlashMenuGroupInternal, SlashMenuItem } from './types.js';
5
+ import type { SlashMenuGroupInternal } from './types.js';
6
6
  export declare const PUNCTUATION = "\\.,\\+\\*\\?\\$\\@\\|#{}\\(\\)\\^\\-\\[\\]\\\\/!%'\"~=<>_:;";
7
7
  export { useDynamicPositioning } from './LexicalMenu.js';
8
8
  export type TypeaheadMenuPluginProps = {
@@ -13,12 +13,11 @@ export type TypeaheadMenuPluginProps = {
13
13
  onClose?: () => void;
14
14
  onOpen?: (resolution: MenuResolution) => void;
15
15
  onQueryChange: (matchingString: null | string) => void;
16
- onSelectItem: (item: SlashMenuItem, closeMenu: () => void, matchingString: string) => void;
17
16
  triggerFn: TriggerFn;
18
17
  };
19
18
  export declare const ENABLE_SLASH_MENU_COMMAND: LexicalCommand<{
20
19
  node: ParagraphNode;
21
20
  }>;
22
- export declare function LexicalTypeaheadMenuPlugin({ anchorClassName, anchorElem, groups, menuRenderFn, onClose, onOpen, onQueryChange, onSelectItem, triggerFn, }: TypeaheadMenuPluginProps): JSX.Element | null;
21
+ export declare function LexicalTypeaheadMenuPlugin({ anchorClassName, anchorElem, groups, menuRenderFn, onClose, onOpen, onQueryChange, triggerFn, }: TypeaheadMenuPluginProps): JSX.Element | null;
23
22
  export type { MenuRenderFn, MenuResolution, MenuTextMatch, TriggerFn };
24
23
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,cAAc,EAEd,aAAa,EAGd,MAAM,SAAS,CAAA;AAWhB,OAAO,EAAE,KAAK,GAAG,EAAoC,MAAM,OAAO,CAAA;AAGlE,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AACzE,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACpE,OAAO,KAAK,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAIvE,eAAO,MAAM,WAAW,iEAAiE,CAAA;AA2EzF,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAA;AAExD,MAAM,MAAM,wBAAwB,GAAG;IACrC,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,UAAU,EAAE,WAAW,CAAA;IACvB,MAAM,EAAE,KAAK,CAAC,sBAAsB,CAAC,CAAA;IACrC,YAAY,EAAE,YAAY,CAAA;IAC1B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,cAAc,KAAK,IAAI,CAAA;IAC7C,aAAa,EAAE,CAAC,cAAc,EAAE,IAAI,GAAG,MAAM,KAAK,IAAI,CAAA;IACtD,YAAY,EAAE,CAAC,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,IAAI,EAAE,cAAc,EAAE,MAAM,KAAK,IAAI,CAAA;IAC1F,SAAS,EAAE,SAAS,CAAA;CACrB,CAAA;AAED,eAAO,MAAM,yBAAyB,EAAE,cAAc,CAAC;IACrD,IAAI,EAAE,aAAa,CAAA;CACpB,CAA8C,CAAA;AAE/C,wBAAgB,0BAA0B,CAAC,EACzC,eAAe,EACf,UAAU,EACV,MAAM,EACN,YAAY,EACZ,OAAO,EACP,MAAM,EACN,aAAa,EACb,YAAY,EACZ,SAAS,GACV,EAAE,wBAAwB,GAAG,GAAG,CAAC,OAAO,GAAG,IAAI,CAyH/C;AAED,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,SAAS,EAAE,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAiB,aAAa,EAAkB,MAAM,SAAS,CAAA;AAW3F,OAAO,EAAE,KAAK,GAAG,EAAoC,MAAM,OAAO,CAAA;AAGlE,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AACzE,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACpE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAA;AAIxD,eAAO,MAAM,WAAW,iEAAiE,CAAA;AA2EzF,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAA;AAExD,MAAM,MAAM,wBAAwB,GAAG;IACrC,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,UAAU,EAAE,WAAW,CAAA;IACvB,MAAM,EAAE,KAAK,CAAC,sBAAsB,CAAC,CAAA;IACrC,YAAY,EAAE,YAAY,CAAA;IAC1B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,cAAc,KAAK,IAAI,CAAA;IAC7C,aAAa,EAAE,CAAC,cAAc,EAAE,IAAI,GAAG,MAAM,KAAK,IAAI,CAAA;IACtD,SAAS,EAAE,SAAS,CAAA;CACrB,CAAA;AAED,eAAO,MAAM,yBAAyB,EAAE,cAAc,CAAC;IACrD,IAAI,EAAE,aAAa,CAAA;CACpB,CAA8C,CAAA;AAE/C,wBAAgB,0BAA0B,CAAC,EACzC,eAAe,EACf,UAAU,EACV,MAAM,EACN,YAAY,EACZ,OAAO,EACP,MAAM,EACN,aAAa,EACb,SAAS,GACV,EAAE,wBAAwB,GAAG,GAAG,CAAC,OAAO,GAAG,IAAI,CAwH/C;AAED,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,SAAS,EAAE,CAAA"}
@@ -77,7 +77,7 @@ function startTransition(callback) {
77
77
  export { useDynamicPositioning } from './LexicalMenu.js';
78
78
  export const ENABLE_SLASH_MENU_COMMAND = createCommand('ENABLE_SLASH_MENU_COMMAND');
79
79
  export function LexicalTypeaheadMenuPlugin(t0) {
80
- const $ = _c(31);
80
+ const $ = _c(30);
81
81
  const {
82
82
  anchorClassName,
83
83
  anchorElem,
@@ -86,7 +86,6 @@ export function LexicalTypeaheadMenuPlugin(t0) {
86
86
  onClose,
87
87
  onOpen,
88
88
  onQueryChange,
89
- onSelectItem,
90
89
  triggerFn
91
90
  } = t0;
92
91
  const [editor] = useLexicalComposerContext();
@@ -222,14 +221,13 @@ export function LexicalTypeaheadMenuPlugin(t0) {
222
221
  }
223
222
  useEffect(t5, t6);
224
223
  let t7;
225
- if ($[23] !== anchorElementRef || $[24] !== resolution || $[25] !== editor || $[26] !== closeTypeahead || $[27] !== groups || $[28] !== menuRenderFn || $[29] !== onSelectItem) {
224
+ if ($[23] !== anchorElementRef || $[24] !== resolution || $[25] !== editor || $[26] !== closeTypeahead || $[27] !== groups || $[28] !== menuRenderFn) {
226
225
  t7 = anchorElementRef.current === null || resolution === null || editor === null ? null : _jsx(LexicalMenu, {
227
226
  anchorElementRef,
228
227
  close: closeTypeahead,
229
228
  editor,
230
229
  groups,
231
230
  menuRenderFn,
232
- onSelectItem,
233
231
  resolution,
234
232
  shouldSplitNodeWithQuery: true
235
233
  });
@@ -239,10 +237,9 @@ export function LexicalTypeaheadMenuPlugin(t0) {
239
237
  $[26] = closeTypeahead;
240
238
  $[27] = groups;
241
239
  $[28] = menuRenderFn;
242
- $[29] = onSelectItem;
243
- $[30] = t7;
240
+ $[29] = t7;
244
241
  } else {
245
- t7 = $[30];
242
+ t7 = $[29];
246
243
  }
247
244
  return t7;
248
245
  }