@gravity-ui/markdown-editor 15.19.1 → 15.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (252) hide show
  1. package/build/cjs/bundle/config/action-names.d.ts +1 -1
  2. package/build/cjs/bundle/wysiwyg-preset.js +5 -1
  3. package/build/cjs/bundle/wysiwyg-preset.js.map +1 -1
  4. package/build/cjs/extensions/yfm/YfmTable/index.d.ts +15 -1
  5. package/build/cjs/extensions/yfm/YfmTable/index.js +4 -2
  6. package/build/cjs/extensions/yfm/YfmTable/index.js.map +1 -1
  7. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/actions.d.ts +6 -0
  8. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/actions.js +5 -8
  9. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/actions.js.map +1 -1
  10. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/commands/clear-cells.d.ts +7 -0
  11. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/commands/clear-cells.js +41 -0
  12. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/commands/clear-cells.js.map +1 -0
  13. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/commands/insert-empty-column.d.ts +6 -0
  14. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/commands/insert-empty-column.js +59 -0
  15. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/commands/insert-empty-column.js.map +1 -0
  16. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/commands/insert-empty-row.d.ts +6 -0
  17. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/commands/insert-empty-row.js +54 -0
  18. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/commands/insert-empty-row.js.map +1 -0
  19. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/commands/remove-column-range.d.ts +6 -0
  20. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/commands/remove-column-range.js +77 -0
  21. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/commands/remove-column-range.js.map +1 -0
  22. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/commands/remove-row-range.d.ts +6 -0
  23. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/commands/remove-row-range.js +74 -0
  24. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/commands/remove-row-range.js.map +1 -0
  25. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenu/FloatingMenu.d.ts +10 -0
  26. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenu/FloatingMenu.js +45 -0
  27. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenu/FloatingMenu.js.map +1 -0
  28. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenu/index.d.ts +1 -0
  29. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenu/index.js +5 -0
  30. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenu/index.js.map +1 -0
  31. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenuControl/FloatingMenuControl.d.ts +15 -0
  32. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenuControl/FloatingMenuControl.js +67 -0
  33. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenuControl/FloatingMenuControl.js.map +1 -0
  34. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenuControl/index.d.ts +1 -0
  35. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenuControl/index.js +5 -0
  36. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenuControl/index.js.map +1 -0
  37. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/FloatingPlusButton.d.ts +4 -0
  38. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/FloatingPlusButton.js +26 -0
  39. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/FloatingPlusButton.js.map +1 -0
  40. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/InsertCursor.d.ts +6 -0
  41. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/InsertCursor.js +68 -0
  42. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/InsertCursor.js.map +1 -0
  43. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/PlusButton.d.ts +6 -0
  44. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/PlusButton.js +26 -0
  45. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/PlusButton.js.map +1 -0
  46. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/index.d.ts +1 -0
  47. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/index.js +5 -0
  48. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/index.js.map +1 -0
  49. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusControl/FloatingPlusControl.d.ts +9 -0
  50. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusControl/FloatingPlusControl.js +38 -0
  51. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusControl/FloatingPlusControl.js.map +1 -0
  52. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusControl/index.d.ts +1 -0
  53. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusControl/index.js +5 -0
  54. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusControl/index.js.map +1 -0
  55. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPopup/FloatingPopup.css +14 -0
  56. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPopup/FloatingPopup.d.ts +13 -0
  57. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPopup/FloatingPopup.js +58 -0
  58. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPopup/FloatingPopup.js.map +1 -0
  59. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPopup/index.d.ts +1 -0
  60. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPopup/index.js +5 -0
  61. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPopup/index.js.map +1 -0
  62. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/const.d.ts +13 -0
  63. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/const.js +18 -0
  64. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/const.js.map +1 -0
  65. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/dnd/dnd-drop-cursor.d.ts +36 -0
  66. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/dnd/dnd-drop-cursor.js +144 -0
  67. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/dnd/dnd-drop-cursor.js.map +1 -0
  68. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/dnd/dnd.css +19 -0
  69. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/dnd/dnd.d.ts +31 -0
  70. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/dnd/dnd.js +467 -0
  71. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/dnd/dnd.js.map +1 -0
  72. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/index.d.ts +12 -0
  73. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/index.js +11 -0
  74. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/index.js.map +1 -0
  75. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/nodeviews/yfm-table-cell-view.d.ts +6 -0
  76. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/nodeviews/yfm-table-cell-view.js +288 -0
  77. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/nodeviews/yfm-table-cell-view.js.map +1 -0
  78. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/nodeviews/yfm-table-view.css +4 -0
  79. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/nodeviews/yfm-table-view.d.ts +3 -0
  80. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/nodeviews/yfm-table-view.js +100 -0
  81. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/nodeviews/yfm-table-view.js.map +1 -0
  82. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/plugins/dnd-plugin.d.ts +23 -0
  83. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/plugins/dnd-plugin.js +119 -0
  84. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/plugins/dnd-plugin.js.map +1 -0
  85. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/plugins/focus-plugin.d.ts +17 -0
  86. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/plugins/focus-plugin.js +158 -0
  87. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/plugins/focus-plugin.js.map +1 -0
  88. package/build/cjs/i18n/yfm-table/en.json +3 -0
  89. package/build/cjs/i18n/yfm-table/index.d.ts +4 -1
  90. package/build/cjs/i18n/yfm-table/ru.json +3 -0
  91. package/build/cjs/icons/index.d.ts +2 -5
  92. package/build/cjs/icons/index.js +5 -8
  93. package/build/cjs/icons/index.js.map +1 -1
  94. package/build/cjs/lodash.d.ts +3 -1
  95. package/build/cjs/lodash.js +5 -1
  96. package/build/cjs/lodash.js.map +1 -1
  97. package/build/cjs/table-utils/table-desc.d.ts +50 -6
  98. package/build/cjs/table-utils/table-desc.js +196 -3
  99. package/build/cjs/table-utils/table-desc.js.map +1 -1
  100. package/build/cjs/toolbar/ToolbarButtonPopup.js +2 -2
  101. package/build/cjs/toolbar/ToolbarButtonPopup.js.map +1 -1
  102. package/build/cjs/toolbar/ToolbarListButton.js +1 -1
  103. package/build/cjs/toolbar/ToolbarListButton.js.map +1 -1
  104. package/build/cjs/version.js +1 -1
  105. package/build/cjs/version.js.map +1 -1
  106. package/build/esm/bundle/config/action-names.d.ts +1 -1
  107. package/build/esm/bundle/wysiwyg-preset.js +5 -1
  108. package/build/esm/bundle/wysiwyg-preset.js.map +1 -1
  109. package/build/esm/extensions/yfm/YfmTable/index.d.ts +15 -1
  110. package/build/esm/extensions/yfm/YfmTable/index.js +4 -2
  111. package/build/esm/extensions/yfm/YfmTable/index.js.map +1 -1
  112. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/actions.d.ts +7 -1
  113. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/actions.js +2 -6
  114. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/actions.js.map +1 -1
  115. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/commands/clear-cells.d.ts +7 -0
  116. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/commands/clear-cells.js +37 -0
  117. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/commands/clear-cells.js.map +1 -0
  118. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/commands/insert-empty-column.d.ts +6 -0
  119. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/commands/insert-empty-column.js +55 -0
  120. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/commands/insert-empty-column.js.map +1 -0
  121. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/commands/insert-empty-row.d.ts +6 -0
  122. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/commands/insert-empty-row.js +50 -0
  123. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/commands/insert-empty-row.js.map +1 -0
  124. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/commands/remove-column-range.d.ts +6 -0
  125. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/commands/remove-column-range.js +73 -0
  126. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/commands/remove-column-range.js.map +1 -0
  127. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/commands/remove-row-range.d.ts +6 -0
  128. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/commands/remove-row-range.js +70 -0
  129. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/commands/remove-row-range.js.map +1 -0
  130. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenu/FloatingMenu.d.ts +10 -0
  131. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenu/FloatingMenu.js +41 -0
  132. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenu/FloatingMenu.js.map +1 -0
  133. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenu/index.d.ts +1 -0
  134. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenu/index.js +2 -0
  135. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenu/index.js.map +1 -0
  136. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenuControl/FloatingMenuControl.d.ts +15 -0
  137. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenuControl/FloatingMenuControl.js +63 -0
  138. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenuControl/FloatingMenuControl.js.map +1 -0
  139. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenuControl/index.d.ts +1 -0
  140. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenuControl/index.js +2 -0
  141. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenuControl/index.js.map +1 -0
  142. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/FloatingPlusButton.d.ts +4 -0
  143. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/FloatingPlusButton.js +22 -0
  144. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/FloatingPlusButton.js.map +1 -0
  145. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/InsertCursor.d.ts +6 -0
  146. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/InsertCursor.js +64 -0
  147. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/InsertCursor.js.map +1 -0
  148. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/PlusButton.d.ts +6 -0
  149. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/PlusButton.js +22 -0
  150. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/PlusButton.js.map +1 -0
  151. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/index.d.ts +1 -0
  152. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/index.js +2 -0
  153. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/index.js.map +1 -0
  154. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusControl/FloatingPlusControl.d.ts +9 -0
  155. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusControl/FloatingPlusControl.js +35 -0
  156. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusControl/FloatingPlusControl.js.map +1 -0
  157. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusControl/index.d.ts +1 -0
  158. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusControl/index.js +2 -0
  159. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusControl/index.js.map +1 -0
  160. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPopup/FloatingPopup.css +14 -0
  161. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPopup/FloatingPopup.d.ts +13 -0
  162. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPopup/FloatingPopup.js +54 -0
  163. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPopup/FloatingPopup.js.map +1 -0
  164. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPopup/index.d.ts +1 -0
  165. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPopup/index.js +2 -0
  166. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPopup/index.js.map +1 -0
  167. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/const.d.ts +13 -0
  168. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/const.js +15 -0
  169. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/const.js.map +1 -0
  170. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/dnd/dnd-drop-cursor.d.ts +36 -0
  171. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/dnd/dnd-drop-cursor.js +139 -0
  172. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/dnd/dnd-drop-cursor.js.map +1 -0
  173. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/dnd/dnd.css +19 -0
  174. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/dnd/dnd.d.ts +31 -0
  175. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/dnd/dnd.js +463 -0
  176. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/dnd/dnd.js.map +1 -0
  177. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/index.d.ts +12 -0
  178. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/index.js +7 -0
  179. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/index.js.map +1 -0
  180. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/nodeviews/yfm-table-cell-view.d.ts +6 -0
  181. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/nodeviews/yfm-table-cell-view.js +284 -0
  182. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/nodeviews/yfm-table-cell-view.js.map +1 -0
  183. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/nodeviews/yfm-table-view.css +4 -0
  184. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/nodeviews/yfm-table-view.d.ts +3 -0
  185. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/nodeviews/yfm-table-view.js +96 -0
  186. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/nodeviews/yfm-table-view.js.map +1 -0
  187. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/plugins/dnd-plugin.d.ts +23 -0
  188. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/plugins/dnd-plugin.js +108 -0
  189. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/plugins/dnd-plugin.js.map +1 -0
  190. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/plugins/focus-plugin.d.ts +17 -0
  191. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/plugins/focus-plugin.js +153 -0
  192. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/plugins/focus-plugin.js.map +1 -0
  193. package/build/esm/i18n/yfm-table/en.json +3 -0
  194. package/build/esm/i18n/yfm-table/index.d.ts +4 -1
  195. package/build/esm/i18n/yfm-table/ru.json +3 -0
  196. package/build/esm/icons/index.d.ts +2 -5
  197. package/build/esm/icons/index.js +4 -7
  198. package/build/esm/icons/index.js.map +1 -1
  199. package/build/esm/lodash.d.ts +3 -1
  200. package/build/esm/lodash.js +3 -1
  201. package/build/esm/lodash.js.map +1 -1
  202. package/build/esm/table-utils/table-desc.d.ts +50 -6
  203. package/build/esm/table-utils/table-desc.js +196 -3
  204. package/build/esm/table-utils/table-desc.js.map +1 -1
  205. package/build/esm/toolbar/ToolbarButtonPopup.js +2 -2
  206. package/build/esm/toolbar/ToolbarButtonPopup.js.map +1 -1
  207. package/build/esm/toolbar/ToolbarListButton.js +1 -1
  208. package/build/esm/toolbar/ToolbarListButton.js.map +1 -1
  209. package/build/esm/version.js +1 -1
  210. package/build/esm/version.js.map +1 -1
  211. package/build/styles.css +31 -116
  212. package/package.json +1 -1
  213. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/buttons.d.ts +0 -14
  214. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/buttons.js +0 -97
  215. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/buttons.js.map +0 -1
  216. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/view.css +0 -85
  217. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/view.d.ts +0 -4
  218. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/view.js +0 -62
  219. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/view.js.map +0 -1
  220. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/yfmTableCellView.css +0 -37
  221. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/yfmTableCellView.d.ts +0 -4
  222. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/yfmTableCellView.js +0 -212
  223. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/yfmTableCellView.js.map +0 -1
  224. package/build/cjs/icons/Mermaid.d.ts +0 -3
  225. package/build/cjs/icons/Mermaid.js +0 -11
  226. package/build/cjs/icons/Mermaid.js.map +0 -1
  227. package/build/cjs/icons/Mono.d.ts +0 -3
  228. package/build/cjs/icons/Mono.js +0 -6
  229. package/build/cjs/icons/Mono.js.map +0 -1
  230. package/build/cjs/icons/Tabs.d.ts +0 -3
  231. package/build/cjs/icons/Tabs.js +0 -6
  232. package/build/cjs/icons/Tabs.js.map +0 -1
  233. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/buttons.d.ts +0 -14
  234. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/buttons.js +0 -95
  235. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/buttons.js.map +0 -1
  236. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/view.css +0 -85
  237. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/view.d.ts +0 -4
  238. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/view.js +0 -58
  239. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/view.js.map +0 -1
  240. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/yfmTableCellView.css +0 -37
  241. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/yfmTableCellView.d.ts +0 -4
  242. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/yfmTableCellView.js +0 -208
  243. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/yfmTableCellView.js.map +0 -1
  244. package/build/esm/icons/Mermaid.d.ts +0 -3
  245. package/build/esm/icons/Mermaid.js +0 -9
  246. package/build/esm/icons/Mermaid.js.map +0 -1
  247. package/build/esm/icons/Mono.d.ts +0 -3
  248. package/build/esm/icons/Mono.js +0 -4
  249. package/build/esm/icons/Mono.js.map +0 -1
  250. package/build/esm/icons/Tabs.d.ts +0 -3
  251. package/build/esm/icons/Tabs.js +0 -4
  252. package/build/esm/icons/Tabs.js.map +0 -1
