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