@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
@@ -78,7 +78,8 @@ class SelectionTooltip {
78
78
  return;
79
79
  const { selection } = state;
80
80
  // Hide the tooltip if the selection is empty
81
- if (selection.empty || !(selection instanceof prosemirror_state_1.TextSelection)) {
81
+ if (selection.empty ||
82
+ !(selection instanceof prosemirror_state_1.TextSelection || selection instanceof prosemirror_state_1.AllSelection)) {
82
83
  this.tooltip.hide(view);
83
84
  return;
84
85
  }
@@ -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';
@@ -5,3 +5,4 @@ tslib_1.__exportStar(require("./base"), exports);
5
5
  tslib_1.__exportStar(require("./behavior"), exports);
6
6
  tslib_1.__exportStar(require("./markdown"), exports);
7
7
  tslib_1.__exportStar(require("./yfm"), exports);
8
+ tslib_1.__exportStar(require("./additional"), exports);
@@ -10,12 +10,12 @@ const getSchemaSpecs = (opts, placeholder) => {
10
10
  var _a, _b, _c, _d;
11
11
  return ({
12
12
  [const_1.CutNode.Cut]: {
13
- attrs: { class: { default: 'yfm-cut' }, open: { default: null } },
13
+ attrs: { class: { default: 'yfm-cut' } },
14
14
  content: `${const_1.CutNode.CutTitle} ${const_1.CutNode.CutContent}`,
15
15
  group: 'block yfm-cut',
16
16
  parseDOM: [{ tag: '.yfm-cut' }],
17
17
  toDOM(node) {
18
- return ['details', node.attrs, 0];
18
+ return ['div', node.attrs, 0];
19
19
  },
20
20
  selectable: true,
21
21
  allowSelection: true,
@@ -28,7 +28,7 @@ const getSchemaSpecs = (opts, placeholder) => {
28
28
  group: 'block yfm-cut',
29
29
  parseDOM: [{ tag: '.yfm-cut-title' }],
30
30
  toDOM(node) {
31
- return ['summary', node.attrs, 0];
31
+ return ['div', node.attrs, 0];
32
32
  },
33
33
  placeholder: {
34
34
  content: (_b = (_a = placeholder === null || placeholder === void 0 ? void 0 : placeholder[const_1.CutNode.CutTitle]) !== null && _a !== void 0 ? _a : opts === null || opts === void 0 ? void 0 : opts.yfmCutTitlePlaceholder) !== null && _b !== void 0 ? _b : DEFAULT_PLACEHOLDERS.Title,
@@ -5,7 +5,7 @@ const prosemirror_state_1 = require("prosemirror-state");
5
5
  const prosemirror_utils_1 = require("prosemirror-utils");
6
6
  const const_1 = require("../const");
7
7
  const createYfmCutNode = (schema) => (content) => {
8
- return (0, const_1.cutType)(schema).create({ class: 'yfm-cut open', open: true }, [
8
+ return (0, const_1.cutType)(schema).create({ class: 'yfm-cut open' }, [
9
9
  (0, const_1.cutTitleType)(schema).create(null),
10
10
  (0, const_1.cutContentType)(schema).create(null, content),
11
11
  ]);
@@ -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
  }
@@ -4,7 +4,7 @@ exports.YfmCutTitleNodeView = void 0;
4
4
  class YfmCutTitleNodeView {
5
5
  constructor(node) {
6
6
  this.node = node;
7
- this.dom = document.createElement('summary');
7
+ this.dom = document.createElement('div');
8
8
  this.dom.classList.add('yfm-cut-title');
9
9
  this.dom.replaceChildren((this.contentDOM = document.createElement('div')));
10
10
  this.contentDOM.classList.add('g-md-yfm-cut-title-inner');
@@ -42,7 +42,6 @@ function openParentYfmCuts($pos, domAtPos) {
42
42
  if ($pos.node(depth - 1).type === (0, const_1.cutType)(schema)) {
43
43
  const { node: cutDomNode } = domAtPos($pos.start(depth - 1), 0);
44
44
  cutDomNode.classList.add('open');
45
- cutDomNode.setAttribute('open', 'true');
46
45
  depth--;
47
46
  }
48
47
  }
@@ -90,10 +89,9 @@ class CutAutoOpenOnDragOver {
90
89
  this._timeout = setTimeout(this._openCut.bind(this), CutAutoOpenOnDragOver.OPEN_TIMEOUT);
91
90
  }
92
91
  _openCut() {
93
- var _a, _b;
92
+ var _a;
94
93
  if (this._editorView.dragging) {
95
94
  (_a = this._cutElem) === null || _a === void 0 ? void 0 : _a.classList.add('open');
96
- (_b = this._cutElem) === null || _b === void 0 ? void 0 : _b.setAttribute('open', 'true');
97
95
  }
98
96
  this._clear();
99
97
  }
@@ -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';
@@ -14,4 +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);
17
+ tslib_1.__exportStar(require("../additional/GPT"), exports);
@@ -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;
@@ -2,4 +2,4 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.VERSION = void 0;
4
4
  /** During build process, the current version will be injected here */
5
- exports.VERSION = typeof '13.24.0' !== 'undefined' ? '13.24.0' : 'unknown';
5
+ exports.VERSION = typeof '13.25.1' !== 'undefined' ? '13.25.1' : 'unknown';
@@ -57,7 +57,10 @@ export const MarkdownEditorView = React.forwardRef((props, ref) => {
57
57
  const editorMode = editor.currentMode;
58
58
  const markupSplitMode = editor.splitModeEnabled && editor.splitMode && editorMode === 'markup';
59
59
  const canRenderPreview = Boolean(editor.renderPreview && editorMode === 'markup' && !editor.splitModeEnabled);
60
- useKey((e) => canRenderPreview && isPreviewKeyDown(e), () => onShowPreviewChange(!showPreview), { event: 'keydown' }, [showPreview, editorMode, onShowPreviewChange, canRenderPreview]);
60
+ useKey((e) => canRenderPreview && isPreviewKeyDown(e), (e) => {
61
+ e.preventDefault();
62
+ onShowPreviewChange(!showPreview);
63
+ }, { event: 'keydown' }, [showPreview, editorMode, onShowPreviewChange, canRenderPreview]);
61
64
  const editorWrapperRef = useRef(null);
62
65
  const splitModeViewWrapperRef = useRef(null);
63
66
  useEffect(() => {
@@ -74,18 +77,19 @@ export const MarkdownEditorView = React.forwardRef((props, ref) => {
74
77
  onShowPreviewChange(false);
75
78
  }
76
79
  }, { event: 'keydown' }, [hidePreviewAfterSubmit, enableSubmitInPreview, showPreview, showPreview]);
77
- const settings = useMemo(() => (React.createElement(Settings, { mode: editorMode, onModeChange: onModeChange, toolbarVisibility: editor.toolbarVisible && !showPreview, onToolbarVisibilityChange: onToolbarVisibilityChange, onSplitModeChange: onSplitModeChange, splitModeEnabled: editor.splitModeEnabled, splitMode: editor.splitMode, stickyToolbar: stickyToolbar, onShowPreviewChange: onShowPreviewChange, showPreview: showPreview, renderPreviewButton: canRenderPreview })), [
78
- canRenderPreview,
79
- stickyToolbar,
80
- editor.splitMode,
81
- editor.splitModeEnabled,
82
- editor.toolbarVisible,
80
+ const settings = useMemo(() => (React.createElement(Settings, { mode: editorMode, settingsVisible: settingsVisible, onModeChange: onModeChange, toolbarVisibility: editor.toolbarVisible && !showPreview, onToolbarVisibilityChange: onToolbarVisibilityChange, onSplitModeChange: onSplitModeChange, splitModeEnabled: editor.splitModeEnabled, splitMode: editor.splitMode, stickyToolbar: stickyToolbar, onShowPreviewChange: onShowPreviewChange, showPreview: showPreview, renderPreviewButton: canRenderPreview })), [
83
81
  editorMode,
82
+ settingsVisible,
83
+ editor.toolbarVisible,
84
+ editor.splitModeEnabled,
85
+ editor.splitMode,
84
86
  onModeChange,
85
- onShowPreviewChange,
86
- onSplitModeChange,
87
- onToolbarVisibilityChange,
88
87
  showPreview,
88
+ onToolbarVisibilityChange,
89
+ onSplitModeChange,
90
+ stickyToolbar,
91
+ onShowPreviewChange,
92
+ canRenderPreview,
89
93
  ]);
90
94
  return (React.createElement(ErrorBoundary, { onError: (e) => {
91
95
  logger.error(e);
@@ -118,8 +122,8 @@ export const MarkdownEditorView = React.forwardRef((props, ref) => {
118
122
  })),
119
123
  settings)) : (React.createElement(React.Fragment, null,
120
124
  editorMode === 'wysiwyg' && (React.createElement(WysiwygEditorView, { editor: editor, autofocus: autofocus, settingsVisible: settingsVisible, toolbarConfig: wysiwygToolbarConfig, toolbarVisible: editor.toolbarVisible, hiddenActionsConfig: wysiwygHiddenActionsConfig, className: b('editor', { mode: editorMode }), toolbarClassName: b('toolbar'), stickyToolbar: stickyToolbar }, editor.toolbarVisible && settingsVisible && settings)),
121
- editorMode === 'markup' && (React.createElement(MarkupEditorView, { editor: editor, autofocus: autofocus, settingsVisible: settingsVisible, toolbarConfig: markupToolbarConfig, toolbarVisible: editor.toolbarVisible, splitMode: editor.splitMode, splitModeEnabled: editor.splitModeEnabled, hiddenActionsConfig: markupHiddenActionsConfig, className: b('editor', { mode: editorMode }), toolbarClassName: b('toolbar'), stickyToolbar: stickyToolbar }, editor.toolbarVisible && settingsVisible && settings)),
122
- !editor.toolbarVisible && settingsVisible && settings))),
125
+ editorMode === 'markup' && (React.createElement(MarkupEditorView, { editor: editor, autofocus: autofocus, settingsVisible: settingsVisible, toolbarConfig: markupToolbarConfig, toolbarVisible: editor.toolbarVisible, splitMode: editor.splitMode, splitModeEnabled: editor.splitModeEnabled, hiddenActionsConfig: markupHiddenActionsConfig, className: b('editor', { mode: editorMode }), toolbarClassName: b('toolbar'), stickyToolbar: stickyToolbar }, editor.toolbarVisible && settings)),
126
+ !editor.toolbarVisible && settings))),
123
127
  markupSplitMode && (React.createElement(React.Fragment, null,
124
128
  editor.splitMode === 'horizontal' ? (React.createElement(HorizontalDrag, { editor: editor, isMounted: isMounted, leftElRef: editorWrapperRef, rightElRef: splitModeViewWrapperRef, wrapperRef: divRef })) : (React.createElement("div", { className: b('resizer') })),
125
129
  React.createElement(SplitModeView, { editor: editor, ref: splitModeViewWrapperRef })))))));
@@ -129,13 +133,13 @@ const MarkupSearchAnchor = ({ mode }) => (React.createElement(React.Fragment, nu
129
133
  function Settings(props) {
130
134
  const wrapperRef = useRef(null);
131
135
  const isSticky = useSticky(wrapperRef) && props.toolbarVisibility && props.stickyToolbar;
132
- return (React.createElement("div", { className: b('settings-wrapper') },
136
+ return (React.createElement(React.Fragment, null, (props.renderPreviewButton || props.settingsVisible) && (React.createElement("div", { className: b('settings-wrapper') },
133
137
  React.createElement("div", { ref: wrapperRef, className: stickyCn.settings({
134
138
  withToolbar: props.toolbarVisibility,
135
139
  stickyActive: isSticky,
136
140
  }) },
137
141
  React.createElement(EditorSettings, Object.assign({}, props)),
138
- React.createElement(MarkupSearchAnchor, Object.assign({}, props)))));
142
+ React.createElement(MarkupSearchAnchor, Object.assign({}, props)))))));
139
143
  }
140
144
  function isPreviewKeyDown(e) {
141
145
  const modKey = isMac() ? e.metaKey : e.ctrlKey;
@@ -1,3 +1,3 @@
1
- declare const namesObj: Record<"bold" | "link" | "italic" | "strike" | "underline" | "mark" | "quote" | "mono" | "paragraph" | "anchor" | "table" | "image" | "code_inline" | "code_block" | "file" | "checkbox" | "bulletList" | "orderedList" | "emoji" | "tabs" | "yfm_cut" | "heading1" | "heading2" | "heading3" | "heading4" | "heading5" | "heading6" | "yfm_note" | "gpt" | "undo" | "redo" | "math_inline" | "math_block" | "mermaid" | "liftListItem" | "sinkListItem" | "yfm_block" | "yfm_html_block" | "yfm_layout" | "horizontalrule", string>;
1
+ declare const namesObj: Record<"bold" | "link" | "italic" | "strike" | "underline" | "mark" | "quote" | "mono" | "paragraph" | "anchor" | "table" | "image" | "code_inline" | "code_block" | "file" | "checkbox" | "bulletList" | "orderedList" | "emoji" | "tabs" | "yfm_cut" | "heading1" | "heading2" | "heading3" | "heading4" | "heading5" | "heading6" | "yfm_note" | "gpt" | "undo" | "redo" | "liftListItem" | "sinkListItem" | "yfm_block" | "yfm_html_block" | "yfm_layout" | "horizontalrule" | "math_inline" | "math_block" | "mermaid", string>;
2
2
  export declare const ActionName: Readonly<typeof namesObj>;
3
3
  export {};
@@ -1,6 +1,5 @@
1
1
  import { headingType, pType } from '../../extensions';
2
- // for typings from Math
3
- import { gptHotKeys } from '../../extensions/yfm/GPT/constants';
2
+ import { gptHotKeys } from '../../extensions/additional/GPT/constants';
4
3
  import { i18n as i18nHint } from '../../i18n/hints';
5
4
  import { i18n } from '../../i18n/menubar';
6
5
  import { Action as A, formatter as f } from '../../shortcuts';
@@ -4,6 +4,7 @@ import type { EditorMode, SplitMode } from '../Editor';
4
4
  import './index.css';
5
5
  export declare type EditorSettingsProps = Omit<SettingsContentProps, 'onClose'> & {
6
6
  renderPreviewButton?: boolean;
7
+ settingsVisible?: boolean;
7
8
  };
8
9
  export declare const EditorSettings: React.NamedExoticComponent<EditorSettingsProps>;
9
10
  declare type SettingsContentProps = ClassNameProps & {
@@ -17,7 +17,7 @@ const placement = ['bottom-end', 'top-end'];
17
17
  const bSettings = cn('editor-settings');
18
18
  const bContent = cn('settings-content');
19
19
  export const EditorSettings = React.memo(function EditorSettings(props) {
20
- const { className, onShowPreviewChange, showPreview, renderPreviewButton } = props;
20
+ const { className, onShowPreviewChange, showPreview, renderPreviewButton, settingsVisible } = props;
21
21
  const chevronRef = React.useRef(null);
22
22
  const [popupShown, , hidePopup, togglePopup] = useBooleanState(false);
23
23
  return (React.createElement("div", { className: bSettings(null, [className]) },
@@ -25,11 +25,12 @@ export const EditorSettings = React.memo(function EditorSettings(props) {
25
25
  React.createElement(ActionTooltip, { openDelay: ToolbarTooltipDelay.Open, closeDelay: ToolbarTooltipDelay.Close, title: i18n('preview_hint'), hotkey: "mod+shift+p" },
26
26
  React.createElement(Button, { size: "m", view: "flat", pin: "round-round", className: bSettings('preview-button'), onClick: () => onShowPreviewChange === null || onShowPreviewChange === void 0 ? void 0 : onShowPreviewChange(!showPreview), selected: showPreview },
27
27
  React.createElement(Icon, { data: Eye }))),
28
- React.createElement("div", { className: bSettings('separator') }))),
29
- React.createElement(Button, { size: "m", view: "flat", ref: chevronRef, pin: "round-round", onClick: togglePopup, className: bSettings('dropdown-button') },
30
- React.createElement(Icon, { data: Gear })),
31
- React.createElement(Popup, { open: popupShown, anchorRef: chevronRef, placement: placement, onClose: hidePopup },
32
- React.createElement(SettingsContent, Object.assign({}, props, { onClose: hidePopup, className: bSettings('content') })))));
28
+ settingsVisible && React.createElement("div", { className: bSettings('separator') }))),
29
+ settingsVisible && (React.createElement(React.Fragment, null,
30
+ React.createElement(Button, { size: "m", view: "flat", ref: chevronRef, pin: "round-round", onClick: togglePopup, className: bSettings('dropdown-button') },
31
+ React.createElement(Icon, { data: Gear })),
32
+ React.createElement(Popup, { open: popupShown, anchorRef: chevronRef, placement: placement, onClose: hidePopup },
33
+ React.createElement(SettingsContent, Object.assign({}, props, { onClose: hidePopup, className: bSettings('content') })))))));
33
34
  });
34
35
  const mdHelpPlacement = ['bottom', 'bottom-end', 'right-start', 'right', 'left'];
35
36
  const SettingsContent = function SettingsContent({ mode, onClose, onModeChange, toolbarVisibility, onToolbarVisibilityChange, onSplitModeChange, splitMode = false, splitModeEnabled, className, showPreview, }) {
@@ -1,4 +1,4 @@
1
- import type { FC } from 'react';
1
+ /// <reference types="react" />
2
2
  import { AlertProps } from '@gravity-ui/uikit';
3
3
  import type { CommonAnswer, GptRequestData, PromptPreset } from '../ErrorScreen/types';
4
4
  import './GptDialog.css';
@@ -26,4 +26,4 @@ export declare type GptDialogProps<AnswerData extends CommonAnswer = CommonAnswe
26
26
  };
27
27
  };
28
28
  export declare const cnGptDialog: import("@bem-react/classname").ClassNameFormatter;
29
- export declare const GptDialog: FC<GptDialogProps>;
29
+ export declare const GptDialog: <AnswerData extends CommonAnswer = CommonAnswer, PromptData extends unknown = unknown>({ markup, answerRender, promptPresets, disablePromptPresets, customPromptPlaceholder, disabledPromptPlaceholder, onCustomPromptApply, onPromptPresetClick, onTryAgain, onApplyResult, onClose, onLike, onDislike, onUpdate, gptAlertProps, }: GptDialogProps<AnswerData, PromptData>) => JSX.Element;
@@ -0,0 +1,4 @@
1
+ import type { Command, EditorView } from '../../../../cm/view';
2
+ export declare const showMarkupGpt: (view: EditorView) => void;
3
+ export declare const hideMarkupGpt: (view: EditorView) => void;
4
+ export declare const runMarkupGpt: Command;
@@ -0,0 +1,12 @@
1
+ import { HideMarkupGptEffect, ShowMarkupGptEffect } from './effects';
2
+ export const showMarkupGpt = (view) => {
3
+ view.dispatch({ effects: [ShowMarkupGptEffect.of(null)] });
4
+ };
5
+ export const hideMarkupGpt = (view) => {
6
+ view.dispatch({ effects: [HideMarkupGptEffect.of(null)] });
7
+ };
8
+ export const runMarkupGpt = (view) => {
9
+ if (view)
10
+ showMarkupGpt(view);
11
+ return true;
12
+ };
@@ -0,0 +1,2 @@
1
+ export declare const ShowMarkupGptEffect: import("@codemirror/state").StateEffectType<null>;
2
+ export declare const HideMarkupGptEffect: import("@codemirror/state").StateEffectType<null>;
@@ -0,0 +1,3 @@
1
+ import { StateEffect } from '../../../../cm/state';
2
+ export const ShowMarkupGptEffect = StateEffect.define();
3
+ export const HideMarkupGptEffect = StateEffect.define();
@@ -0,0 +1,5 @@
1
+ import { GptWidgetOptions } from '../../..';
2
+ import { CommonAnswer } from '../ErrorScreen/types';
3
+ export { mGptToolbarItem } from './toolbar';
4
+ export { showMarkupGpt, hideMarkupGpt } from './commands';
5
+ export declare function mGptExtension<AnswerData extends CommonAnswer = CommonAnswer, PromptData extends unknown = unknown>(props: GptWidgetOptions<AnswerData, PromptData>): import("@codemirror/state").Extension[];
@@ -0,0 +1,17 @@
1
+ import { keymap } from '@codemirror/view';
2
+ import { gptHotKeys } from '../constants';
3
+ import { runMarkupGpt } from './commands';
4
+ import { mGptPlugin } from './plugin';
5
+ export { mGptToolbarItem } from './toolbar';
6
+ export { showMarkupGpt, hideMarkupGpt } from './commands';
7
+ export function mGptExtension(props) {
8
+ return [
9
+ mGptPlugin(props).extension,
10
+ keymap.of([
11
+ {
12
+ key: gptHotKeys.openGptKey,
13
+ run: runMarkupGpt,
14
+ },
15
+ ]),
16
+ ];
17
+ }
@@ -0,0 +1,23 @@
1
+ import { GptWidgetOptions } from '../../..';
2
+ import { type DecorationSet, type EditorView, ViewPlugin, type ViewUpdate } from '../../../../cm/view';
3
+ import { CommonAnswer } from '../ErrorScreen/types';
4
+ export declare function mGptPlugin<AnswerData extends CommonAnswer = CommonAnswer, PromptData extends unknown = unknown>(gptProps: GptWidgetOptions<AnswerData, PromptData>): ViewPlugin<{
5
+ readonly _view: EditorView;
6
+ readonly _renderItem: import("../../..").RendererItem;
7
+ _anchor: Element | null;
8
+ decos: DecorationSet;
9
+ disablePromptPresets: boolean;
10
+ markup: string | null;
11
+ selectedPosition: {
12
+ from: number;
13
+ to: number;
14
+ };
15
+ update(update: ViewUpdate): void;
16
+ docViewUpdate(): void;
17
+ destroy(): void;
18
+ renderPopup(): JSX.Element | null;
19
+ _getDecorationText(update: ViewUpdate, from: number, to: number): string;
20
+ _clearSelectedText(): void;
21
+ _setSelectedText(str: string): void;
22
+ _onApplyResult(changedMarkup: string): void;
23
+ }>;
@@ -0,0 +1,117 @@
1
+ import { WidgetType } from '@codemirror/view';
2
+ import { Decoration, ViewPlugin, } from '../../../../cm/view';
3
+ import { ReactRendererFacet } from '../../../../markup';
4
+ import { WIDGET_DECO_CLASS_NAME } from '../constants';
5
+ import { isEmptyGptPrompts } from '../utils';
6
+ import { hideMarkupGpt } from './commands';
7
+ import { HideMarkupGptEffect, ShowMarkupGptEffect } from './effects';
8
+ import { renderPopup } from './popup';
9
+ class SpanWidget extends WidgetType {
10
+ constructor(className, textContent) {
11
+ super();
12
+ this.className = '';
13
+ this.textContent = '';
14
+ this.className = className;
15
+ this.textContent = textContent;
16
+ }
17
+ toDOM() {
18
+ const spanElem = document.createElement('span');
19
+ spanElem.className = this.className;
20
+ spanElem.textContent = this.textContent;
21
+ return spanElem;
22
+ }
23
+ }
24
+ export function mGptPlugin(gptProps) {
25
+ return ViewPlugin.fromClass(class {
26
+ constructor(view) {
27
+ this._anchor = null;
28
+ this.decos = Decoration.none;
29
+ this.disablePromptPresets = true;
30
+ this.markup = null;
31
+ this.selectedPosition = {
32
+ from: 0,
33
+ to: 0,
34
+ };
35
+ this._view = view;
36
+ this._renderItem = view.state
37
+ .facet(ReactRendererFacet)
38
+ .createItem('gpt-in-markup-mode', () => this.renderPopup());
39
+ }
40
+ update(update) {
41
+ if (update.docChanged || update.selectionSet) {
42
+ this.decos = Decoration.none;
43
+ return;
44
+ }
45
+ this.decos = this.decos.map(update.changes);
46
+ const { from, to } = update.state.selection.main;
47
+ this.selectedPosition.from = from;
48
+ this.selectedPosition.to = to;
49
+ for (const tr of update.transactions) {
50
+ for (const eff of tr.effects) {
51
+ if (eff.is(ShowMarkupGptEffect)) {
52
+ this._setSelectedText(this._getDecorationText(update, from, to));
53
+ if (from === to) {
54
+ this.disablePromptPresets = true;
55
+ if (isEmptyGptPrompts(gptProps, true))
56
+ return;
57
+ const decorationWidget = Decoration.widget({
58
+ widget: new SpanWidget(WIDGET_DECO_CLASS_NAME, ' '),
59
+ });
60
+ this.decos = Decoration.set([decorationWidget.range(from)]);
61
+ return;
62
+ }
63
+ this.disablePromptPresets = false;
64
+ if (isEmptyGptPrompts(gptProps, false))
65
+ return;
66
+ this.decos = Decoration.set([
67
+ {
68
+ from,
69
+ to,
70
+ value: Decoration.mark({ class: WIDGET_DECO_CLASS_NAME }),
71
+ },
72
+ ]);
73
+ }
74
+ if (eff.is(HideMarkupGptEffect)) {
75
+ this.decos = Decoration.none;
76
+ }
77
+ }
78
+ }
79
+ }
80
+ docViewUpdate() {
81
+ this._anchor = this._view.dom
82
+ .getElementsByClassName(WIDGET_DECO_CLASS_NAME)
83
+ .item(0);
84
+ this._renderItem.rerender();
85
+ }
86
+ destroy() {
87
+ this._clearSelectedText();
88
+ this._renderItem.remove();
89
+ }
90
+ renderPopup() {
91
+ if (!this._anchor || this.markup === null) {
92
+ return null;
93
+ }
94
+ return renderPopup(this._anchor, Object.assign(Object.assign({}, gptProps), { disablePromptPresets: this.disablePromptPresets, onClose: () => hideMarkupGpt(this._view), markup: this.markup, onApplyResult: (changedMarkup) => this._onApplyResult(changedMarkup) }));
95
+ }
96
+ _getDecorationText(update, from, to) {
97
+ return update.state.doc.sliceString(from, to);
98
+ }
99
+ _clearSelectedText() {
100
+ this.markup = null;
101
+ }
102
+ _setSelectedText(str) {
103
+ this.markup = str;
104
+ }
105
+ _onApplyResult(changedMarkup) {
106
+ const { from, to } = this.selectedPosition;
107
+ const changes = [{ from: from, to: to, insert: changedMarkup }];
108
+ const transaction = this._view.state.update({
109
+ changes: changes,
110
+ effects: [HideMarkupGptEffect.of(null)],
111
+ });
112
+ this._view.dispatch(transaction);
113
+ }
114
+ }, {
115
+ decorations: (value) => value.decos,
116
+ });
117
+ }
@@ -0,0 +1,12 @@
1
+ /// <reference types="react" />
2
+ import { PopupProps } from '@gravity-ui/uikit';
3
+ import { CommonAnswer } from '../ErrorScreen/types';
4
+ import { GptDialogProps } from '../GptDialog/GptDialog';
5
+ declare type Props<AnswerData extends CommonAnswer = CommonAnswer, PromptData extends unknown = unknown> = {
6
+ onClose: () => void;
7
+ markup: string;
8
+ onConfirmOk?: () => void;
9
+ onConfirmCancel?: () => void;
10
+ } & GptDialogProps<AnswerData, PromptData> & Pick<PopupProps, 'anchorRef' | 'container'>;
11
+ export declare function renderPopup<AnswerData extends CommonAnswer = CommonAnswer, PromptData extends unknown = unknown>(anchor: HTMLElement, props: Props<AnswerData, PromptData>): JSX.Element;
12
+ export {};
@@ -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
+ };
@@ -0,0 +1,10 @@
1
+ import { CommonAnswer } from '../ErrorScreen/types';
2
+ import type { GptDialogProps } from '../GptDialog/GptDialog';
3
+ import './Presetlist.css';
4
+ export declare type PresetListProps<AnswerData extends CommonAnswer = CommonAnswer, PromptData extends unknown = unknown> = {
5
+ disablePromptPresets: GptDialogProps<AnswerData, PromptData>['disablePromptPresets'];
6
+ promptPresets: GptDialogProps<AnswerData, PromptData>['promptPresets'];
7
+ onPresetClick: (data?: PromptData) => void;
8
+ };
9
+ export declare const cnGptDialogPresetList: import("@bem-react/classname").ClassNameFormatter;
10
+ export declare const PresetList: <AnswerData extends CommonAnswer = CommonAnswer, PromptData extends unknown = unknown>({ disablePromptPresets, promptPresets, onPresetClick, }: PresetListProps<AnswerData, PromptData>) => JSX.Element;
@@ -7,7 +7,7 @@ import { useGptHotKeys } from '../hooks/useGptHotKeys';
7
7
  import { usePresetList } from '../hooks/usePresetList';
8
8
  import './Presetlist.css';
9
9
  export const cnGptDialogPresetList = cn('gpt-dialog-preset-list');
10
- const PresetItem = ({ preset, onPresetClick, disablePromptPresets, hotKey }) => {
10
+ const PresetItem = ({ preset, onPresetClick, disablePromptPresets, hotKey, }) => {
11
11
  useGptHotKeys(hotKey, () => {
12
12
  onPresetClick(preset.data);
13
13
  }, { enableOnFormTags: true, enableOnContentEditable: true });
@@ -1,9 +1,9 @@
1
- import { Action, ExtensionWithOptions } from 'src/core';
1
+ import { Action, ExtensionBuilder } from '../../../../core';
2
2
  import type { CommonAnswer } from '../ErrorScreen/types';
3
3
  import type { GptWidgetDecoViewParams } from './view';
4
4
  export declare const gptActionName = "addGptWidget";
5
5
  export declare type GptWidgetOptions<AnswerData extends CommonAnswer = CommonAnswer, PromptData extends unknown = unknown> = Pick<GptWidgetDecoViewParams<AnswerData, PromptData>, 'gptPopupContainer' | 'answerRender' | 'onApplyResult' | 'promptPresets' | 'customPromptPlaceholder' | 'disabledPromptPlaceholder' | 'onCustomPromptApply' | 'onPromptPresetClick' | 'onTryAgain' | 'onLike' | 'onDislike' | 'onClose' | 'onUpdate' | 'gptAlertProps'>;
6
- export declare const gptExtension: ExtensionWithOptions<GptWidgetOptions>;
6
+ export declare const gptExtension: <AnswerData extends CommonAnswer = CommonAnswer, PromptData extends unknown = unknown>(builder: ExtensionBuilder, options: GptWidgetOptions<AnswerData, PromptData>) => void;
7
7
  declare global {
8
8
  namespace WysiwygEditor {
9
9
  interface Actions {
@@ -13,7 +13,7 @@ export declare type GptWidgetDecoViewParams<AnswerData extends CommonAnswer = Co
13
13
  onApplyResult?: GptDialogProps['onApplyResult'];
14
14
  gptPopupContainer?: PopupProps['container'];
15
15
  };
16
- export declare class GptWidgetDecoView implements Required<PluginView> {
16
+ export declare class GptWidgetDecoView<AnswerData extends CommonAnswer = CommonAnswer, PromptData extends unknown = unknown> implements Required<PluginView> {
17
17
  private readonly _view;
18
18
  private readonly _renderer;
19
19
  private _decoElem;
@@ -21,7 +21,7 @@ export declare class GptWidgetDecoView implements Required<PluginView> {
21
21
  private _serializer;
22
22
  private _parser;
23
23
  private _confirmOpen;
24
- constructor(view: EditorView, params: GptWidgetDecoViewParams);
24
+ constructor(view: EditorView, params: GptWidgetDecoViewParams<AnswerData, PromptData>);
25
25
  update(view: EditorView, prevState: EditorState): void;
26
26
  destroy(): void;
27
27
  private _resetState;
@@ -15,7 +15,7 @@ export declare const useGpt: <AnswerData extends CommonAnswer = CommonAnswer, Pr
15
15
  handleCustomPromptUpdate: import("react").Dispatch<import("react").SetStateAction<string>>;
16
16
  handleCustomPromptKeyPress: import("react").KeyboardEventHandler<HTMLInputElement>;
17
17
  handleCustomPromptApply: () => Promise<void>;
18
- handlePresetClick: (data: PromptData) => void;
18
+ handlePresetClick: (data?: PromptData | undefined) => void;
19
19
  handleTryAgain: () => Promise<void>;
20
20
  handleFreshStart: () => void;
21
21
  handleApplyResult: () => void;
@@ -0,0 +1,15 @@
1
+ import type { DropdownMenuItem } from '@gravity-ui/uikit';
2
+ import { CommonAnswer } from '../ErrorScreen/types';
3
+ import type { GptDialogProps } from '../GptDialog/GptDialog';
4
+ import type { PresetListProps } from '../PresetList/PresetList';
5
+ declare type UsePresetListProps<AnswerData extends CommonAnswer = CommonAnswer, PromptData extends unknown = unknown> = Pick<GptDialogProps<AnswerData, PromptData>, 'promptPresets'> & {
6
+ onPresetClick: PresetListProps<AnswerData, PromptData>['onPresetClick'];
7
+ };
8
+ export declare const usePresetList: <AnswerData extends CommonAnswer = CommonAnswer, PromptData extends unknown = unknown>({ promptPresets, onPresetClick, }: UsePresetListProps<AnswerData, PromptData>) => {
9
+ measured: boolean;
10
+ showMoreButton: boolean;
11
+ presetsContainerRef: import("react").RefObject<HTMLDivElement>;
12
+ visiblePresets: import("../ErrorScreen/types").PromptPreset<PromptData>[];
13
+ hiddenPresets: DropdownMenuItem<unknown>[];
14
+ };
15
+ export {};