@gravity-ui/markdown-editor 13.17.0 → 13.18.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 (227) hide show
  1. package/README.md +2 -0
  2. package/build/cjs/bundle/config/action-names.d.ts +1 -1
  3. package/build/cjs/bundle/config/action-names.js +1 -0
  4. package/build/cjs/bundle/config/icons.d.ts +1 -1
  5. package/build/cjs/bundle/config/icons.js +3 -0
  6. package/build/cjs/bundle/config/wysiwyg.d.ts +1 -0
  7. package/build/cjs/bundle/config/wysiwyg.js +13 -1
  8. package/build/cjs/extensions/behavior/Resizable/Resizable.css +38 -0
  9. package/build/cjs/extensions/behavior/Resizable/Resizable.d.ts +9 -0
  10. package/build/cjs/extensions/behavior/Resizable/Resizable.js +14 -0
  11. package/build/cjs/extensions/markdown/Table/actions/innerActions.d.ts +1 -1
  12. package/build/cjs/extensions/markdown/Table/plugins/TableCellContextPlugin/index.js +19 -9
  13. package/build/cjs/extensions/yfm/GPT/ErrorScreen/ErrorScreen.css +18 -0
  14. package/build/cjs/extensions/yfm/GPT/ErrorScreen/ErrorScreen.d.ts +8 -0
  15. package/build/cjs/extensions/yfm/GPT/ErrorScreen/ErrorScreen.js +21 -0
  16. package/build/cjs/extensions/yfm/GPT/ErrorScreen/types.d.ts +14 -0
  17. package/build/cjs/extensions/yfm/GPT/ErrorScreen/types.js +2 -0
  18. package/build/cjs/extensions/yfm/GPT/GptDialog/GptDialog.css +75 -0
  19. package/build/cjs/extensions/yfm/GPT/GptDialog/GptDialog.d.ts +28 -0
  20. package/build/cjs/extensions/yfm/GPT/GptDialog/GptDialog.js +102 -0
  21. package/build/cjs/extensions/yfm/GPT/GptDialog/LoadingScreen/LoadingScreen.css +22 -0
  22. package/build/cjs/extensions/yfm/GPT/GptDialog/LoadingScreen/LoadingScreen.d.ts +3 -0
  23. package/build/cjs/extensions/yfm/GPT/GptDialog/LoadingScreen/LoadingScreen.js +21 -0
  24. package/build/cjs/extensions/yfm/GPT/IconRefuge/IconRefuge.classname.d.ts +1 -0
  25. package/build/cjs/extensions/yfm/GPT/IconRefuge/IconRefuge.classname.js +5 -0
  26. package/build/cjs/extensions/yfm/GPT/IconRefuge/IconRefuge.css +8 -0
  27. package/build/cjs/extensions/yfm/GPT/IconRefuge/IconRefuge.d.ts +14 -0
  28. package/build/cjs/extensions/yfm/GPT/IconRefuge/IconRefuge.js +28 -0
  29. package/build/cjs/extensions/yfm/GPT/IconRefuge/index.d.ts +2 -0
  30. package/build/cjs/extensions/yfm/GPT/IconRefuge/index.js +5 -0
  31. package/build/cjs/extensions/yfm/GPT/PresetList/PresetList.d.ts +9 -0
  32. package/build/cjs/extensions/yfm/GPT/PresetList/PresetList.js +29 -0
  33. package/build/cjs/extensions/yfm/GPT/PresetList/Presetlist.css +6 -0
  34. package/build/cjs/extensions/yfm/GPT/actions.d.ts +2 -0
  35. package/build/cjs/extensions/yfm/GPT/actions.js +14 -0
  36. package/build/cjs/extensions/yfm/GPT/commands.d.ts +2 -0
  37. package/build/cjs/extensions/yfm/GPT/commands.js +13 -0
  38. package/build/cjs/extensions/yfm/GPT/constants.d.ts +13 -0
  39. package/build/cjs/extensions/yfm/GPT/constants.js +15 -0
  40. package/build/cjs/extensions/yfm/GPT/gptExtension/gptExtension.d.ts +13 -0
  41. package/build/cjs/extensions/yfm/GPT/gptExtension/gptExtension.js +18 -0
  42. package/build/cjs/extensions/yfm/GPT/gptExtension/view.css +17 -0
  43. package/build/cjs/extensions/yfm/GPT/gptExtension/view.d.ts +36 -0
  44. package/build/cjs/extensions/yfm/GPT/gptExtension/view.js +171 -0
  45. package/build/cjs/extensions/yfm/GPT/hooks/useGpt.d.ts +27 -0
  46. package/build/cjs/extensions/yfm/GPT/hooks/useGpt.js +148 -0
  47. package/build/cjs/extensions/yfm/GPT/hooks/useGptHotKeys.d.ts +2 -0
  48. package/build/cjs/extensions/yfm/GPT/hooks/useGptHotKeys.js +8 -0
  49. package/build/cjs/extensions/yfm/GPT/hooks/useOverflowingHorizontalItems.d.ts +13 -0
  50. package/build/cjs/extensions/yfm/GPT/hooks/useOverflowingHorizontalItems.js +70 -0
  51. package/build/cjs/extensions/yfm/GPT/hooks/usePresetList.d.ts +14 -0
  52. package/build/cjs/extensions/yfm/GPT/hooks/usePresetList.js +36 -0
  53. package/build/cjs/extensions/yfm/GPT/index.d.ts +2 -0
  54. package/build/cjs/extensions/yfm/GPT/index.js +5 -0
  55. package/build/cjs/extensions/yfm/GPT/plugin.d.ts +13 -0
  56. package/build/cjs/extensions/yfm/GPT/plugin.js +47 -0
  57. package/build/cjs/extensions/yfm/GPT/toolbar.d.ts +3 -0
  58. package/build/cjs/extensions/yfm/GPT/toolbar.js +22 -0
  59. package/build/cjs/extensions/yfm/GPT/utils.d.ts +13 -0
  60. package/build/cjs/extensions/yfm/GPT/utils.js +31 -0
  61. package/build/cjs/extensions/yfm/ImgSize/plugins/ImgSizeNodeView/ImgSettingsButton.css +6 -0
  62. package/build/cjs/extensions/yfm/ImgSize/plugins/ImgSizeNodeView/ImgSettingsButton.d.ts +6 -1
  63. package/build/cjs/extensions/yfm/ImgSize/plugins/ImgSizeNodeView/ImgSettingsButton.js +21 -37
  64. package/build/cjs/extensions/yfm/ImgSize/plugins/ImgSizeNodeView/NodeView.d.ts +1 -1
  65. package/build/cjs/extensions/yfm/ImgSize/plugins/ImgSizeNodeView/NodeView.js +62 -4
  66. package/build/cjs/extensions/yfm/Mermaid/MermaidNodeView/MermaidView.js +8 -7
  67. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/actions.d.ts +1 -1
  68. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/actions.js +0 -8
  69. package/build/cjs/extensions/yfm/index.d.ts +1 -0
  70. package/build/cjs/extensions/yfm/index.js +1 -0
  71. package/build/cjs/i18n/gpt/dialog/en.json +16 -0
  72. package/build/cjs/i18n/gpt/dialog/index.d.ts +19 -0
  73. package/build/cjs/i18n/gpt/dialog/index.js +8 -0
  74. package/build/cjs/i18n/gpt/dialog/ru.json +16 -0
  75. package/build/cjs/i18n/gpt/errors/en.json +5 -0
  76. package/build/cjs/i18n/gpt/errors/index.d.ts +8 -0
  77. package/build/cjs/i18n/gpt/errors/index.js +8 -0
  78. package/build/cjs/i18n/gpt/errors/ru.json +5 -0
  79. package/build/cjs/i18n/gpt/extension/en.json +6 -0
  80. package/build/cjs/i18n/gpt/extension/index.d.ts +9 -0
  81. package/build/cjs/i18n/gpt/extension/index.js +8 -0
  82. package/build/cjs/i18n/gpt/extension/ru.json +6 -0
  83. package/build/cjs/i18n/gpt/loading/en.json +3 -0
  84. package/build/cjs/i18n/gpt/loading/index.d.ts +6 -0
  85. package/build/cjs/i18n/gpt/loading/index.js +8 -0
  86. package/build/cjs/i18n/gpt/loading/ru.json +3 -0
  87. package/build/cjs/i18n/menubar/en.json +1 -0
  88. package/build/cjs/i18n/menubar/index.d.ts +2 -1
  89. package/build/cjs/i18n/menubar/ru.json +1 -0
  90. package/build/cjs/i18n/yfm-table/en.json +10 -1
  91. package/build/cjs/i18n/yfm-table/index.d.ts +10 -1
  92. package/build/cjs/i18n/yfm-table/ru.json +10 -1
  93. package/build/cjs/icons/GPT.d.ts +2 -0
  94. package/build/cjs/icons/GPT.js +22 -0
  95. package/build/cjs/icons/GPTLoading.d.ts +2 -0
  96. package/build/cjs/icons/GPTLoading.js +12 -0
  97. package/build/cjs/icons/index.d.ts +3 -1
  98. package/build/cjs/icons/index.js +5 -1
  99. package/build/cjs/react-utils/useAutoFocus.d.ts +1 -1
  100. package/build/cjs/react-utils/useAutoFocus.js +2 -2
  101. package/build/cjs/react-utils/useNodeEditing.d.ts +3 -2
  102. package/build/cjs/react-utils/useNodeEditing.js +1 -1
  103. package/build/cjs/react-utils/useNodeResizing.d.ts +22 -0
  104. package/build/cjs/react-utils/useNodeResizing.js +82 -0
  105. package/build/cjs/table-utils/commands/appendColumn.js +42 -33
  106. package/build/cjs/table-utils/commands/appendRow.js +40 -22
  107. package/build/cjs/table-utils/commands/removeColumn.js +18 -20
  108. package/build/cjs/table-utils/commands/removeRow.js +12 -9
  109. package/build/cjs/table-utils/table-desc.d.ts +53 -0
  110. package/build/cjs/table-utils/table-desc.js +149 -0
  111. package/build/cjs/table-utils/utils.d.ts +1 -1
  112. package/build/cjs/table-utils/utils.js +19 -12
  113. package/build/cjs/version.js +1 -1
  114. package/build/esm/bundle/config/action-names.d.ts +1 -1
  115. package/build/esm/bundle/config/action-names.js +1 -0
  116. package/build/esm/bundle/config/icons.d.ts +1 -1
  117. package/build/esm/bundle/config/icons.js +2 -0
  118. package/build/esm/bundle/config/wysiwyg.d.ts +1 -0
  119. package/build/esm/bundle/config/wysiwyg.js +12 -0
  120. package/build/esm/extensions/behavior/Resizable/Resizable.css +38 -0
  121. package/build/esm/extensions/behavior/Resizable/Resizable.d.ts +10 -0
  122. package/build/esm/extensions/behavior/Resizable/Resizable.js +10 -0
  123. package/build/esm/extensions/markdown/Table/actions/innerActions.d.ts +1 -1
  124. package/build/esm/extensions/markdown/Table/plugins/TableCellContextPlugin/index.js +19 -9
  125. package/build/esm/extensions/yfm/GPT/ErrorScreen/ErrorScreen.css +18 -0
  126. package/build/esm/extensions/yfm/GPT/ErrorScreen/ErrorScreen.d.ts +9 -0
  127. package/build/esm/extensions/yfm/GPT/ErrorScreen/ErrorScreen.js +17 -0
  128. package/build/esm/extensions/yfm/GPT/ErrorScreen/types.d.ts +14 -0
  129. package/build/esm/extensions/yfm/GPT/ErrorScreen/types.js +1 -0
  130. package/build/esm/extensions/yfm/GPT/GptDialog/GptDialog.css +75 -0
  131. package/build/esm/extensions/yfm/GPT/GptDialog/GptDialog.d.ts +29 -0
  132. package/build/esm/extensions/yfm/GPT/GptDialog/GptDialog.js +98 -0
  133. package/build/esm/extensions/yfm/GPT/GptDialog/LoadingScreen/LoadingScreen.css +22 -0
  134. package/build/esm/extensions/yfm/GPT/GptDialog/LoadingScreen/LoadingScreen.d.ts +4 -0
  135. package/build/esm/extensions/yfm/GPT/GptDialog/LoadingScreen/LoadingScreen.js +17 -0
  136. package/build/esm/extensions/yfm/GPT/IconRefuge/IconRefuge.classname.d.ts +1 -0
  137. package/build/esm/extensions/yfm/GPT/IconRefuge/IconRefuge.classname.js +2 -0
  138. package/build/esm/extensions/yfm/GPT/IconRefuge/IconRefuge.css +8 -0
  139. package/build/esm/extensions/yfm/GPT/IconRefuge/IconRefuge.d.ts +15 -0
  140. package/build/esm/extensions/yfm/GPT/IconRefuge/IconRefuge.js +25 -0
  141. package/build/esm/extensions/yfm/GPT/IconRefuge/index.d.ts +2 -0
  142. package/build/esm/extensions/yfm/GPT/IconRefuge/index.js +1 -0
  143. package/build/esm/extensions/yfm/GPT/PresetList/PresetList.d.ts +10 -0
  144. package/build/esm/extensions/yfm/GPT/PresetList/PresetList.js +25 -0
  145. package/build/esm/extensions/yfm/GPT/PresetList/Presetlist.css +6 -0
  146. package/build/esm/extensions/yfm/GPT/actions.d.ts +2 -0
  147. package/build/esm/extensions/yfm/GPT/actions.js +10 -0
  148. package/build/esm/extensions/yfm/GPT/commands.d.ts +2 -0
  149. package/build/esm/extensions/yfm/GPT/commands.js +9 -0
  150. package/build/esm/extensions/yfm/GPT/constants.d.ts +13 -0
  151. package/build/esm/extensions/yfm/GPT/constants.js +12 -0
  152. package/build/esm/extensions/yfm/GPT/gptExtension/gptExtension.d.ts +13 -0
  153. package/build/esm/extensions/yfm/GPT/gptExtension/gptExtension.js +14 -0
  154. package/build/esm/extensions/yfm/GPT/gptExtension/view.css +17 -0
  155. package/build/esm/extensions/yfm/GPT/gptExtension/view.d.ts +37 -0
  156. package/build/esm/extensions/yfm/GPT/gptExtension/view.js +167 -0
  157. package/build/esm/extensions/yfm/GPT/hooks/useGpt.d.ts +27 -0
  158. package/build/esm/extensions/yfm/GPT/hooks/useGpt.js +144 -0
  159. package/build/esm/extensions/yfm/GPT/hooks/useGptHotKeys.d.ts +2 -0
  160. package/build/esm/extensions/yfm/GPT/hooks/useGptHotKeys.js +4 -0
  161. package/build/esm/extensions/yfm/GPT/hooks/useOverflowingHorizontalItems.d.ts +13 -0
  162. package/build/esm/extensions/yfm/GPT/hooks/useOverflowingHorizontalItems.js +65 -0
  163. package/build/esm/extensions/yfm/GPT/hooks/usePresetList.d.ts +14 -0
  164. package/build/esm/extensions/yfm/GPT/hooks/usePresetList.js +32 -0
  165. package/build/esm/extensions/yfm/GPT/index.d.ts +2 -0
  166. package/build/esm/extensions/yfm/GPT/index.js +2 -0
  167. package/build/esm/extensions/yfm/GPT/plugin.d.ts +13 -0
  168. package/build/esm/extensions/yfm/GPT/plugin.js +43 -0
  169. package/build/esm/extensions/yfm/GPT/toolbar.d.ts +3 -0
  170. package/build/esm/extensions/yfm/GPT/toolbar.js +18 -0
  171. package/build/esm/extensions/yfm/GPT/utils.d.ts +13 -0
  172. package/build/esm/extensions/yfm/GPT/utils.js +23 -0
  173. package/build/esm/extensions/yfm/ImgSize/plugins/ImgSizeNodeView/ImgSettingsButton.css +6 -0
  174. package/build/esm/extensions/yfm/ImgSize/plugins/ImgSizeNodeView/ImgSettingsButton.d.ts +7 -1
  175. package/build/esm/extensions/yfm/ImgSize/plugins/ImgSizeNodeView/ImgSettingsButton.js +23 -38
  176. package/build/esm/extensions/yfm/ImgSize/plugins/ImgSizeNodeView/NodeView.d.ts +1 -1
  177. package/build/esm/extensions/yfm/ImgSize/plugins/ImgSizeNodeView/NodeView.js +63 -5
  178. package/build/esm/extensions/yfm/Mermaid/MermaidNodeView/MermaidView.js +5 -4
  179. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/actions.d.ts +1 -1
  180. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/actions.js +1 -9
  181. package/build/esm/extensions/yfm/index.d.ts +1 -0
  182. package/build/esm/extensions/yfm/index.js +1 -0
  183. package/build/esm/i18n/gpt/dialog/en.json +16 -0
  184. package/build/esm/i18n/gpt/dialog/index.d.ts +19 -0
  185. package/build/esm/i18n/gpt/dialog/index.js +4 -0
  186. package/build/esm/i18n/gpt/dialog/ru.json +16 -0
  187. package/build/esm/i18n/gpt/errors/en.json +5 -0
  188. package/build/esm/i18n/gpt/errors/index.d.ts +8 -0
  189. package/build/esm/i18n/gpt/errors/index.js +4 -0
  190. package/build/esm/i18n/gpt/errors/ru.json +5 -0
  191. package/build/esm/i18n/gpt/extension/en.json +6 -0
  192. package/build/esm/i18n/gpt/extension/index.d.ts +9 -0
  193. package/build/esm/i18n/gpt/extension/index.js +4 -0
  194. package/build/esm/i18n/gpt/extension/ru.json +6 -0
  195. package/build/esm/i18n/gpt/loading/en.json +3 -0
  196. package/build/esm/i18n/gpt/loading/index.d.ts +6 -0
  197. package/build/esm/i18n/gpt/loading/index.js +4 -0
  198. package/build/esm/i18n/gpt/loading/ru.json +3 -0
  199. package/build/esm/i18n/menubar/en.json +1 -0
  200. package/build/esm/i18n/menubar/index.d.ts +2 -1
  201. package/build/esm/i18n/menubar/ru.json +1 -0
  202. package/build/esm/i18n/yfm-table/en.json +10 -1
  203. package/build/esm/i18n/yfm-table/index.d.ts +10 -1
  204. package/build/esm/i18n/yfm-table/ru.json +10 -1
  205. package/build/esm/icons/GPT.d.ts +2 -0
  206. package/build/esm/icons/GPT.js +19 -0
  207. package/build/esm/icons/GPTLoading.d.ts +2 -0
  208. package/build/esm/icons/GPTLoading.js +9 -0
  209. package/build/esm/icons/index.d.ts +3 -1
  210. package/build/esm/icons/index.js +3 -1
  211. package/build/esm/react-utils/useAutoFocus.d.ts +1 -1
  212. package/build/esm/react-utils/useAutoFocus.js +2 -2
  213. package/build/esm/react-utils/useNodeEditing.d.ts +3 -2
  214. package/build/esm/react-utils/useNodeEditing.js +1 -1
  215. package/build/esm/react-utils/useNodeResizing.d.ts +22 -0
  216. package/build/esm/react-utils/useNodeResizing.js +77 -0
  217. package/build/esm/table-utils/commands/appendColumn.js +44 -35
  218. package/build/esm/table-utils/commands/appendRow.js +42 -24
  219. package/build/esm/table-utils/commands/removeColumn.js +18 -20
  220. package/build/esm/table-utils/commands/removeRow.js +14 -11
  221. package/build/esm/table-utils/table-desc.d.ts +53 -0
  222. package/build/esm/table-utils/table-desc.js +144 -0
  223. package/build/esm/table-utils/utils.d.ts +1 -1
  224. package/build/esm/table-utils/utils.js +18 -12
  225. package/build/esm/version.js +1 -1
  226. package/build/styles.css +190 -0
  227. package/package.json +3 -2
