@gravity-ui/markdown-editor 13.24.0 → 13.25.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 (169) hide show
  1. package/README.md +2 -0
  2. package/build/cjs/bundle/MarkdownEditorView.js +18 -14
  3. package/build/cjs/bundle/config/action-names.d.ts +1 -1
  4. package/build/cjs/bundle/config/wysiwyg.js +1 -2
  5. package/build/cjs/bundle/settings/index.d.ts +1 -0
  6. package/build/cjs/bundle/settings/index.js +7 -6
  7. package/build/cjs/extensions/{yfm → additional}/GPT/GptDialog/GptDialog.d.ts +2 -2
  8. package/build/cjs/extensions/additional/GPT/MarkupGpt/commands.d.ts +4 -0
  9. package/build/cjs/extensions/additional/GPT/MarkupGpt/commands.js +18 -0
  10. package/build/cjs/extensions/additional/GPT/MarkupGpt/effects.d.ts +2 -0
  11. package/build/cjs/extensions/additional/GPT/MarkupGpt/effects.js +6 -0
  12. package/build/cjs/extensions/additional/GPT/MarkupGpt/index.d.ts +5 -0
  13. package/build/cjs/extensions/additional/GPT/MarkupGpt/index.js +24 -0
  14. package/build/cjs/extensions/additional/GPT/MarkupGpt/plugin.d.ts +23 -0
  15. package/build/cjs/extensions/additional/GPT/MarkupGpt/plugin.js +121 -0
  16. package/build/cjs/extensions/additional/GPT/MarkupGpt/popup.d.ts +12 -0
  17. package/build/cjs/extensions/additional/GPT/MarkupGpt/popup.js +14 -0
  18. package/build/cjs/extensions/additional/GPT/MarkupGpt/toolbar.d.ts +2 -0
  19. package/build/cjs/extensions/additional/GPT/MarkupGpt/toolbar.js +18 -0
  20. package/build/cjs/extensions/additional/GPT/PresetList/PresetList.d.ts +9 -0
  21. package/build/cjs/extensions/{yfm → additional}/GPT/PresetList/PresetList.js +1 -1
  22. package/build/{esm/extensions/yfm → cjs/extensions/additional}/GPT/gptExtension/gptExtension.d.ts +2 -2
  23. package/build/cjs/extensions/{yfm → additional}/GPT/gptExtension/view.d.ts +2 -2
  24. package/build/cjs/extensions/{yfm → additional}/GPT/hooks/useGpt.d.ts +1 -1
  25. package/build/cjs/extensions/additional/GPT/hooks/usePresetList.d.ts +15 -0
  26. package/build/cjs/extensions/{yfm → additional}/GPT/hooks/usePresetList.js +1 -1
  27. package/build/cjs/extensions/{yfm → additional}/GPT/index.d.ts +1 -0
  28. package/build/cjs/extensions/{yfm → additional}/GPT/index.js +1 -0
  29. package/build/{esm/extensions/yfm → cjs/extensions/additional}/GPT/plugin.d.ts +2 -1
  30. package/build/cjs/extensions/{yfm → additional}/GPT/plugin.js +6 -0
  31. package/build/cjs/extensions/{yfm → additional}/GPT/utils.d.ts +3 -0
  32. package/build/cjs/extensions/{yfm → additional}/GPT/utils.js +12 -1
  33. package/build/cjs/extensions/additional/index.d.ts +1 -0
  34. package/build/cjs/extensions/additional/index.js +4 -0
  35. package/build/cjs/extensions/behavior/SelectionContext/index.js +2 -1
  36. package/build/cjs/extensions/index.d.ts +1 -0
  37. package/build/cjs/extensions/index.js +1 -0
  38. package/build/cjs/extensions/yfm/YfmCut/YfmCutSpecs/schema.js +3 -3
  39. package/build/cjs/extensions/yfm/YfmCut/actions/toYfmCut.js +1 -1
  40. package/build/cjs/extensions/yfm/YfmCut/nodeviews/yfm-cut-title.css +10 -0
  41. package/build/cjs/extensions/yfm/YfmCut/nodeviews/yfm-cut-title.js +1 -1
  42. package/build/cjs/extensions/yfm/YfmCut/plugins/auto-open.js +1 -3
  43. package/build/cjs/extensions/yfm/index.d.ts +1 -1
  44. package/build/cjs/extensions/yfm/index.js +1 -1
  45. package/build/cjs/i18n/gpt/dialog/en.json +1 -1
  46. package/build/cjs/i18n/gpt/dialog/ru.json +1 -1
  47. package/build/cjs/i18n/menubar/index.d.ts +1 -1
  48. package/build/cjs/version.js +1 -1
  49. package/build/esm/bundle/MarkdownEditorView.js +18 -14
  50. package/build/esm/bundle/config/action-names.d.ts +1 -1
  51. package/build/esm/bundle/config/wysiwyg.js +1 -2
  52. package/build/esm/bundle/settings/index.d.ts +1 -0
  53. package/build/esm/bundle/settings/index.js +7 -6
  54. package/build/esm/extensions/{yfm → additional}/GPT/GptDialog/GptDialog.d.ts +2 -2
  55. package/build/esm/extensions/additional/GPT/MarkupGpt/commands.d.ts +4 -0
  56. package/build/esm/extensions/additional/GPT/MarkupGpt/commands.js +12 -0
  57. package/build/esm/extensions/additional/GPT/MarkupGpt/effects.d.ts +2 -0
  58. package/build/esm/extensions/additional/GPT/MarkupGpt/effects.js +3 -0
  59. package/build/esm/extensions/additional/GPT/MarkupGpt/index.d.ts +5 -0
  60. package/build/esm/extensions/additional/GPT/MarkupGpt/index.js +17 -0
  61. package/build/esm/extensions/additional/GPT/MarkupGpt/plugin.d.ts +23 -0
  62. package/build/esm/extensions/additional/GPT/MarkupGpt/plugin.js +117 -0
  63. package/build/esm/extensions/additional/GPT/MarkupGpt/popup.d.ts +12 -0
  64. package/build/esm/extensions/additional/GPT/MarkupGpt/popup.js +9 -0
  65. package/build/esm/extensions/additional/GPT/MarkupGpt/toolbar.d.ts +2 -0
  66. package/build/esm/extensions/additional/GPT/MarkupGpt/toolbar.js +15 -0
  67. package/build/esm/extensions/additional/GPT/PresetList/PresetList.d.ts +10 -0
  68. package/build/esm/extensions/{yfm → additional}/GPT/PresetList/PresetList.js +1 -1
  69. package/build/{cjs/extensions/yfm → esm/extensions/additional}/GPT/gptExtension/gptExtension.d.ts +2 -2
  70. package/build/esm/extensions/{yfm → additional}/GPT/gptExtension/view.d.ts +2 -2
  71. package/build/esm/extensions/{yfm → additional}/GPT/hooks/useGpt.d.ts +1 -1
  72. package/build/esm/extensions/additional/GPT/hooks/usePresetList.d.ts +15 -0
  73. package/build/esm/extensions/{yfm → additional}/GPT/hooks/usePresetList.js +1 -1
  74. package/build/esm/extensions/{yfm → additional}/GPT/index.d.ts +1 -0
  75. package/build/esm/extensions/{yfm → additional}/GPT/index.js +1 -0
  76. package/build/{cjs/extensions/yfm → esm/extensions/additional}/GPT/plugin.d.ts +2 -1
  77. package/build/esm/extensions/{yfm → additional}/GPT/plugin.js +6 -0
  78. package/build/esm/extensions/{yfm → additional}/GPT/utils.d.ts +3 -0
  79. package/build/esm/extensions/{yfm → additional}/GPT/utils.js +10 -0
  80. package/build/esm/extensions/additional/index.d.ts +1 -0
  81. package/build/esm/extensions/additional/index.js +1 -0
  82. package/build/esm/extensions/behavior/SelectionContext/index.js +3 -2
  83. package/build/esm/extensions/index.d.ts +1 -0
  84. package/build/esm/extensions/index.js +1 -0
  85. package/build/esm/extensions/yfm/YfmCut/YfmCutSpecs/schema.js +3 -3
  86. package/build/esm/extensions/yfm/YfmCut/actions/toYfmCut.js +1 -1
  87. package/build/esm/extensions/yfm/YfmCut/nodeviews/yfm-cut-title.css +10 -0
  88. package/build/esm/extensions/yfm/YfmCut/nodeviews/yfm-cut-title.js +1 -1
  89. package/build/esm/extensions/yfm/YfmCut/plugins/auto-open.js +1 -3
  90. package/build/esm/extensions/yfm/index.d.ts +1 -1
  91. package/build/esm/extensions/yfm/index.js +1 -1
  92. package/build/esm/i18n/gpt/dialog/en.json +1 -1
  93. package/build/esm/i18n/gpt/dialog/ru.json +1 -1
  94. package/build/esm/i18n/menubar/index.d.ts +1 -1
  95. package/build/esm/version.js +1 -1
  96. package/build/styles.css +138 -128
  97. package/package.json +1 -1
  98. package/build/cjs/extensions/yfm/GPT/PresetList/PresetList.d.ts +0 -9
  99. package/build/cjs/extensions/yfm/GPT/hooks/usePresetList.d.ts +0 -14
  100. package/build/esm/extensions/yfm/GPT/PresetList/PresetList.d.ts +0 -10
  101. package/build/esm/extensions/yfm/GPT/hooks/usePresetList.d.ts +0 -14
  102. /package/build/cjs/extensions/{yfm → additional}/GPT/ErrorScreen/ErrorScreen.css +0 -0
  103. /package/build/cjs/extensions/{yfm → additional}/GPT/ErrorScreen/ErrorScreen.d.ts +0 -0
  104. /package/build/cjs/extensions/{yfm → additional}/GPT/ErrorScreen/ErrorScreen.js +0 -0
  105. /package/build/cjs/extensions/{yfm → additional}/GPT/ErrorScreen/types.d.ts +0 -0
  106. /package/build/cjs/extensions/{yfm → additional}/GPT/ErrorScreen/types.js +0 -0
  107. /package/build/cjs/extensions/{yfm → additional}/GPT/GptDialog/GptDialog.css +0 -0
  108. /package/build/cjs/extensions/{yfm → additional}/GPT/GptDialog/GptDialog.js +0 -0
  109. /package/build/cjs/extensions/{yfm → additional}/GPT/GptDialog/LoadingScreen/LoadingScreen.css +0 -0
  110. /package/build/cjs/extensions/{yfm → additional}/GPT/GptDialog/LoadingScreen/LoadingScreen.d.ts +0 -0
  111. /package/build/cjs/extensions/{yfm → additional}/GPT/GptDialog/LoadingScreen/LoadingScreen.js +0 -0
  112. /package/build/cjs/extensions/{yfm → additional}/GPT/IconRefuge/IconRefuge.classname.d.ts +0 -0
  113. /package/build/cjs/extensions/{yfm → additional}/GPT/IconRefuge/IconRefuge.classname.js +0 -0
  114. /package/build/cjs/extensions/{yfm → additional}/GPT/IconRefuge/IconRefuge.css +0 -0
  115. /package/build/cjs/extensions/{yfm → additional}/GPT/IconRefuge/IconRefuge.d.ts +0 -0
  116. /package/build/cjs/extensions/{yfm → additional}/GPT/IconRefuge/IconRefuge.js +0 -0
  117. /package/build/cjs/extensions/{yfm → additional}/GPT/IconRefuge/index.d.ts +0 -0
  118. /package/build/cjs/extensions/{yfm → additional}/GPT/IconRefuge/index.js +0 -0
  119. /package/build/cjs/extensions/{yfm → additional}/GPT/PresetList/Presetlist.css +0 -0
  120. /package/build/cjs/extensions/{yfm → additional}/GPT/actions.d.ts +0 -0
  121. /package/build/cjs/extensions/{yfm → additional}/GPT/actions.js +0 -0
  122. /package/build/cjs/extensions/{yfm → additional}/GPT/commands.d.ts +0 -0
  123. /package/build/cjs/extensions/{yfm → additional}/GPT/commands.js +0 -0
  124. /package/build/cjs/extensions/{yfm → additional}/GPT/constants.d.ts +0 -0
  125. /package/build/cjs/extensions/{yfm → additional}/GPT/constants.js +0 -0
  126. /package/build/cjs/extensions/{yfm → additional}/GPT/gptExtension/gptExtension.js +0 -0
  127. /package/build/cjs/extensions/{yfm → additional}/GPT/gptExtension/view.css +0 -0
  128. /package/build/cjs/extensions/{yfm → additional}/GPT/gptExtension/view.js +0 -0
  129. /package/build/cjs/extensions/{yfm → additional}/GPT/hooks/useGpt.js +0 -0
  130. /package/build/cjs/extensions/{yfm → additional}/GPT/hooks/useGptHotKeys.d.ts +0 -0
  131. /package/build/cjs/extensions/{yfm → additional}/GPT/hooks/useGptHotKeys.js +0 -0
  132. /package/build/cjs/extensions/{yfm → additional}/GPT/hooks/useOverflowingHorizontalItems.d.ts +0 -0
  133. /package/build/cjs/extensions/{yfm → additional}/GPT/hooks/useOverflowingHorizontalItems.js +0 -0
  134. /package/build/cjs/extensions/{yfm → additional}/GPT/toolbar.d.ts +0 -0
  135. /package/build/cjs/extensions/{yfm → additional}/GPT/toolbar.js +0 -0
  136. /package/build/esm/extensions/{yfm → additional}/GPT/ErrorScreen/ErrorScreen.css +0 -0
  137. /package/build/esm/extensions/{yfm → additional}/GPT/ErrorScreen/ErrorScreen.d.ts +0 -0
  138. /package/build/esm/extensions/{yfm → additional}/GPT/ErrorScreen/ErrorScreen.js +0 -0
  139. /package/build/esm/extensions/{yfm → additional}/GPT/ErrorScreen/types.d.ts +0 -0
  140. /package/build/esm/extensions/{yfm → additional}/GPT/ErrorScreen/types.js +0 -0
  141. /package/build/esm/extensions/{yfm → additional}/GPT/GptDialog/GptDialog.css +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.css +0 -0
  154. /package/build/esm/extensions/{yfm → additional}/GPT/actions.d.ts +0 -0
  155. /package/build/esm/extensions/{yfm → additional}/GPT/actions.js +0 -0
  156. /package/build/esm/extensions/{yfm → additional}/GPT/commands.d.ts +0 -0
  157. /package/build/esm/extensions/{yfm → additional}/GPT/commands.js +0 -0
  158. /package/build/esm/extensions/{yfm → additional}/GPT/constants.d.ts +0 -0
  159. /package/build/esm/extensions/{yfm → additional}/GPT/constants.js +0 -0
  160. /package/build/esm/extensions/{yfm → additional}/GPT/gptExtension/gptExtension.js +0 -0
  161. /package/build/esm/extensions/{yfm → additional}/GPT/gptExtension/view.css +0 -0
  162. /package/build/esm/extensions/{yfm → additional}/GPT/gptExtension/view.js +0 -0
  163. /package/build/esm/extensions/{yfm → additional}/GPT/hooks/useGpt.js +0 -0
  164. /package/build/esm/extensions/{yfm → additional}/GPT/hooks/useGptHotKeys.d.ts +0 -0
  165. /package/build/esm/extensions/{yfm → additional}/GPT/hooks/useGptHotKeys.js +0 -0
  166. /package/build/esm/extensions/{yfm → additional}/GPT/hooks/useOverflowingHorizontalItems.d.ts +0 -0
  167. /package/build/esm/extensions/{yfm → additional}/GPT/hooks/useOverflowingHorizontalItems.js +0 -0
  168. /package/build/esm/extensions/{yfm → additional}/GPT/toolbar.d.ts +0 -0
  169. /package/build/esm/extensions/{yfm → additional}/GPT/toolbar.js +0 -0