@@ -0,0 +1,467 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.YfmTableDnDHandler = void 0;
4
+ const model_1 = require("../../../../../../pm/model.js");
5
+ const state_1 = require("../../../../../../pm/state.js");
6
+ const utils_1 = require("../../../../../../pm/utils.js");
7
+ const lodash_1 = require("../../../../../../lodash.js");
8
+ const table_utils_1 = require("../../../../../../table-utils/index.js");
9
+ const table_desc_1 = require("../../../../../../table-utils/table-desc.js");
10
+ const YfmTableSpecs_1 = require("../../../YfmTableSpecs/index.js");
11
+ const dnd_plugin_1 = require("../plugins/dnd-plugin.js");
12
+ const focus_plugin_1 = require("../plugins/focus-plugin.js");
13
+ const dnd_drop_cursor_1 = require("./dnd-drop-cursor.js");
14
+ require("./dnd.css");
15
+ const MOUSE_MOVE_DEBOUNCE = 100; // ms
16
+ const DRAG_START_THRESHOLD = 4; // px
17
+ class YfmTableDnDHandler {
18
+ _rowHandler;
19
+ _columnHandler;
20
+ get row() {
21
+ return this._rowHandler;
22
+ }
23
+ get column() {
24
+ return this._columnHandler;
25
+ }
26
+ constructor(view, params) {
27
+ this._rowHandler = new YfmTableRowDnDHandler(view, params);
28
+ this._columnHandler = new YfmTableColumnDnDHandler(view, params);
29
+ }
30
+ update(node) {
31
+ this._rowHandler.update(node);
32
+ this._columnHandler.update(node);
33
+ }
34
+ destroy() {
35
+ this._rowHandler.destroy();
36
+ this._columnHandler.destroy();
37
+ }
38
+ }
39
+ exports.YfmTableDnDHandler = YfmTableDnDHandler;
40
+ class YfmTableDnDAbstractHandler {
41
+ _cellGetPos;
42
+ _editorView;
43
+ _logger;
44
+ _dropCursor;
45
+ __cellNode;
46
+ __dragging = false;
47
+ __destroyed = false;
48
+ __dragMouseDown = false;
49
+ constructor(view, params) {
50
+ this._editorView = view;
51
+ this.__cellNode = params.cellNode;
52
+ this._cellGetPos = params.cellGetPos;
53
+ this._logger = params.logger;
54
+ this._dropCursor = params.dropCursor;
55
+ }
56
+ update(cellnode) {
57
+ this.__cellNode = cellnode;
58
+ }
59
+ destroy() {
60
+ this.__destroyed = true;
61
+ this._clearDragging();
62
+ }
63
+ control_handleMouseDown = (event) => {
64
+ this.__dragMouseDown = { pageX: event.pageX, pageY: event.pageY };
65
+ this._dropCursor.clear();
66
+ };
67
+ control_handleMouseUp = () => {
68
+ this.__dragMouseDown = false;
69
+ };
70
+ control_handleMouseMove = (event) => {
71
+ if (!this._dragMouseDown || !isDragThresholdPassed(this._dragMouseDown, event))
72
+ return;
73
+ if (this._editorView.dragging || this._dragging)
74
+ return;
75
+ this._startDragging();
76
+ };
77
+ get _cellNode() {
78
+ return this.__cellNode;
79
+ }
80
+ get _dragging() {
81
+ return this.__dragging;
82
+ }
83
+ set _dragging(val) {
84
+ this.__dragging = val;
85
+ }
86
+ get _destroyed() {
87
+ return this.__destroyed;
88
+ }
89
+ get _dragMouseDown() {
90
+ return this.__dragMouseDown;
91
+ }
92
+ _getTableDescAndCellInfo() {
93
+ const tcellPos = this._cellGetPos();
94
+ const tableNode = tcellPos === undefined
95
+ ? undefined
96
+ : (0, utils_1.findParentNodeClosestToPos)(this._editorView.state.doc.resolve(tcellPos), table_utils_1.isTableNode);
97
+ const tableDesc = tableNode && table_desc_1.TableDesc.create(tableNode.node)?.bind(tableNode.pos);
98
+ const cellInfo = tableDesc?.base.getCellInfo(this._cellNode);
99
+ return cellInfo
100
+ ? {
101
+ cellPos: tcellPos,
102
+ table: tableNode,
103
+ tableDesc: tableDesc,
104
+ cellInfo,
105
+ }
106
+ : null;
107
+ }
108
+ _clearDragging() {
109
+ this.__dragging = false;
110
+ this.__dragMouseDown = false;
111
+ this._dropCursor.clear();
112
+ this._editorView.dragging = null;
113
+ this._editorView.dispatch((0, dnd_plugin_1.clearAllSelections)(this._editorView.state.tr));
114
+ }
115
+ }
116
+ class YfmTableRowDnDHandler extends YfmTableDnDAbstractHandler {
117
+ constructor(view, params) {
118
+ super(view, {
119
+ ...params,
120
+ logger: params.logger.nested({ component: 'row-dnd-handler' }),
121
+ dropCursor: new dnd_drop_cursor_1.DropCursor(view, params.dropCursor),
122
+ });
123
+ }
124
+ canDrag() {
125
+ const res = this._getTableDescAndCellInfo();
126
+ if (!res)
127
+ return false;
128
+ const rowRange = res.tableDesc.base.getRowRangeByRowIdx(res.cellInfo.row);
129
+ return rowRange.safeTopBoundary && rowRange.safeBottomBoundary;
130
+ }
131
+ _startDragging = () => {
132
+ const info = this._getTableDescAndCellInfo();
133
+ if (!info)
134
+ return;
135
+ const { tableDesc, cellInfo } = info;
136
+ const rowRanges = tableDesc.base.getRowRanges();
137
+ const currRowRange = tableDesc.base.getRowRangeByRowIdx(cellInfo.row);
138
+ if (!currRowRange.safeTopBoundary || !currRowRange.safeBottomBoundary)
139
+ return;
140
+ this._dragging = true;
141
+ this._logger.event({ event: 'row-drag-start' });
142
+ {
143
+ const { tr } = this._editorView.state;
144
+ (0, focus_plugin_1.hideHoverDecos)(tr);
145
+ (0, dnd_plugin_1.selectDraggedRow)(tr, (0, lodash_1.range)(currRowRange.startIdx, currRowRange.endIdx + 1).map((rowIdx) => tableDesc.getPosForRow(rowIdx)));
146
+ this._editorView.dispatch(tr);
147
+ }
148
+ {
149
+ const from = tableDesc.getPosForRow(currRowRange.startIdx).from;
150
+ const to = tableDesc.getPosForRow(currRowRange.endIdx).to;
151
+ this._editorView.dragging = {
152
+ move: true,
153
+ slice: this._editorView.state.doc.slice(from, to, false),
154
+ };
155
+ }
156
+ const dndBackground = document.createElement('div');
157
+ dndBackground.classList.add('g-md-yfm-table-dnd-cursor-background');
158
+ document.body.append(dndBackground);
159
+ const draggedRangeIdx = rowRanges.indexOf(currRowRange);
160
+ const onMove = (0, lodash_1.debounce)((event) => {
161
+ this._moveDragging(event, {
162
+ rangeIdx: draggedRangeIdx,
163
+ tableDesc,
164
+ });
165
+ }, MOUSE_MOVE_DEBOUNCE, { maxWait: MOUSE_MOVE_DEBOUNCE });
166
+ document.addEventListener('mousemove', onMove);
167
+ document.addEventListener('mouseup', () => {
168
+ onMove.flush();
169
+ dndBackground.remove();
170
+ document.removeEventListener('mousemove', onMove);
171
+ this._endDragging(currRowRange, tableDesc);
172
+ }, { once: true });
173
+ };
174
+ _moveDragging(event, { rangeIdx, tableDesc: initialTableDesc, }) {
175
+ if (this._destroyed || !this._dragging)
176
+ return;
177
+ const info = this._getTableDescAndCellInfo();
178
+ if (!info || info.tableDesc.base !== initialTableDesc.base) {
179
+ this._clearDragging();
180
+ return;
181
+ }
182
+ const { tableDesc } = info;
183
+ const ranges = tableDesc.base.getRowRanges();
184
+ const boxes = ranges.map((range) => {
185
+ const firstRowStartPos = tableDesc.getPosForRow(range.startIdx).from;
186
+ const lastRowPos = tableDesc.getPosForRow(range.endIdx);
187
+ const lastRowStartPos = lastRowPos.from;
188
+ const lastRowEndPos = lastRowPos.to;
189
+ const firstRowElem = this._editorView.domAtPos(firstRowStartPos + 1).node;
190
+ const firstRowBox = firstRowElem.getBoundingClientRect();
191
+ const lastRowElem = this._editorView.domAtPos(lastRowStartPos + 1).node;
192
+ const lastRowBox = lastRowElem.getBoundingClientRect();
193
+ return {
194
+ pos: { from: firstRowStartPos, to: lastRowEndPos },
195
+ rect: {
196
+ top: firstRowBox.top,
197
+ bottom: lastRowBox.bottom,
198
+ },
199
+ safeTopBoundary: range.safeTopBoundary,
200
+ safeBottomBoundary: range.safeBottomBoundary,
201
+ };
202
+ });
203
+ const pos = (() => {
204
+ const { clientY } = event;
205
+ const draggedRangeBox = boxes[rangeIdx];
206
+ const isDraggedFirst = rangeIdx === 0;
207
+ const isDraggedLast = rangeIdx === boxes.length - 1;
208
+ if (!isDraggedFirst && clientY < draggedRangeBox.rect.top) {
209
+ for (const box of boxes.slice(0, rangeIdx).reverse()) {
210
+ if (clientY < box.rect.top)
211
+ continue;
212
+ if (!box.safeTopBoundary)
213
+ continue;
214
+ return box.pos.from;
215
+ }
216
+ return boxes[0].pos.from;
217
+ }
218
+ if (!isDraggedLast && clientY > draggedRangeBox.rect.bottom) {
219
+ for (const box of boxes.slice(rangeIdx + 1)) {
220
+ if (clientY > box.rect.bottom)
221
+ continue;
222
+ if (!box.safeBottomBoundary)
223
+ continue;
224
+ return box.pos.to;
225
+ }
226
+ return boxes.at(-1).pos.to;
227
+ }
228
+ return null;
229
+ })();
230
+ if (typeof pos === 'number')
231
+ this._dropCursor.setPos(pos);
232
+ else
233
+ this._dropCursor.clear();
234
+ }
235
+ _endDragging(draggedRange, initialTableDesc) {
236
+ if (this._destroyed || !this._dragging)
237
+ return;
238
+ const point = this._dropCursor.getPos();
239
+ this._clearDragging();
240
+ this._logger.event({ event: 'row-drag-end' });
241
+ if (point === null) {
242
+ this._editorView.focus();
243
+ return;
244
+ }
245
+ const info = this._getTableDescAndCellInfo();
246
+ if (!info || info.tableDesc.base !== initialTableDesc.base) {
247
+ this._editorView.focus();
248
+ return;
249
+ }
250
+ const rangeFrom = info.tableDesc.getPosForRow(draggedRange.startIdx).from;
251
+ const rangeTo = info.tableDesc.getPosForRow(draggedRange.endIdx).to;
252
+ if (point === rangeFrom || point === rangeTo) {
253
+ this._editorView.focus();
254
+ return;
255
+ }
256
+ const { tr } = this._editorView.state;
257
+ const fragment = tr.doc.slice(rangeFrom, rangeTo, false).content;
258
+ if (point > rangeFrom) {
259
+ tr.insert(point, fragment);
260
+ tr.delete(rangeFrom, rangeTo);
261
+ }
262
+ else {
263
+ tr.delete(rangeFrom, rangeTo);
264
+ tr.insert(point, fragment);
265
+ }
266
+ tr.setSelection(state_1.TextSelection.near(tr.doc.resolve(tr.mapping.map(point + 1)), 1));
267
+ tr.scrollIntoView();
268
+ this._editorView.dispatch(tr);
269
+ this._editorView.focus();
270
+ }
271
+ }
272
+ class YfmTableColumnDnDHandler extends YfmTableDnDAbstractHandler {
273
+ constructor(view, params) {
274
+ super(view, {
275
+ ...params,
276
+ logger: params.logger.nested({ component: 'column-dnd-handler' }),
277
+ dropCursor: new dnd_drop_cursor_1.TableColumnDropCursor(view, params.dropCursor),
278
+ });
279
+ }
280
+ canDrag() {
281
+ const res = this._getTableDescAndCellInfo();
282
+ if (!res)
283
+ return false;
284
+ const rowRange = res.tableDesc.base.getColumnRangeByColumnIdx(res.cellInfo.column);
285
+ return rowRange.safeLeftBoundary && rowRange.safeRightBoundary;
286
+ }
287
+ _startDragging() {
288
+ const info = this._getTableDescAndCellInfo();
289
+ if (!info)
290
+ return;
291
+ const { tableDesc, cellInfo } = info;
292
+ const columnRanges = tableDesc.base.getColumnRanges();
293
+ const currColumnRange = tableDesc.base.getColumnRangeByColumnIdx(cellInfo.column);
294
+ if (!currColumnRange.safeLeftBoundary || !currColumnRange.safeRightBoundary)
295
+ return;
296
+ this._dragging = true;
297
+ this._logger.event({ event: 'column-drag-start' });
298
+ {
299
+ const columnCellsPos = [];
300
+ for (const i of (0, lodash_1.range)(currColumnRange.startIdx, currColumnRange.endIdx + 1)) {
301
+ columnCellsPos.push(...tableDesc.getPosForColumn(i));
302
+ }
303
+ const realPos = columnCellsPos.filter((cell) => cell.type === 'real');
304
+ const { tr } = this._editorView.state;
305
+ (0, focus_plugin_1.hideHoverDecos)(tr);
306
+ (0, dnd_plugin_1.selectDraggedColumn)(tr, realPos);
307
+ this._editorView.dispatch(tr);
308
+ }
309
+ {
310
+ this._editorView.dragging = {
311
+ move: true,
312
+ slice: model_1.Slice.empty,
313
+ };
314
+ }
315
+ const dndBackground = document.createElement('div');
316
+ dndBackground.classList.add('g-md-yfm-table-dnd-cursor-background');
317
+ document.body.append(dndBackground);
318
+ const draggedRangeIdx = columnRanges.indexOf(currColumnRange);
319
+ const onMove = (0, lodash_1.debounce)((event) => {
320
+ this._moveDragging(event, {
321
+ rangeIdx: draggedRangeIdx,
322
+ tableDesc,
323
+ });
324
+ }, MOUSE_MOVE_DEBOUNCE, { maxWait: MOUSE_MOVE_DEBOUNCE });
325
+ document.addEventListener('mousemove', onMove);
326
+ document.addEventListener('mouseup', () => {
327
+ onMove.flush();
328
+ dndBackground.remove();
329
+ document.removeEventListener('mousemove', onMove);
330
+ this._endDragging(currColumnRange, tableDesc);
331
+ }, { once: true });
332
+ }
333
+ _moveDragging(event, { rangeIdx, tableDesc: initialTableDesc, }) {
334
+ if (this._destroyed || !this._dragging)
335
+ return;
336
+ const info = this._getTableDescAndCellInfo();
337
+ if (!info || info.tableDesc.base !== initialTableDesc.base) {
338
+ this._clearDragging();
339
+ return;
340
+ }
341
+ const { tableDesc } = info;
342
+ const ranges = tableDesc.base.getColumnRanges();
343
+ const boxes = ranges.map((range) => {
344
+ const firstColStartPos = getCellPos(tableDesc.getPosForCell(0, range.startIdx), 'start');
345
+ const lastColPos = tableDesc.getPosForCell(0, range.startIdx);
346
+ const lastColStartPos = getCellPos(lastColPos, 'start');
347
+ const lastColEndPos = getCellPos(lastColPos, 'end');
348
+ const firstColElem = this._editorView.domAtPos(firstColStartPos + 1).node;
349
+ const firstColBox = firstColElem.getBoundingClientRect();
350
+ const lastColElem = this._editorView.domAtPos(lastColStartPos + 1).node;
351
+ const lastColBox = lastColElem.getBoundingClientRect();
352
+ return {
353
+ pos: { from: firstColStartPos, to: lastColEndPos },
354
+ rect: {
355
+ left: firstColBox.left,
356
+ right: lastColBox.right,
357
+ },
358
+ safeLeftBoundary: range.safeLeftBoundary,
359
+ safeRightBoundary: range.safeRightBoundary,
360
+ };
361
+ });
362
+ const pos = (() => {
363
+ const { clientX } = event;
364
+ const draggedRangeBox = boxes[rangeIdx];
365
+ const isDraggedFirst = rangeIdx === 0;
366
+ const isDraggedLast = rangeIdx === boxes.length - 1;
367
+ if (!isDraggedFirst && clientX < draggedRangeBox.rect.left) {
368
+ for (const box of boxes.slice(0, rangeIdx).reverse()) {
369
+ if (clientX < box.rect.left)
370
+ continue;
371
+ if (!box.safeLeftBoundary)
372
+ continue;
373
+ return box.pos.from;
374
+ }
375
+ return boxes[0].pos.from;
376
+ }
377
+ if (!isDraggedLast && clientX > draggedRangeBox.rect.right) {
378
+ for (const box of boxes.slice(rangeIdx + 1)) {
379
+ if (clientX > box.rect.right)
380
+ continue;
381
+ if (!box.safeRightBoundary)
382
+ continue;
383
+ return box.pos.to;
384
+ }
385
+ return boxes.at(-1).pos.to;
386
+ }
387
+ return null;
388
+ })();
389
+ if (typeof pos === 'number')
390
+ this._dropCursor.setPos(pos);
391
+ else
392
+ this._dropCursor.clear();
393
+ }
394
+ _endDragging(draggedRange, initialTableDesc) {
395
+ if (this._destroyed || !this._dragging)
396
+ return;
397
+ const point = this._dropCursor.getPos();
398
+ this._clearDragging();
399
+ this._logger.event({ event: 'column-drag-end' });
400
+ if (point === null) {
401
+ this._editorView.focus();
402
+ return;
403
+ }
404
+ const info = this._getTableDescAndCellInfo();
405
+ if (!info || info.tableDesc.base !== initialTableDesc.base) {
406
+ this._editorView.focus();
407
+ return;
408
+ }
409
+ const currRangeFrom = info.tableDesc.getPosForCell(0, draggedRange.startIdx).from;
410
+ const currRangeTo = info.tableDesc.getPosForCell(0, draggedRange.endIdx)
411
+ .to;
412
+ if (point === currRangeFrom || point === currRangeTo)
413
+ return;
414
+ const targetColumnIndex = (() => {
415
+ if (point === info.tableDesc.getPosForRow(0).to - 1) {
416
+ return info.tableDesc.cols;
417
+ }
418
+ const cellNode = this._editorView.state.doc.nodeAt(point);
419
+ if (!cellNode || cellNode.type.name !== YfmTableSpecs_1.YfmTableNode.Cell)
420
+ return null;
421
+ const cellInfo = info.tableDesc.base.getCellInfo(cellNode);
422
+ if (!cellInfo)
423
+ return null;
424
+ return cellInfo.column;
425
+ })();
426
+ if (targetColumnIndex === null ||
427
+ targetColumnIndex === info.cellInfo.column ||
428
+ targetColumnIndex === info.cellInfo.column + 1) {
429
+ this._editorView.focus();
430
+ return;
431
+ }
432
+ const { tr } = this._editorView.state;
433
+ for (let rowIdx = 0; rowIdx < info.tableDesc.rows; rowIdx++) {
434
+ const from = getCellPos(info.tableDesc.getPosForCell(rowIdx, draggedRange.startIdx), 'start');
435
+ const to = getCellPos(info.tableDesc.getPosForCell(rowIdx, draggedRange.endIdx), 'end');
436
+ if (from === to)
437
+ continue;
438
+ let targetPos;
439
+ if (targetColumnIndex === info.tableDesc.cols) {
440
+ targetPos = info.tableDesc.getPosForRow(rowIdx).to - 1;
441
+ }
442
+ else if (targetColumnIndex === 0) {
443
+ targetPos = info.tableDesc.getPosForRow(rowIdx).from + 1;
444
+ }
445
+ else {
446
+ targetPos = getCellPos(info.tableDesc.getPosForCell(rowIdx, targetColumnIndex), 'start');
447
+ }
448
+ if (targetPos !== from && targetPos !== to) {
449
+ const fragment = tr.doc.slice(from, to, false).content;
450
+ tr.insert(tr.mapping.map(targetPos), fragment);
451
+ tr.delete(tr.mapping.map(from), tr.mapping.map(to));
452
+ }
453
+ }
454
+ this._editorView.dispatch(tr.scrollIntoView());
455
+ this._editorView.focus();
456
+ }
457
+ }
458
+ function getCellPos(pos, dir) {
459
+ if (pos.type === 'virtual')
460
+ return pos.closestPos;
461
+ return dir === 'start' ? pos.from : pos.to;
462
+ }
463
+ function isDragThresholdPassed(init, curr) {
464
+ return (Math.abs(init.pageX - curr.pageX) >= DRAG_START_THRESHOLD ||
465
+ Math.abs(init.pageY - curr.pageY) >= DRAG_START_THRESHOLD);
466
+ }
467
+ //# sourceMappingURL=dnd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dnd.js","sourceRoot":"../../../../../../../../src","sources":["extensions/yfm/YfmTable/plugins/YfmTableControls/dnd/dnd.ts"],"names":[],"mappings":"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","sourcesContent":["import {type Node, Slice} from '#pm/model';\nimport {TextSelection} from '#pm/state';\nimport {findParentNodeClosestToPos} from '#pm/utils';\nimport type {EditorView} from '#pm/view';\nimport {debounce, range as iterate} from 'src/lodash';\nimport type {Logger2} from 'src/logger';\nimport {isTableNode} from 'src/table-utils';\nimport {\n type CellPos,\n type RealCellPos,\n type TableColumnRange,\n TableDesc,\n type TableDescBinded,\n type TableRowRange,\n} from 'src/table-utils/table-desc';\n\nimport {YfmTableNode} from '../../../YfmTableSpecs';\nimport {clearAllSelections, selectDraggedColumn, selectDraggedRow} from '../plugins/dnd-plugin';\nimport {hideHoverDecos} from '../plugins/focus-plugin';\n\nimport {\n type DropCursorParams,\n DropCursor as RowDropCursor,\n TableColumnDropCursor,\n} from './dnd-drop-cursor';\n\nimport './dnd.scss';\n\nconst MOUSE_MOVE_DEBOUNCE = 100; // ms\nconst DRAG_START_THRESHOLD = 4; // px\n\ntype PageCoords = Pick<MouseEvent, 'pageX' | 'pageY'>;\n\nexport type DnDControlHandler = {\n canDrag(): boolean;\n control_handleMouseDown: React.MouseEventHandler<HTMLButtonElement>;\n control_handleMouseMove: React.MouseEventHandler<HTMLButtonElement>;\n control_handleMouseUp: React.MouseEventHandler<HTMLButtonElement>;\n};\n\ninterface TableHandler {\n update(node: Node): void;\n destroy(): void;\n}\n\nexport type YfmTableDnDHandlerParams = {\n cellNode: Node;\n cellGetPos: () => number | undefined;\n logger: Logger2.ILogger;\n dropCursor?: DropCursorParams;\n};\n\nexport class YfmTableDnDHandler implements TableHandler {\n private readonly _rowHandler: YfmTableRowDnDHandler;\n private readonly _columnHandler: YfmTableColumnDnDHandler;\n\n get row(): DnDControlHandler {\n return this._rowHandler;\n }\n\n get column(): DnDControlHandler {\n return this._columnHandler;\n }\n\n constructor(view: EditorView, params: YfmTableDnDHandlerParams) {\n this._rowHandler = new YfmTableRowDnDHandler(view, params);\n this._columnHandler = new YfmTableColumnDnDHandler(view, params);\n }\n\n update(node: Node): void {\n this._rowHandler.update(node);\n this._columnHandler.update(node);\n }\n\n destroy(): void {\n this._rowHandler.destroy();\n this._columnHandler.destroy();\n }\n}\n\nabstract class YfmTableDnDAbstractHandler implements TableHandler, DnDControlHandler {\n protected readonly _cellGetPos: () => number | undefined;\n protected readonly _editorView: EditorView;\n protected readonly _logger: Logger2.ILogger;\n protected readonly _dropCursor: RowDropCursor;\n\n private __cellNode: Node;\n private __dragging = false;\n private __destroyed = false;\n private __dragMouseDown: false | PageCoords = false;\n\n constructor(\n view: EditorView,\n params: Omit<YfmTableDnDHandlerParams, 'dropCursor'> & {dropCursor: RowDropCursor},\n ) {\n this._editorView = view;\n this.__cellNode = params.cellNode;\n this._cellGetPos = params.cellGetPos;\n this._logger = params.logger;\n this._dropCursor = params.dropCursor;\n }\n\n update(cellnode: Node) {\n this.__cellNode = cellnode;\n }\n\n destroy() {\n this.__destroyed = true;\n this._clearDragging();\n }\n\n abstract canDrag(): boolean;\n\n control_handleMouseDown: React.MouseEventHandler<HTMLButtonElement> = (event) => {\n this.__dragMouseDown = {pageX: event.pageX, pageY: event.pageY};\n this._dropCursor.clear();\n };\n\n control_handleMouseUp: React.MouseEventHandler<HTMLButtonElement> = () => {\n this.__dragMouseDown = false;\n };\n\n control_handleMouseMove: React.MouseEventHandler<HTMLButtonElement> = (event) => {\n if (!this._dragMouseDown || !isDragThresholdPassed(this._dragMouseDown, event)) return;\n\n if (this._editorView.dragging || this._dragging) return;\n this._startDragging();\n };\n\n protected get _cellNode(): Node {\n return this.__cellNode;\n }\n\n protected get _dragging() {\n return this.__dragging;\n }\n\n protected set _dragging(val: boolean) {\n this.__dragging = val;\n }\n\n protected get _destroyed() {\n return this.__destroyed;\n }\n\n protected get _dragMouseDown() {\n return this.__dragMouseDown;\n }\n\n protected abstract _startDragging(): void;\n\n protected _getTableDescAndCellInfo() {\n const tcellPos = this._cellGetPos();\n const tableNode =\n tcellPos === undefined\n ? undefined\n : findParentNodeClosestToPos(\n this._editorView.state.doc.resolve(tcellPos),\n isTableNode,\n );\n const tableDesc = tableNode && TableDesc.create(tableNode.node)?.bind(tableNode.pos);\n const cellInfo = tableDesc?.base.getCellInfo(this._cellNode);\n return cellInfo\n ? {\n cellPos: tcellPos!,\n table: tableNode!,\n tableDesc: tableDesc!,\n cellInfo,\n }\n : null;\n }\n\n protected _clearDragging() {\n this.__dragging = false;\n this.__dragMouseDown = false;\n this._dropCursor.clear();\n this._editorView.dragging = null;\n this._editorView.dispatch(clearAllSelections(this._editorView.state.tr));\n }\n}\n\nclass YfmTableRowDnDHandler extends YfmTableDnDAbstractHandler {\n constructor(view: EditorView, params: YfmTableDnDHandlerParams) {\n super(view, {\n ...params,\n logger: params.logger.nested({component: 'row-dnd-handler'}),\n dropCursor: new RowDropCursor(view, params.dropCursor),\n });\n }\n\n canDrag(): boolean {\n const res = this._getTableDescAndCellInfo();\n if (!res) return false;\n const rowRange = res.tableDesc.base.getRowRangeByRowIdx(res.cellInfo.row);\n return rowRange.safeTopBoundary && rowRange.safeBottomBoundary;\n }\n\n protected _startDragging = () => {\n const info = this._getTableDescAndCellInfo();\n if (!info) return;\n\n const {tableDesc, cellInfo} = info;\n const rowRanges = tableDesc.base.getRowRanges();\n const currRowRange = tableDesc.base.getRowRangeByRowIdx(cellInfo.row);\n if (!currRowRange.safeTopBoundary || !currRowRange.safeBottomBoundary) return;\n\n this._dragging = true;\n this._logger.event({event: 'row-drag-start'});\n\n {\n const {tr} = this._editorView.state;\n hideHoverDecos(tr);\n selectDraggedRow(\n tr,\n iterate(currRowRange.startIdx, currRowRange.endIdx + 1).map((rowIdx) =>\n tableDesc.getPosForRow(rowIdx),\n ),\n );\n this._editorView.dispatch(tr);\n }\n\n {\n const from = tableDesc.getPosForRow(currRowRange.startIdx).from;\n const to = tableDesc.getPosForRow(currRowRange.endIdx).to;\n this._editorView.dragging = {\n move: true,\n slice: this._editorView.state.doc.slice(from, to, false),\n };\n }\n\n const dndBackground = document.createElement('div');\n dndBackground.classList.add('g-md-yfm-table-dnd-cursor-background');\n document.body.append(dndBackground);\n\n const draggedRangeIdx = rowRanges.indexOf(currRowRange);\n\n const onMove = debounce(\n (event: MouseEvent) => {\n this._moveDragging(event, {\n rangeIdx: draggedRangeIdx,\n tableDesc,\n });\n },\n MOUSE_MOVE_DEBOUNCE,\n {maxWait: MOUSE_MOVE_DEBOUNCE},\n );\n\n document.addEventListener('mousemove', onMove);\n\n document.addEventListener(\n 'mouseup',\n () => {\n onMove.flush();\n dndBackground.remove();\n document.removeEventListener('mousemove', onMove);\n this._endDragging(currRowRange, tableDesc);\n },\n {once: true},\n );\n };\n\n private _moveDragging(\n event: MouseEvent,\n {\n rangeIdx,\n tableDesc: initialTableDesc,\n }: {\n rangeIdx: number;\n tableDesc: TableDescBinded;\n },\n ) {\n if (this._destroyed || !this._dragging) return;\n\n const info = this._getTableDescAndCellInfo();\n if (!info || info.tableDesc.base !== initialTableDesc.base) {\n this._clearDragging();\n return;\n }\n\n const {tableDesc} = info;\n const ranges = tableDesc.base.getRowRanges();\n\n const boxes = ranges.map((range: Readonly<TableRowRange>) => {\n const firstRowStartPos = tableDesc.getPosForRow(range.startIdx).from;\n const lastRowPos = tableDesc.getPosForRow(range.endIdx);\n const lastRowStartPos = lastRowPos.from;\n const lastRowEndPos = lastRowPos.to;\n\n const firstRowElem = this._editorView.domAtPos(firstRowStartPos + 1).node as Element;\n const firstRowBox = firstRowElem.getBoundingClientRect();\n\n const lastRowElem = this._editorView.domAtPos(lastRowStartPos + 1).node as Element;\n const lastRowBox = lastRowElem.getBoundingClientRect();\n\n return {\n pos: {from: firstRowStartPos, to: lastRowEndPos},\n rect: {\n top: firstRowBox.top,\n bottom: lastRowBox.bottom,\n },\n safeTopBoundary: range.safeTopBoundary,\n safeBottomBoundary: range.safeBottomBoundary,\n };\n });\n\n const pos = ((): number | null => {\n const {clientY} = event;\n const draggedRangeBox = boxes[rangeIdx];\n const isDraggedFirst = rangeIdx === 0;\n const isDraggedLast = rangeIdx === boxes.length - 1;\n\n if (!isDraggedFirst && clientY < draggedRangeBox.rect.top) {\n for (const box of boxes.slice(0, rangeIdx).reverse()) {\n if (clientY < box.rect.top) continue;\n if (!box.safeTopBoundary) continue;\n return box.pos.from;\n }\n return boxes[0].pos.from;\n }\n\n if (!isDraggedLast && clientY > draggedRangeBox.rect.bottom) {\n for (const box of boxes.slice(rangeIdx + 1)) {\n if (clientY > box.rect.bottom) continue;\n if (!box.safeBottomBoundary) continue;\n return box.pos.to;\n }\n return boxes.at(-1)!.pos.to;\n }\n\n return null;\n })();\n\n if (typeof pos === 'number') this._dropCursor.setPos(pos);\n else this._dropCursor.clear();\n }\n\n private _endDragging(draggedRange: Readonly<TableRowRange>, initialTableDesc: TableDescBinded) {\n if (this._destroyed || !this._dragging) return;\n\n const point = this._dropCursor.getPos();\n this._clearDragging();\n this._logger.event({event: 'row-drag-end'});\n\n if (point === null) {\n this._editorView.focus();\n return;\n }\n\n const info = this._getTableDescAndCellInfo();\n if (!info || info.tableDesc.base !== initialTableDesc.base) {\n this._editorView.focus();\n return;\n }\n\n const rangeFrom = info.tableDesc.getPosForRow(draggedRange.startIdx).from;\n const rangeTo = info.tableDesc.getPosForRow(draggedRange.endIdx).to;\n if (point === rangeFrom || point === rangeTo) {\n this._editorView.focus();\n return;\n }\n\n const {tr} = this._editorView.state;\n const fragment = tr.doc.slice(rangeFrom, rangeTo, false).content;\n if (point > rangeFrom) {\n tr.insert(point, fragment);\n tr.delete(rangeFrom, rangeTo);\n } else {\n tr.delete(rangeFrom, rangeTo);\n tr.insert(point, fragment);\n }\n tr.setSelection(TextSelection.near(tr.doc.resolve(tr.mapping.map(point + 1)), 1));\n tr.scrollIntoView();\n this._editorView.dispatch(tr);\n\n this._editorView.focus();\n }\n}\n\nclass YfmTableColumnDnDHandler extends YfmTableDnDAbstractHandler {\n constructor(view: EditorView, params: YfmTableDnDHandlerParams) {\n super(view, {\n ...params,\n logger: params.logger.nested({component: 'column-dnd-handler'}),\n dropCursor: new TableColumnDropCursor(view, params.dropCursor),\n });\n }\n\n canDrag(): boolean {\n const res = this._getTableDescAndCellInfo();\n if (!res) return false;\n const rowRange = res.tableDesc.base.getColumnRangeByColumnIdx(res.cellInfo.column);\n return rowRange.safeLeftBoundary && rowRange.safeRightBoundary;\n }\n\n protected _startDragging() {\n const info = this._getTableDescAndCellInfo();\n if (!info) return;\n\n const {tableDesc, cellInfo} = info;\n const columnRanges = tableDesc.base.getColumnRanges();\n const currColumnRange = tableDesc.base.getColumnRangeByColumnIdx(cellInfo.column);\n if (!currColumnRange.safeLeftBoundary || !currColumnRange.safeRightBoundary) return;\n\n this._dragging = true;\n this._logger.event({event: 'column-drag-start'});\n\n {\n const columnCellsPos: CellPos[] = [];\n for (const i of iterate(currColumnRange.startIdx, currColumnRange.endIdx + 1)) {\n columnCellsPos.push(...tableDesc.getPosForColumn(i));\n }\n const realPos = columnCellsPos.filter((cell) => cell.type === 'real');\n\n const {tr} = this._editorView.state;\n hideHoverDecos(tr);\n selectDraggedColumn(tr, realPos);\n this._editorView.dispatch(tr);\n }\n {\n this._editorView.dragging = {\n move: true,\n slice: Slice.empty,\n };\n }\n\n const dndBackground = document.createElement('div');\n dndBackground.classList.add('g-md-yfm-table-dnd-cursor-background');\n document.body.append(dndBackground);\n\n const draggedRangeIdx = columnRanges.indexOf(currColumnRange);\n\n const onMove = debounce(\n (event: MouseEvent) => {\n this._moveDragging(event, {\n rangeIdx: draggedRangeIdx,\n tableDesc,\n });\n },\n MOUSE_MOVE_DEBOUNCE,\n {maxWait: MOUSE_MOVE_DEBOUNCE},\n );\n\n document.addEventListener('mousemove', onMove);\n\n document.addEventListener(\n 'mouseup',\n () => {\n onMove.flush();\n dndBackground.remove();\n document.removeEventListener('mousemove', onMove);\n this._endDragging(currColumnRange, tableDesc);\n },\n {once: true},\n );\n }\n\n private _moveDragging(\n event: MouseEvent,\n {\n rangeIdx,\n tableDesc: initialTableDesc,\n }: {\n rangeIdx: number;\n tableDesc: TableDescBinded;\n },\n ) {\n if (this._destroyed || !this._dragging) return;\n\n const info = this._getTableDescAndCellInfo();\n if (!info || info.tableDesc.base !== initialTableDesc.base) {\n this._clearDragging();\n return;\n }\n\n const {tableDesc} = info;\n const ranges = tableDesc.base.getColumnRanges();\n\n const boxes = ranges.map((range: Readonly<TableColumnRange>) => {\n const firstColStartPos = getCellPos(\n tableDesc.getPosForCell(0, range.startIdx),\n 'start',\n );\n const lastColPos = tableDesc.getPosForCell(0, range.startIdx);\n const lastColStartPos = getCellPos(lastColPos, 'start');\n const lastColEndPos = getCellPos(lastColPos, 'end');\n\n const firstColElem = this._editorView.domAtPos(firstColStartPos + 1).node as Element;\n const firstColBox = firstColElem.getBoundingClientRect();\n\n const lastColElem = this._editorView.domAtPos(lastColStartPos + 1).node as Element;\n const lastColBox = lastColElem.getBoundingClientRect();\n\n return {\n pos: {from: firstColStartPos, to: lastColEndPos},\n rect: {\n left: firstColBox.left,\n right: lastColBox.right,\n },\n safeLeftBoundary: range.safeLeftBoundary,\n safeRightBoundary: range.safeRightBoundary,\n };\n });\n\n const pos = ((): number | null => {\n const {clientX} = event;\n const draggedRangeBox = boxes[rangeIdx];\n const isDraggedFirst = rangeIdx === 0;\n const isDraggedLast = rangeIdx === boxes.length - 1;\n\n if (!isDraggedFirst && clientX < draggedRangeBox.rect.left) {\n for (const box of boxes.slice(0, rangeIdx).reverse()) {\n if (clientX < box.rect.left) continue;\n if (!box.safeLeftBoundary) continue;\n return box.pos.from;\n }\n return boxes[0].pos.from;\n }\n\n if (!isDraggedLast && clientX > draggedRangeBox.rect.right) {\n for (const box of boxes.slice(rangeIdx + 1)) {\n if (clientX > box.rect.right) continue;\n if (!box.safeRightBoundary) continue;\n return box.pos.to;\n }\n return boxes.at(-1)!.pos.to;\n }\n\n return null;\n })();\n\n if (typeof pos === 'number') this._dropCursor.setPos(pos);\n else this._dropCursor.clear();\n }\n\n private _endDragging(\n draggedRange: Readonly<TableColumnRange>,\n initialTableDesc: TableDescBinded,\n ) {\n if (this._destroyed || !this._dragging) return;\n\n const point = this._dropCursor.getPos();\n this._clearDragging();\n this._logger.event({event: 'column-drag-end'});\n\n if (point === null) {\n this._editorView.focus();\n return;\n }\n\n const info = this._getTableDescAndCellInfo();\n if (!info || info.tableDesc.base !== initialTableDesc.base) {\n this._editorView.focus();\n return;\n }\n\n const currRangeFrom = (\n info.tableDesc.getPosForCell(0, draggedRange.startIdx) as RealCellPos\n ).from;\n const currRangeTo = (info.tableDesc.getPosForCell(0, draggedRange.endIdx) as RealCellPos)\n .to;\n\n if (point === currRangeFrom || point === currRangeTo) return;\n\n const targetColumnIndex = ((): number | null => {\n if (point === info.tableDesc.getPosForRow(0).to - 1) {\n return info.tableDesc.cols;\n }\n\n const cellNode = this._editorView.state.doc.nodeAt(point);\n if (!cellNode || cellNode.type.name !== YfmTableNode.Cell) return null;\n\n const cellInfo = info.tableDesc.base.getCellInfo(cellNode);\n if (!cellInfo) return null;\n\n return cellInfo.column;\n })();\n\n if (\n targetColumnIndex === null ||\n targetColumnIndex === info.cellInfo.column ||\n targetColumnIndex === info.cellInfo.column + 1\n ) {\n this._editorView.focus();\n return;\n }\n\n const {tr} = this._editorView.state;\n\n for (let rowIdx = 0; rowIdx < info.tableDesc.rows; rowIdx++) {\n const from = getCellPos(\n info.tableDesc.getPosForCell(rowIdx, draggedRange.startIdx),\n 'start',\n );\n const to = getCellPos(info.tableDesc.getPosForCell(rowIdx, draggedRange.endIdx), 'end');\n if (from === to) continue;\n\n let targetPos;\n if (targetColumnIndex === info.tableDesc.cols) {\n targetPos = info.tableDesc.getPosForRow(rowIdx).to - 1;\n } else if (targetColumnIndex === 0) {\n targetPos = info.tableDesc.getPosForRow(rowIdx).from + 1;\n } else {\n targetPos = getCellPos(\n info.tableDesc.getPosForCell(rowIdx, targetColumnIndex),\n 'start',\n );\n }\n\n if (targetPos !== from && targetPos !== to) {\n const fragment = tr.doc.slice(from, to, false).content;\n tr.insert(tr.mapping.map(targetPos), fragment);\n tr.delete(tr.mapping.map(from), tr.mapping.map(to));\n }\n }\n\n this._editorView.dispatch(tr.scrollIntoView());\n this._editorView.focus();\n }\n}\n\nfunction getCellPos(pos: CellPos, dir: 'start' | 'end'): number {\n if (pos.type === 'virtual') return pos.closestPos;\n return dir === 'start' ? pos.from : pos.to;\n}\n\nfunction isDragThresholdPassed(init: PageCoords, curr: PageCoords): boolean {\n return (\n Math.abs(init.pageX - curr.pageX) >= DRAG_START_THRESHOLD ||\n Math.abs(init.pageY - curr.pageY) >= DRAG_START_THRESHOLD\n );\n}\n"]}
@@ -0,0 +1,12 @@
1
+ import type { ExtensionDeps } from "../../../../../core/index.js";
2
+ export declare const yfmTableControlsPlugins: (opts: {
3
+ dndEnabled: boolean;
4
+ }) => (_deps: ExtensionDeps) => (import("prosemirror-state").Plugin<import("prosemirror-view").DecorationSet> | import("prosemirror-state").Plugin<{
5
+ hover: {
6
+ rowIdx: number;
7
+ columnIdx: number;
8
+ tablePos: number;
9
+ } | null;
10
+ activeTablePos: number | null;
11
+ decorations: import("prosemirror-view").DecorationSet;
12
+ }>)[];
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.yfmTableControlsPlugins = void 0;
4
+ const dnd_plugin_1 = require("./plugins/dnd-plugin.js");
5
+ const focus_plugin_1 = require("./plugins/focus-plugin.js");
6
+ const yfmTableControlsPlugins = (opts) => (_deps) => [
7
+ (0, focus_plugin_1.yfmTableFocusPlugin)(opts),
8
+ (0, dnd_plugin_1.yfmTableDndPlugin)(),
9
+ ];
10
+ exports.yfmTableControlsPlugins = yfmTableControlsPlugins;
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"../../../../../../../src","sources":["extensions/yfm/YfmTable/plugins/YfmTableControls/index.ts"],"names":[],"mappings":";;;AAEA,wDAAuD;AACvD,4DAA2D;AAEpD,MAAM,uBAAuB,GAAG,CAAC,IAA2B,EAAE,EAAE,CAAC,CAAC,KAAoB,EAAE,EAAE,CAAC;IAC9F,IAAA,kCAAmB,EAAC,IAAI,CAAC;IACzB,IAAA,8BAAiB,GAAE;CACtB,CAAC;AAHW,QAAA,uBAAuB,2BAGlC","sourcesContent":["import type {ExtensionDeps} from '#core';\n\nimport {yfmTableDndPlugin} from './plugins/dnd-plugin';\nimport {yfmTableFocusPlugin} from './plugins/focus-plugin';\n\nexport const yfmTableControlsPlugins = (opts: {dndEnabled: boolean}) => (_deps: ExtensionDeps) => [\n yfmTableFocusPlugin(opts),\n yfmTableDndPlugin(),\n];\n"]}
@@ -0,0 +1,6 @@
1
+ import type { NodeViewConstructor } from "../../../../../../pm/view.js";
2
+ type YfmTableCellViewOptions = {
3
+ dndEnabled: boolean;
4
+ };
5
+ export declare const yfmTableCellView: (opts: YfmTableCellViewOptions) => NodeViewConstructor;
6
+ export {};