@@ -1,4 +1,4 @@
1
- export declare const i18n: <G extends "bold" | "code" | "link" | "italic" | "strike" | "underline" | "mark" | "quote" | "colorify" | "mono" | "text" | "html" | "cut" | "table" | "image" | "code_inline" | "heading" | "note" | "file" | "codeblock" | "checkbox" | "emoji" | "list" | "tabs" | "math" | "heading1" | "heading2" | "heading3" | "heading4" | "heading5" | "heading6" | "undo" | "redo" | "math_inline" | "math_block" | "colorify__color_blue" | "colorify__color_default" | "colorify__color_gray" | "colorify__color_green" | "colorify__color_orange" | "colorify__color_red" | "colorify__color_violet" | "colorify__color_yellow" | "colorify__group_text" | "folding-heading" | "folding-heading_hint" | "hrule" | "list__action_lift" | "list__action_sink" | "list_action_disabled" | "mermaid" | "more_action" | "olist" | "ulist", S extends string>(key: G | (string extends S ? S : never), params?: {
1
+ export declare const i18n: <G extends "bold" | "code" | "link" | "italic" | "strike" | "underline" | "mark" | "quote" | "colorify" | "mono" | "text" | "html" | "cut" | "table" | "image" | "code_inline" | "heading" | "note" | "file" | "codeblock" | "checkbox" | "emoji" | "list" | "tabs" | "math" | "heading1" | "heading2" | "heading3" | "heading4" | "heading5" | "heading6" | "gpt" | "undo" | "redo" | "math_inline" | "math_block" | "colorify__color_blue" | "colorify__color_default" | "colorify__color_gray" | "colorify__color_green" | "colorify__color_orange" | "colorify__color_red" | "colorify__color_violet" | "colorify__color_yellow" | "colorify__group_text" | "folding-heading" | "folding-heading_hint" | "hrule" | "list__action_lift" | "list__action_sink" | "list_action_disabled" | "mermaid" | "more_action" | "olist" | "ulist", S extends string>(key: G | (string extends S ? S : never), params?: {
2
2
  [key: string]: any;
3
3
  } | undefined) => S extends G ? {
4
4
  bold: string;
@@ -21,6 +21,7 @@ export declare const i18n: <G extends "bold" | "code" | "link" | "italic" | "str
21
21
  file: string;
22
22
  "folding-heading": string;
23
23
  "folding-heading_hint": string;
24
+ gpt: string;
24
25
  heading: string;
25
26
  heading1: string;
26
27
  heading2: string;
@@ -19,6 +19,7 @@
19
19
  "file": "Файл",
20
20
  "folding-heading": "Свёрнутый раздел",
21
21
  "folding-heading_hint": "Текст под заголовком можно свернуть или раскрыть",
22
+ "gpt": "GPT-виджет",
22
23
  "heading": "Заголовок",
23
24
  "heading1": "Заголовок 1",
24
25
  "heading2": "Заголовок 2",
@@ -5,5 +5,14 @@
5
5
  "row.add.before": "Add row before",
6
6
  "row.add.after": "Add row after",
7
7
  "row.remove": "Remove row",
8
- "table.remove": "Remove table"
8
+ "table.remove": "Remove table",
9
+ "table.menu.cell.align.left": "Align cell content to the left",
10
+ "table.menu.cell.align.right": "Align cell content to the right",
11
+ "table.menu.cell.align.center": "Align cell content to the center",
12
+ "table.menu.row.add": "Add row after",
13
+ "table.menu.row.remove": "Remove row",
14
+ "table.menu.column.add": "Add column after",
15
+ "table.menu.column.remove": "Remove column",
16
+ "table.menu.convert.yfm": "Convert to YFM table",
17
+ "table.menu.table.remove": "Remove table"
9
18
  }
@@ -1,4 +1,4 @@
1
- export declare const i18n: <G extends "column.add.before" | "column.add.after" | "column.remove" | "row.add.before" | "row.add.after" | "row.remove" | "table.remove", S extends string>(key: G | (string extends S ? S : never), params?: {
1
+ export declare const i18n: <G extends "column.add.before" | "column.add.after" | "column.remove" | "row.add.before" | "row.add.after" | "row.remove" | "table.remove" | "table.menu.cell.align.left" | "table.menu.cell.align.right" | "table.menu.cell.align.center" | "table.menu.row.add" | "table.menu.row.remove" | "table.menu.column.add" | "table.menu.column.remove" | "table.menu.convert.yfm" | "table.menu.table.remove", S extends string>(key: G | (string extends S ? S : never), params?: {
2
2
  [key: string]: any;
3
3
  } | undefined) => S extends G ? {
4
4
  "column.add.before": string;
@@ -8,4 +8,13 @@ export declare const i18n: <G extends "column.add.before" | "column.add.after" |
8
8
  "row.add.after": string;
9
9
  "row.remove": string;
10
10
  "table.remove": string;
11
+ "table.menu.cell.align.left": string;
12
+ "table.menu.cell.align.right": string;
13
+ "table.menu.cell.align.center": string;
14
+ "table.menu.row.add": string;
15
+ "table.menu.row.remove": string;
16
+ "table.menu.column.add": string;
17
+ "table.menu.column.remove": string;
18
+ "table.menu.convert.yfm": string;
19
+ "table.menu.table.remove": string;
11
20
  }[G] : string;
@@ -5,5 +5,14 @@
5
5
  "row.add.before": "Добавить строку до",
6
6
  "row.add.after": "Добавить строку после",
7
7
  "row.remove": "Удалить строку",
8
- "table.remove": "Удалить таблицу"
8
+ "table.remove": "Удалить таблицу",
9
+ "table.menu.cell.align.left": "Выровнять контент ячейки по левому краю",
10
+ "table.menu.cell.align.right": "Выровнять контент ячейки по правому краю",
11
+ "table.menu.cell.align.center": "Выровнять контент ячейки по центру",
12
+ "table.menu.row.add": "Добавить строку после",
13
+ "table.menu.row.remove": "Удалить строку",
14
+ "table.menu.column.add": "Добавить столбец после",
15
+ "table.menu.column.remove": "Удалить столбец",
16
+ "table.menu.convert.yfm": "Преобразовать в таблицу YFM",
17
+ "table.menu.table.remove": "Удалить таблицу"
9
18
  }
@@ -0,0 +1,2 @@
1
+ declare const GPTIcon: () => JSX.Element;
2
+ export default GPTIcon;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const react_1 = tslib_1.__importDefault(require("react"));
5
+ const uikit_1 = require("@gravity-ui/uikit");
6
+ const GPTIcon = () => {
7
+ // It may be worth taking the hook outside the icon
8
+ const theme = (0, uikit_1.useTheme)();
9
+ const gradient = theme === 'dark' || theme === 'dark-hc' ? (react_1.default.createElement(react_1.default.Fragment, null,
10
+ react_1.default.createElement("stop", { stopColor: "#FF7233" }),
11
+ react_1.default.createElement("stop", { offset: "1", stopColor: "#D14DFF" }))) : (react_1.default.createElement(react_1.default.Fragment, null,
12
+ react_1.default.createElement("stop", { stopColor: "#FF5001" }),
13
+ react_1.default.createElement("stop", { offset: "1", stopColor: "#BD00FF" })));
14
+ return (react_1.default.createElement("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg" },
15
+ react_1.default.createElement("g", { clipPath: "url(#clip0_1608_24154)" },
16
+ react_1.default.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M0 6C0 2.68629 2.68629 -4.3454e-07 6 0C9.31371 4.3454e-07 12 2.68629 12 6C12 9.31371 9.31371 12 6 12C2.68629 12 -6.0141e-07 9.31371 0 6ZM14 16C12.8954 16 12 15.1046 12 14C12 12.8954 12.8954 12 14 12C15.1046 12 16 12.8954 16 14C16 15.1046 15.1046 16 14 16Z", fill: "url(#paint0_linear_1608_24154)" })),
17
+ react_1.default.createElement("defs", null,
18
+ react_1.default.createElement("linearGradient", { id: "paint0_linear_1608_24154", x1: "17.5", y1: "-1", x2: "2.5", y2: "13.5", gradientUnits: "userSpaceOnUse" }, gradient),
19
+ react_1.default.createElement("clipPath", { id: "clip0_1608_24154" },
20
+ react_1.default.createElement("rect", { width: "16", height: "16", fill: "white" })))));
21
+ };
22
+ exports.default = GPTIcon;
@@ -0,0 +1,2 @@
1
+ declare const GPTLoading: () => JSX.Element;
2
+ export default GPTLoading;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const react_1 = tslib_1.__importDefault(require("react"));
5
+ const GPTLoading = () => (react_1.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "20", height: "20" },
6
+ react_1.default.createElement("circle", { cx: "8", cy: "8", r: "6", fill: "url(#paint0_linear_1608_24154)" },
7
+ react_1.default.createElement("animateMotion", { fill: "url(#paint0_linear_1608_24154)", begin: "0s", dur: "1150ms", path: "M 0 0 a 1 3 145 0 1 8 8 a 1 3 145 0 1 -8 -8", repeatCount: "indefinite" }),
8
+ react_1.default.createElement("animate", { attributeName: "r", dur: "1150ms", repeatCount: "indefinite", values: "6; 2; 6" })),
9
+ react_1.default.createElement("circle", { cx: "16", cy: "16", r: "2", fill: "url(#paint0_linear_1608_24154)" },
10
+ react_1.default.createElement("animateMotion", { fill: "url(#paint0_linear_1608_24154)", begin: "0s", dur: "1150ms", path: "M 0 0 a 1.2 2.7 157 0 1 -5 -6.7 a 1.2 2.7 157 0 1 5 6.7", repeatCount: "indefinite" }),
11
+ react_1.default.createElement("animate", { attributeName: "r", dur: "1150ms", repeatCount: "indefinite", values: "2; 6; 2" }))));
12
+ exports.default = GPTLoading;
@@ -1,5 +1,7 @@
1
+ import GPTIcon from './GPT';
2
+ import GPTLoading from './GPTLoading';
1
3
  import MermaidIcon from './Mermaid';
2
4
  import MonoIcon from './Mono';
3
5
  import TabsIcon from './Tabs';
4
- export { MermaidIcon, MonoIcon, TabsIcon };
6
+ export { MermaidIcon, MonoIcon, TabsIcon, GPTIcon, GPTLoading };
5
7
  export { ArrowUturnCcwLeft as UndoIcon, ArrowUturnCwRight as RedoIcon, Bold as BoldIcon, Italic as ItalicIcon, Underline as UnderlineIcon, Strikethrough as StrikethroughIcon, FontCursor as MarkIcon, Text as TextIcon, Heading as HeadingIcon, Heading1 as Heading1Icon, Heading2 as Heading2Icon, Heading3 as Heading3Icon, Heading4 as Heading4Icon, Heading5 as Heading5Icon, Heading6 as Heading6Icon, ListUl as ListBlIcon, ListOl as ListOlIcon, TextOutdent as LiftIcon, TextIndent as SinkIcon, Font as TextColorIcon, Link as LinkIcon, QuoteClose as QuoteIcon, Scissors as CutIcon, Sticker as NoteIcon, Paperclip as FileIcon, Minus as HRuleIcon, LayoutList as TableIcon, ChevronsExpandHorizontal as IframeIcon, SquareCheck as CheckListIcon, Picture as ImageIcon, Person as UserIcon, FaceSmile as EmojiIcon, Code as CodeInlineIcon, FileCode as CodeBlockIcon, Function as FunctionInlineIcon, CurlyBracketsFunction as FunctionBlockIcon, Hashtag as AnchorIcon, SquareDashedText as BlockIcon, LayoutColumns3 as LayoutIcon, Pencil as DrawIoIcon, FolderCode as HtmlBlockIcon, ArrowChevronRight as FoldingHeadingIcon, } from '@gravity-ui/icons';
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.FoldingHeadingIcon = exports.HtmlBlockIcon = exports.DrawIoIcon = exports.LayoutIcon = exports.BlockIcon = exports.AnchorIcon = exports.FunctionBlockIcon = exports.FunctionInlineIcon = exports.CodeBlockIcon = exports.CodeInlineIcon = exports.EmojiIcon = exports.UserIcon = exports.ImageIcon = exports.CheckListIcon = exports.IframeIcon = exports.TableIcon = exports.HRuleIcon = exports.FileIcon = exports.NoteIcon = exports.CutIcon = exports.QuoteIcon = exports.LinkIcon = exports.TextColorIcon = exports.SinkIcon = exports.LiftIcon = exports.ListOlIcon = exports.ListBlIcon = exports.Heading6Icon = exports.Heading5Icon = exports.Heading4Icon = exports.Heading3Icon = exports.Heading2Icon = exports.Heading1Icon = exports.HeadingIcon = exports.TextIcon = exports.MarkIcon = exports.StrikethroughIcon = exports.UnderlineIcon = exports.ItalicIcon = exports.BoldIcon = exports.RedoIcon = exports.UndoIcon = exports.TabsIcon = exports.MonoIcon = exports.MermaidIcon = void 0;
3
+ exports.FoldingHeadingIcon = exports.HtmlBlockIcon = exports.DrawIoIcon = exports.LayoutIcon = exports.BlockIcon = exports.AnchorIcon = exports.FunctionBlockIcon = exports.FunctionInlineIcon = exports.CodeBlockIcon = exports.CodeInlineIcon = exports.EmojiIcon = exports.UserIcon = exports.ImageIcon = exports.CheckListIcon = exports.IframeIcon = exports.TableIcon = exports.HRuleIcon = exports.FileIcon = exports.NoteIcon = exports.CutIcon = exports.QuoteIcon = exports.LinkIcon = exports.TextColorIcon = exports.SinkIcon = exports.LiftIcon = exports.ListOlIcon = exports.ListBlIcon = exports.Heading6Icon = exports.Heading5Icon = exports.Heading4Icon = exports.Heading3Icon = exports.Heading2Icon = exports.Heading1Icon = exports.HeadingIcon = exports.TextIcon = exports.MarkIcon = exports.StrikethroughIcon = exports.UnderlineIcon = exports.ItalicIcon = exports.BoldIcon = exports.RedoIcon = exports.UndoIcon = exports.GPTLoading = exports.GPTIcon = exports.TabsIcon = exports.MonoIcon = exports.MermaidIcon = void 0;
4
4
  const tslib_1 = require("tslib");
5
+ const GPT_1 = tslib_1.__importDefault(require("./GPT"));
6
+ exports.GPTIcon = GPT_1.default;
7
+ const GPTLoading_1 = tslib_1.__importDefault(require("./GPTLoading"));
8
+ exports.GPTLoading = GPTLoading_1.default;
5
9
  const Mermaid_1 = tslib_1.__importDefault(require("./Mermaid"));
6
10
  exports.MermaidIcon = Mermaid_1.default;
7
11
  const Mono_1 = tslib_1.__importDefault(require("./Mono"));
@@ -1,2 +1,2 @@
1
1
  import { RefObject } from 'react';
2
- export declare const useAutoFocus: (nodeRef: RefObject<HTMLElement>) => void;
2
+ export declare const useAutoFocus: (nodeRef: RefObject<HTMLElement>, dependencies?: unknown[]) => void;
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.useAutoFocus = void 0;
4
4
  const react_1 = require("react");
5
- const useAutoFocus = (nodeRef) => {
5
+ const useAutoFocus = (nodeRef, dependencies = []) => {
6
6
  (0, react_1.useEffect)(() => {
7
7
  const { current: anchor } = nodeRef;
8
8
  const timeout = setTimeout(() => {
@@ -13,6 +13,6 @@ const useAutoFocus = (nodeRef) => {
13
13
  };
14
14
  // https://github.com/facebook/react/issues/23392#issuecomment-1055610198
15
15
  // eslint-disable-next-line react-hooks/exhaustive-deps
16
- }, [nodeRef.current]);
16
+ }, [nodeRef.current, ...dependencies]);
17
17
  };
18
18
  exports.useAutoFocus = useAutoFocus;
@@ -1,6 +1,7 @@
1
1
  import { RefObject } from 'react';
2
2
  import { EditorView } from 'prosemirror-view';
3
- export declare const useNodeEditing: ({ nodeRef, view, }: {
3
+ export interface UseNodeEditingArgs {
4
4
  nodeRef: RefObject<HTMLElement>;
5
5
  view: EditorView;
6
- }) => [boolean, () => void, () => void, () => void];
6
+ }
7
+ export declare const useNodeEditing: ({ nodeRef, view }: UseNodeEditingArgs) => [boolean, () => void, () => void, () => void];
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.useNodeEditing = void 0;
4
4
  const react_1 = require("react");
5
5
  const hooks_1 = require("./hooks");
6
- const useNodeEditing = ({ nodeRef, view, }) => {
6
+ const useNodeEditing = ({ nodeRef, view }) => {
7
7
  const state = (0, hooks_1.useBooleanState)(false);
8
8
  const [, , unsetEdit, toggleEdit] = state;
9
9
  (0, react_1.useEffect)(() => {
@@ -0,0 +1,22 @@
1
+ import React, { RefObject } from 'react';
2
+ export declare type ResizeDirection = 'left' | 'right';
3
+ export interface UseNodeResizingArgs {
4
+ width?: number;
5
+ height?: number;
6
+ onResize?: ({ width, height }: {
7
+ width?: number;
8
+ height?: number;
9
+ }) => void;
10
+ ref: RefObject<HTMLImageElement | HTMLDivElement> | null;
11
+ delay?: number;
12
+ threshold?: number;
13
+ minWidth?: number;
14
+ }
15
+ export declare const useNodeResizing: ({ width, height, onResize, ref, delay, threshold, minWidth, }: UseNodeResizingArgs) => {
16
+ startResizing: (event: React.MouseEvent<HTMLElement>, direction: ResizeDirection) => void;
17
+ state: {
18
+ resizing: boolean;
19
+ width: number | undefined;
20
+ height: number | undefined;
21
+ };
22
+ };
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useNodeResizing = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const react_1 = require("react");
6
+ const throttle_1 = tslib_1.__importDefault(require("lodash/throttle"));
7
+ const hooks_1 = require("./hooks");
8
+ const RESIZE_DELAY = 50;
9
+ const MIN_WIDTH = 40;
10
+ const THRESHOLD = 4;
11
+ const useNodeResizing = ({ width, height, onResize, ref, delay = RESIZE_DELAY, threshold = THRESHOLD, minWidth = MIN_WIDTH, }) => {
12
+ const state = (0, hooks_1.useBooleanState)(false);
13
+ const [resizing, , , toggleResizing] = state;
14
+ const [initialWidth, setInitialWidth] = (0, react_1.useState)(width);
15
+ const [initialHeight, setInitialHeight] = (0, react_1.useState)(height);
16
+ const [currentWidth, setCurrentWidth] = (0, react_1.useState)(width);
17
+ const [currentHeight, setCurrentHeight] = (0, react_1.useState)(height);
18
+ // The dimensions specified as arguments take primacy over
19
+ // the dimensions detected during the mouse movement.
20
+ (0, react_1.useEffect)(() => {
21
+ if (width !== initialWidth) {
22
+ setCurrentWidth(width);
23
+ setInitialWidth(width);
24
+ }
25
+ if (height !== initialHeight) {
26
+ setCurrentHeight(height);
27
+ setInitialHeight(height);
28
+ }
29
+ }, [width, height, initialWidth, initialHeight]);
30
+ const startResizing = (event, direction) => {
31
+ // prohibit the selection of text and other artifacts when resizing.
32
+ event.preventDefault();
33
+ const element = ref === null || ref === void 0 ? void 0 : ref.current;
34
+ if (!element) {
35
+ throw new Error('Reference element not found!');
36
+ }
37
+ const startX = event.pageX;
38
+ const startWidth = element.getBoundingClientRect().width || 0;
39
+ const startHeight = element.getBoundingClientRect().height || 0;
40
+ let animationFrameId;
41
+ const handleMouseMove = (0, throttle_1.default)((event) => {
42
+ if (animationFrameId) {
43
+ cancelAnimationFrame(animationFrameId);
44
+ }
45
+ animationFrameId = requestAnimationFrame(() => {
46
+ const currentX = event.pageX;
47
+ const diffX = currentX - startX;
48
+ const newWidthByDirection = direction === 'right' ? startWidth + diffX : startWidth - diffX;
49
+ if (Math.abs(newWidthByDirection - startWidth) >= threshold) {
50
+ const newWidth = newWidthByDirection >= minWidth ? newWidthByDirection : minWidth;
51
+ const newHeight = (startHeight / startWidth) * newWidth;
52
+ setCurrentWidth(newWidth);
53
+ setCurrentHeight(newHeight);
54
+ onResize === null || onResize === void 0 ? void 0 : onResize({
55
+ width: !initialWidth && initialWidth !== 0 ? undefined : newWidth,
56
+ height: !initialHeight && initialHeight !== 0 ? undefined : newHeight,
57
+ });
58
+ }
59
+ });
60
+ }, delay);
61
+ const handleMouseUp = () => {
62
+ document.removeEventListener('mousemove', handleMouseMove);
63
+ document.removeEventListener('mouseup', handleMouseUp);
64
+ toggleResizing();
65
+ if (animationFrameId) {
66
+ cancelAnimationFrame(animationFrameId);
67
+ }
68
+ };
69
+ document.addEventListener('mousemove', handleMouseMove);
70
+ document.addEventListener('mouseup', handleMouseUp);
71
+ toggleResizing();
72
+ };
73
+ return {
74
+ startResizing,
75
+ state: {
76
+ resizing,
77
+ width: !initialWidth && initialWidth !== 0 ? undefined : currentWidth,
78
+ height: !initialHeight && initialHeight !== 0 ? undefined : currentHeight,
79
+ },
80
+ };
81
+ };
82
+ exports.useNodeResizing = useNodeResizing;
@@ -3,50 +3,59 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.appendColumn = void 0;
4
4
  const prosemirror_utils_1 = require("prosemirror-utils");
5
5
  const __1 = require("..");
6
- const helpers_1 = require("../helpers");
7
- const utils_1 = require("../utils");
6
+ const table_desc_1 = require("../table-desc");
8
7
  const appendColumn = (state, dispatch, _, attrs) => {
9
- var _a;
10
8
  if (!attrs)
11
9
  return false;
12
- const { tablePos, columnNumber, direction } = attrs;
13
- const parentTable = (_a = (0, prosemirror_utils_1.findParentNodeClosestToPos)(state.doc.resolve(tablePos + 1), __1.isTableNode)) === null || _a === void 0 ? void 0 : _a.node;
14
- if (!parentTable)
10
+ const { tablePos, columnNumber, direction = 'after' } = attrs;
11
+ const res = (0, prosemirror_utils_1.findParentNodeClosestToPos)(state.doc.resolve(tablePos + 1), __1.isTableNode);
12
+ if (!res)
15
13
  return false;
16
- let parentCell;
17
- let parentRow;
18
- const tableBody = (0, prosemirror_utils_1.findChildren)(parentTable, utils_1.isTableBodyNode, false).pop();
19
- if (!tableBody)
14
+ const tableNode = res.node;
15
+ const tableDesc = table_desc_1.TableDesc.create(tableNode);
16
+ if (!tableDesc)
20
17
  return false;
21
- if (columnNumber !== undefined) {
22
- parentCell = (0, utils_1.findChildTableCells)(parentTable)[columnNumber];
23
- parentRow = (0, prosemirror_utils_1.findParentNodeClosestToPos)(state.doc.resolve(tablePos + parentCell.pos + 1), __1.isTableRowNode);
24
- }
25
- else {
26
- parentRow = (0, prosemirror_utils_1.findChildren)(tableBody.node, __1.isTableRowNode, false).pop();
27
- if (!parentRow)
18
+ const columnIndex = columnNumber !== null && columnNumber !== void 0 ? columnNumber : tableDesc.cols - 1; // if columnNumber is not defined, that means last row
19
+ const isFirstColumn = columnIndex === 0;
20
+ const isLastColumn = columnIndex === tableDesc.cols - 1;
21
+ let pos = null;
22
+ if (isFirstColumn && direction === 'before')
23
+ pos = tableDesc.getRelativePosForColumn(0).map(fromOrClosest);
24
+ if (isLastColumn && direction === 'after')
25
+ pos = tableDesc.getRelativePosForColumn(tableDesc.cols - 1).map(toOrClosest);
26
+ if (!pos) {
27
+ if (tableDesc.cols <= columnIndex)
28
28
  return false;
29
- parentCell = (0, prosemirror_utils_1.findChildren)(parentRow.node, utils_1.isTableCellNode, false).pop();
30
- }
31
- if (!parentCell || !parentRow || !parentTable) {
32
- return false;
29
+ if (tableDesc.isSafeColumn(columnIndex)) {
30
+ const columnPos = tableDesc.getRelativePosForColumn(columnIndex);
31
+ if (direction === 'before')
32
+ pos = columnPos.map(fromOrClosest);
33
+ if (direction === 'after')
34
+ pos = columnPos.map(toOrClosest);
35
+ }
36
+ else {
37
+ if (direction === 'before' && tableDesc.isSafeColumn(columnIndex - 1))
38
+ pos = tableDesc.getRelativePosForColumn(columnIndex - 1).map(toOrClosest);
39
+ if (direction === 'after' && tableDesc.isSafeColumn(columnIndex + 1))
40
+ pos = tableDesc.getRelativePosForColumn(columnIndex + 1).map(fromOrClosest);
41
+ }
33
42
  }
34
- const parentCellIndex = columnNumber || (0, helpers_1.findChildIndex)(parentRow.node, parentCell.node);
35
- if (parentCellIndex < 0) {
43
+ if (!pos)
36
44
  return false;
37
- }
38
45
  if (dispatch) {
39
- const allRows = (0, prosemirror_utils_1.findChildren)(tableBody.node, __1.isTableRowNode, false);
40
- let tr = state.tr;
41
- for (const row of allRows) {
42
- const rowCells = (0, prosemirror_utils_1.findChildren)(row.node, utils_1.isTableCellNode, false);
43
- const cell = rowCells[parentCellIndex];
44
- let position = tablePos + row.pos + cell.pos + 3;
45
- position += direction === 'before' ? 0 : cell.node.nodeSize;
46
- tr = tr.insert(tr.mapping.map(position), cell.node.type.createAndFill(cell.node.attrs));
46
+ const cellType = tableDesc.getCellNodeType();
47
+ const { tr } = state;
48
+ for (const p of pos) {
49
+ tr.insert(tr.mapping.map(res.pos + p), cellType.createAndFill());
47
50
  }
48
- dispatch(tr.scrollIntoView());
51
+ dispatch(tr);
49
52
  }
50
53
  return true;
51
54
  };
52
55
  exports.appendColumn = appendColumn;
56
+ function fromOrClosest(pos) {
57
+ return pos.type === 'real' ? pos.from : pos.closestPos;
58
+ }
59
+ function toOrClosest(pos) {
60
+ return pos.type === 'real' ? pos.to : pos.closestPos;
61
+ }
@@ -1,39 +1,57 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.appendRow = void 0;
4
- const prosemirror_model_1 = require("prosemirror-model");
5
4
  const prosemirror_utils_1 = require("prosemirror-utils");
6
5
  const __1 = require("..");
6
+ const table_desc_1 = require("../table-desc");
7
7
  const appendRow = (state, dispatch, _, attrs) => {
8
- var _a;
9
8
  if (!attrs)
10
9
  return false;
11
- const { tablePos, rowNumber, direction } = attrs;
12
- const tableNode = (_a = (0, prosemirror_utils_1.findParentNodeClosestToPos)(state.doc.resolve(tablePos + 1), __1.isTableNode)) === null || _a === void 0 ? void 0 : _a.node;
13
- if (!tableNode)
10
+ const { tablePos, rowNumber, direction = 'after' } = attrs;
11
+ const res = (0, prosemirror_utils_1.findParentNodeClosestToPos)(state.doc.resolve(tablePos + 1), __1.isTableNode);
12
+ if (!res)
14
13
  return false;
15
- const parentBody = (0, prosemirror_utils_1.findChildren)(tableNode, __1.isTableBodyNode, false).pop();
16
- if (!parentBody)
14
+ const tableNode = res.node;
15
+ const tableDesc = table_desc_1.TableDesc.create(tableNode);
16
+ if (!tableDesc)
17
17
  return false;
18
- let parentRow;
19
- if (rowNumber !== undefined) {
20
- parentRow = (0, __1.findChildTableRows)(tableNode)[rowNumber];
18
+ const rowIndex = rowNumber !== null && rowNumber !== void 0 ? rowNumber : tableDesc.rows - 1; // if rowNumber is not defined, that means last row
19
+ const isFirstRow = rowIndex === 0;
20
+ const isLastRow = rowIndex === tableDesc.rows - 1;
21
+ let pos = -1;
22
+ if (isFirstRow && direction === 'before')
23
+ pos = tableDesc.getRelativePosForRow(0).from;
24
+ if (isLastRow && direction === 'after')
25
+ pos = tableDesc.getRelativePosForRow(tableDesc.rows - 1).to;
26
+ if (pos === -1) {
27
+ if (tableDesc.rows <= rowIndex)
28
+ return false;
29
+ if (tableDesc.isSafeRow(rowIndex)) {
30
+ const rowPos = tableDesc.getRelativePosForRow(rowIndex);
31
+ if (direction === 'before')
32
+ pos = rowPos.from;
33
+ if (direction === 'after')
34
+ pos = rowPos.to;
35
+ }
36
+ else {
37
+ if (direction === 'before' && tableDesc.isSafeRow(rowIndex - 1))
38
+ pos = tableDesc.getRelativePosForRow(rowIndex - 1).to;
39
+ if (direction === 'after' && tableDesc.isSafeRow(rowIndex + 1))
40
+ pos = tableDesc.getRelativePosForRow(rowIndex + 1).from;
41
+ }
21
42
  }
22
- else {
23
- parentRow = (0, prosemirror_utils_1.findChildren)(parentBody.node, __1.isTableRowNode, false).pop();
24
- }
25
- if (!parentRow) {
43
+ if (pos === -1)
26
44
  return false;
27
- }
28
45
  if (dispatch) {
29
- const newCellNodes = [];
30
- parentRow.node.forEach((node) => {
31
- newCellNodes.push(node.type.createAndFill(node.attrs));
32
- });
33
- let position = tablePos + parentRow.pos;
34
- position += direction === 'before' ? 1 : parentRow.node.nodeSize + 1;
35
- dispatch(state.tr.insert(position, parentRow.node.copy(prosemirror_model_1.Fragment.from(newCellNodes))));
46
+ const cells = getNodes(tableDesc.getCellNodeType(), tableDesc.cols);
47
+ dispatch(state.tr.insert(res.pos + pos, tableDesc.getRowNodeType().create(null, cells)));
36
48
  }
37
49
  return true;
38
50
  };
39
51
  exports.appendRow = appendRow;
52
+ function getNodes(type, count) {
53
+ const nodes = [];
54
+ for (let i = 0; i < count; i++)
55
+ nodes.push(type.createAndFill());
56
+ return nodes;
57
+ }
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.removeColumn = void 0;
4
- const __1 = require("..");
4
+ const table_desc_1 = require("../table-desc");
5
5
  const utils_1 = require("../utils");
6
6
  const removeColumn = (state, dispatch, _, attrs = {}) => {
7
7
  const { tablePos, columnNumber } = attrs;
@@ -12,30 +12,28 @@ const removeColumn = (state, dispatch, _, attrs = {}) => {
12
12
  if (tablePos < 0 || columnNumber < 0)
13
13
  return false;
14
14
  const tableNode = state.doc.nodeAt(tablePos);
15
- if (!tableNode || tableNode.nodeSize <= 2 || !(0, __1.isTableNode)(tableNode))
15
+ if (!tableNode || tableNode.nodeSize <= 2 || !(0, utils_1.isTableNode)(tableNode))
16
16
  return false;
17
- const tableBodyNode = tableNode.firstChild;
18
- if (!tableBodyNode || tableBodyNode.nodeSize <= 2 || !(0, utils_1.isTableBodyNode)(tableBodyNode))
17
+ const tableDesc = table_desc_1.TableDesc.create(tableNode);
18
+ if (!tableDesc)
19
19
  return false;
20
- // there is one column left
21
- if (tableBodyNode.firstChild && tableBodyNode.firstChild.childCount < 2)
20
+ if (!tableDesc ||
21
+ // there is one column left
22
+ tableDesc.cols < 2 ||
23
+ tableDesc.cols <= columnNumber ||
24
+ !tableDesc.isSafeColumn(columnNumber))
22
25
  return false;
23
26
  if (dispatch) {
24
27
  const { tr } = state;
25
- tableBodyNode.forEach((rowNode, rowOffset) => {
26
- if (!(0, utils_1.isTableRowNode)(rowNode))
27
- return;
28
- rowNode.forEach((cellNode, cellOffset, cellIndex) => {
29
- if (!(0, utils_1.isTableCellNode)(cellNode))
30
- return;
31
- if (cellIndex === columnNumber) {
32
- // table -> tbody -> tr -> td
33
- const from = tablePos + 2 + rowOffset + 1 + cellOffset;
34
- const to = from + cellNode.nodeSize;
35
- tr.delete(tr.mapping.map(from), tr.mapping.map(to));
36
- }
37
- });
38
- });
28
+ const pos = tableDesc.getRelativePosForColumn(columnNumber);
29
+ for (const item of pos) {
30
+ if (item.type === 'real') {
31
+ let { from, to } = item;
32
+ from += tablePos;
33
+ to += tablePos;
34
+ tr.delete(tr.mapping.map(from), tr.mapping.map(to));
35
+ }
36
+ }
39
37
  dispatch(tr);
40
38
  }
41
39
  return true;
@@ -5,7 +5,7 @@ const prosemirror_model_1 = require("prosemirror-model");
5
5
  const prosemirror_utils_1 = require("prosemirror-utils");
6
6
  const __1 = require("..");
7
7
  const core_1 = require("../../core");
8
- const utils_1 = require("../utils");
8
+ const table_desc_1 = require("../table-desc");
9
9
  const removeRow = (state, dispatch, _, attrs = {}) => {
10
10
  var _a;
11
11
  const { tablePos, rowNumber } = attrs;
@@ -14,17 +14,20 @@ const removeRow = (state, dispatch, _, attrs = {}) => {
14
14
  const tableNode = (_a = (0, prosemirror_utils_1.findParentNodeClosestToPos)(state.doc.resolve(tablePos + 1), __1.isTableNode)) === null || _a === void 0 ? void 0 : _a.node;
15
15
  if (!tableNode)
16
16
  return false;
17
- const parentRows = (0, prosemirror_utils_1.findChildren)(tableNode, __1.isTableRowNode);
18
- const parentBody = (0, __1.findChildTableBody)(tableNode)[0];
19
- const parentRow = parentRows[rowNumber];
20
- if (!parentRows.length || !parentBody) {
17
+ const tableDesc = table_desc_1.TableDesc.create(tableNode);
18
+ if (!tableDesc || rowNumber >= tableDesc.rows)
21
19
  return false;
22
- }
23
- if ((0, utils_1.findChildTableRows)(parentBody.node).length < 2) {
24
- // there is one row left
20
+ if (!tableDesc.isSafeRow(rowNumber))
25
21
  return false;
22
+ if (dispatch) {
23
+ let { from, to } = tableDesc.getRelativePosForRow(rowNumber);
24
+ from += tablePos;
25
+ to += tablePos;
26
+ dispatch((0, core_1.trackTransactionMetrics)(state.tr.replaceWith(from, to, prosemirror_model_1.Fragment.empty), 'removeRow', {
27
+ rows: tableDesc.rows,
28
+ cols: tableDesc.cols,
29
+ }));
26
30
  }
27
- dispatch === null || dispatch === void 0 ? void 0 : dispatch((0, core_1.trackTransactionMetrics)(state.tr.replaceWith(tablePos + parentRow.pos, tablePos + parentRow.pos + parentRow.node.nodeSize + 1, prosemirror_model_1.Fragment.empty), 'removeRow', { rows: parentRows.length, cols: parentRow.node.childCount }));
28
31
  return true;
29
32
  };
30
33
  exports.removeRow = removeRow;
@@ -0,0 +1,53 @@
1
+ import type { Node } from 'prosemirror-model';
2
+ declare type TableCellRealDesc = {
3
+ type: 'real';
4
+ offset: number;
5
+ node: Node;
6
+ colspan?: number;
7
+ rowspan?: number;
8
+ };
9
+ declare type TableCellVirtualDesc = {
10
+ type: 'virtual';
11
+ /** Index of real cell, that prodeced this virtual cell */
12
+ colspan?: [number, number];
13
+ /** Index of real cell, that prodeced this virtual cell */
14
+ rowspan?: [number, number];
15
+ };
16
+ declare type Pos = {
17
+ from: number;
18
+ to: number;
19
+ };
20
+ export declare type CellPos = ({
21
+ type: 'real';
22
+ } & Pos) | {
23
+ type: 'virtual';
24
+ closestPos: number;
25
+ };
26
+ declare type TableCellDesc = TableCellRealDesc | TableCellVirtualDesc;
27
+ declare type TableRowDesc = {
28
+ node: Node;
29
+ cells: TableCellDesc[];
30
+ offset: number;
31
+ colspan?: boolean;
32
+ rowspan?: boolean;
33
+ };
34
+ export declare class TableDesc {
35
+ readonly rows: number;
36
+ readonly cols: number;
37
+ readonly rowsDesc: readonly TableRowDesc[];
38
+ readonly baseOffset: number;
39
+ private static __cache;
40
+ static create(table: Node): TableDesc | null;
41
+ private constructor();
42
+ rowHasVirtualCells(rowIndex: number): boolean;
43
+ columnHasVirtualCells(columnIndex: number): boolean;
44
+ isSafeColumn(columnIndex: number): boolean;
45
+ isSafeRow(rowIndex: number): boolean;
46
+ getOffsetForRow(rowIndex: number): number;
47
+ getRelativePosForRow(rowIndex: number): Pos;
48
+ getRelativePosForCell(rowIndex: number, columnIndex: number): CellPos;
49
+ getRelativePosForColumn(columnIndex: number): CellPos[];
50
+ getCellNodeType(): import("prosemirror-model").NodeType;
51
+ getRowNodeType(): import("prosemirror-model").NodeType;
52
+ }
53
+ export {};