@gravity-ui/markdown-editor 13.17.1 → 13.18.1

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 (197) hide show
  1. package/README.md +4 -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/Clipboard/clipboard.js +4 -1
  9. package/build/cjs/extensions/markdown/Table/actions/innerActions.d.ts +1 -1
  10. package/build/cjs/extensions/yfm/GPT/ErrorScreen/ErrorScreen.css +18 -0
  11. package/build/cjs/extensions/yfm/GPT/ErrorScreen/ErrorScreen.d.ts +8 -0
  12. package/build/cjs/extensions/yfm/GPT/ErrorScreen/ErrorScreen.js +21 -0
  13. package/build/cjs/extensions/yfm/GPT/ErrorScreen/types.d.ts +14 -0
  14. package/build/cjs/extensions/yfm/GPT/ErrorScreen/types.js +2 -0
  15. package/build/cjs/extensions/yfm/GPT/GptDialog/GptDialog.css +75 -0
  16. package/build/cjs/extensions/yfm/GPT/GptDialog/GptDialog.d.ts +28 -0
  17. package/build/cjs/extensions/yfm/GPT/GptDialog/GptDialog.js +102 -0
  18. package/build/cjs/extensions/yfm/GPT/GptDialog/LoadingScreen/LoadingScreen.css +22 -0
  19. package/build/cjs/extensions/yfm/GPT/GptDialog/LoadingScreen/LoadingScreen.d.ts +3 -0
  20. package/build/cjs/extensions/yfm/GPT/GptDialog/LoadingScreen/LoadingScreen.js +21 -0
  21. package/build/cjs/extensions/yfm/GPT/IconRefuge/IconRefuge.classname.d.ts +1 -0
  22. package/build/cjs/extensions/yfm/GPT/IconRefuge/IconRefuge.classname.js +5 -0
  23. package/build/cjs/extensions/yfm/GPT/IconRefuge/IconRefuge.css +8 -0
  24. package/build/cjs/extensions/yfm/GPT/IconRefuge/IconRefuge.d.ts +14 -0
  25. package/build/cjs/extensions/yfm/GPT/IconRefuge/IconRefuge.js +28 -0
  26. package/build/cjs/extensions/yfm/GPT/IconRefuge/index.d.ts +2 -0
  27. package/build/cjs/extensions/yfm/GPT/IconRefuge/index.js +5 -0
  28. package/build/cjs/extensions/yfm/GPT/PresetList/PresetList.d.ts +9 -0
  29. package/build/cjs/extensions/yfm/GPT/PresetList/PresetList.js +29 -0
  30. package/build/cjs/extensions/yfm/GPT/PresetList/Presetlist.css +6 -0
  31. package/build/cjs/extensions/yfm/GPT/actions.d.ts +2 -0
  32. package/build/cjs/extensions/yfm/GPT/actions.js +14 -0
  33. package/build/cjs/extensions/yfm/GPT/commands.d.ts +2 -0
  34. package/build/cjs/extensions/yfm/GPT/commands.js +13 -0
  35. package/build/cjs/extensions/yfm/GPT/constants.d.ts +13 -0
  36. package/build/cjs/extensions/yfm/GPT/constants.js +15 -0
  37. package/build/cjs/extensions/yfm/GPT/gptExtension/gptExtension.d.ts +13 -0
  38. package/build/cjs/extensions/yfm/GPT/gptExtension/gptExtension.js +18 -0
  39. package/build/cjs/extensions/yfm/GPT/gptExtension/view.css +17 -0
  40. package/build/cjs/extensions/yfm/GPT/gptExtension/view.d.ts +36 -0
  41. package/build/cjs/extensions/yfm/GPT/gptExtension/view.js +167 -0
  42. package/build/cjs/extensions/yfm/GPT/hooks/useGpt.d.ts +27 -0
  43. package/build/cjs/extensions/yfm/GPT/hooks/useGpt.js +155 -0
  44. package/build/cjs/extensions/yfm/GPT/hooks/useGptHotKeys.d.ts +2 -0
  45. package/build/cjs/extensions/yfm/GPT/hooks/useGptHotKeys.js +8 -0
  46. package/build/cjs/extensions/yfm/GPT/hooks/useOverflowingHorizontalItems.d.ts +13 -0
  47. package/build/cjs/extensions/yfm/GPT/hooks/useOverflowingHorizontalItems.js +70 -0
  48. package/build/cjs/extensions/yfm/GPT/hooks/usePresetList.d.ts +14 -0
  49. package/build/cjs/extensions/yfm/GPT/hooks/usePresetList.js +36 -0
  50. package/build/cjs/extensions/yfm/GPT/index.d.ts +2 -0
  51. package/build/cjs/extensions/yfm/GPT/index.js +5 -0
  52. package/build/cjs/extensions/yfm/GPT/plugin.d.ts +13 -0
  53. package/build/cjs/extensions/yfm/GPT/plugin.js +47 -0
  54. package/build/cjs/extensions/yfm/GPT/toolbar.d.ts +3 -0
  55. package/build/cjs/extensions/yfm/GPT/toolbar.js +22 -0
  56. package/build/cjs/extensions/yfm/GPT/utils.d.ts +13 -0
  57. package/build/cjs/extensions/yfm/GPT/utils.js +31 -0
  58. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/actions.d.ts +1 -1
  59. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/actions.js +0 -8
  60. package/build/cjs/extensions/yfm/index.d.ts +1 -0
  61. package/build/cjs/extensions/yfm/index.js +1 -0
  62. package/build/cjs/i18n/gpt/dialog/en.json +16 -0
  63. package/build/cjs/i18n/gpt/dialog/index.d.ts +19 -0
  64. package/build/cjs/i18n/gpt/dialog/index.js +8 -0
  65. package/build/cjs/i18n/gpt/dialog/ru.json +16 -0
  66. package/build/cjs/i18n/gpt/errors/en.json +5 -0
  67. package/build/cjs/i18n/gpt/errors/index.d.ts +8 -0
  68. package/build/cjs/i18n/gpt/errors/index.js +8 -0
  69. package/build/cjs/i18n/gpt/errors/ru.json +5 -0
  70. package/build/cjs/i18n/gpt/extension/en.json +6 -0
  71. package/build/cjs/i18n/gpt/extension/index.d.ts +9 -0
  72. package/build/cjs/i18n/gpt/extension/index.js +8 -0
  73. package/build/cjs/i18n/gpt/extension/ru.json +6 -0
  74. package/build/cjs/i18n/gpt/loading/en.json +3 -0
  75. package/build/cjs/i18n/gpt/loading/index.d.ts +6 -0
  76. package/build/cjs/i18n/gpt/loading/index.js +8 -0
  77. package/build/cjs/i18n/gpt/loading/ru.json +3 -0
  78. package/build/cjs/i18n/menubar/en.json +1 -0
  79. package/build/cjs/i18n/menubar/index.d.ts +2 -1
  80. package/build/cjs/i18n/menubar/ru.json +1 -0
  81. package/build/cjs/icons/GPT.d.ts +2 -0
  82. package/build/cjs/icons/GPT.js +22 -0
  83. package/build/cjs/icons/GPTLoading.d.ts +2 -0
  84. package/build/cjs/icons/GPTLoading.js +12 -0
  85. package/build/cjs/icons/index.d.ts +3 -1
  86. package/build/cjs/icons/index.js +5 -1
  87. package/build/cjs/react-utils/useAutoFocus.d.ts +1 -1
  88. package/build/cjs/react-utils/useAutoFocus.js +2 -2
  89. package/build/cjs/react-utils/useNodeResizing.js +7 -2
  90. package/build/cjs/table-utils/commands/appendColumn.js +42 -33
  91. package/build/cjs/table-utils/commands/appendRow.js +40 -22
  92. package/build/cjs/table-utils/commands/removeColumn.js +18 -20
  93. package/build/cjs/table-utils/commands/removeRow.js +12 -9
  94. package/build/cjs/table-utils/table-desc.d.ts +53 -0
  95. package/build/cjs/table-utils/table-desc.js +149 -0
  96. package/build/cjs/table-utils/utils.d.ts +1 -1
  97. package/build/cjs/table-utils/utils.js +19 -12
  98. package/build/cjs/version.js +1 -1
  99. package/build/esm/bundle/config/action-names.d.ts +1 -1
  100. package/build/esm/bundle/config/action-names.js +1 -0
  101. package/build/esm/bundle/config/icons.d.ts +1 -1
  102. package/build/esm/bundle/config/icons.js +2 -0
  103. package/build/esm/bundle/config/wysiwyg.d.ts +1 -0
  104. package/build/esm/bundle/config/wysiwyg.js +12 -0
  105. package/build/esm/extensions/behavior/Clipboard/clipboard.js +4 -1
  106. package/build/esm/extensions/markdown/Table/actions/innerActions.d.ts +1 -1
  107. package/build/esm/extensions/yfm/GPT/ErrorScreen/ErrorScreen.css +18 -0
  108. package/build/esm/extensions/yfm/GPT/ErrorScreen/ErrorScreen.d.ts +9 -0
  109. package/build/esm/extensions/yfm/GPT/ErrorScreen/ErrorScreen.js +17 -0
  110. package/build/esm/extensions/yfm/GPT/ErrorScreen/types.d.ts +14 -0
  111. package/build/esm/extensions/yfm/GPT/ErrorScreen/types.js +1 -0
  112. package/build/esm/extensions/yfm/GPT/GptDialog/GptDialog.css +75 -0
  113. package/build/esm/extensions/yfm/GPT/GptDialog/GptDialog.d.ts +29 -0
  114. package/build/esm/extensions/yfm/GPT/GptDialog/GptDialog.js +98 -0
  115. package/build/esm/extensions/yfm/GPT/GptDialog/LoadingScreen/LoadingScreen.css +22 -0
  116. package/build/esm/extensions/yfm/GPT/GptDialog/LoadingScreen/LoadingScreen.d.ts +4 -0
  117. package/build/esm/extensions/yfm/GPT/GptDialog/LoadingScreen/LoadingScreen.js +17 -0
  118. package/build/esm/extensions/yfm/GPT/IconRefuge/IconRefuge.classname.d.ts +1 -0
  119. package/build/esm/extensions/yfm/GPT/IconRefuge/IconRefuge.classname.js +2 -0
  120. package/build/esm/extensions/yfm/GPT/IconRefuge/IconRefuge.css +8 -0
  121. package/build/esm/extensions/yfm/GPT/IconRefuge/IconRefuge.d.ts +15 -0
  122. package/build/esm/extensions/yfm/GPT/IconRefuge/IconRefuge.js +25 -0
  123. package/build/esm/extensions/yfm/GPT/IconRefuge/index.d.ts +2 -0
  124. package/build/esm/extensions/yfm/GPT/IconRefuge/index.js +1 -0
  125. package/build/esm/extensions/yfm/GPT/PresetList/PresetList.d.ts +10 -0
  126. package/build/esm/extensions/yfm/GPT/PresetList/PresetList.js +25 -0
  127. package/build/esm/extensions/yfm/GPT/PresetList/Presetlist.css +6 -0
  128. package/build/esm/extensions/yfm/GPT/actions.d.ts +2 -0
  129. package/build/esm/extensions/yfm/GPT/actions.js +10 -0
  130. package/build/esm/extensions/yfm/GPT/commands.d.ts +2 -0
  131. package/build/esm/extensions/yfm/GPT/commands.js +9 -0
  132. package/build/esm/extensions/yfm/GPT/constants.d.ts +13 -0
  133. package/build/esm/extensions/yfm/GPT/constants.js +12 -0
  134. package/build/esm/extensions/yfm/GPT/gptExtension/gptExtension.d.ts +13 -0
  135. package/build/esm/extensions/yfm/GPT/gptExtension/gptExtension.js +14 -0
  136. package/build/esm/extensions/yfm/GPT/gptExtension/view.css +17 -0
  137. package/build/esm/extensions/yfm/GPT/gptExtension/view.d.ts +37 -0
  138. package/build/esm/extensions/yfm/GPT/gptExtension/view.js +163 -0
  139. package/build/esm/extensions/yfm/GPT/hooks/useGpt.d.ts +27 -0
  140. package/build/esm/extensions/yfm/GPT/hooks/useGpt.js +151 -0
  141. package/build/esm/extensions/yfm/GPT/hooks/useGptHotKeys.d.ts +2 -0
  142. package/build/esm/extensions/yfm/GPT/hooks/useGptHotKeys.js +4 -0
  143. package/build/esm/extensions/yfm/GPT/hooks/useOverflowingHorizontalItems.d.ts +13 -0
  144. package/build/esm/extensions/yfm/GPT/hooks/useOverflowingHorizontalItems.js +65 -0
  145. package/build/esm/extensions/yfm/GPT/hooks/usePresetList.d.ts +14 -0
  146. package/build/esm/extensions/yfm/GPT/hooks/usePresetList.js +32 -0
  147. package/build/esm/extensions/yfm/GPT/index.d.ts +2 -0
  148. package/build/esm/extensions/yfm/GPT/index.js +2 -0
  149. package/build/esm/extensions/yfm/GPT/plugin.d.ts +13 -0
  150. package/build/esm/extensions/yfm/GPT/plugin.js +43 -0
  151. package/build/esm/extensions/yfm/GPT/toolbar.d.ts +3 -0
  152. package/build/esm/extensions/yfm/GPT/toolbar.js +18 -0
  153. package/build/esm/extensions/yfm/GPT/utils.d.ts +13 -0
  154. package/build/esm/extensions/yfm/GPT/utils.js +23 -0
  155. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/actions.d.ts +1 -1
  156. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/actions.js +1 -9
  157. package/build/esm/extensions/yfm/index.d.ts +1 -0
  158. package/build/esm/extensions/yfm/index.js +1 -0
  159. package/build/esm/i18n/gpt/dialog/en.json +16 -0
  160. package/build/esm/i18n/gpt/dialog/index.d.ts +19 -0
  161. package/build/esm/i18n/gpt/dialog/index.js +4 -0
  162. package/build/esm/i18n/gpt/dialog/ru.json +16 -0
  163. package/build/esm/i18n/gpt/errors/en.json +5 -0
  164. package/build/esm/i18n/gpt/errors/index.d.ts +8 -0
  165. package/build/esm/i18n/gpt/errors/index.js +4 -0
  166. package/build/esm/i18n/gpt/errors/ru.json +5 -0
  167. package/build/esm/i18n/gpt/extension/en.json +6 -0
  168. package/build/esm/i18n/gpt/extension/index.d.ts +9 -0
  169. package/build/esm/i18n/gpt/extension/index.js +4 -0
  170. package/build/esm/i18n/gpt/extension/ru.json +6 -0
  171. package/build/esm/i18n/gpt/loading/en.json +3 -0
  172. package/build/esm/i18n/gpt/loading/index.d.ts +6 -0
  173. package/build/esm/i18n/gpt/loading/index.js +4 -0
  174. package/build/esm/i18n/gpt/loading/ru.json +3 -0
  175. package/build/esm/i18n/menubar/en.json +1 -0
  176. package/build/esm/i18n/menubar/index.d.ts +2 -1
  177. package/build/esm/i18n/menubar/ru.json +1 -0
  178. package/build/esm/icons/GPT.d.ts +2 -0
  179. package/build/esm/icons/GPT.js +19 -0
  180. package/build/esm/icons/GPTLoading.d.ts +2 -0
  181. package/build/esm/icons/GPTLoading.js +9 -0
  182. package/build/esm/icons/index.d.ts +3 -1
  183. package/build/esm/icons/index.js +3 -1
  184. package/build/esm/react-utils/useAutoFocus.d.ts +1 -1
  185. package/build/esm/react-utils/useAutoFocus.js +2 -2
  186. package/build/esm/react-utils/useNodeResizing.js +7 -2
  187. package/build/esm/table-utils/commands/appendColumn.js +44 -35
  188. package/build/esm/table-utils/commands/appendRow.js +42 -24
  189. package/build/esm/table-utils/commands/removeColumn.js +18 -20
  190. package/build/esm/table-utils/commands/removeRow.js +14 -11
  191. package/build/esm/table-utils/table-desc.d.ts +53 -0
  192. package/build/esm/table-utils/table-desc.js +144 -0
  193. package/build/esm/table-utils/utils.d.ts +1 -1
  194. package/build/esm/table-utils/utils.js +18 -12
  195. package/build/esm/version.js +1 -1
  196. package/build/styles.css +146 -0
  197. package/package.json +2 -1
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.gptWidgetPlugin = exports.pluginKey = void 0;
4
+ const prosemirror_state_1 = require("prosemirror-state");
5
+ const prosemirror_view_1 = require("prosemirror-view");
6
+ const constants_1 = require("./constants");
7
+ const view_1 = require("./gptExtension/view");
8
+ const key = new prosemirror_state_1.PluginKey('gpt-widget');
9
+ exports.pluginKey = key;
10
+ const gptWidgetPlugin = (params) => {
11
+ return new prosemirror_state_1.Plugin({
12
+ key,
13
+ state: {
14
+ init: () => prosemirror_view_1.DecorationSet.empty,
15
+ apply: (tr, decos) => {
16
+ const meta = tr.getMeta(key);
17
+ const paramsGpt = params;
18
+ if ((meta === null || meta === void 0 ? void 0 : meta.action) === 'show') {
19
+ if (meta.to === meta.from) {
20
+ const spanElem = document.createElement('span');
21
+ spanElem.className = constants_1.WIDGET_DECO_CLASS_NAME;
22
+ spanElem.textContent = ' ';
23
+ paramsGpt.disablePromptPresets = true;
24
+ return prosemirror_view_1.DecorationSet.create(tr.doc, [
25
+ prosemirror_view_1.Decoration.widget(meta.from, spanElem, {
26
+ [constants_1.WIDGET_DECO_SPEC_FLAG]: true,
27
+ }),
28
+ ]);
29
+ }
30
+ return prosemirror_view_1.DecorationSet.create(tr.doc, [
31
+ prosemirror_view_1.Decoration.inline(meta.from, meta.to, { nodeName: 'span', class: constants_1.WIDGET_DECO_CLASS_NAME }, { [constants_1.WIDGET_DECO_SPEC_FLAG]: true }),
32
+ ]);
33
+ }
34
+ if ((meta === null || meta === void 0 ? void 0 : meta.action) === 'hide') {
35
+ paramsGpt.disablePromptPresets = false;
36
+ return prosemirror_view_1.DecorationSet.empty;
37
+ }
38
+ return decos.map(tr.mapping, tr.doc);
39
+ },
40
+ },
41
+ props: {
42
+ decorations: (state) => key.getState(state),
43
+ },
44
+ view: (view) => new view_1.GptWidgetDecoView(view, params),
45
+ });
46
+ };
47
+ exports.gptWidgetPlugin = gptWidgetPlugin;
@@ -0,0 +1,3 @@
1
+ import { type WToolbarSingleItemData } from '../../../toolbar';
2
+ export declare const cnGptButton: import("@bem-react/classname").ClassNameFormatter;
3
+ export declare const wGptToolbarItem: WToolbarSingleItemData;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.wGptToolbarItem = exports.cnGptButton = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const classname_1 = require("@bem-react/classname");
6
+ const extension_1 = require("../../../i18n/gpt/extension");
7
+ const GPT_1 = tslib_1.__importDefault(require("../../../icons/GPT"));
8
+ const toolbar_1 = require("../../../toolbar");
9
+ const constants_1 = require("./constants");
10
+ exports.cnGptButton = (0, classname_1.cn)('gpt-button');
11
+ exports.wGptToolbarItem = {
12
+ type: toolbar_1.ToolbarDataType.SingleButton,
13
+ id: 'gpt',
14
+ title: () => `${(0, extension_1.i18n)('help-with-text')}`,
15
+ hotkey: constants_1.gptHotKeys.openGptKeyTooltip,
16
+ icon: { data: GPT_1.default },
17
+ disabledPopoverVisible: false,
18
+ exec: (actionsStorage) => actionsStorage.actions.addGptWidget.run({}),
19
+ isActive: (actionsStorage) => actionsStorage.actions.addGptWidget.isActive(),
20
+ isEnable: (actionsStorage) => actionsStorage.actions.addGptWidget.isEnable(),
21
+ className: (0, exports.cnGptButton)(),
22
+ };
@@ -0,0 +1,13 @@
1
+ import type React from 'react';
2
+ import { GptDialogProps } from './GptDialog/GptDialog';
3
+ declare type CombinedKeyboardEvent = KeyboardEvent | React.KeyboardEvent;
4
+ export declare function getAlertGptInfo(gptAlert: GptDialogProps['gptAlertProps']): {
5
+ alertMessage: string;
6
+ alertTheme: import("@gravity-ui/uikit/build/esm/components/Alert/types").AlertTheme;
7
+ alertClassName: string | undefined;
8
+ };
9
+ export declare function getDisableReplaceButtonText(disablePromptPresets?: boolean): string;
10
+ export declare function getInputPlaceHolder(disablePromptPresets?: boolean, disabledPromptPlaceholder?: string, customPromptPlaceholder?: string): string | undefined;
11
+ export declare const isEnter: (event: CombinedKeyboardEvent) => boolean;
12
+ export declare function focusWithoutScroll(element?: HTMLElement | null): void;
13
+ export {};
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.focusWithoutScroll = exports.isEnter = exports.getInputPlaceHolder = exports.getDisableReplaceButtonText = exports.getAlertGptInfo = void 0;
4
+ const dialog_1 = require("../../../i18n/gpt/dialog");
5
+ function getAlertGptInfo(gptAlert) {
6
+ return {
7
+ alertMessage: (gptAlert === null || gptAlert === void 0 ? void 0 : gptAlert.message) || (0, dialog_1.i18n)('alert-gpt-presets-info'),
8
+ alertTheme: (gptAlert === null || gptAlert === void 0 ? void 0 : gptAlert.theme) || 'info',
9
+ alertClassName: gptAlert === null || gptAlert === void 0 ? void 0 : gptAlert.className,
10
+ };
11
+ }
12
+ exports.getAlertGptInfo = getAlertGptInfo;
13
+ function getDisableReplaceButtonText(disablePromptPresets) {
14
+ return disablePromptPresets ? (0, dialog_1.i18n)(`replace-disabled`) : (0, dialog_1.i18n)(`replace`);
15
+ }
16
+ exports.getDisableReplaceButtonText = getDisableReplaceButtonText;
17
+ function getInputPlaceHolder(disablePromptPresets, disabledPromptPlaceholder, customPromptPlaceholder) {
18
+ return disablePromptPresets ? disabledPromptPlaceholder : customPromptPlaceholder;
19
+ }
20
+ exports.getInputPlaceHolder = getInputPlaceHolder;
21
+ const isEnter = (event) => event.code === 'Enter' || event.code === 'NumpadEnter';
22
+ exports.isEnter = isEnter;
23
+ function focusWithoutScroll(element) {
24
+ const x = window.scrollX;
25
+ const y = window.scrollY;
26
+ element === null || element === void 0 ? void 0 : element.focus({
27
+ preventScroll: true,
28
+ });
29
+ window.scrollTo(x, y);
30
+ }
31
+ exports.focusWithoutScroll = focusWithoutScroll;
@@ -1 +1 @@
1
- export declare const controlActions: Record<"deleteTable" | "addRow" | "deleteRow" | "addColumn" | "deleteColumn" | "appendColumn" | "appendRow", import("../../../../../core").ActionSpec>;
1
+ export declare const controlActions: Record<"deleteTable" | "deleteRow" | "deleteColumn" | "appendColumn" | "appendRow", import("../../../../../core").ActionSpec>;
@@ -23,18 +23,10 @@ const removeYfmTable = (state, dispatch, _, attrs) => {
23
23
  return true;
24
24
  };