@@ -1,7 +1,7 @@
1
1
  import { useMemo, useRef } from 'react';
2
2
  import { cnGptDialogPresetList } from '../PresetList/PresetList';
3
3
  import { useOverflowingHorizontalItems } from './useOverflowingHorizontalItems';
4
- export const usePresetList = ({ promptPresets, onPresetClick }) => {
4
+ export const usePresetList = ({ promptPresets, onPresetClick, }) => {
5
5
  const presetsContainerRef = useRef(null);
6
6
  const { visibleItems, hiddenItems, measured } = useOverflowingHorizontalItems({
7
7
  containerRef: presetsContainerRef,
@@ -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';
@@ -1,5 +1,6 @@
1
1
  import { Plugin, PluginKey } from 'prosemirror-state';
2
2
  import { DecorationSet } from 'prosemirror-view';
3
+ import { CommonAnswer } from './ErrorScreen/types';
3
4
  import type { GptWidgetDecoViewParams } from './gptExtension/view';
4
5
  export declare type GptWidgetMeta = {
5
6
  action: 'show';
@@ -10,4 +11,4 @@ export declare type GptWidgetMeta = {
10
11
  };
11
12
  declare const key: PluginKey<DecorationSet>;
12
13
  export { key as pluginKey };
13
- export declare const gptWidgetPlugin: (params: GptWidgetDecoViewParams) => Plugin;
14
+ export declare const gptWidgetPlugin: <AnswerData extends CommonAnswer = CommonAnswer, PromptData extends unknown = unknown>(params: GptWidgetDecoViewParams<AnswerData, PromptData>) => Plugin;
@@ -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,7 @@
1
1
  import type React from 'react';
2
+ import { CommonAnswer } from './ErrorScreen/types';
2
3
  import { GptDialogProps } from './GptDialog/GptDialog';
4
+ import { GptWidgetOptions } from './gptExtension/gptExtension';
3
5
  declare type CombinedKeyboardEvent = KeyboardEvent | React.KeyboardEvent;
4
6
  export declare function getAlertGptInfo(gptAlert: GptDialogProps['gptAlertProps']): {
5
7
  alertMessage: string;
@@ -10,4 +12,5 @@ export declare function getDisableReplaceButtonText(disablePromptPresets?: boole
10
12
  export declare function getInputPlaceHolder(disablePromptPresets?: boolean, disabledPromptPlaceholder?: string, customPromptPlaceholder?: string): string | undefined;
11
13
  export declare const isEnter: (event: CombinedKeyboardEvent) => boolean;
12
14
  export declare function focusWithoutScroll(element?: HTMLElement | null): void;
15
+ export declare function isEmptyGptPrompts<AnswerData extends CommonAnswer = CommonAnswer, PromptData extends unknown = unknown>(gptWidgetOptions: GptWidgetOptions<AnswerData, PromptData>, disablePromptPresets: boolean): boolean;
13
16
  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,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' }, open: { default: null } },
10
+ attrs: { class: { default: 'yfm-cut' } },
11
11
  content: `${CutNode.CutTitle} ${CutNode.CutContent}`,
12
12
  group: 'block yfm-cut',
13
13
  parseDOM: [{ tag: '.yfm-cut' }],
14
14
  toDOM(node) {
15
- return ['details', node.attrs, 0];
15
+ return ['div', node.attrs, 0];
16
16
  },
17
17
  selectable: true,
18
18
  allowSelection: true,
@@ -25,7 +25,7 @@ export const getSchemaSpecs = (opts, placeholder) => {
25
25
  group: 'block yfm-cut',
26
26
  parseDOM: [{ tag: '.yfm-cut-title' }],
27
27
  toDOM(node) {
28
- return ['summary', node.attrs, 0];
28
+ return ['div', 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,
@@ -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', open: true }, [
5
+ return cutType(schema).create({ class: 'yfm-cut open' }, [
6
6
  cutTitleType(schema).create(null),
7
7
  cutContentType(schema).create(null, content),
8
8
  ]);
@@ -1,3 +1,13 @@
1
1
  .yfm-cut-title .g-md-yfm-cut-title-inner {
2
2
  cursor: text;
3
+ }
4
+
5
+ .yfm-cut-content {
6
+ display: none;
7
+ overflow: hidden;
8
+ transition: height 0.3s ease-in-out;
9
+ }
10
+
11
+ .open > .yfm-cut-content {
12
+ display: revert;
3
13
  }
@@ -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('summary');
5
+ this.dom = document.createElement('div');
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');
@@ -38,7 +38,6 @@ 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');
42
41
  depth--;
43
42
  }
44
43
  }
@@ -86,10 +85,9 @@ class CutAutoOpenOnDragOver {
86
85
  this._timeout = setTimeout(this._openCut.bind(this), CutAutoOpenOnDragOver.OPEN_TIMEOUT);
87
86
  }
88
87
  _openCut() {
89
- var _a, _b;
88
+ var _a;
90
89
  if (this._editorView.dragging) {
91
90
  (_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');
93
91
  }
94
92
  this._clear();
95
93
  }
@@ -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.24.0' !== 'undefined' ? '13.24.0' : 'unknown';
2
+ export const VERSION = typeof '13.25.1' !== 'undefined' ? '13.25.1' : 'unknown';
package/build/styles.css CHANGED
@@ -1149,112 +1149,6 @@ body :has(.g-md-resizable_resizing) {
1149
1149
  .cm-file-upload-widget + .cm-file-upload-widget {
1150
1150
  margin-left: 2px;
1151
1151
  }
1152
- .g-md-link-placeholder-widget {
1153
- margin: 0 2px;
1154
- pointer-events: none;
1155
- }
1156
- .g-md-emoji-suggest__list.g-list {
1157
- width: 256px;
1158
- }
1159
- .g-md-emoji-suggest__list.g-list .g-list__empty-placeholder {
1160
- height: 28px;
1161
- padding-right: 12px;
1162
- padding-left: 12px;
1163
- }
1164
- .g-md-emoji-suggest__list-item {
1165
- cursor: pointer;
1166
- }
1167
- .g-md-emoji-suggest__item {
1168
- display: flex;
1169
- justify-content: space-between;
1170
- align-items: center;
1171
- width: 100%;
1172
- padding: 0 16px;
1173
- }
1174
- .g-md-emoji-suggest__item-info {
1175
- display: flex;
1176
- align-items: center;
1177
- }
1178
- .g-md-emoji-suggest__item-icon {
1179
- display: flex;
1180
- flex: 0 0 auto;
1181
- justify-content: center;
1182
- width: 20px;
1183
- margin-right: 8px;
1184
- font-size: var(--g-text-body-3-font-size);
1185
- line-height: var(--g-text-body-3-line-height);
1186
- font-weight: var(--g-text-body-font-weight);
1187
- }
1188
- .g-md-emoji-suggest__item-name {
1189
- margin-right: 12px;
1190
- white-space: nowrap;
1191
- }
1192
- .g-md-emoji-suggest__item-shortcuts {
1193
- display: inline-flex;
1194
- align-items: center;
1195
- column-gap: 4px;
1196
- }
1197
- .g-md-emoji-suggest__item-shortcut {
1198
- padding: 1px 2px;
1199
- white-space: nowrap;
1200
- border-radius: var(--g-border-radius-xs);
1201
- background-color: var(--g-color-base-generic);
1202
- font-family: var(--g-font-family-monospace);
1203
- font-size: var(--g-text-code-inline-1-font-size);
1204
- line-height: var(--g-text-code-inline-1-line-height);
1205
- font-weight: var(--g-text-code-font-weight);
1206
- }
1207
- .pm-h-folding-hidden {
1208
- display: none;
1209
- }
1210
-
1211
- .pm-h-folding-content {
1212
- padding-left: 28px;
1213
- }
1214
-
1215
- .pm-h-folding-separator {
1216
- position: relative;
1217
- }
1218
- .pm-h-folding-separator::before {
1219
- position: absolute;
1220
- z-index: 1;
1221
- bottom: -4px;
1222
- left: 0;
1223
- width: 12px;
1224
- height: 12px;
1225
- content: "";
1226
- background-color: var(--g-color-text-secondary);
1227
- mask-image: url('data:image/svg+xml;svg,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="none" viewBox="0 0 16 16"><path fill="currentColor" fill-rule="evenodd" d="M2 7.25a.75.75 0 0 0 0 1.5h5.69l-2.72 2.72a.75.75 0 1 0 1.06 1.06l4-4a.75.75 0 0 0 0-1.06l-4-4a.75.75 0 0 0-1.06 1.06l2.72 2.72zm7.47 4.22a.75.75 0 1 0 1.06 1.06l4-4a.75.75 0 0 0 0-1.06l-4-4a.75.75 0 1 0-1.06 1.06L12.94 8z" clip-rule="evenodd"/></svg>');
1228
- mask-size: 12px;
1229
- transform: translateY(80%);
1230
- }
1231
- .pm-h-folding-separator::after {
1232
- position: absolute;
1233
- z-index: 1;
1234
- bottom: -8px;
1235
- left: 16px;
1236
- display: block;
1237
- width: calc(100% - 16px - 56px - 6px);
1238
- content: "";
1239
- border-top: 1px dashed var(--g-color-line-generic);
1240
- }
1241
-
1242
- .pm-h-folding-label::after {
1243
- position: absolute;
1244
- z-index: 1;
1245
- right: 2px;
1246
- bottom: -6px;
1247
- display: block;
1248
- padding: 0 8px;
1249
- content: attr(data-value);
1250
- color: var(--g-color-text-misc);
1251
- border-radius: 4px;
1252
- background-color: var(--g-color-base-misc-medium-hover);
1253
- transform: translate(0, 50%);
1254
- font-size: var(--g-text-body-1-font-size);
1255
- line-height: var(--g-text-body-1-line-height);
1256
- font-weight: var(--g-text-body-font-weight);
1257
- }
1258
1152
  .g-md-gpt-dialog-error-screen__content {
1259
1153
  display: flex;
1260
1154
  align-items: center;
@@ -1379,6 +1273,112 @@ body :has(.g-md-resizable_resizing) {
1379
1273
  pointer-events: all;
1380
1274
  box-shadow: -8px 2px 16px -4px var(--g-color-private-purple-150), 8px 2px 16px -4px var(--g-color-private-blue-150);
1381
1275
  }
1276
+ .g-md-link-placeholder-widget {
1277
+ margin: 0 2px;
1278
+ pointer-events: none;
1279
+ }
1280
+ .g-md-emoji-suggest__list.g-list {
1281
+ width: 256px;
1282
+ }
1283
+ .g-md-emoji-suggest__list.g-list .g-list__empty-placeholder {
1284
+ height: 28px;
1285
+ padding-right: 12px;
1286
+ padding-left: 12px;
1287
+ }
1288
+ .g-md-emoji-suggest__list-item {
1289
+ cursor: pointer;
1290
+ }
1291
+ .g-md-emoji-suggest__item {
1292
+ display: flex;
1293
+ justify-content: space-between;
1294
+ align-items: center;
1295
+ width: 100%;
1296
+ padding: 0 16px;
1297
+ }
1298
+ .g-md-emoji-suggest__item-info {
1299
+ display: flex;
1300
+ align-items: center;
1301
+ }
1302
+ .g-md-emoji-suggest__item-icon {
1303
+ display: flex;
1304
+ flex: 0 0 auto;
1305
+ justify-content: center;
1306
+ width: 20px;
1307
+ margin-right: 8px;
1308
+ font-size: var(--g-text-body-3-font-size);
1309
+ line-height: var(--g-text-body-3-line-height);
1310
+ font-weight: var(--g-text-body-font-weight);
1311
+ }
1312
+ .g-md-emoji-suggest__item-name {
1313
+ margin-right: 12px;
1314
+ white-space: nowrap;
1315
+ }
1316
+ .g-md-emoji-suggest__item-shortcuts {
1317
+ display: inline-flex;
1318
+ align-items: center;
1319
+ column-gap: 4px;
1320
+ }
1321
+ .g-md-emoji-suggest__item-shortcut {
1322
+ padding: 1px 2px;
1323
+ white-space: nowrap;
1324
+ border-radius: var(--g-border-radius-xs);
1325
+ background-color: var(--g-color-base-generic);
1326
+ font-family: var(--g-font-family-monospace);
1327
+ font-size: var(--g-text-code-inline-1-font-size);
1328
+ line-height: var(--g-text-code-inline-1-line-height);
1329
+ font-weight: var(--g-text-code-font-weight);
1330
+ }
1331
+ .pm-h-folding-hidden {
1332
+ display: none;
1333
+ }
1334
+
1335
+ .pm-h-folding-content {
1336
+ padding-left: 28px;
1337
+ }
1338
+
1339
+ .pm-h-folding-separator {
1340
+ position: relative;
1341
+ }
1342
+ .pm-h-folding-separator::before {
1343
+ position: absolute;
1344
+ z-index: 1;
1345
+ bottom: -4px;
1346
+ left: 0;
1347
+ width: 12px;
1348
+ height: 12px;
1349
+ content: "";
1350
+ background-color: var(--g-color-text-secondary);
1351
+ mask-image: url('data:image/svg+xml;svg,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="none" viewBox="0 0 16 16"><path fill="currentColor" fill-rule="evenodd" d="M2 7.25a.75.75 0 0 0 0 1.5h5.69l-2.72 2.72a.75.75 0 1 0 1.06 1.06l4-4a.75.75 0 0 0 0-1.06l-4-4a.75.75 0 0 0-1.06 1.06l2.72 2.72zm7.47 4.22a.75.75 0 1 0 1.06 1.06l4-4a.75.75 0 0 0 0-1.06l-4-4a.75.75 0 1 0-1.06 1.06L12.94 8z" clip-rule="evenodd"/></svg>');
1352
+ mask-size: 12px;
1353
+ transform: translateY(80%);
1354
+ }
1355
+ .pm-h-folding-separator::after {
1356
+ position: absolute;
1357
+ z-index: 1;
1358
+ bottom: -8px;
1359
+ left: 16px;
1360
+ display: block;
1361
+ width: calc(100% - 16px - 56px - 6px);
1362
+ content: "";
1363
+ border-top: 1px dashed var(--g-color-line-generic);
1364
+ }
1365
+
1366
+ .pm-h-folding-label::after {
1367
+ position: absolute;
1368
+ z-index: 1;
1369
+ right: 2px;
1370
+ bottom: -6px;
1371
+ display: block;
1372
+ padding: 0 8px;
1373
+ content: attr(data-value);
1374
+ color: var(--g-color-text-misc);
1375
+ border-radius: 4px;
1376
+ background-color: var(--g-color-base-misc-medium-hover);
1377
+ transform: translate(0, 50%);
1378
+ font-size: var(--g-text-body-1-font-size);
1379
+ line-height: var(--g-text-body-1-line-height);
1380
+ font-weight: var(--g-text-body-font-weight);
1381
+ }
1382
1382
  .g-md-image-skeleton {
1383
1383
  vertical-align: middle;
1384
1384
  }
@@ -1435,6 +1435,16 @@ body :has(.g-md-resizable_resizing) {
1435
1435
  .yfm-cut-title .g-md-yfm-cut-title-inner {
1436
1436
  cursor: text;
1437
1437
  }
1438
+
1439
+ .yfm-cut-content {
1440
+ display: none;
1441
+ overflow: hidden;
1442
+ transition: height 0.3s ease-in-out;
1443
+ }
1444
+
1445
+ .open > .yfm-cut-content {
1446
+ display: revert;
1447
+ }
1438
1448
  .g-md-file-skeleton {
1439
1449
  display: inline-flex;
1440
1450
  align-items: center;
@@ -1525,6 +1535,28 @@ body :has(.g-md-resizable_resizing) {
1525
1535
  align-items: center;
1526
1536
  margin-bottom: var(--g-spacing-1);
1527
1537
  }
1538
+ .g-md-gpt-dialog-loading-screen__header {
1539
+ display: flex;
1540
+ align-items: center;
1541
+ margin-bottom: 8px;
1542
+ }
1543
+ .g-md-gpt-dialog-loading-screen__icon {
1544
+ margin-right: 4px;
1545
+ }
1546
+ .g-md-gpt-dialog-loading-screen__text {
1547
+ margin-right: 8px;
1548
+ font-size: var(--g-text-body-2-font-size);
1549
+ font-weight: 500;
1550
+ }
1551
+ .g-md-gpt-dialog-loading-screen__skeleton-small-button {
1552
+ width: 90px;
1553
+ height: 28px;
1554
+ margin-right: 8px;
1555
+ }
1556
+ .g-md-gpt-dialog-loading-screen__skeleton-medium-button {
1557
+ width: 120px;
1558
+ height: 28px;
1559
+ }
1528
1560
  .g-md-code-block-toolbar {
1529
1561
  margin: 2px 8px;
1530
1562
  }
@@ -1562,28 +1594,6 @@ body :has(.g-md-resizable_resizing) {
1562
1594
  .table-cell-floating-icon {
1563
1595
  transform: rotate(90deg);
1564
1596
  }
1565
- .g-md-gpt-dialog-loading-screen__header {
1566
- display: flex;
1567
- align-items: center;
1568
- margin-bottom: 8px;
1569
- }
1570
- .g-md-gpt-dialog-loading-screen__icon {
1571
- margin-right: 4px;
1572
- }
1573
- .g-md-gpt-dialog-loading-screen__text {
1574
- margin-right: 8px;
1575
- font-size: var(--g-text-body-2-font-size);
1576
- font-weight: 500;
1577
- }
1578
- .g-md-gpt-dialog-loading-screen__skeleton-small-button {
1579
- width: 90px;
1580
- height: 28px;
1581
- margin-right: 8px;
1582
- }
1583
- .g-md-gpt-dialog-loading-screen__skeleton-medium-button {
1584
- width: 120px;
1585
- height: 28px;
1586
- }
1587
1597
  .g-md-img-size-node-view__wrapper {
1588
1598
  position: relative;
1589
1599
  display: inline-block;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gravity-ui/markdown-editor",
3
- "version": "13.24.0",
3
+ "version": "13.25.1",
4
4
  "description": "Markdown wysiwyg and markup editor",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -1,9 +0,0 @@
1
- import type { FC } from 'react';
2
- import type { GptDialogProps } from '../GptDialog/GptDialog';
3
- export declare type PresetListProps<PromptData extends unknown = unknown> = {
4
- disablePromptPresets: GptDialogProps['disablePromptPresets'];
5
- promptPresets: GptDialogProps['promptPresets'];
6
- onPresetClick: (data: PromptData) => void;
7
- };
8
- export declare const cnGptDialogPresetList: import("@bem-react/classname").ClassNameFormatter;
9
- export declare const PresetList: FC<PresetListProps>;
@@ -1,14 +0,0 @@
1
- import type { DropdownMenuItem } from '@gravity-ui/uikit';
2
- import type { GptDialogProps } from '../GptDialog/GptDialog';
3
- import type { PresetListProps } from '../PresetList/PresetList';
4
- declare type UsePresetListProps = Pick<GptDialogProps, 'promptPresets'> & {
5
- onPresetClick: PresetListProps['onPresetClick'];
6
- };
7
- export declare const usePresetList: ({ promptPresets, onPresetClick }: UsePresetListProps) => {
8
- measured: boolean;
9
- showMoreButton: boolean;
10
- presetsContainerRef: import("react").RefObject<HTMLDivElement>;
11
- visiblePresets: import("../ErrorScreen/types").PromptPreset<unknown>[];
12
- hiddenPresets: DropdownMenuItem<unknown>[];
13
- };
14
- export {};
@@ -1,10 +0,0 @@
1
- import type { FC } from 'react';
2
- import type { GptDialogProps } from '../GptDialog/GptDialog';
3
- import './Presetlist.css';
4
- export declare type PresetListProps<PromptData extends unknown = unknown> = {
5
- disablePromptPresets: GptDialogProps['disablePromptPresets'];
6
- promptPresets: GptDialogProps['promptPresets'];
7
- onPresetClick: (data: PromptData) => void;
8
- };
9
- export declare const cnGptDialogPresetList: import("@bem-react/classname").ClassNameFormatter;
10
- export declare const PresetList: FC<PresetListProps>;
@@ -1,14 +0,0 @@
1
- import type { DropdownMenuItem } from '@gravity-ui/uikit';
2
- import type { GptDialogProps } from '../GptDialog/GptDialog';
3
- import type { PresetListProps } from '../PresetList/PresetList';
4
- declare type UsePresetListProps = Pick<GptDialogProps, 'promptPresets'> & {
5
- onPresetClick: PresetListProps['onPresetClick'];
6
- };
7
- export declare const usePresetList: ({ promptPresets, onPresetClick }: UsePresetListProps) => {
8
- measured: boolean;
9
- showMoreButton: boolean;
10
- presetsContainerRef: import("react").RefObject<HTMLDivElement>;
11
- visiblePresets: import("../ErrorScreen/types").PromptPreset<unknown>[];
12
- hiddenPresets: DropdownMenuItem<unknown>[];
13
- };
14
- export {};