@gravity-ui/markdown-editor 13.23.0 → 13.25.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 (177) hide show
  1. package/README.md +2 -0
  2. package/build/cjs/bundle/MarkdownEditorView.css +1 -0
  3. package/build/cjs/bundle/MarkdownEditorView.d.ts +4 -0
  4. package/build/cjs/bundle/MarkdownEditorView.js +28 -16
  5. package/build/cjs/bundle/config/action-names.d.ts +1 -1
  6. package/build/cjs/bundle/config/wysiwyg.js +1 -2
  7. package/build/cjs/bundle/settings/index.d.ts +1 -0
  8. package/build/cjs/bundle/settings/index.js +7 -6
  9. package/build/cjs/extensions/additional/GPT/MarkupGpt/commands.d.ts +4 -0
  10. package/build/cjs/extensions/additional/GPT/MarkupGpt/commands.js +18 -0
  11. package/build/cjs/extensions/additional/GPT/MarkupGpt/effects.d.ts +2 -0
  12. package/build/cjs/extensions/additional/GPT/MarkupGpt/effects.js +6 -0
  13. package/build/cjs/extensions/additional/GPT/MarkupGpt/index.d.ts +4 -0
  14. package/build/cjs/extensions/additional/GPT/MarkupGpt/index.js +24 -0
  15. package/build/cjs/extensions/additional/GPT/MarkupGpt/plugin.d.ts +22 -0
  16. package/build/cjs/extensions/additional/GPT/MarkupGpt/plugin.js +121 -0
  17. package/build/cjs/extensions/additional/GPT/MarkupGpt/popup.d.ts +11 -0
  18. package/build/cjs/extensions/additional/GPT/MarkupGpt/popup.js +14 -0
  19. package/build/cjs/extensions/additional/GPT/MarkupGpt/toolbar.d.ts +2 -0
  20. package/build/cjs/extensions/additional/GPT/MarkupGpt/toolbar.js +18 -0
  21. package/build/cjs/extensions/{yfm → additional}/GPT/index.d.ts +1 -0
  22. package/build/cjs/extensions/{yfm → additional}/GPT/index.js +1 -0
  23. package/build/cjs/extensions/{yfm → additional}/GPT/plugin.js +6 -0
  24. package/build/cjs/extensions/{yfm → additional}/GPT/utils.d.ts +2 -0
  25. package/build/cjs/extensions/{yfm → additional}/GPT/utils.js +12 -1
  26. package/build/cjs/extensions/additional/index.d.ts +1 -0
  27. package/build/cjs/extensions/additional/index.js +4 -0
  28. package/build/cjs/extensions/behavior/SelectionContext/index.js +2 -1
  29. package/build/cjs/extensions/index.d.ts +1 -0
  30. package/build/cjs/extensions/index.js +1 -0
  31. package/build/cjs/extensions/yfm/Math/commands.d.ts +6 -2
  32. package/build/cjs/extensions/yfm/Math/commands.js +33 -7
  33. package/build/cjs/extensions/yfm/Math/index.js +1 -1
  34. package/build/cjs/extensions/yfm/Math/view-and-edit.js +4 -4
  35. package/build/cjs/extensions/yfm/YfmCut/YfmCutSpecs/schema.js +6 -6
  36. package/build/cjs/extensions/yfm/YfmCut/actions/toYfmCut.js +1 -1
  37. package/build/cjs/extensions/yfm/YfmCut/index.css +12 -0
  38. package/build/cjs/extensions/yfm/YfmCut/nodeviews/yfm-cut-title.js +2 -1
  39. package/build/cjs/extensions/yfm/YfmCut/plugins/auto-open.js +3 -1
  40. package/build/cjs/extensions/yfm/index.d.ts +1 -1
  41. package/build/cjs/extensions/yfm/index.js +1 -1
  42. package/build/cjs/i18n/gpt/dialog/en.json +1 -1
  43. package/build/cjs/i18n/gpt/dialog/ru.json +1 -1
  44. package/build/cjs/i18n/menubar/index.d.ts +1 -1
  45. package/build/cjs/version.js +1 -1
  46. package/build/esm/bundle/MarkdownEditorView.css +1 -0
  47. package/build/esm/bundle/MarkdownEditorView.d.ts +4 -0
  48. package/build/esm/bundle/MarkdownEditorView.js +28 -16
  49. package/build/esm/bundle/config/action-names.d.ts +1 -1
  50. package/build/esm/bundle/config/wysiwyg.js +1 -2
  51. package/build/esm/bundle/settings/index.d.ts +1 -0
  52. package/build/esm/bundle/settings/index.js +7 -6
  53. package/build/esm/extensions/additional/GPT/MarkupGpt/commands.d.ts +4 -0
  54. package/build/esm/extensions/additional/GPT/MarkupGpt/commands.js +12 -0
  55. package/build/esm/extensions/additional/GPT/MarkupGpt/effects.d.ts +2 -0
  56. package/build/esm/extensions/additional/GPT/MarkupGpt/effects.js +3 -0
  57. package/build/esm/extensions/additional/GPT/MarkupGpt/index.d.ts +4 -0
  58. package/build/esm/extensions/additional/GPT/MarkupGpt/index.js +17 -0
  59. package/build/esm/extensions/additional/GPT/MarkupGpt/plugin.d.ts +22 -0
  60. package/build/esm/extensions/additional/GPT/MarkupGpt/plugin.js +117 -0
  61. package/build/esm/extensions/additional/GPT/MarkupGpt/popup.d.ts +11 -0
  62. package/build/esm/extensions/additional/GPT/MarkupGpt/popup.js +9 -0
  63. package/build/esm/extensions/additional/GPT/MarkupGpt/toolbar.d.ts +2 -0
  64. package/build/esm/extensions/additional/GPT/MarkupGpt/toolbar.js +15 -0
  65. package/build/esm/extensions/{yfm → additional}/GPT/index.d.ts +1 -0
  66. package/build/esm/extensions/{yfm → additional}/GPT/index.js +1 -0
  67. package/build/esm/extensions/{yfm → additional}/GPT/plugin.js +6 -0
  68. package/build/esm/extensions/{yfm → additional}/GPT/utils.d.ts +2 -0
  69. package/build/esm/extensions/{yfm → additional}/GPT/utils.js +10 -0
  70. package/build/esm/extensions/additional/index.d.ts +1 -0
  71. package/build/esm/extensions/additional/index.js +1 -0
  72. package/build/esm/extensions/behavior/SelectionContext/index.js +3 -2
  73. package/build/esm/extensions/index.d.ts +1 -0
  74. package/build/esm/extensions/index.js +1 -0
  75. package/build/esm/extensions/yfm/Math/commands.d.ts +6 -2
  76. package/build/esm/extensions/yfm/Math/commands.js +30 -5
  77. package/build/esm/extensions/yfm/Math/index.js +2 -2
  78. package/build/esm/extensions/yfm/Math/view-and-edit.js +6 -5
  79. package/build/esm/extensions/yfm/YfmCut/YfmCutSpecs/schema.js +6 -6
  80. package/build/esm/extensions/yfm/YfmCut/actions/toYfmCut.js +1 -1
  81. package/build/esm/extensions/yfm/YfmCut/index.css +12 -0
  82. package/build/esm/extensions/yfm/YfmCut/nodeviews/yfm-cut-title.js +2 -1
  83. package/build/esm/extensions/yfm/YfmCut/plugins/auto-open.js +3 -1
  84. package/build/esm/extensions/yfm/index.d.ts +1 -1
  85. package/build/esm/extensions/yfm/index.js +1 -1
  86. package/build/esm/i18n/gpt/dialog/en.json +1 -1
  87. package/build/esm/i18n/gpt/dialog/ru.json +1 -1
  88. package/build/esm/i18n/menubar/index.d.ts +1 -1
  89. package/build/esm/version.js +1 -1
  90. package/build/styles.css +141 -128
  91. package/package.json +3 -3
  92. /package/build/cjs/extensions/{yfm → additional}/GPT/ErrorScreen/ErrorScreen.css +0 -0
  93. /package/build/cjs/extensions/{yfm → additional}/GPT/ErrorScreen/ErrorScreen.d.ts +0 -0
  94. /package/build/cjs/extensions/{yfm → additional}/GPT/ErrorScreen/ErrorScreen.js +0 -0
  95. /package/build/cjs/extensions/{yfm → additional}/GPT/ErrorScreen/types.d.ts +0 -0
  96. /package/build/cjs/extensions/{yfm → additional}/GPT/ErrorScreen/types.js +0 -0
  97. /package/build/cjs/extensions/{yfm → additional}/GPT/GptDialog/GptDialog.css +0 -0
  98. /package/build/cjs/extensions/{yfm → additional}/GPT/GptDialog/GptDialog.d.ts +0 -0
  99. /package/build/cjs/extensions/{yfm → additional}/GPT/GptDialog/GptDialog.js +0 -0
  100. /package/build/cjs/extensions/{yfm → additional}/GPT/GptDialog/LoadingScreen/LoadingScreen.css +0 -0
  101. /package/build/cjs/extensions/{yfm → additional}/GPT/GptDialog/LoadingScreen/LoadingScreen.d.ts +0 -0
  102. /package/build/cjs/extensions/{yfm → additional}/GPT/GptDialog/LoadingScreen/LoadingScreen.js +0 -0
  103. /package/build/cjs/extensions/{yfm → additional}/GPT/IconRefuge/IconRefuge.classname.d.ts +0 -0
  104. /package/build/cjs/extensions/{yfm → additional}/GPT/IconRefuge/IconRefuge.classname.js +0 -0
  105. /package/build/cjs/extensions/{yfm → additional}/GPT/IconRefuge/IconRefuge.css +0 -0
  106. /package/build/cjs/extensions/{yfm → additional}/GPT/IconRefuge/IconRefuge.d.ts +0 -0
  107. /package/build/cjs/extensions/{yfm → additional}/GPT/IconRefuge/IconRefuge.js +0 -0
  108. /package/build/cjs/extensions/{yfm → additional}/GPT/IconRefuge/index.d.ts +0 -0
  109. /package/build/cjs/extensions/{yfm → additional}/GPT/IconRefuge/index.js +0 -0
  110. /package/build/cjs/extensions/{yfm → additional}/GPT/PresetList/PresetList.d.ts +0 -0
  111. /package/build/cjs/extensions/{yfm → additional}/GPT/PresetList/PresetList.js +0 -0
  112. /package/build/cjs/extensions/{yfm → additional}/GPT/PresetList/Presetlist.css +0 -0
  113. /package/build/cjs/extensions/{yfm → additional}/GPT/actions.d.ts +0 -0
  114. /package/build/cjs/extensions/{yfm → additional}/GPT/actions.js +0 -0
  115. /package/build/cjs/extensions/{yfm → additional}/GPT/commands.d.ts +0 -0
  116. /package/build/cjs/extensions/{yfm → additional}/GPT/commands.js +0 -0
  117. /package/build/cjs/extensions/{yfm → additional}/GPT/constants.d.ts +0 -0
  118. /package/build/cjs/extensions/{yfm → additional}/GPT/constants.js +0 -0
  119. /package/build/cjs/extensions/{yfm → additional}/GPT/gptExtension/gptExtension.d.ts +0 -0
  120. /package/build/cjs/extensions/{yfm → additional}/GPT/gptExtension/gptExtension.js +0 -0
  121. /package/build/cjs/extensions/{yfm → additional}/GPT/gptExtension/view.css +0 -0
  122. /package/build/cjs/extensions/{yfm → additional}/GPT/gptExtension/view.d.ts +0 -0
  123. /package/build/cjs/extensions/{yfm → additional}/GPT/gptExtension/view.js +0 -0
  124. /package/build/cjs/extensions/{yfm → additional}/GPT/hooks/useGpt.d.ts +0 -0
  125. /package/build/cjs/extensions/{yfm → additional}/GPT/hooks/useGpt.js +0 -0
  126. /package/build/cjs/extensions/{yfm → additional}/GPT/hooks/useGptHotKeys.d.ts +0 -0
  127. /package/build/cjs/extensions/{yfm → additional}/GPT/hooks/useGptHotKeys.js +0 -0
  128. /package/build/cjs/extensions/{yfm → additional}/GPT/hooks/useOverflowingHorizontalItems.d.ts +0 -0
  129. /package/build/cjs/extensions/{yfm → additional}/GPT/hooks/useOverflowingHorizontalItems.js +0 -0
  130. /package/build/cjs/extensions/{yfm → additional}/GPT/hooks/usePresetList.d.ts +0 -0
  131. /package/build/cjs/extensions/{yfm → additional}/GPT/hooks/usePresetList.js +0 -0
  132. /package/build/cjs/extensions/{yfm → additional}/GPT/plugin.d.ts +0 -0
  133. /package/build/cjs/extensions/{yfm → additional}/GPT/toolbar.d.ts +0 -0
  134. /package/build/cjs/extensions/{yfm → additional}/GPT/toolbar.js +0 -0
  135. /package/build/esm/extensions/{yfm → additional}/GPT/ErrorScreen/ErrorScreen.css +0 -0
  136. /package/build/esm/extensions/{yfm → additional}/GPT/ErrorScreen/ErrorScreen.d.ts +0 -0
  137. /package/build/esm/extensions/{yfm → additional}/GPT/ErrorScreen/ErrorScreen.js +0 -0
  138. /package/build/esm/extensions/{yfm → additional}/GPT/ErrorScreen/types.d.ts +0 -0
  139. /package/build/esm/extensions/{yfm → additional}/GPT/ErrorScreen/types.js +0 -0
  140. /package/build/esm/extensions/{yfm → additional}/GPT/GptDialog/GptDialog.css +0 -0
  141. /package/build/esm/extensions/{yfm → additional}/GPT/GptDialog/GptDialog.d.ts +0 -0
  142. /package/build/esm/extensions/{yfm → additional}/GPT/GptDialog/GptDialog.js +0 -0
  143. /package/build/esm/extensions/{yfm → additional}/GPT/GptDialog/LoadingScreen/LoadingScreen.css +0 -0
  144. /package/build/esm/extensions/{yfm → additional}/GPT/GptDialog/LoadingScreen/LoadingScreen.d.ts +0 -0
  145. /package/build/esm/extensions/{yfm → additional}/GPT/GptDialog/LoadingScreen/LoadingScreen.js +0 -0
  146. /package/build/esm/extensions/{yfm → additional}/GPT/IconRefuge/IconRefuge.classname.d.ts +0 -0
  147. /package/build/esm/extensions/{yfm → additional}/GPT/IconRefuge/IconRefuge.classname.js +0 -0
  148. /package/build/esm/extensions/{yfm → additional}/GPT/IconRefuge/IconRefuge.css +0 -0
  149. /package/build/esm/extensions/{yfm → additional}/GPT/IconRefuge/IconRefuge.d.ts +0 -0
  150. /package/build/esm/extensions/{yfm → additional}/GPT/IconRefuge/IconRefuge.js +0 -0
  151. /package/build/esm/extensions/{yfm → additional}/GPT/IconRefuge/index.d.ts +0 -0
  152. /package/build/esm/extensions/{yfm → additional}/GPT/IconRefuge/index.js +0 -0
  153. /package/build/esm/extensions/{yfm → additional}/GPT/PresetList/PresetList.d.ts +0 -0
  154. /package/build/esm/extensions/{yfm → additional}/GPT/PresetList/PresetList.js +0 -0
  155. /package/build/esm/extensions/{yfm → additional}/GPT/PresetList/Presetlist.css +0 -0
  156. /package/build/esm/extensions/{yfm → additional}/GPT/actions.d.ts +0 -0
  157. /package/build/esm/extensions/{yfm → additional}/GPT/actions.js +0 -0
  158. /package/build/esm/extensions/{yfm → additional}/GPT/commands.d.ts +0 -0
  159. /package/build/esm/extensions/{yfm → additional}/GPT/commands.js +0 -0
  160. /package/build/esm/extensions/{yfm → additional}/GPT/constants.d.ts +0 -0
  161. /package/build/esm/extensions/{yfm → additional}/GPT/constants.js +0 -0
  162. /package/build/esm/extensions/{yfm → additional}/GPT/gptExtension/gptExtension.d.ts +0 -0
  163. /package/build/esm/extensions/{yfm → additional}/GPT/gptExtension/gptExtension.js +0 -0
  164. /package/build/esm/extensions/{yfm → additional}/GPT/gptExtension/view.css +0 -0
  165. /package/build/esm/extensions/{yfm → additional}/GPT/gptExtension/view.d.ts +0 -0
  166. /package/build/esm/extensions/{yfm → additional}/GPT/gptExtension/view.js +0 -0
  167. /package/build/esm/extensions/{yfm → additional}/GPT/hooks/useGpt.d.ts +0 -0
  168. /package/build/esm/extensions/{yfm → additional}/GPT/hooks/useGpt.js +0 -0
  169. /package/build/esm/extensions/{yfm → additional}/GPT/hooks/useGptHotKeys.d.ts +0 -0
  170. /package/build/esm/extensions/{yfm → additional}/GPT/hooks/useGptHotKeys.js +0 -0
  171. /package/build/esm/extensions/{yfm → additional}/GPT/hooks/useOverflowingHorizontalItems.d.ts +0 -0
  172. /package/build/esm/extensions/{yfm → additional}/GPT/hooks/useOverflowingHorizontalItems.js +0 -0
  173. /package/build/esm/extensions/{yfm → additional}/GPT/hooks/usePresetList.d.ts +0 -0
  174. /package/build/esm/extensions/{yfm → additional}/GPT/hooks/usePresetList.js +0 -0
  175. /package/build/esm/extensions/{yfm → additional}/GPT/plugin.d.ts +0 -0
  176. /package/build/esm/extensions/{yfm → additional}/GPT/toolbar.d.ts +0 -0
  177. /package/build/esm/extensions/{yfm → additional}/GPT/toolbar.js +0 -0
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ import { Popup } from '@gravity-ui/uikit';
3
+ import { GptDialog } from '../GptDialog/GptDialog';
4
+ import { cnGptPopup } from '../gptExtension/view';
5
+ export function renderPopup(anchor, props) {
6
+ const handleUpdate = (result) => { var _a; return (_a = props.onUpdate) === null || _a === void 0 ? void 0 : _a.call(props, result); };
7
+ return (React.createElement(Popup, { className: cnGptPopup(), contentClassName: cnGptPopup('content'), open: true, anchorRef: { current: anchor }, onOutsideClick: props.onClose, focusTrap: true, strategy: "absolute", onEscapeKeyDown: props.onClose },
8
+ React.createElement(GptDialog, { markup: props.markup, answerRender: props.answerRender, promptPresets: props.promptPresets, disablePromptPresets: props.disablePromptPresets, customPromptPlaceholder: props.customPromptPlaceholder, disabledPromptPlaceholder: props.disabledPromptPlaceholder, onApplyResult: props.onApplyResult, onCustomPromptApply: props.onCustomPromptApply, onPromptPresetClick: props.onPromptPresetClick, onTryAgain: props.onTryAgain, onLike: props.onLike, onDislike: props.onDislike, onClose: props.onClose, onUpdate: handleUpdate, gptAlertProps: props.gptAlertProps })));
9
+ }
@@ -0,0 +1,2 @@
1
+ import { MToolbarSingleItemData } from '../../../../bundle/config/markup';
2
+ export declare const mGptToolbarItem: MToolbarSingleItemData;
@@ -0,0 +1,15 @@
1
+ import { i18n } from '../../../../i18n/gpt/extension';
2
+ import { GPTIcon } from '../../../../icons';
3
+ import { ToolbarDataType } from '../../../../toolbar';
4
+ import { gptHotKeys } from '../constants';
5
+ import { showMarkupGpt } from './commands';
6
+ export const mGptToolbarItem = {
7
+ id: 'gpt',
8
+ type: ToolbarDataType.SingleButton,
9
+ hotkey: gptHotKeys.openGptKeyTooltip,
10
+ title: () => `${i18n('help-with-text')}`,
11
+ icon: { data: GPTIcon },
12
+ exec: (e) => showMarkupGpt(e.cm),
13
+ isActive: () => false,
14
+ isEnable: () => true,
15
+ };
@@ -1,2 +1,3 @@
1
1
  export * from './toolbar';