25
25
  exports.controlActions = (0, actions_1.defineActions)({
26
- addRow: {
27
- isEnable: table_utils_1.addRowAfter,
28
- run: table_utils_1.addRowAfter,
29
- },
30
26
  deleteRow: {
31
27
  isEnable: table_utils_1.removeRow,
32
28
  run: table_utils_1.removeRow,
33
29
  },
34
- addColumn: {
35
- isEnable: table_utils_1.addColumnAfter,
36
- run: table_utils_1.addColumnAfter,
37
- },
38
30
  deleteColumn: {
39
31
  isEnable: table_utils_1.removeColumn,
40
32
  run: table_utils_1.removeColumn,
@@ -11,3 +11,4 @@ export * from './YfmHeading';
11
11
  export * from './YfmNote';
12
12
  export * from './YfmTable';
13
13
  export * from './YfmTabs';
14
+ export * from './GPT';
@@ -14,3 +14,4 @@ tslib_1.__exportStar(require("./YfmHeading"), exports);
14
14
  tslib_1.__exportStar(require("./YfmNote"), exports);
15
15
  tslib_1.__exportStar(require("./YfmTable"), exports);
16
16
  tslib_1.__exportStar(require("./YfmTabs"), exports);
17
+ tslib_1.__exportStar(require("./GPT"), exports);
@@ -0,0 +1,16 @@
1
+ {
2
+ "answer-title": "What do you want to do with the response?",
3
+ "close-button": "Close",
4
+ "dislike": "Bad response",
5
+ "error": "An error occurred",
6
+ "feedback-message": "Thanks for your feedback!",
7
+ "fresh-start-button": "Start again",
8
+ "like": "Good response",
9
+ "more": "More",
10
+ "only-presets-title": "Help with text",
11
+ "refetch": "Try again",
12
+ "replace": "Replace the selected text",
13
+ "replace-disabled": "Insert text",
14
+ "try-again": "Try again",
15
+ "alert-gpt-presets-info": "Highlight text to see Yandex GPT presets"
16
+ }
@@ -0,0 +1,19 @@
1
+ export declare const i18n: <G extends "error" | "replace" | "answer-title" | "close-button" | "dislike" | "feedback-message" | "fresh-start-button" | "like" | "more" | "only-presets-title" | "refetch" | "replace-disabled" | "try-again" | "alert-gpt-presets-info", S extends string>(key: G | (string extends S ? S : never), params?: {
2
+ [key: string]: any;
3
+ } | undefined) => S extends G ? {
4
+ "answer-title": string;
5
+ "close-button": string;
6
+ dislike: string;
7
+ error: string;
8
+ "feedback-message": string;
9
+ "fresh-start-button": string;
10
+ like: string;
11
+ more: string;
12
+ "only-presets-title": string;
13
+ refetch: string;
14
+ replace: string;
15
+ "replace-disabled": string;
16
+ "try-again": string;
17
+ "alert-gpt-presets-info": string;
18
+ }[G] : string;
19
+ export declare type I18nKey = Parameters<typeof i18n>[0];
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.i18n = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const i18n_1 = require("../../i18n");
6
+ const en_json_1 = tslib_1.__importDefault(require("./en.json"));
7
+ const ru_json_1 = tslib_1.__importDefault(require("./ru.json"));
8
+ exports.i18n = (0, i18n_1.registerKeyset)('gpt-dialog', { en: en_json_1.default, ru: ru_json_1.default });
@@ -0,0 +1,16 @@
1
+ {
2
+ "answer-title": "Что вы хотите сделать с ответом?",
3
+ "close-button": "Закрыть",
4
+ "dislike": "Плохой ответ",
5
+ "error": "Произошла ошибка",
6
+ "feedback-message": "Ваш голос учтён!",
7
+ "fresh-start-button": "Начать сначала",
8
+ "like": "Хороший ответ",
9
+ "more": "Ещё",
10
+ "only-presets-title": "Помощь с текстом",
11
+ "refetch": "Попробовать ещё",
12
+ "replace": "Заменить выделенный текст",
13
+ "replace-disabled": "Вставить текст",
14
+ "try-again": "Иначе",
15
+ "alert-gpt-presets-info": "Выделите текст, чтобы увидеть пресеты Yandex GPT"
16
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "error-text": "An error occurred while generating a reply, please retry the request",
3
+ "retry-button": "Try again",
4
+ "start-again-button": "To the beginning"
5
+ }
@@ -0,0 +1,8 @@
1
+ export declare const i18n: <G extends "error-text" | "retry-button" | "start-again-button", S extends string>(key: G | (string extends S ? S : never), params?: {
2
+ [key: string]: any;
3
+ } | undefined) => S extends G ? {
4
+ "error-text": string;
5
+ "retry-button": string;
6
+ "start-again-button": string;
7
+ }[G] : string;
8
+ export declare type I18nKey = Parameters<typeof i18n>[0];
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.i18n = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const i18n_1 = require("../../i18n");
6
+ const en_json_1 = tslib_1.__importDefault(require("./en.json"));
7
+ const ru_json_1 = tslib_1.__importDefault(require("./ru.json"));
8
+ exports.i18n = (0, i18n_1.registerKeyset)('gpt-dialog-error-screen', { en: en_json_1.default, ru: ru_json_1.default });
@@ -0,0 +1,5 @@
1
+ {
2
+ "error-text": "Ошибка при генерации ответа, попробуйте повторить запрос",
3
+ "retry-button": "Повторить",
4
+ "start-again-button": "В начало"
5
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "confirm-cancel": "Cancel",
3
+ "confirm-ok": "Close",
4
+ "confirm-title": "Do you want to close the GPT editor?",
5
+ "help-with-text": "Help with text"
6
+ }
@@ -0,0 +1,9 @@
1
+ export declare const i18n: <G extends "confirm-cancel" | "confirm-ok" | "confirm-title" | "help-with-text", S extends string>(key: G | (string extends S ? S : never), params?: {
2
+ [key: string]: any;
3
+ } | undefined) => S extends G ? {
4
+ "confirm-cancel": string;
5
+ "confirm-ok": string;
6
+ "confirm-title": string;
7
+ "help-with-text": string;
8
+ }[G] : string;
9
+ export declare type I18nKey = Parameters<typeof i18n>[0];
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.i18n = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const i18n_1 = require("../../i18n");
6
+ const en_json_1 = tslib_1.__importDefault(require("./en.json"));
7
+ const ru_json_1 = tslib_1.__importDefault(require("./ru.json"));
8
+ exports.i18n = (0, i18n_1.registerKeyset)('gpt', { en: en_json_1.default, ru: ru_json_1.default });
@@ -0,0 +1,6 @@
1
+ {
2
+ "confirm-cancel": "Отменить",
3
+ "confirm-ok": "Закрыть",
4
+ "confirm-title": "Хотите закрыть помощника GPT?",
5
+ "help-with-text": "Помощь с текстом"
6
+ }
@@ -0,0 +1,3 @@
1
+ {
2
+ "loading-text": "GPT is generating a response..."
3
+ }
@@ -0,0 +1,6 @@
1
+ export declare const i18n: <G extends "loading-text", S extends string>(key: G | (string extends S ? S : never), params?: {
2
+ [key: string]: any;
3
+ } | undefined) => S extends G ? {
4
+ "loading-text": string;
5
+ }[G] : string;
6
+ export declare type I18nKey = Parameters<typeof i18n>[0];
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.i18n = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const i18n_1 = require("../../i18n");
6
+ const en_json_1 = tslib_1.__importDefault(require("./en.json"));
7
+ const ru_json_1 = tslib_1.__importDefault(require("./ru.json"));
8
+ exports.i18n = (0, i18n_1.registerKeyset)('gpt-dialog-loading-screen', { en: en_json_1.default, ru: ru_json_1.default });
@@ -0,0 +1,3 @@
1
+ {
2
+ "loading-text": "GPT генерирует ответ..."
3
+ }
@@ -19,6 +19,7 @@
19
19
  "file": "File",
20
20
  "folding-heading": "Collapsed section",
21
21
  "folding-heading_hint": "The text under the heading can be collapsed or expanded",
22
+ "gpt": "GPT widget",
22
23
  "heading": "Heading",
23
24
  "heading1": "Heading 1",
24
25
  "heading2": "Heading 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",
@@ -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;
@@ -51,9 +51,14 @@ const useNodeResizing = ({ width, height, onResize, ref, delay = RESIZE_DELAY, t
51
51
  const newHeight = (startHeight / startWidth) * newWidth;
52
52
  setCurrentWidth(newWidth);
53
53
  setCurrentHeight(newHeight);
54
+ // If neither width nor height are provided, the width is set automatically.
55
+ const shouldSetWidth = !initialWidth &&
56
+ initialWidth !== 0 &&
57
+ !(initialWidth === null && initialHeight === null);
58
+ const shouldSetHeight = !initialHeight && initialHeight !== 0;
54
59
  onResize === null || onResize === void 0 ? void 0 : onResize({
55
- width: !initialWidth && initialWidth !== 0 ? undefined : newWidth,
56
- height: !initialHeight && initialHeight !== 0 ? undefined : newHeight,
60
+ width: shouldSetWidth ? undefined : newWidth,
61
+ height: shouldSetHeight ? undefined : newHeight,
57
62
  });
58
63
  }
59
64
  });
@@ -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
+ }