@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
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"../../../../../src","sources":["extensions/yfm/YfmTable/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,YAAY,EAAC,sCAA6B;AAElD,OAAO,EAAC,aAAa,EAA4B,iCAAwB;AACzE,OAAO,EAAC,cAAc,EAAC,qBAAkB;AACzC,OAAO,EAAC,gBAAgB,EAAC,gCAA6B;AACtD,OAAO,EAAC,WAAW,EAAC,kCAA+B;AACnD,OAAO,EAAC,sBAAsB,EAAC,8CAA2C;AAC1E,OAAO,EAAC,6BAA6B,EAAC,mDAAgD;AAEtF,MAAM,MAAM,GAAG,gBAAgB,CAAC;AAEhC,OAAO,EAAC,iBAAiB,EAAC,oCAAiC;AAC3D,OAAO,EACH,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,gBAAgB,GACnB,iCAAwB;AAIzB,MAAM,CAAC,MAAM,QAAQ,GAA0C,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE;IAChF,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IAEpC,OAAO,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC;QACrB,GAAG,EAAE,YAAY,CAAC,MAAM,CAAC;QACzB,WAAW,EAAE,YAAY,CAAC,MAAM,CAAC;QACjC,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC;QAC9B,OAAO,EAAE,WAAW,CAAC,IAAI,CAAC;QAC1B,SAAS,EAAE,gBAAgB;KAC9B,CAAC,CAAC,CAAC;IACJ,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,CAAC;IAChD,OAAO,CAAC,SAAS,CAAC,6BAA6B,CAAC,CAAC;IACjD,OAAO,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;AAC9C,CAAC,CAAC","sourcesContent":["import type {Action, ExtensionWithOptions} from '../../../core';\nimport {goToNextCell} from '../../../table-utils';\n\nimport {YfmTableSpecs, type YfmTableSpecsOptions} from './YfmTableSpecs';\nimport {createYfmTable} from './actions';\nimport {backspaceCommand} from './commands/backspace';\nimport {goToNextRow} from './commands/goToNextRow';\nimport {yfmTableControlsPlugin} from './plugins/YfmTableControls/buttons';\nimport {yfmTableTransformPastedPlugin} from './plugins/yfmTableTransformPastedPlugin';\n\nconst action = 'createYfmTable';\n\nexport {convertToYfmTable} from './commands/convert-table';\nexport {\n YfmTableNode,\n yfmTableType,\n yfmTableBodyType,\n yfmTableRowType,\n yfmTableCellType,\n} from './YfmTableSpecs';\n\nexport type YfmTableOptions = YfmTableSpecsOptions & {};\n\nexport const YfmTable: ExtensionWithOptions<YfmTableOptions> = (builder, options) => {\n builder.use(YfmTableSpecs, options);\n\n builder.addKeymap(() => ({\n Tab: goToNextCell('next'),\n 'Shift-Tab': goToNextCell('prev'),\n ArrowDown: goToNextRow('down'),\n ArrowUp: goToNextRow('up'),\n Backspace: backspaceCommand,\n }));\n builder.addAction(action, () => createYfmTable);\n builder.addPlugin(yfmTableTransformPastedPlugin);\n builder.addPlugin(yfmTableControlsPlugin);\n};\n\ndeclare global {\n namespace WysiwygEditor {\n interface Actions {\n [action]: Action;\n }\n }\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"../../../../../src","sources":["extensions/yfm/YfmTable/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,YAAY,EAAC,sCAA6B;AAElD,OAAO,EAAC,aAAa,EAA4B,iCAAwB;AACzE,OAAO,EAAC,cAAc,EAAC,qBAAkB;AACzC,OAAO,EAAC,gBAAgB,EAAC,gCAA6B;AACtD,OAAO,EAAC,WAAW,EAAC,kCAA+B;AACnD,OAAO,EAAC,uBAAuB,EAAC,4CAAmC;AACnE,OAAO,EAAC,6BAA6B,EAAC,mDAAgD;AAEtF,MAAM,MAAM,GAAG,gBAAgB,CAAC;AAEhC,OAAO,EAAC,iBAAiB,EAAC,oCAAiC;AAC3D,OAAO,EACH,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,gBAAgB,GACnB,iCAAwB;AAkBzB,MAAM,CAAC,MAAM,QAAQ,GAA0C,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE;IAChF,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IAEpC,OAAO,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC;QACrB,GAAG,EAAE,YAAY,CAAC,MAAM,CAAC;QACzB,WAAW,EAAE,YAAY,CAAC,MAAM,CAAC;QACjC,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC;QAC9B,OAAO,EAAE,WAAW,CAAC,IAAI,CAAC;QAC1B,SAAS,EAAE,gBAAgB;KAC9B,CAAC,CAAC,CAAC;IACJ,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,CAAC;IAChD,OAAO,CAAC,SAAS,CAAC,6BAA6B,CAAC,CAAC;IAEjD,IAAI,OAAO,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC;QAC7B,OAAO,CAAC,SAAS,CAAC,uBAAuB,CAAC,EAAC,UAAU,EAAE,OAAO,CAAC,GAAG,KAAK,KAAK,EAAC,CAAC,CAAC,CAAC;IACpF,CAAC;AACL,CAAC,CAAC","sourcesContent":["import type {Action, ExtensionWithOptions} from '../../../core';\nimport {goToNextCell} from '../../../table-utils';\n\nimport {YfmTableSpecs, type YfmTableSpecsOptions} from './YfmTableSpecs';\nimport {createYfmTable} from './actions';\nimport {backspaceCommand} from './commands/backspace';\nimport {goToNextRow} from './commands/goToNextRow';\nimport {yfmTableControlsPlugins} from './plugins/YfmTableControls';\nimport {yfmTableTransformPastedPlugin} from './plugins/yfmTableTransformPastedPlugin';\n\nconst action = 'createYfmTable';\n\nexport {convertToYfmTable} from './commands/convert-table';\nexport {\n YfmTableNode,\n yfmTableType,\n yfmTableBodyType,\n yfmTableRowType,\n yfmTableCellType,\n} from './YfmTableSpecs';\n\nexport type YfmTableOptions = YfmTableSpecsOptions & {\n /**\n * Enables floating controls for table.\n *\n * @default true\n */\n controls?: boolean;\n /**\n * Enables drag-d-drop rows and columns in table.\n * The `controls` property must also be `true`.\n *\n * @default true\n */\n dnd?: boolean;\n};\n\nexport const YfmTable: ExtensionWithOptions<YfmTableOptions> = (builder, options) => {\n builder.use(YfmTableSpecs, options);\n\n builder.addKeymap(() => ({\n Tab: goToNextCell('next'),\n 'Shift-Tab': goToNextCell('prev'),\n ArrowDown: goToNextRow('down'),\n ArrowUp: goToNextRow('up'),\n Backspace: backspaceCommand,\n }));\n builder.addAction(action, () => createYfmTable);\n builder.addPlugin(yfmTableTransformPastedPlugin);\n\n if (options.controls !== false) {\n builder.addPlugin(yfmTableControlsPlugins({dndEnabled: options.dnd !== false}));\n }\n};\n\ndeclare global {\n namespace WysiwygEditor {\n interface Actions {\n [action]: Action;\n }\n }\n}\n"]}
@@ -1 +1,7 @@
1
- export declare const controlActions: Record<"deleteTable" | "deleteRow" | "deleteColumn" | "appendColumn" | "appendRow", import("../../../../../index.js").ActionSpec>;
1
+ import type { CommandWithAttrs } from "../../../../../core/index.js";
2
+ import type { Node } from "../../../../../pm/model.js";
3
+ export declare const removeYfmTable: CommandWithAttrs<{
4
+ tablePos: number;
5
+ tableNode: Node;
6
+ }>;
7
+ export declare const controlActions: Record<"deleteTable" | "deleteRow" | "deleteColumn" | "appendColumn" | "appendRow", import("../../../../../core/index.js").ActionSpec>;
@@ -1,19 +1,15 @@
1
1
  import { appendColumn, appendRow, removeColumn, removeRow } from "../../../../../table-utils/index.js";
2
2
  import { defineActions } from "../../../../../utils/actions.js";
3
3
  import { removeNode } from "../../../../../utils/remove-node.js";
4
- import { tableControlsPluginKey } from "./buttons.js";
5
- const removeYfmTable = (state, dispatch, _, attrs) => {
4
+ export const removeYfmTable = (state, dispatch, _, attrs) => {
6
5
  if (!attrs)
7
6
  return false;
8
7
  const { tablePos, tableNode } = attrs;
9
8
  if (dispatch) {
10
- const tr = state.tr;
11
- // After removing node plugin state doesn't change and it crashes
12
- tr.setMeta(tableControlsPluginKey, null);
13
9
  removeNode({
14
10
  node: tableNode,
15
11
  pos: tablePos,
16
- tr: tr,
12
+ tr: state.tr,
17
13
  dispatch,
18
14
  });
19
15
  }
@@ -1 +1 @@
1
- {"version":3,"file":"actions.js","sourceRoot":"../../../../../../../src","sources":["extensions/yfm/YfmTable/plugins/YfmTableControls/actions.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAC,4CAAmC;AAC5F,OAAO,EAAC,aAAa,EAAC,wCAAqC;AAC3D,OAAO,EAAC,UAAU,EAAC,4CAAyC;AAE5D,OAAO,EAAC,sBAAsB,EAAC,qBAAkB;AAEjD,MAAM,cAAc,GAGf,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE;IAC/B,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,MAAM,EAAC,QAAQ,EAAE,SAAS,EAAC,GAAG,KAAK,CAAC;IAEpC,IAAI,QAAQ,EAAE,CAAC;QACX,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;QACpB,iEAAiE;QACjE,EAAE,CAAC,OAAO,CAAC,sBAAsB,EAAE,IAAI,CAAC,CAAC;QACzC,UAAU,CAAC;YACP,IAAI,EAAE,SAAS;YACf,GAAG,EAAE,QAAQ;YACb,EAAE,EAAE,EAAE;YACN,QAAQ;SACX,CAAC,CAAC;IACP,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AACF,MAAM,CAAC,MAAM,cAAc,GAAG,aAAa,CAAC;IACxC,SAAS,EAAE;QACP,QAAQ,EAAE,SAAS;QACnB,GAAG,EAAE,SAAS;KACjB;IACD,YAAY,EAAE;QACV,QAAQ,EAAE,YAAY;QACtB,GAAG,EAAE,YAAY;KACpB;IACD,YAAY,EAAE;QACV,QAAQ,EAAE,YAAY;QACtB,GAAG,EAAE,YAAY;KACpB;IACD,SAAS,EAAE;QACP,QAAQ,EAAE,SAAS;QACnB,GAAG,EAAE,SAAS;KACjB;IACD,WAAW,EAAE;QACT,QAAQ,EAAE,cAAc;QACxB,GAAG,EAAE,cAAc;KACtB;CACJ,CAAC,CAAC","sourcesContent":["import type {Node} from 'prosemirror-model';\n\nimport type {CommandWithAttrs} from '../../../../../core';\nimport {appendColumn, appendRow, removeColumn, removeRow} from '../../../../../table-utils';\nimport {defineActions} from '../../../../../utils/actions';\nimport {removeNode} from '../../../../../utils/remove-node';\n\nimport {tableControlsPluginKey} from './buttons';\n\nconst removeYfmTable: CommandWithAttrs<{\n tablePos: number;\n tableNode: Node;\n}> = (state, dispatch, _, attrs) => {\n if (!attrs) return false;\n const {tablePos, tableNode} = attrs;\n\n if (dispatch) {\n const tr = state.tr;\n // After removing node plugin state doesn't change and it crashes\n tr.setMeta(tableControlsPluginKey, null);\n removeNode({\n node: tableNode,\n pos: tablePos,\n tr: tr,\n dispatch,\n });\n }\n\n return true;\n};\nexport const controlActions = defineActions({\n deleteRow: {\n isEnable: removeRow,\n run: removeRow,\n },\n deleteColumn: {\n isEnable: removeColumn,\n run: removeColumn,\n },\n appendColumn: {\n isEnable: appendColumn,\n run: appendColumn,\n },\n appendRow: {\n isEnable: appendRow,\n run: appendRow,\n },\n deleteTable: {\n isEnable: removeYfmTable,\n run: removeYfmTable,\n },\n});\n"]}
1
+ {"version":3,"file":"actions.js","sourceRoot":"../../../../../../../src","sources":["extensions/yfm/YfmTable/plugins/YfmTableControls/actions.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAC,4CAAwB;AACjF,OAAO,EAAC,aAAa,EAAC,wCAA0B;AAChD,OAAO,EAAC,UAAU,EAAC,4CAA8B;AAEjD,MAAM,CAAC,MAAM,cAAc,GAGtB,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE;IAC/B,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,MAAM,EAAC,QAAQ,EAAE,SAAS,EAAC,GAAG,KAAK,CAAC;IAEpC,IAAI,QAAQ,EAAE,CAAC;QACX,UAAU,CAAC;YACP,IAAI,EAAE,SAAS;YACf,GAAG,EAAE,QAAQ;YACb,EAAE,EAAE,KAAK,CAAC,EAAE;YACZ,QAAQ;SACX,CAAC,CAAC;IACP,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AACF,MAAM,CAAC,MAAM,cAAc,GAAG,aAAa,CAAC;IACxC,SAAS,EAAE;QACP,QAAQ,EAAE,SAAS;QACnB,GAAG,EAAE,SAAS;KACjB;IACD,YAAY,EAAE;QACV,QAAQ,EAAE,YAAY;QACtB,GAAG,EAAE,YAAY;KACpB;IACD,YAAY,EAAE;QACV,QAAQ,EAAE,YAAY;QACtB,GAAG,EAAE,YAAY;KACpB;IACD,SAAS,EAAE;QACP,QAAQ,EAAE,SAAS;QACnB,GAAG,EAAE,SAAS;KACjB;IACD,WAAW,EAAE;QACT,QAAQ,EAAE,cAAc;QACxB,GAAG,EAAE,cAAc;KACtB;CACJ,CAAC,CAAC","sourcesContent":["import type {CommandWithAttrs} from '#core';\nimport type {Node} from '#pm/model';\nimport {appendColumn, appendRow, removeColumn, removeRow} from 'src/table-utils';\nimport {defineActions} from 'src/utils/actions';\nimport {removeNode} from 'src/utils/remove-node';\n\nexport const removeYfmTable: CommandWithAttrs<{\n tablePos: number;\n tableNode: Node;\n}> = (state, dispatch, _, attrs) => {\n if (!attrs) return false;\n const {tablePos, tableNode} = attrs;\n\n if (dispatch) {\n removeNode({\n node: tableNode,\n pos: tablePos,\n tr: state.tr,\n dispatch,\n });\n }\n\n return true;\n};\nexport const controlActions = defineActions({\n deleteRow: {\n isEnable: removeRow,\n run: removeRow,\n },\n deleteColumn: {\n isEnable: removeColumn,\n run: removeColumn,\n },\n appendColumn: {\n isEnable: appendColumn,\n run: appendColumn,\n },\n appendRow: {\n isEnable: appendRow,\n run: appendRow,\n },\n deleteTable: {\n isEnable: removeYfmTable,\n run: removeYfmTable,\n },\n});\n"]}
@@ -0,0 +1,7 @@
1
+ import type { Command } from "../../../../../../pm/state.js";
2
+ export type ClearCellsParams = {
3
+ tablePos: number;
4
+ rows?: number[];
5
+ cols?: number[];
6
+ };
7
+ export declare const clearCells: (params: ClearCellsParams) => Command;
@@ -0,0 +1,37 @@
1
+ import { pType } from "../../../../../base/specs.js";
2
+ import { TableDesc } from "../../../../../../table-utils/table-desc.js";
3
+ export const clearCells = (params) => {
4
+ return (state, dispatch) => {
5
+ const table = state.doc.nodeAt(params.tablePos);
6
+ const tableDesc = table && TableDesc.create(table)?.bind(params.tablePos);
7
+ if (!tableDesc)
8
+ return false;
9
+ if (!dispatch)
10
+ return true;
11
+ const { tr } = state;
12
+ const paragraph = pType(state.schema);
13
+ const clear = (cells) => {
14
+ for (const pos of cells) {
15
+ if (pos.type !== 'real')
16
+ continue;
17
+ tr.replaceWith(tr.mapping.map(pos.from + 1), tr.mapping.map(pos.to - 1), paragraph.create());
18
+ }
19
+ };
20
+ if (params.rows) {
21
+ for (const rowIdx of params.rows) {
22
+ const cellsPos = tableDesc.getPosForRowCells(rowIdx);
23
+ clear(cellsPos);
24
+ }
25
+ }
26
+ if (params.cols) {
27
+ for (const colIdx of params.cols) {
28
+ const cellsPos = tableDesc.getPosForColumn(colIdx);
29
+ clear(cellsPos);
30
+ }
31
+ }
32
+ if (tr.docChanged)
33
+ dispatch(tr);
34
+ return true;
35
+ };
36
+ };
37
+ //# sourceMappingURL=clear-cells.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clear-cells.js","sourceRoot":"../../../../../../../../src","sources":["extensions/yfm/YfmTable/plugins/YfmTableControls/commands/clear-cells.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,KAAK,EAAC,qCAAkC;AAChD,OAAO,EAAe,SAAS,EAAC,oDAAmC;AAQnE,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,MAAwB,EAAW,EAAE;IAC5D,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;QACvB,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAChD,MAAM,SAAS,GAAG,KAAK,IAAI,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC1E,IAAI,CAAC,SAAS;YAAE,OAAO,KAAK,CAAC;QAE7B,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC;QAE3B,MAAM,EAAC,EAAE,EAAC,GAAG,KAAK,CAAC;QACnB,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAEtC,MAAM,KAAK,GAAG,CAAC,KAAgB,EAAE,EAAE;YAC/B,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;gBACtB,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM;oBAAE,SAAS;gBAClC,EAAE,CAAC,WAAW,CACV,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,EAC5B,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,EAC1B,SAAS,CAAC,MAAM,EAAE,CACrB,CAAC;YACN,CAAC;QACL,CAAC,CAAC;QAEF,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YACd,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC/B,MAAM,QAAQ,GAAG,SAAS,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;gBACrD,KAAK,CAAC,QAAQ,CAAC,CAAC;YACpB,CAAC;QACL,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YACd,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC/B,MAAM,QAAQ,GAAG,SAAS,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;gBACnD,KAAK,CAAC,QAAQ,CAAC,CAAC;YACpB,CAAC;QACL,CAAC;QAED,IAAI,EAAE,CAAC,UAAU;YAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;QAEhC,OAAO,IAAI,CAAC;IAChB,CAAC,CAAC;AACN,CAAC,CAAC","sourcesContent":["import type {Command} from '#pm/state';\nimport {pType} from 'src/extensions/base/specs';\nimport {type CellPos, TableDesc} from 'src/table-utils/table-desc';\n\nexport type ClearCellsParams = {\n tablePos: number;\n rows?: number[];\n cols?: number[];\n};\n\nexport const clearCells = (params: ClearCellsParams): Command => {\n return (state, dispatch) => {\n const table = state.doc.nodeAt(params.tablePos);\n const tableDesc = table && TableDesc.create(table)?.bind(params.tablePos);\n if (!tableDesc) return false;\n\n if (!dispatch) return true;\n\n const {tr} = state;\n const paragraph = pType(state.schema);\n\n const clear = (cells: CellPos[]) => {\n for (const pos of cells) {\n if (pos.type !== 'real') continue;\n tr.replaceWith(\n tr.mapping.map(pos.from + 1),\n tr.mapping.map(pos.to - 1),\n paragraph.create(),\n );\n }\n };\n\n if (params.rows) {\n for (const rowIdx of params.rows) {\n const cellsPos = tableDesc.getPosForRowCells(rowIdx);\n clear(cellsPos);\n }\n }\n if (params.cols) {\n for (const colIdx of params.cols) {\n const cellsPos = tableDesc.getPosForColumn(colIdx);\n clear(cellsPos);\n }\n }\n\n if (tr.docChanged) dispatch(tr);\n\n return true;\n };\n};\n"]}
@@ -0,0 +1,6 @@
1
+ import { type Command } from "../../../../../../pm/state.js";
2
+ export type InsertEmptyColumnParams = {
3
+ tablePos: number;
4
+ colIndex: number;
5
+ };
6
+ export declare const insertEmptyColumn: (params: InsertEmptyColumnParams) => Command;
@@ -0,0 +1,55 @@
1
+ import { TextSelection } from "../../../../../../pm/state.js";
2
+ import { isEqual, uniqWith } from "../../../../../../lodash.js";
3
+ import { TableDesc, } from "../../../../../../table-utils/table-desc.js";
4
+ import { yfmTableCellType } from "../../../YfmTableSpecs/index.js";
5
+ export const insertEmptyColumn = (params) => {
6
+ return (state, dispatch) => {
7
+ const table = state.doc.nodeAt(params.tablePos);
8
+ const tableDesc = table && TableDesc.create(table)?.bind(params.tablePos);
9
+ if (!tableDesc)
10
+ return false;
11
+ const colIdx = Math.min(Math.max(params.colIndex, 0), tableDesc.cols);
12
+ if (dispatch) {
13
+ const posToInsert = [];
14
+ const incrementColspan = [];
15
+ if (colIdx === 0) {
16
+ posToInsert.push(...tableDesc.getPosForColumn(0).map((pos) => getCellPos(pos, 'start')));
17
+ }
18
+ else if (colIdx === tableDesc.cols) {
19
+ posToInsert.push(...tableDesc
20
+ .getPosForColumn(tableDesc.cols - 1)
21
+ .map((pos) => getCellPos(pos, 'end')));
22
+ }
23
+ else {
24
+ for (let rowIdx = 0; rowIdx < tableDesc.rows; rowIdx++) {
25
+ const cell = tableDesc.base.rowsDesc[rowIdx].cells[colIdx];
26
+ if (cell.type === 'virtual' && cell.colspan && cell.colspan[1] !== colIdx) {
27
+ incrementColspan.push(cell.colspan);
28
+ }
29
+ else {
30
+ posToInsert.push(getCellPos(tableDesc.getPosForCell(rowIdx, colIdx), 'start'));
31
+ }
32
+ }
33
+ }
34
+ const { tr } = state;
35
+ const td = yfmTableCellType(state.schema);
36
+ for (const [rowIdx, colIdx] of uniqWith(incrementColspan, isEqual)) {
37
+ const cell = tableDesc.base.rowsDesc[rowIdx].cells[colIdx];
38
+ const cellPos = tableDesc.getPosForCell(rowIdx, colIdx);
39
+ tr.setNodeAttribute(cellPos.from, 'colspan', cell.colspan + 1);
40
+ }
41
+ for (const pos of posToInsert) {
42
+ tr.insert(tr.mapping.map(pos), td.createAndFill());
43
+ }
44
+ tr.setSelection(TextSelection.near(tr.doc.resolve(posToInsert[0]), 1));
45
+ dispatch(tr.scrollIntoView());
46
+ }
47
+ return true;
48
+ };
49
+ };
50
+ function getCellPos(pos, dir) {
51
+ if (pos.type === 'virtual')
52
+ return pos.closestPos;
53
+ return dir === 'start' ? pos.from : pos.to;
54
+ }
55
+ //# sourceMappingURL=insert-empty-column.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"insert-empty-column.js","sourceRoot":"../../../../../../../../src","sources":["extensions/yfm/YfmTable/plugins/YfmTableControls/commands/insert-empty-column.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,aAAa,EAAC,sCAAkB;AACtD,OAAO,EAAC,OAAO,EAAE,QAAQ,EAAC,oCAAmB;AAC7C,OAAO,EAIH,SAAS,GACZ,oDAAmC;AAEpC,OAAO,EAAC,gBAAgB,EAAC,wCAA+B;AAOxD,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,MAA+B,EAAW,EAAE;IAC1E,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;QACvB,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAChD,MAAM,SAAS,GAAG,KAAK,IAAI,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC1E,IAAI,CAAC,SAAS;YAAE,OAAO,KAAK,CAAC;QAE7B,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;QAEtE,IAAI,QAAQ,EAAE,CAAC;YACX,MAAM,WAAW,GAAa,EAAE,CAAC;YACjC,MAAM,gBAAgB,GAAuB,EAAE,CAAC;YAEhD,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;gBACf,WAAW,CAAC,IAAI,CACZ,GAAG,SAAS,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CACzE,CAAC;YACN,CAAC;iBAAM,IAAI,MAAM,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;gBACnC,WAAW,CAAC,IAAI,CACZ,GAAG,SAAS;qBACP,eAAe,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,CAAC;qBACnC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAC5C,CAAC;YACN,CAAC;iBAAM,CAAC;gBACJ,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC;oBACrD,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;oBAC3D,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;wBACxE,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBACxC,CAAC;yBAAM,CAAC;wBACJ,WAAW,CAAC,IAAI,CACZ,UAAU,CAAC,SAAS,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,CAC/D,CAAC;oBACN,CAAC;gBACL,CAAC;YACL,CAAC;YAED,MAAM,EAAC,EAAE,EAAC,GAAG,KAAK,CAAC;YACnB,MAAM,EAAE,GAAG,gBAAgB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC1C,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC,EAAE,CAAC;gBACjE,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,MAAM,CAAsB,CAAC;gBAChF,MAAM,OAAO,GAAG,SAAS,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAgB,CAAC;gBACvE,EAAE,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,OAAQ,GAAG,CAAC,CAAC,CAAC;YACpE,CAAC;YACD,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;gBAC5B,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,aAAa,EAAG,CAAC,CAAC;YACxD,CAAC;YACD,EAAE,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACvE,QAAQ,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,CAAC;QAClC,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC,CAAC;AACN,CAAC,CAAC;AAEF,SAAS,UAAU,CAAC,GAAY,EAAE,GAAoB;IAClD,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,GAAG,CAAC,UAAU,CAAC;IAClD,OAAO,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;AAC/C,CAAC","sourcesContent":["import {type Command, TextSelection} from '#pm/state';\nimport {isEqual, uniqWith} from 'src/lodash';\nimport {\n type CellPos,\n type RealCellPos,\n type TableCellRealDesc,\n TableDesc,\n} from 'src/table-utils/table-desc';\n\nimport {yfmTableCellType} from '../../../YfmTableSpecs';\n\nexport type InsertEmptyColumnParams = {\n tablePos: number;\n colIndex: number;\n};\n\nexport const insertEmptyColumn = (params: InsertEmptyColumnParams): Command => {\n return (state, dispatch) => {\n const table = state.doc.nodeAt(params.tablePos);\n const tableDesc = table && TableDesc.create(table)?.bind(params.tablePos);\n if (!tableDesc) return false;\n\n const colIdx = Math.min(Math.max(params.colIndex, 0), tableDesc.cols);\n\n if (dispatch) {\n const posToInsert: number[] = [];\n const incrementColspan: [number, number][] = [];\n\n if (colIdx === 0) {\n posToInsert.push(\n ...tableDesc.getPosForColumn(0).map((pos) => getCellPos(pos, 'start')),\n );\n } else if (colIdx === tableDesc.cols) {\n posToInsert.push(\n ...tableDesc\n .getPosForColumn(tableDesc.cols - 1)\n .map((pos) => getCellPos(pos, 'end')),\n );\n } else {\n for (let rowIdx = 0; rowIdx < tableDesc.rows; rowIdx++) {\n const cell = tableDesc.base.rowsDesc[rowIdx].cells[colIdx];\n if (cell.type === 'virtual' && cell.colspan && cell.colspan[1] !== colIdx) {\n incrementColspan.push(cell.colspan);\n } else {\n posToInsert.push(\n getCellPos(tableDesc.getPosForCell(rowIdx, colIdx), 'start'),\n );\n }\n }\n }\n\n const {tr} = state;\n const td = yfmTableCellType(state.schema);\n for (const [rowIdx, colIdx] of uniqWith(incrementColspan, isEqual)) {\n const cell = tableDesc.base.rowsDesc[rowIdx].cells[colIdx] as TableCellRealDesc;\n const cellPos = tableDesc.getPosForCell(rowIdx, colIdx) as RealCellPos;\n tr.setNodeAttribute(cellPos.from, 'colspan', cell.colspan! + 1);\n }\n for (const pos of posToInsert) {\n tr.insert(tr.mapping.map(pos), td.createAndFill()!);\n }\n tr.setSelection(TextSelection.near(tr.doc.resolve(posToInsert[0]), 1));\n dispatch(tr.scrollIntoView());\n }\n\n return true;\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"]}
@@ -0,0 +1,6 @@
1
+ import { type Command } from "../../../../../../pm/state.js";
2
+ export type InsertEmptyRowParams = {
3
+ tablePos: number;
4
+ rowIndex: number;
5
+ };
6
+ export declare const insertEmptyRow: (params: InsertEmptyRowParams) => Command;
@@ -0,0 +1,50 @@
1
+ import { TextSelection } from "../../../../../../pm/state.js";
2
+ import { isEqual, range, uniqWith } from "../../../../../../lodash.js";
3
+ import { TableDesc } from "../../../../../../table-utils/table-desc.js";
4
+ import { yfmTableCellType, yfmTableRowType } from "../../../YfmTableSpecs/index.js";
5
+ export const insertEmptyRow = (params) => {
6
+ return (state, dispatch) => {
7
+ const table = state.doc.nodeAt(params.tablePos);
8
+ const tableDesc = table && TableDesc.create(table)?.bind(params.tablePos);
9
+ if (!tableDesc)
10
+ return false;
11
+ const rowIdx = Math.min(Math.max(params.rowIndex, 0), tableDesc.rows);
12
+ if (dispatch) {
13
+ let posToInsert;
14
+ let newCellsCount = tableDesc.cols;
15
+ const incrementRowspan = [];
16
+ if (rowIdx === 0 || rowIdx === tableDesc.rows) {
17
+ posToInsert =
18
+ rowIdx === 0
19
+ ? tableDesc.getPosForRow(0).from
20
+ : tableDesc.getPosForRow(tableDesc.rows - 1).to;
21
+ }
22
+ else {
23
+ posToInsert = tableDesc.getPosForRow(rowIdx).from;
24
+ for (let colIdx = 0; colIdx < tableDesc.cols; colIdx++) {
25
+ const cell = tableDesc.base.rowsDesc[rowIdx].cells[colIdx];
26
+ if (cell.type === 'virtual' && cell.rowspan) {
27
+ newCellsCount--;
28
+ incrementRowspan.push(cell.rowspan);
29
+ }
30
+ }
31
+ }
32
+ const { tr } = state;
33
+ for (const [rowIdx, colIdx] of uniqWith(incrementRowspan, isEqual)) {
34
+ const cell = tableDesc.base.rowsDesc[rowIdx].cells[colIdx];
35
+ const cellPos = tableDesc.getPosForCell(rowIdx, colIdx);
36
+ tr.setNodeAttribute(cellPos.from, 'rowspan', cell.rowspan + 1);
37
+ }
38
+ tr.insert(posToInsert, createSimpleRow(state.schema, newCellsCount));
39
+ tr.setSelection(TextSelection.near(tr.doc.resolve(posToInsert), 1));
40
+ dispatch(tr.scrollIntoView());
41
+ }
42
+ return true;
43
+ };
44
+ };
45
+ const createSimpleRow = (schema, cols) => {
46
+ const tr = yfmTableRowType(schema);
47
+ const td = yfmTableCellType(schema);
48
+ return tr.create(null, range(0, cols).map(() => td.createAndFill()));
49
+ };
50
+ //# sourceMappingURL=insert-empty-row.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"insert-empty-row.js","sourceRoot":"../../../../../../../../src","sources":["extensions/yfm/YfmTable/plugins/YfmTableControls/commands/insert-empty-row.ts"],"names":[],"mappings":"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","sourcesContent":["import type {Schema} from '#pm/model';\nimport {type Command, TextSelection} from '#pm/state';\nimport {isEqual, range, uniqWith} from 'src/lodash';\nimport {type RealCellPos, type TableCellRealDesc, TableDesc} from 'src/table-utils/table-desc';\n\nimport {yfmTableCellType, yfmTableRowType} from '../../../YfmTableSpecs';\n\nexport type InsertEmptyRowParams = {\n tablePos: number;\n rowIndex: number;\n};\n\nexport const insertEmptyRow = (params: InsertEmptyRowParams): Command => {\n return (state, dispatch) => {\n const table = state.doc.nodeAt(params.tablePos);\n const tableDesc = table && TableDesc.create(table)?.bind(params.tablePos);\n if (!tableDesc) return false;\n\n const rowIdx = Math.min(Math.max(params.rowIndex, 0), tableDesc.rows);\n\n if (dispatch) {\n let posToInsert: number;\n let newCellsCount: number = tableDesc.cols;\n const incrementRowspan: [number, number][] = [];\n\n if (rowIdx === 0 || rowIdx === tableDesc.rows) {\n posToInsert =\n rowIdx === 0\n ? tableDesc.getPosForRow(0).from\n : tableDesc.getPosForRow(tableDesc.rows - 1).to;\n } else {\n posToInsert = tableDesc.getPosForRow(rowIdx).from;\n\n for (let colIdx = 0; colIdx < tableDesc.cols; colIdx++) {\n const cell = tableDesc.base.rowsDesc[rowIdx].cells[colIdx];\n if (cell.type === 'virtual' && cell.rowspan) {\n newCellsCount--;\n incrementRowspan.push(cell.rowspan);\n }\n }\n }\n\n const {tr} = state;\n for (const [rowIdx, colIdx] of uniqWith(incrementRowspan, isEqual)) {\n const cell = tableDesc.base.rowsDesc[rowIdx].cells[colIdx] as TableCellRealDesc;\n const cellPos = tableDesc.getPosForCell(rowIdx, colIdx) as RealCellPos;\n tr.setNodeAttribute(cellPos.from, 'rowspan', cell.rowspan! + 1);\n }\n tr.insert(posToInsert, createSimpleRow(state.schema, newCellsCount));\n tr.setSelection(TextSelection.near(tr.doc.resolve(posToInsert), 1));\n dispatch(tr.scrollIntoView());\n }\n\n return true;\n };\n};\n\nconst createSimpleRow = (schema: Schema, cols: number) => {\n const tr = yfmTableRowType(schema);\n const td = yfmTableCellType(schema);\n return tr.create(\n null,\n range(0, cols).map(() => td.createAndFill()!),\n );\n};\n"]}
@@ -0,0 +1,6 @@
1
+ import type { Command } from "../../../../../../pm/state.js";
2
+ export type RemoveColumnRangeParams = {
3
+ tablePos: number;
4
+ rangeIdx: number;
5
+ };
6
+ export declare const removeColumnRange: (params: RemoveColumnRangeParams) => Command;
@@ -0,0 +1,73 @@
1
+ import { Fragment } from "../../../../../../pm/model.js";
2
+ import { TableDesc, } from "../../../../../../table-utils/table-desc.js";
3
+ import { yfmTableCellType } from "../../../YfmTableSpecs/utils.js";
4
+ export const removeColumnRange = (params) => {
5
+ return (state, dispatch) => {
6
+ const table = state.doc.nodeAt(params.tablePos);
7
+ const tableDesc = table && TableDesc.create(table)?.bind(params.tablePos);
8
+ if (!tableDesc || tableDesc.cols < 2)
9
+ return false;
10
+ const range = tableDesc.base.getColumnRanges()[params.rangeIdx];
11
+ if (!range)
12
+ return false;
13
+ if (dispatch) {
14
+ const { tr } = state;
15
+ const diffColspan = {};
16
+ for (let rowIdx = 0; rowIdx < tableDesc.rows; rowIdx++) {
17
+ // calculate colspan diff for merged cells that end in this range
18
+ for (let colIdx = range.startIdx; colIdx <= range.endIdx; colIdx++) {
19
+ const cell = tableDesc.base.rowsDesc[rowIdx].cells[colIdx];
20
+ if (cell.type === 'virtual' &&
21
+ cell.colspan?.[0] === rowIdx &&
22
+ cell.colspan[1] < range.startIdx) {
23
+ diffColspan[`${cell.colspan[0]},${cell.colspan[1]}`] ??= 0;
24
+ diffColspan[`${cell.colspan[0]},${cell.colspan[1]}`]--;
25
+ }
26
+ }
27
+ const from = getCellPos(tableDesc.getPosForCell(rowIdx, range.startIdx), 'start');
28
+ const to = getCellPos(tableDesc.getPosForCell(rowIdx, range.endIdx), 'end');
29
+ tr.replaceWith(tr.mapping.map(from), tr.mapping.map(to), Fragment.empty);
30
+ // insert new cells into the resulting gaps after current range
31
+ if (range.endIdx + 1 < tableDesc.cols) {
32
+ const cell = tableDesc.base.rowsDesc[rowIdx].cells[range.endIdx + 1];
33
+ if (cell.type === 'virtual' &&
34
+ cell.colspan?.[0] === rowIdx &&
35
+ cell.colspan[1] >= range.startIdx) {
36
+ const insertPos = tableDesc.getPosForCell(rowIdx, range.endIdx + 1).closestPos;
37
+ const realCell = tableDesc.base.rowsDesc[cell.colspan[0]].cells[cell.colspan[1]];
38
+ const newColspan = realCell.colspan - (range.endIdx + 1 - cell.colspan[1]);
39
+ tr.insert(tr.mapping.map(insertPos), yfmTableCellType(state.schema).createAndFill({
40
+ colspan: newColspan > 1 ? newColspan : null,
41
+ rowspan: realCell.rowspan ? realCell.rowspan : null,
42
+ }));
43
+ }
44
+ }
45
+ }
46
+ updateColspan(tr, tableDesc, diffColspan);
47
+ dispatch(tr);
48
+ }
49
+ return true;
50
+ };
51
+ };
52
+ function getCellPos(pos, dir) {
53
+ if (pos.type === 'virtual')
54
+ return pos.closestPos;
55
+ return dir === 'start' ? pos.from : pos.to;
56
+ }
57
+ function updateColspan(tr, tableDesc, diffMap) {
58
+ for (const key of keys(diffMap)) {
59
+ const [row, col] = key.split(',');
60
+ const rowIdx = Number.parseInt(row, 10);
61
+ const colIdx = Number.parseInt(col, 10);
62
+ const cell = tableDesc.base.rowsDesc[rowIdx].cells[colIdx];
63
+ if (cell.type === 'real' && cell.colspan) {
64
+ const pos = tableDesc.getPosForCell(rowIdx, colIdx);
65
+ const newColspan = cell.colspan + diffMap[key];
66
+ tr.setNodeAttribute(tr.mapping.map(pos.from), 'colspan', newColspan > 1 ? newColspan : null);
67
+ }
68
+ }
69
+ }
70
+ function keys(obj) {
71
+ return Object.keys(obj);
72
+ }
73
+ //# sourceMappingURL=remove-column-range.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove-column-range.js","sourceRoot":"../../../../../../../../src","sources":["extensions/yfm/YfmTable/plugins/YfmTableControls/commands/remove-column-range.ts"],"names":[],"mappings":"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","sourcesContent":["import {Fragment} from '#pm/model';\nimport type {Command, Transaction} from '#pm/state';\nimport {\n type CellPos,\n type RealCellPos,\n type TableCellRealDesc,\n TableDesc,\n type TableDescBinded,\n type VirtualCellPos,\n} from 'src/table-utils/table-desc';\n\nimport {yfmTableCellType} from '../../../YfmTableSpecs/utils';\n\nexport type RemoveColumnRangeParams = {\n tablePos: number;\n rangeIdx: number;\n};\n\nexport const removeColumnRange = (params: RemoveColumnRangeParams): Command => {\n return (state, dispatch) => {\n const table = state.doc.nodeAt(params.tablePos);\n const tableDesc = table && TableDesc.create(table)?.bind(params.tablePos);\n if (!tableDesc || tableDesc.cols < 2) return false;\n\n const range = tableDesc.base.getColumnRanges()[params.rangeIdx];\n if (!range) return false;\n\n if (dispatch) {\n const {tr} = state;\n const diffColspan: Record<`${number},${number}`, number> = {};\n\n for (let rowIdx = 0; rowIdx < tableDesc.rows; rowIdx++) {\n // calculate colspan diff for merged cells that end in this range\n for (let colIdx = range.startIdx; colIdx <= range.endIdx; colIdx++) {\n const cell = tableDesc.base.rowsDesc[rowIdx].cells[colIdx];\n if (\n cell.type === 'virtual' &&\n cell.colspan?.[0] === rowIdx &&\n cell.colspan[1] < range.startIdx\n ) {\n diffColspan[`${cell.colspan[0]},${cell.colspan[1]}`] ??= 0;\n diffColspan[`${cell.colspan[0]},${cell.colspan[1]}`]--;\n }\n }\n\n const from = getCellPos(tableDesc.getPosForCell(rowIdx, range.startIdx), 'start');\n const to = getCellPos(tableDesc.getPosForCell(rowIdx, range.endIdx), 'end');\n tr.replaceWith(tr.mapping.map(from), tr.mapping.map(to), Fragment.empty);\n\n // insert new cells into the resulting gaps after current range\n if (range.endIdx + 1 < tableDesc.cols) {\n const cell = tableDesc.base.rowsDesc[rowIdx].cells[range.endIdx + 1];\n if (\n cell.type === 'virtual' &&\n cell.colspan?.[0] === rowIdx &&\n cell.colspan[1] >= range.startIdx\n ) {\n const insertPos = (\n tableDesc.getPosForCell(rowIdx, range.endIdx + 1) as VirtualCellPos\n ).closestPos;\n const realCell = tableDesc.base.rowsDesc[cell.colspan[0]].cells[\n cell.colspan[1]\n ] as TableCellRealDesc;\n const newColspan = realCell.colspan! - (range.endIdx + 1 - cell.colspan[1]);\n tr.insert(\n tr.mapping.map(insertPos),\n yfmTableCellType(state.schema).createAndFill({\n colspan: newColspan > 1 ? newColspan : null,\n rowspan: realCell.rowspan ? realCell.rowspan : null,\n })!,\n );\n }\n }\n }\n\n updateColspan(tr, tableDesc, diffColspan);\n\n dispatch(tr);\n }\n\n return true;\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 updateColspan(\n tr: Transaction,\n tableDesc: TableDescBinded,\n diffMap: Record<`${number},${number}`, number>,\n) {\n for (const key of keys(diffMap)) {\n const [row, col] = key.split(',');\n const rowIdx = Number.parseInt(row, 10);\n const colIdx = Number.parseInt(col, 10);\n\n const cell = tableDesc.base.rowsDesc[rowIdx].cells[colIdx];\n if (cell.type === 'real' && cell.colspan) {\n const pos = tableDesc.getPosForCell(rowIdx, colIdx) as RealCellPos;\n const newColspan = cell.colspan + diffMap[key];\n tr.setNodeAttribute(\n tr.mapping.map(pos.from),\n 'colspan',\n newColspan > 1 ? newColspan : null,\n );\n }\n }\n}\n\nfunction keys<O extends object>(obj: O): (keyof O)[] {\n return Object.keys(obj) as (keyof O)[];\n}\n"]}
@@ -0,0 +1,6 @@
1
+ import type { Command } from "../../../../../../pm/state.js";
2
+ export type RemoveRowRangeParams = {
3
+ tablePos: number;
4
+ rangeIdx: number;
5
+ };
6
+ export declare const removeRowRange: (params: RemoveRowRangeParams) => Command;
@@ -0,0 +1,70 @@
1
+ import { Fragment } from "../../../../../../pm/model.js";
2
+ import { TableDesc, } from "../../../../../../table-utils/table-desc.js";
3
+ import { yfmTableCellType } from "../../../YfmTableSpecs/utils.js";
4
+ export const removeRowRange = (params) => {
5
+ return (state, dispatch) => {
6
+ const table = state.doc.nodeAt(params.tablePos);
7
+ const tableDesc = table && TableDesc.create(table)?.bind(params.tablePos);
8
+ if (!tableDesc || tableDesc.rows < 2)
9
+ return false;
10
+ const range = tableDesc.base.getRowRanges()[params.rangeIdx];
11
+ if (!range)
12
+ return false;
13
+ if (dispatch) {
14
+ const { tr } = state;
15
+ {
16
+ const from = tableDesc.getPosForRow(range.startIdx).from;
17
+ const to = tableDesc.getPosForRow(range.endIdx).to;
18
+ tr.replaceWith(from, to, Fragment.empty);
19
+ }
20
+ const diffRowspan = {};
21
+ for (let colIdx = 0; colIdx < tableDesc.cols; colIdx++) {
22
+ // calculate colspan diff for merged cells that end in this range
23
+ for (let rowIdx = range.startIdx; rowIdx <= range.endIdx; rowIdx++) {
24
+ const cell = tableDesc.base.rowsDesc[rowIdx].cells[colIdx];
25
+ if (cell.type === 'virtual' &&
26
+ cell.rowspan?.[1] === colIdx &&
27
+ cell.rowspan[0] < range.startIdx) {
28
+ diffRowspan[`${cell.rowspan[0]},${cell.rowspan[1]}`] ??= 0;
29
+ diffRowspan[`${cell.rowspan[0]},${cell.rowspan[1]}`]--;
30
+ }
31
+ }
32
+ // insert new cells into the resulting gaps after current range
33
+ if (range.endIdx + 1 < tableDesc.rows) {
34
+ const cell = tableDesc.base.rowsDesc[range.endIdx + 1].cells[colIdx];
35
+ if (cell.type === 'virtual' &&
36
+ cell.rowspan?.[1] === colIdx &&
37
+ cell.rowspan[0] >= range.startIdx) {
38
+ const insertPos = tableDesc.getPosForCell(range.endIdx + 1, colIdx).closestPos;
39
+ const realCell = tableDesc.base.rowsDesc[cell.rowspan[0]].cells[cell.rowspan[1]];
40
+ const newRowspan = realCell.rowspan - (range.endIdx + 1 - cell.rowspan[0]);
41
+ tr.insert(tr.mapping.map(insertPos), yfmTableCellType(state.schema).createAndFill({
42
+ rowspan: newRowspan > 1 ? newRowspan : null,
43
+ colspan: realCell.colspan ? realCell.colspan : null,
44
+ }));
45
+ }
46
+ }
47
+ }
48
+ updateRowspan(tr, tableDesc, diffRowspan);
49
+ dispatch(tr);
50
+ }
51
+ return true;
52
+ };
53
+ };
54
+ function updateRowspan(tr, tableDesc, diffMap) {
55
+ for (const key of keys(diffMap)) {
56
+ const [row, col] = key.split(',');
57
+ const rowIdx = Number.parseInt(row, 10);
58
+ const colIdx = Number.parseInt(col, 10);
59
+ const cell = tableDesc.base.rowsDesc[rowIdx].cells[colIdx];
60
+ if (cell.type === 'real' && cell.rowspan) {
61
+ const pos = tableDesc.getPosForCell(rowIdx, colIdx);
62
+ const newRowspan = cell.rowspan + diffMap[key];
63
+ tr.setNodeAttribute(tr.mapping.map(pos.from), 'rowspan', newRowspan > 1 ? newRowspan : null);
64
+ }
65
+ }
66
+ }
67
+ function keys(obj) {
68
+ return Object.keys(obj);
69
+ }
70
+ //# sourceMappingURL=remove-row-range.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove-row-range.js","sourceRoot":"../../../../../../../../src","sources":["extensions/yfm/YfmTable/plugins/YfmTableControls/commands/remove-row-range.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAC,sCAAkB;AAEnC,OAAO,EAGH,SAAS,GAGZ,oDAAmC;AAEpC,OAAO,EAAC,gBAAgB,EAAC,wCAAqC;AAO9D,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,MAA4B,EAAW,EAAE;IACpE,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;QACvB,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAChD,MAAM,SAAS,GAAG,KAAK,IAAI,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC1E,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,IAAI,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;QAEnD,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC7D,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QAEzB,IAAI,QAAQ,EAAE,CAAC;YACX,MAAM,EAAC,EAAE,EAAC,GAAG,KAAK,CAAC;YACnB,CAAC;gBACG,MAAM,IAAI,GAAG,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC;gBACzD,MAAM,EAAE,GAAG,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;gBACnD,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC7C,CAAC;YAED,MAAM,WAAW,GAA0C,EAAE,CAAC;YAE9D,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC;gBACrD,iEAAiE;gBACjE,KAAK,IAAI,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC;oBACjE,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;oBAC3D,IACI,IAAI,CAAC,IAAI,KAAK,SAAS;wBACvB,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,KAAK,MAAM;wBAC5B,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,EAClC,CAAC;wBACC,WAAW,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;wBAC3D,WAAW,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;oBAC3D,CAAC;gBACL,CAAC;gBAED,+DAA+D;gBAC/D,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC;oBACpC,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;oBACrE,IACI,IAAI,CAAC,IAAI,KAAK,SAAS;wBACvB,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,KAAK,MAAM;wBAC5B,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,QAAQ,EACnC,CAAC;wBACC,MAAM,SAAS,GACX,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,MAAM,CACnD,CAAC,UAAU,CAAC;wBACb,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAC3D,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CACG,CAAC;wBACvB,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAQ,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;wBAC5E,EAAE,CAAC,MAAM,CACL,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,EACzB,gBAAgB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC;4BACzC,OAAO,EAAE,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI;4BAC3C,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI;yBACtD,CAAE,CACN,CAAC;oBACN,CAAC;gBACL,CAAC;YACL,CAAC;YAED,aAAa,CAAC,EAAE,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;YAE1C,QAAQ,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC,CAAC;AACN,CAAC,CAAC;AAEF,SAAS,aAAa,CAClB,EAAe,EACf,SAA0B,EAC1B,OAA8C;IAE9C,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9B,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAClC,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAExC,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC3D,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACvC,MAAM,GAAG,GAAG,SAAS,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAgB,CAAC;YACnE,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;YAC/C,EAAE,CAAC,gBAAgB,CACf,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EACxB,SAAS,EACT,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CACrC,CAAC;QACN,CAAC;IACL,CAAC;AACL,CAAC;AACD,SAAS,IAAI,CAAmB,GAAM;IAClC,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAgB,CAAC;AAC3C,CAAC","sourcesContent":["import {Fragment} from '#pm/model';\nimport type {Command, Transaction} from '#pm/state';\nimport {\n type RealCellPos,\n type TableCellRealDesc,\n TableDesc,\n type TableDescBinded,\n type VirtualCellPos,\n} from 'src/table-utils/table-desc';\n\nimport {yfmTableCellType} from '../../../YfmTableSpecs/utils';\n\nexport type RemoveRowRangeParams = {\n tablePos: number;\n rangeIdx: number;\n};\n\nexport const removeRowRange = (params: RemoveRowRangeParams): Command => {\n return (state, dispatch) => {\n const table = state.doc.nodeAt(params.tablePos);\n const tableDesc = table && TableDesc.create(table)?.bind(params.tablePos);\n if (!tableDesc || tableDesc.rows < 2) return false;\n\n const range = tableDesc.base.getRowRanges()[params.rangeIdx];\n if (!range) return false;\n\n if (dispatch) {\n const {tr} = state;\n {\n const from = tableDesc.getPosForRow(range.startIdx).from;\n const to = tableDesc.getPosForRow(range.endIdx).to;\n tr.replaceWith(from, to, Fragment.empty);\n }\n\n const diffRowspan: Record<`${number},${number}`, number> = {};\n\n for (let colIdx = 0; colIdx < tableDesc.cols; colIdx++) {\n // calculate colspan diff for merged cells that end in this range\n for (let rowIdx = range.startIdx; rowIdx <= range.endIdx; rowIdx++) {\n const cell = tableDesc.base.rowsDesc[rowIdx].cells[colIdx];\n if (\n cell.type === 'virtual' &&\n cell.rowspan?.[1] === colIdx &&\n cell.rowspan[0] < range.startIdx\n ) {\n diffRowspan[`${cell.rowspan[0]},${cell.rowspan[1]}`] ??= 0;\n diffRowspan[`${cell.rowspan[0]},${cell.rowspan[1]}`]--;\n }\n }\n\n // insert new cells into the resulting gaps after current range\n if (range.endIdx + 1 < tableDesc.rows) {\n const cell = tableDesc.base.rowsDesc[range.endIdx + 1].cells[colIdx];\n if (\n cell.type === 'virtual' &&\n cell.rowspan?.[1] === colIdx &&\n cell.rowspan[0] >= range.startIdx\n ) {\n const insertPos = (\n tableDesc.getPosForCell(range.endIdx + 1, colIdx) as VirtualCellPos\n ).closestPos;\n const realCell = tableDesc.base.rowsDesc[cell.rowspan[0]].cells[\n cell.rowspan[1]\n ] as TableCellRealDesc;\n const newRowspan = realCell.rowspan! - (range.endIdx + 1 - cell.rowspan[0]);\n tr.insert(\n tr.mapping.map(insertPos),\n yfmTableCellType(state.schema).createAndFill({\n rowspan: newRowspan > 1 ? newRowspan : null,\n colspan: realCell.colspan ? realCell.colspan : null,\n })!,\n );\n }\n }\n }\n\n updateRowspan(tr, tableDesc, diffRowspan);\n\n dispatch(tr);\n }\n\n return true;\n };\n};\n\nfunction updateRowspan(\n tr: Transaction,\n tableDesc: TableDescBinded,\n diffMap: Record<`${number},${number}`, number>,\n) {\n for (const key of keys(diffMap)) {\n const [row, col] = key.split(',');\n const rowIdx = Number.parseInt(row, 10);\n const colIdx = Number.parseInt(col, 10);\n\n const cell = tableDesc.base.rowsDesc[rowIdx].cells[colIdx];\n if (cell.type === 'real' && cell.rowspan) {\n const pos = tableDesc.getPosForCell(rowIdx, colIdx) as RealCellPos;\n const newRowspan = cell.rowspan + diffMap[key];\n tr.setNodeAttribute(\n tr.mapping.map(pos.from),\n 'rowspan',\n newRowspan > 1 ? newRowspan : null,\n );\n }\n }\n}\nfunction keys<O extends object>(obj: O): (keyof O)[] {\n return Object.keys(obj) as (keyof O)[];\n}\n"]}
@@ -0,0 +1,10 @@
1
+ import { type ButtonButtonProps, type DropdownMenuProps } from '@gravity-ui/uikit';
2
+ export type FloatingMenuProps = {
3
+ dirtype: 'row' | 'column';
4
+ canDrag: boolean;
5
+ anchorElement: Element;
6
+ dropdownItems: DropdownMenuProps<unknown>['items'];
7
+ switcherMouseProps?: Pick<ButtonButtonProps, 'onMouseDown' | 'onMouseMove' | 'onMouseUp'>;
8
+ onOpenToggle: NonNullable<DropdownMenuProps<unknown>['onOpenToggle']>;
9
+ };
10
+ export declare const FloatingMenu: React.FC<FloatingMenuProps>;
@@ -0,0 +1,41 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useState } from 'react';
3
+ import { Ellipsis as DotsColumn, GripHorizontal as GripColumn } from '@gravity-ui/icons';
4
+ import { Button, DropdownMenu, Flex, Icon, } from '@gravity-ui/uikit';
5
+ import { useBooleanState } from "../../../../../../../react-utils/index.js";
6
+ import { FloatingPopup } from "../FloatingPopup/index.js";
7
+ const popupOffset = {
8
+ mainAxis: -9.5,
9
+ };
10
+ export const FloatingMenu = function YfmTableFloatingMenu(props) {
11
+ const { dirtype, canDrag, anchorElement, dropdownItems, switcherMouseProps, onOpenToggle } = props;
12
+ const [isMenuOpened, setMenuOpened] = useState(false);
13
+ const [isHovered, setHovered, unsetHovered] = useBooleanState(false);
14
+ const showActionView = isMenuOpened || isHovered;
15
+ const isRowType = dirtype === 'row';
16
+ return (_jsx(FloatingPopup, { open: true, offset: popupOffset, anchorElement: anchorElement, placement: isRowType ? 'left' : 'top', floatingStyles: {
17
+ lineHeight: 'initial',
18
+ }, style: {
19
+ backgroundColor: 'transparent',
20
+ }, children: _jsx(DropdownMenu, { onOpenToggle: (...args) => {
21
+ setMenuOpened(...args);
22
+ onOpenToggle(...args);
23
+ }, renderSwitcher: (switcherProps) => (_jsx(Flex, { centerContent: true, width: 20, height: 20, style: {
24
+ borderRadius: 'var(--g-border-radius-xs)',
25
+ backgroundColor: showActionView
26
+ ? 'var(--g-color-base-background)'
27
+ : undefined,
28
+ }, onMouseEnter: setHovered, onMouseLeave: unsetHovered, children: _jsx(Button, { style: {
29
+ cursor: canDrag ? 'grab' : undefined,
30
+ transform: isRowType ? 'rotate(90deg)' : undefined,
31
+ '--g-button-height': showActionView ? undefined : '5px',
32
+ '--_--background-color': showActionView
33
+ ? undefined
34
+ : 'var(--g-color-base-background)',
35
+ }, view: isMenuOpened ? 'outlined-action' : 'outlined', pin: showActionView ? 'round-round' : 'circle-circle', size: "xs", qa: isRowType ? 'g-md-yfm-table-row-btn' : 'g-md-yfm-table-column-btn', ...switcherProps, ...switcherMouseProps, children: showActionView ? (_jsx(Icon, { data: canDrag ? GripColumn : DotsColumn })) : (String.fromCharCode(8194) // en space
36
+ ) }) })), popupProps: {
37
+ zIndex: 1010,
38
+ placement: isRowType ? 'right-start' : 'bottom-start',
39
+ }, menuProps: { qa: `g-md-yfm-table-${dirtype}-menu` }, items: dropdownItems }) }));
40
+ };
41
+ //# sourceMappingURL=FloatingMenu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FloatingMenu.js","sourceRoot":"../../../../../../../../../src","sources":["extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenu/FloatingMenu.tsx"],"names":[],"mappings":"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","sourcesContent":["import {useState} from 'react';\n\nimport {Ellipsis as DotsColumn, GripHorizontal as GripColumn} from '@gravity-ui/icons';\nimport {\n Button,\n type ButtonButtonProps,\n DropdownMenu,\n type DropdownMenuProps,\n Flex,\n Icon,\n} from '@gravity-ui/uikit';\n\nimport {useBooleanState} from 'src/react-utils';\n\nimport {FloatingPopup, type FloatingPopupProps} from '../FloatingPopup';\n\nconst popupOffset: FloatingPopupProps['offset'] = {\n mainAxis: -9.5,\n};\n\nexport type FloatingMenuProps = {\n dirtype: 'row' | 'column';\n canDrag: boolean;\n anchorElement: Element;\n dropdownItems: DropdownMenuProps<unknown>['items'];\n switcherMouseProps?: Pick<ButtonButtonProps, 'onMouseDown' | 'onMouseMove' | 'onMouseUp'>;\n onOpenToggle: NonNullable<DropdownMenuProps<unknown>['onOpenToggle']>;\n};\n\nexport const FloatingMenu: React.FC<FloatingMenuProps> = function YfmTableFloatingMenu(props) {\n const {dirtype, canDrag, anchorElement, dropdownItems, switcherMouseProps, onOpenToggle} =\n props;\n\n const [isMenuOpened, setMenuOpened] = useState(false);\n const [isHovered, setHovered, unsetHovered] = useBooleanState(false);\n\n const showActionView = isMenuOpened || isHovered;\n const isRowType = dirtype === 'row';\n\n return (\n <FloatingPopup\n open\n offset={popupOffset}\n anchorElement={anchorElement}\n placement={isRowType ? 'left' : 'top'}\n floatingStyles={{\n lineHeight: 'initial',\n }}\n style={{\n backgroundColor: 'transparent',\n }}\n >\n <DropdownMenu\n onOpenToggle={(...args) => {\n setMenuOpened(...args);\n onOpenToggle(...args);\n }}\n renderSwitcher={(switcherProps) => (\n <Flex\n centerContent\n width={20} // xs button\n height={20} // xs button\n style={{\n borderRadius: 'var(--g-border-radius-xs)',\n backgroundColor: showActionView\n ? 'var(--g-color-base-background)'\n : undefined,\n }}\n onMouseEnter={setHovered}\n onMouseLeave={unsetHovered}\n >\n <Button\n style={{\n cursor: canDrag ? 'grab' : undefined,\n transform: isRowType ? 'rotate(90deg)' : undefined,\n '--g-button-height': showActionView ? undefined : '5px',\n '--_--background-color': showActionView\n ? undefined\n : 'var(--g-color-base-background)',\n }}\n view={isMenuOpened ? 'outlined-action' : 'outlined'}\n pin={showActionView ? 'round-round' : 'circle-circle'}\n size=\"xs\"\n qa={isRowType ? 'g-md-yfm-table-row-btn' : 'g-md-yfm-table-column-btn'}\n {...switcherProps}\n {...switcherMouseProps}\n >\n {showActionView ? (\n <Icon data={canDrag ? GripColumn : DotsColumn} />\n ) : (\n String.fromCharCode(8194) // en space\n )}\n </Button>\n </Flex>\n )}\n popupProps={{\n zIndex: 1010,\n placement: isRowType ? 'right-start' : 'bottom-start',\n }}\n menuProps={{qa: `g-md-yfm-table-${dirtype}-menu`}}\n items={dropdownItems}\n />\n </FloatingPopup>\n );\n};\n"]}
@@ -0,0 +1,2 @@
1
+ export * from "./FloatingMenu.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"../../../../../../../../../src","sources":["extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenu/index.ts"],"names":[],"mappings":"AAAA,kCAA+B","sourcesContent":["export * from './FloatingMenu';\n"]}
@@ -0,0 +1,15 @@
1
+ import type { DnDControlHandler } from "../../dnd/dnd.js";
2
+ import { type FloatingMenuProps } from "../FloatingMenu/FloatingMenu.js";
3
+ export type FloatingMenuControlProps = {
4
+ acnhorElement: Element;
5
+ multiple: boolean;
6
+ type: FloatingMenuProps['dirtype'];
7
+ dndHandler?: DnDControlHandler;
8
+ onMenuOpenToggle: FloatingMenuProps['onOpenToggle'];
9
+ onClearCellsClick: () => void;
10
+ onInsertBeforeClick: () => void;
11
+ onInsertAfterClick: () => void;
12
+ onRemoveRangeClick: () => void;
13
+ onRemoveTableClick: () => void;
14
+ };
15
+ export declare const FloatingMenuControl: React.FC<FloatingMenuControlProps>;