2
2
  export * from './gptExtension/gptExtension';
3
+ export * from './MarkupGpt';
@@ -1,2 +1,3 @@
1
1
  export * from './toolbar';
2
2
  export * from './gptExtension/gptExtension';
3
+ export * from './MarkupGpt';
@@ -2,6 +2,7 @@ import { Plugin, PluginKey } from 'prosemirror-state';
2
2
  import { Decoration, DecorationSet } from 'prosemirror-view';
3
3
  import { WIDGET_DECO_CLASS_NAME, WIDGET_DECO_SPEC_FLAG } from './constants';
4
4
  import { GptWidgetDecoView } from './gptExtension/view';
5
+ import { isEmptyGptPrompts } from './utils';
5
6
  const key = new PluginKey('gpt-widget');
6
7
  export { key as pluginKey };
7
8
  export const gptWidgetPlugin = (params) => {
@@ -12,18 +13,23 @@ export const gptWidgetPlugin = (params) => {
12
13
  apply: (tr, decos) => {
13
14
  const meta = tr.getMeta(key);
14
15
  const paramsGpt = params;
16
+ paramsGpt.disablePromptPresets = false;
15
17
  if ((meta === null || meta === void 0 ? void 0 : meta.action) === 'show') {
16
18
  if (meta.to === meta.from) {
17
19
  const spanElem = document.createElement('span');
18
20
  spanElem.className = WIDGET_DECO_CLASS_NAME;
19
21
  spanElem.textContent = ' ';
20
22
  paramsGpt.disablePromptPresets = true;
23
+ if (isEmptyGptPrompts(paramsGpt, true))
24
+ return DecorationSet.empty;
21
25
  return DecorationSet.create(tr.doc, [
22
26
  Decoration.widget(meta.from, spanElem, {
23
27
  [WIDGET_DECO_SPEC_FLAG]: true,
24
28
  }),
25
29
  ]);
26
30
  }
31
+ if (isEmptyGptPrompts(paramsGpt, false))
32
+ return DecorationSet.empty;
27
33
  return DecorationSet.create(tr.doc, [
28
34
  Decoration.inline(meta.from, meta.to, { nodeName: 'span', class: WIDGET_DECO_CLASS_NAME }, { [WIDGET_DECO_SPEC_FLAG]: true }),
29
35
  ]);
@@ -1,5 +1,6 @@
1
1
  import type React from 'react';
2
2
  import { GptDialogProps } from './GptDialog/GptDialog';
3
+ import { GptWidgetOptions } from './gptExtension/gptExtension';
3
4
  declare type CombinedKeyboardEvent = KeyboardEvent | React.KeyboardEvent;
4
5
  export declare function getAlertGptInfo(gptAlert: GptDialogProps['gptAlertProps']): {
5
6
  alertMessage: string;
@@ -10,4 +11,5 @@ export declare function getDisableReplaceButtonText(disablePromptPresets?: boole
10
11
  export declare function getInputPlaceHolder(disablePromptPresets?: boolean, disabledPromptPlaceholder?: string, customPromptPlaceholder?: string): string | undefined;
11
12
  export declare const isEnter: (event: CombinedKeyboardEvent) => boolean;
12
13
  export declare function focusWithoutScroll(element?: HTMLElement | null): void;
14
+ export declare function isEmptyGptPrompts(gptWidgetOptions: GptWidgetOptions, disablePromptPresets: boolean): boolean;
13
15
  export {};
@@ -21,3 +21,13 @@ export function focusWithoutScroll(element) {
21
21
  });
22
22
  window.scrollTo(x, y);
23
23
  }
24
+ export function isEmptyGptPrompts(gptWidgetOptions, disablePromptPresets) {
25
+ var _a;
26
+ if (disablePromptPresets && !gptWidgetOptions.onCustomPromptApply)
27
+ return true;
28
+ if (!disablePromptPresets &&
29
+ !((_a = gptWidgetOptions.promptPresets) === null || _a === void 0 ? void 0 : _a.length) &&
30
+ !gptWidgetOptions.onCustomPromptApply)
31
+ return true;
32
+ return false;
33
+ }
@@ -0,0 +1 @@
1
+ export * from './GPT';
@@ -0,0 +1 @@
1
+ export * from './GPT';
@@ -1,5 +1,5 @@
1
1
  import { keydownHandler } from 'prosemirror-keymap';
2
- import { Plugin, TextSelection } from 'prosemirror-state';
2
+ import { AllSelection, Plugin, TextSelection, } from 'prosemirror-state';
3
3
  import { isCodeBlock } from '../../../utils/nodes';
4
4
  import { TooltipView } from './tooltip';
5
5
  export const SelectionContext = (builder, { config }) => {
@@ -74,7 +74,8 @@ class SelectionTooltip {
74
74
  return;
75
75
  const { selection } = state;
76
76
  // Hide the tooltip if the selection is empty
77
- if (selection.empty || !(selection instanceof TextSelection)) {
77
+ if (selection.empty ||
78
+ !(selection instanceof TextSelection || selection instanceof AllSelection)) {
78
79
  this.tooltip.hide(view);
79
80
  return;
80
81
  }
@@ -2,3 +2,4 @@ export * from './base';
2
2
  export * from './behavior';
3
3
  export * from './markdown';
4
4
  export * from './yfm';
5
+ export * from './additional';
@@ -2,3 +2,4 @@ export * from './base';
2
2
  export * from './behavior';
3
3
  export * from './markdown';
4
4
  export * from './yfm';
5
+ export * from './additional';
@@ -7,6 +7,10 @@ export declare const ignoreIfCursorInsideMathInline: Command;
7
7
  */
8
8
  export declare const removeEmptyMathInlineIfCursorIsAtBeginning: Command;
9
9
  /**
10
- * If MathInline is before cursor move cursor to the end of the math
10
+ * Handle cursor movement to the right at the boundary of a MathInline block
11
11
  */
12
- export declare const moveCursorToEndOfMathInline: Command;
12
+ export declare const moveCursorRightOfMathInline: Command;
13
+ /**
14
+ * Handle cursor movement to the left at the boundary of a MathInline block
15
+ */
16
+ export declare const moveCursorLeftOfMathInline: Command;
@@ -25,14 +25,39 @@ export const removeEmptyMathInlineIfCursorIsAtBeginning = ({ tr, schema }, dispa
25
25
  return false;
26
26
  };
27
27
  /**
28
- * If MathInline is before cursor move cursor to the end of the math
28
+ * Handle cursor movement to the right at the boundary of a MathInline block
29
29
  */
30
- export const moveCursorToEndOfMathInline = ({ tr, schema }, dispatch) => {
30
+ export const moveCursorRightOfMathInline = ({ tr, schema }, dispatch) => {
31
31
  var _a;
32
32
  const $cursor = get$Cursor(tr.selection);
33
- if (((_a = $cursor === null || $cursor === void 0 ? void 0 : $cursor.nodeBefore) === null || _a === void 0 ? void 0 : _a.type) === mathIType(schema)) {
34
- dispatch === null || dispatch === void 0 ? void 0 : dispatch(tr.setSelection(TextSelection.create(tr.doc, $cursor.pos - 1)));
35
- return true;
33
+ if ($cursor) {
34
+ const mathType = mathIType(schema);
35
+ const isOnBeforeOfMathInline = ((_a = $cursor.nodeAfter) === null || _a === void 0 ? void 0 : _a.type) === mathType;
36
+ const isOnEndOfMathInline = $cursor.parentOffset === $cursor.parent.content.size &&
37
+ $cursor.parent.type === mathType;
38
+ if (isOnBeforeOfMathInline || isOnEndOfMathInline) {
39
+ const newPos = $cursor.pos + 1;
40
+ dispatch === null || dispatch === void 0 ? void 0 : dispatch(tr.setSelection(TextSelection.create(tr.doc, newPos)));
41
+ return true;
42
+ }
43
+ }
44
+ return false;
45
+ };
46
+ /**
47
+ * Handle cursor movement to the left at the boundary of a MathInline block
48
+ */
49
+ export const moveCursorLeftOfMathInline = ({ tr, schema }, dispatch) => {
50
+ var _a;
51
+ const $cursor = get$Cursor(tr.selection);
52
+ if ($cursor) {
53
+ const mathType = mathIType(schema);
54
+ const isOnAfterOfMathInline = ((_a = $cursor.nodeBefore) === null || _a === void 0 ? void 0 : _a.type) === mathType;
55
+ const isOnStartOfMathInline = $cursor.parentOffset === 0 && $cursor.parent.type === mathType;
56
+ if (isOnAfterOfMathInline || isOnStartOfMathInline) {
57
+ const newPos = $cursor.pos - 1;
58
+ dispatch === null || dispatch === void 0 ? void 0 : dispatch(tr.setSelection(TextSelection.create(tr.doc, newPos)));
59
+ return true;
60
+ }
36
61
  }
37
62
  return false;
38
63
  };
@@ -4,7 +4,7 @@ import { hasParentNodeOfType } from 'prosemirror-utils';
4
4
  import { inlineNodeInputRule, textblockTypeInputRule } from '../../../utils/inputrules';
5
5
  import { isTextSelection } from '../../../utils/selection';
6
6
  import { MathSpecs } from './MathSpecs';
7
- import { ignoreIfCursorInsideMathInline, moveCursorToEndOfMathInline, removeEmptyMathInlineIfCursorIsAtBeginning, } from './commands';
7
+ import { ignoreIfCursorInsideMathInline, moveCursorLeftOfMathInline, removeEmptyMathInlineIfCursorIsAtBeginning, } from './commands';
8
8
  import { mathBType, mathIType } from './const';
9
9
  import { mathViewAndEditPlugin } from './view-and-edit';
10
10
  import './index.css';
@@ -17,7 +17,7 @@ export const Math = (builder, opts) => {
17
17
  builder.use(MathSpecs);
18
18
  builder.addKeymap(() => ({
19
19
  Enter: ignoreIfCursorInsideMathInline,
20
- Backspace: chainCommands(moveCursorToEndOfMathInline, removeEmptyMathInlineIfCursorIsAtBeginning),
20
+ Backspace: chainCommands(removeEmptyMathInlineIfCursorIsAtBeginning, moveCursorLeftOfMathInline),
21
21
  }));
22
22
  builder
23
23
  .addPlugin(() => mathViewAndEditPlugin(Object.assign(Object.assign({}, opts), { reactRenderer: builder.context.get('reactrenderer') })))
@@ -2,10 +2,10 @@ import { keydownHandler } from 'prosemirror-keymap';
2
2
  import { Plugin } from 'prosemirror-state';
3
3
  import { Decoration, DecorationSet } from 'prosemirror-view';
4
4
  import { isTextSelection } from '../../../utils/selection';
5
- import { moveCursorToEndOfMathInline } from './commands';
5
+ import { moveCursorLeftOfMathInline, moveCursorRightOfMathInline } from './commands';
6
6
  import { CLASSNAMES, MathNode } from './const';
7
7
  import { b, renderMathHint } from './hint';
8
- import './view-and-edit.css'; // eslint-disable-line import/order
8
+ import './view-and-edit.css';
9
9
  const MATH_ACTIVE_DECO = 'math_active_decoration';
10
10
  export class MathNodeView {
11
11
  constructor(node, opts) {
@@ -156,13 +156,14 @@ export class MathBlockNodeView extends MathNodeView {
156
156
  }
157
157
  export const mathViewAndEditPlugin = (options) => new Plugin({
158
158
  props: {
159
+ handleKeyDown: keydownHandler({
160
+ ArrowRight: moveCursorRightOfMathInline,
161
+ ArrowLeft: moveCursorLeftOfMathInline,
162
+ }),
159
163
  nodeViews: {
160
164
  [MathNode.Block]: (node) => new MathBlockNodeView(node, options),
161
165
  [MathNode.Inline]: (node) => new MathInlineNodeView(node, options),
162
166
  },
163
- handleKeyDown: keydownHandler({
164
- ArrowLeft: moveCursorToEndOfMathInline,
165
- }),
166
167
  decorations: (state) => {
167
168
  const { selection } = state;
168
169
  if (isTextSelection(selection)) {
@@ -7,12 +7,12 @@ export const getSchemaSpecs = (opts, placeholder) => {
7
7
  var _a, _b, _c, _d;
8
8
  return ({
9
9
  [CutNode.Cut]: {
10
- attrs: { class: { default: 'yfm-cut' } },
10
+ attrs: { class: { default: 'yfm-cut' }, open: { default: null } },
11
11
  content: `${CutNode.CutTitle} ${CutNode.CutContent}`,
12
12
  group: 'block yfm-cut',
13
- parseDOM: [{ tag: 'div.yfm-cut' }],
13
+ parseDOM: [{ tag: '.yfm-cut' }],
14
14
  toDOM(node) {
15
- return ['div', node.attrs, 0];
15
+ return ['details', node.attrs, 0];
16
16
  },
17
17
  selectable: true,
18
18
  allowSelection: true,
@@ -23,9 +23,9 @@ export const getSchemaSpecs = (opts, placeholder) => {
23
23
  attrs: { class: { default: 'yfm-cut-title' } },
24
24
  content: 'inline*',
25
25
  group: 'block yfm-cut',
26
- parseDOM: [{ tag: 'div.yfm-cut-title' }],
26
+ parseDOM: [{ tag: '.yfm-cut-title' }],
27
27
  toDOM(node) {
28
- return ['div', node.attrs, 0];
28
+ return ['summary', node.attrs, 0];
29
29
  },
30
30
  placeholder: {
31
31
  content: (_b = (_a = placeholder === null || placeholder === void 0 ? void 0 : placeholder[CutNode.CutTitle]) !== null && _a !== void 0 ? _a : opts === null || opts === void 0 ? void 0 : opts.yfmCutTitlePlaceholder) !== null && _b !== void 0 ? _b : DEFAULT_PLACEHOLDERS.Title,
@@ -40,7 +40,7 @@ export const getSchemaSpecs = (opts, placeholder) => {
40
40
  attrs: { class: { default: 'yfm-cut-content' } },
41
41
  content: '(block | paragraph)+',
42
42
  group: 'block yfm-cut',
43
- parseDOM: [{ tag: 'div.yfm-cut-content' }],
43
+ parseDOM: [{ tag: '.yfm-cut-content' }],
44
44
  toDOM(node) {
45
45
  return ['div', node.attrs, 0];
46
46
  },
@@ -2,7 +2,7 @@ import { TextSelection } from 'prosemirror-state';
2
2
  import { findParentNodeClosestToPos } from 'prosemirror-utils';
3
3
  import { cutContentType, cutTitleType, cutType } from '../const';
4
4
  const createYfmCutNode = (schema) => (content) => {
5
- return cutType(schema).create({ class: 'yfm-cut open' }, [
5
+ return cutType(schema).create({ class: 'yfm-cut open', open: true }, [
6
6
  cutTitleType(schema).create(null),
7
7
  cutContentType(schema).create(null, content),
8
8
  ]);
@@ -1,10 +1,22 @@
1
1
  .ProseMirror.yfm .yfm-cut {
2
2
  border: 1px dashed transparent;
3
3
  border-radius: var(--g-border-radius-s);
4
+ /* TODO: Remove this after updating @diplodoc/transform to version 4.19.0 or higher */
5
+ /* This ensures backward compatibility with earlier versions of cut-extension */
4
6
  }
5
7
  .ProseMirror.yfm .yfm-cut:hover {
6
8
  border-color: var(--g-color-line-generic);
7
9
  }
8
10
  .ProseMirror.yfm .yfm-cut.yfm-cut-active {
9
11
  border-color: var(--g-color-line-generic);
12
+ }
13
+ .ProseMirror.yfm .yfm-cut .yfm-cut-title:focus {
14
+ outline: 0;
15
+ }
16
+ .ProseMirror.yfm .yfm-cut .yfm-cut-title {
17
+ list-style: none;
18
+ }
19
+ .ProseMirror.yfm .yfm-cut .yfm-cut-title::-webkit-details-marker,
20
+ .ProseMirror.yfm .yfm-cut .yfm-cut-title::marker {
21
+ display: none;
10
22
  }
@@ -2,7 +2,7 @@ import './yfm-cut-title.css';
2
2
  export class YfmCutTitleNodeView {
3
3
  constructor(node) {
4
4
  this.node = node;
5
- this.dom = document.createElement('div');
5
+ this.dom = document.createElement('summary');
6
6
  this.dom.classList.add('yfm-cut-title');
7
7
  this.dom.replaceChildren((this.contentDOM = document.createElement('div')));
8
8
  this.contentDOM.classList.add('g-md-yfm-cut-title-inner');
@@ -10,6 +10,7 @@ export class YfmCutTitleNodeView {
10
10
  // ignore clicking on the title content
11
11
  // you can open/close yfm-cut by clicking on the arrow icon
12
12
  e.stopPropagation();
13
+ e.preventDefault();
13
14
  });
14
15
  }
15
16
  update(node) {
@@ -38,6 +38,7 @@ function openParentYfmCuts($pos, domAtPos) {
38
38
  if ($pos.node(depth - 1).type === cutType(schema)) {
39
39
  const { node: cutDomNode } = domAtPos($pos.start(depth - 1), 0);
40
40
  cutDomNode.classList.add('open');
41
+ cutDomNode.setAttribute('open', 'true');
41
42
  depth--;
42
43
  }
43
44
  }
@@ -85,9 +86,10 @@ class CutAutoOpenOnDragOver {
85
86
  this._timeout = setTimeout(this._openCut.bind(this), CutAutoOpenOnDragOver.OPEN_TIMEOUT);
86
87
  }
87
88
  _openCut() {
88
- var _a;
89
+ var _a, _b;
89
90
  if (this._editorView.dragging) {
90
91
  (_a = this._cutElem) === null || _a === void 0 ? void 0 : _a.classList.add('open');
92
+ (_b = this._cutElem) === null || _b === void 0 ? void 0 : _b.setAttribute('open', 'true');
91
93
  }
92
94
  this._clear();
93
95
  }
@@ -11,4 +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
+ export * from '../additional/GPT';
@@ -11,4 +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
+ export * from '../additional/GPT';
@@ -12,5 +12,5 @@
12
12
  "replace": "Replace the selected text",
13
13
  "replace-disabled": "Insert text",
14
14
  "try-again": "Try again",
15
- "alert-gpt-presets-info": "Highlight text to see Yandex GPT presets"
15
+ "alert-gpt-presets-info": "Highlight text to see GPT presets"
16
16
  }
@@ -12,5 +12,5 @@
12
12
  "replace": "Заменить выделенный текст",
13
13
  "replace-disabled": "Вставить текст",
14
14
  "try-again": "Иначе",
15
- "alert-gpt-presets-info": "Выделите текст, чтобы увидеть пресеты Yandex GPT"
15
+ "alert-gpt-presets-info": "Выделите текст, чтобы увидеть пресеты GPT"
16
16
  }
@@ -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" | "list" | "heading" | "note" | "file" | "codeblock" | "checkbox" | "emoji" | "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?: {
1
+ export declare const i18n: <G extends "bold" | "code" | "link" | "italic" | "strike" | "underline" | "mark" | "quote" | "colorify" | "mono" | "text" | "html" | "cut" | "table" | "image" | "code_inline" | "list" | "heading" | "note" | "file" | "codeblock" | "checkbox" | "emoji" | "tabs" | "math" | "heading1" | "heading2" | "heading3" | "heading4" | "heading5" | "heading6" | "gpt" | "undo" | "redo" | "math_inline" | "math_block" | "mermaid" | "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" | "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;
@@ -1,2 +1,2 @@
1
1
  /** During build process, the current version will be injected here */
2
- export const VERSION = typeof '13.23.0' !== 'undefined' ? '13.23.0' : 'unknown';
2
+ export const VERSION = typeof '13.25.0' !== 'undefined' ? '13.25.0' : 'unknown';