@gravity-ui/markdown-editor 13.25.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 (40) hide show
  1. package/build/cjs/extensions/additional/GPT/GptDialog/GptDialog.d.ts +2 -2
  2. package/build/cjs/extensions/additional/GPT/MarkupGpt/index.d.ts +2 -1
  3. package/build/cjs/extensions/additional/GPT/MarkupGpt/plugin.d.ts +2 -1
  4. package/build/cjs/extensions/additional/GPT/MarkupGpt/popup.d.ts +4 -3
  5. package/build/cjs/extensions/additional/GPT/PresetList/PresetList.d.ts +6 -6
  6. package/build/cjs/extensions/additional/GPT/PresetList/PresetList.js +1 -1
  7. package/build/cjs/extensions/additional/GPT/gptExtension/gptExtension.d.ts +2 -2
  8. package/build/cjs/extensions/additional/GPT/gptExtension/view.d.ts +2 -2
  9. package/build/cjs/extensions/additional/GPT/hooks/useGpt.d.ts +1 -1
  10. package/build/cjs/extensions/additional/GPT/hooks/usePresetList.d.ts +5 -4
  11. package/build/cjs/extensions/additional/GPT/hooks/usePresetList.js +1 -1
  12. package/build/cjs/extensions/additional/GPT/plugin.d.ts +2 -1
  13. package/build/cjs/extensions/additional/GPT/utils.d.ts +2 -1
  14. package/build/cjs/extensions/yfm/YfmCut/YfmCutSpecs/schema.js +3 -3
  15. package/build/cjs/extensions/yfm/YfmCut/actions/toYfmCut.js +1 -1
  16. package/build/cjs/extensions/yfm/YfmCut/nodeviews/yfm-cut-title.css +10 -0
  17. package/build/cjs/extensions/yfm/YfmCut/nodeviews/yfm-cut-title.js +1 -1
  18. package/build/cjs/extensions/yfm/YfmCut/plugins/auto-open.js +1 -3
  19. package/build/cjs/version.js +1 -1
  20. package/build/esm/extensions/additional/GPT/GptDialog/GptDialog.d.ts +2 -2
  21. package/build/esm/extensions/additional/GPT/MarkupGpt/index.d.ts +2 -1
  22. package/build/esm/extensions/additional/GPT/MarkupGpt/plugin.d.ts +2 -1
  23. package/build/esm/extensions/additional/GPT/MarkupGpt/popup.d.ts +4 -3
  24. package/build/esm/extensions/additional/GPT/PresetList/PresetList.d.ts +6 -6
  25. package/build/esm/extensions/additional/GPT/PresetList/PresetList.js +1 -1
  26. package/build/esm/extensions/additional/GPT/gptExtension/gptExtension.d.ts +2 -2
  27. package/build/esm/extensions/additional/GPT/gptExtension/view.d.ts +2 -2
  28. package/build/esm/extensions/additional/GPT/hooks/useGpt.d.ts +1 -1
  29. package/build/esm/extensions/additional/GPT/hooks/usePresetList.d.ts +5 -4
  30. package/build/esm/extensions/additional/GPT/hooks/usePresetList.js +1 -1
  31. package/build/esm/extensions/additional/GPT/plugin.d.ts +2 -1
  32. package/build/esm/extensions/additional/GPT/utils.d.ts +2 -1
  33. package/build/esm/extensions/yfm/YfmCut/YfmCutSpecs/schema.js +3 -3
  34. package/build/esm/extensions/yfm/YfmCut/actions/toYfmCut.js +1 -1
  35. package/build/esm/extensions/yfm/YfmCut/nodeviews/yfm-cut-title.css +10 -0
  36. package/build/esm/extensions/yfm/YfmCut/nodeviews/yfm-cut-title.js +1 -1
  37. package/build/esm/extensions/yfm/YfmCut/plugins/auto-open.js +1 -3
  38. package/build/esm/version.js +1 -1
  39. package/build/styles.css +10 -0
  40. package/package.json +1 -1
@@ -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
  export declare type GptDialogProps<AnswerData extends CommonAnswer = CommonAnswer, PromptData extends unknown = unknown> = {
@@ -25,4 +25,4 @@ export declare type GptDialogProps<AnswerData extends CommonAnswer = CommonAnswe
25
25
  };
26
26
  };
27
27
  export declare const cnGptDialog: import("@bem-react/classname").ClassNameFormatter;
28
- export declare const GptDialog: FC<GptDialogProps>;
28
+ 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;
@@ -1,4 +1,5 @@
1
1
  import { GptWidgetOptions } from '../../..';
2
+ import { CommonAnswer } from '../ErrorScreen/types';
2
3
  export { mGptToolbarItem } from './toolbar';
3
4
  export { showMarkupGpt, hideMarkupGpt } from './commands';
4
- export declare function mGptExtension(props: GptWidgetOptions): import("@codemirror/state").Extension[];
5
+ export declare function mGptExtension<AnswerData extends CommonAnswer = CommonAnswer, PromptData extends unknown = unknown>(props: GptWidgetOptions<AnswerData, PromptData>): import("@codemirror/state").Extension[];
@@ -1,6 +1,7 @@
1
1
  import { GptWidgetOptions } from '../../..';
2
2
  import { type DecorationSet, type EditorView, ViewPlugin, type ViewUpdate } from '../../../../cm/view';
3
- export declare function mGptPlugin(gptProps: GptWidgetOptions): ViewPlugin<{
3
+ import { CommonAnswer } from '../ErrorScreen/types';
4
+ export declare function mGptPlugin<AnswerData extends CommonAnswer = CommonAnswer, PromptData extends unknown = unknown>(gptProps: GptWidgetOptions<AnswerData, PromptData>): ViewPlugin<{
4
5
  readonly _view: EditorView;
5
6
  readonly _renderItem: import("../../..").RendererItem;
6
7
  _anchor: Element | null;
@@ -1,11 +1,12 @@
1
1
  /// <reference types="react" />
2
2
  import { PopupProps } from '@gravity-ui/uikit';
3
+ import { CommonAnswer } from '../ErrorScreen/types';
3
4
  import { GptDialogProps } from '../GptDialog/GptDialog';
4
- declare type Props = {
5
+ declare type Props<AnswerData extends CommonAnswer = CommonAnswer, PromptData extends unknown = unknown> = {
5
6
  onClose: () => void;
6
7
  markup: string;
7
8
  onConfirmOk?: () => void;
8
9
  onConfirmCancel?: () => void;
9
- } & GptDialogProps & Pick<PopupProps, 'anchorRef' | 'container'>;
10
- export declare function renderPopup(anchor: HTMLElement, props: Props): JSX.Element;
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;
11
12
  export {};
@@ -1,9 +1,9 @@
1
- import type { FC } from 'react';
1
+ import { CommonAnswer } from '../ErrorScreen/types';
2
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;
3
+ export declare type PresetListProps<AnswerData extends CommonAnswer = CommonAnswer, PromptData extends unknown = unknown> = {
4
+ disablePromptPresets: GptDialogProps<AnswerData, PromptData>['disablePromptPresets'];
5
+ promptPresets: GptDialogProps<AnswerData, PromptData>['promptPresets'];
6
+ onPresetClick: (data?: PromptData) => void;
7
7
  };
8
8
  export declare const cnGptDialogPresetList: import("@bem-react/classname").ClassNameFormatter;
9
- export declare const PresetList: FC<PresetListProps>;
9
+ export declare const PresetList: <AnswerData extends CommonAnswer = CommonAnswer, PromptData extends unknown = unknown>({ disablePromptPresets, promptPresets, onPresetClick, }: PresetListProps<AnswerData, PromptData>) => JSX.Element;
@@ -10,7 +10,7 @@ const constants_1 = require("../constants");
10
10
  const useGptHotKeys_1 = require("../hooks/useGptHotKeys");
11
11
  const usePresetList_1 = require("../hooks/usePresetList");
12
12
  exports.cnGptDialogPresetList = (0, classname_1.cn)('gpt-dialog-preset-list');
13
- const PresetItem = ({ preset, onPresetClick, disablePromptPresets, hotKey }) => {
13
+ const PresetItem = ({ preset, onPresetClick, disablePromptPresets, hotKey, }) => {
14
14
  (0, useGptHotKeys_1.useGptHotKeys)(hotKey, () => {
15
15
  onPresetClick(preset.data);
16
16
  }, { 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 {
@@ -12,7 +12,7 @@ export declare type GptWidgetDecoViewParams<AnswerData extends CommonAnswer = Co
12
12
  onApplyResult?: GptDialogProps['onApplyResult'];
13
13
  gptPopupContainer?: PopupProps['container'];
14
14
  };
15
- export declare class GptWidgetDecoView implements Required<PluginView> {
15
+ export declare class GptWidgetDecoView<AnswerData extends CommonAnswer = CommonAnswer, PromptData extends unknown = unknown> implements Required<PluginView> {
16
16
  private readonly _view;
17
17
  private readonly _renderer;
18
18
  private _decoElem;
@@ -20,7 +20,7 @@ export declare class GptWidgetDecoView implements Required<PluginView> {
20
20
  private _serializer;
21
21
  private _parser;
22
22
  private _confirmOpen;
23
- constructor(view: EditorView, params: GptWidgetDecoViewParams);
23
+ constructor(view: EditorView, params: GptWidgetDecoViewParams<AnswerData, PromptData>);
24
24
  update(view: EditorView, prevState: EditorState): void;
25
25
  destroy(): void;
26
26
  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;
@@ -1,14 +1,15 @@
1
1
  import type { DropdownMenuItem } from '@gravity-ui/uikit';
2
+ import { CommonAnswer } from '../ErrorScreen/types';
2
3
  import type { GptDialogProps } from '../GptDialog/GptDialog';
3
4
  import type { PresetListProps } from '../PresetList/PresetList';
4
- declare type UsePresetListProps = Pick<GptDialogProps, 'promptPresets'> & {
5
- onPresetClick: PresetListProps['onPresetClick'];
5
+ declare type UsePresetListProps<AnswerData extends CommonAnswer = CommonAnswer, PromptData extends unknown = unknown> = Pick<GptDialogProps<AnswerData, PromptData>, 'promptPresets'> & {
6
+ onPresetClick: PresetListProps<AnswerData, PromptData>['onPresetClick'];
6
7
  };
7
- export declare const usePresetList: ({ promptPresets, onPresetClick }: UsePresetListProps) => {
8
+ export declare const usePresetList: <AnswerData extends CommonAnswer = CommonAnswer, PromptData extends unknown = unknown>({ promptPresets, onPresetClick, }: UsePresetListProps<AnswerData, PromptData>) => {
8
9
  measured: boolean;
9
10
  showMoreButton: boolean;
10
11
  presetsContainerRef: import("react").RefObject<HTMLDivElement>;
11
- visiblePresets: import("../ErrorScreen/types").PromptPreset<unknown>[];
12
+ visiblePresets: import("../ErrorScreen/types").PromptPreset<PromptData>[];
12
13
  hiddenPresets: DropdownMenuItem<unknown>[];
13
14
  };
14
15
  export {};
@@ -4,7 +4,7 @@ exports.usePresetList = void 0;
4
4
  const react_1 = require("react");
5
5
  const PresetList_1 = require("../PresetList/PresetList");
6
6
  const useOverflowingHorizontalItems_1 = require("./useOverflowingHorizontalItems");
7
- const usePresetList = ({ promptPresets, onPresetClick }) => {
7
+ const usePresetList = ({ promptPresets, onPresetClick, }) => {
8
8
  const presetsContainerRef = (0, react_1.useRef)(null);
9
9
  const { visibleItems, hiddenItems, measured } = (0, useOverflowingHorizontalItems_1.useOverflowingHorizontalItems)({
10
10
  containerRef: presetsContainerRef,
@@ -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;
@@ -1,4 +1,5 @@
1
1
  import type React from 'react';
2
+ import { CommonAnswer } from './ErrorScreen/types';
2
3
  import { GptDialogProps } from './GptDialog/GptDialog';
3
4
  import { GptWidgetOptions } from './gptExtension/gptExtension';
4
5
  declare type CombinedKeyboardEvent = KeyboardEvent | React.KeyboardEvent;
@@ -11,5 +12,5 @@ export declare function getDisableReplaceButtonText(disablePromptPresets?: boole
11
12
  export declare function getInputPlaceHolder(disablePromptPresets?: boolean, disabledPromptPlaceholder?: string, customPromptPlaceholder?: string): string | undefined;
12
13
  export declare const isEnter: (event: CombinedKeyboardEvent) => boolean;
13
14
  export declare function focusWithoutScroll(element?: HTMLElement | null): void;
14
- export declare function isEmptyGptPrompts(gptWidgetOptions: GptWidgetOptions, disablePromptPresets: boolean): boolean;
15
+ export declare function isEmptyGptPrompts<AnswerData extends CommonAnswer = CommonAnswer, PromptData extends unknown = unknown>(gptWidgetOptions: GptWidgetOptions<AnswerData, PromptData>, disablePromptPresets: boolean): boolean;
15
16
  export {};
@@ -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
  }
@@ -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.25.0' !== 'undefined' ? '13.25.0' : 'unknown';
5
+ exports.VERSION = typeof '13.25.1' !== 'undefined' ? '13.25.1' : 'unknown';
@@ -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;
@@ -1,4 +1,5 @@
1
1
  import { GptWidgetOptions } from '../../..';
2
+ import { CommonAnswer } from '../ErrorScreen/types';
2
3
  export { mGptToolbarItem } from './toolbar';
3
4
  export { showMarkupGpt, hideMarkupGpt } from './commands';
4
- export declare function mGptExtension(props: GptWidgetOptions): import("@codemirror/state").Extension[];
5
+ export declare function mGptExtension<AnswerData extends CommonAnswer = CommonAnswer, PromptData extends unknown = unknown>(props: GptWidgetOptions<AnswerData, PromptData>): import("@codemirror/state").Extension[];
@@ -1,6 +1,7 @@
1
1
  import { GptWidgetOptions } from '../../..';
2
2
  import { type DecorationSet, type EditorView, ViewPlugin, type ViewUpdate } from '../../../../cm/view';
3
- export declare function mGptPlugin(gptProps: GptWidgetOptions): ViewPlugin<{
3
+ import { CommonAnswer } from '../ErrorScreen/types';
4
+ export declare function mGptPlugin<AnswerData extends CommonAnswer = CommonAnswer, PromptData extends unknown = unknown>(gptProps: GptWidgetOptions<AnswerData, PromptData>): ViewPlugin<{
4
5
  readonly _view: EditorView;
5
6
  readonly _renderItem: import("../../..").RendererItem;
6
7
  _anchor: Element | null;
@@ -1,11 +1,12 @@
1
1
  /// <reference types="react" />
2
2
  import { PopupProps } from '@gravity-ui/uikit';
3
+ import { CommonAnswer } from '../ErrorScreen/types';
3
4
  import { GptDialogProps } from '../GptDialog/GptDialog';
4
- declare type Props = {
5
+ declare type Props<AnswerData extends CommonAnswer = CommonAnswer, PromptData extends unknown = unknown> = {
5
6
  onClose: () => void;
6
7
  markup: string;
7
8
  onConfirmOk?: () => void;
8
9
  onConfirmCancel?: () => void;
9
- } & GptDialogProps & Pick<PopupProps, 'anchorRef' | 'container'>;
10
- export declare function renderPopup(anchor: HTMLElement, props: Props): JSX.Element;
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;
11
12
  export {};
@@ -1,10 +1,10 @@
1
- import type { FC } from 'react';
1
+ import { CommonAnswer } from '../ErrorScreen/types';
2
2
  import type { GptDialogProps } from '../GptDialog/GptDialog';
3
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;
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
8
  };
9
9
  export declare const cnGptDialogPresetList: import("@bem-react/classname").ClassNameFormatter;
10
- export declare const PresetList: FC<PresetListProps>;
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;
@@ -1,14 +1,15 @@
1
1
  import type { DropdownMenuItem } from '@gravity-ui/uikit';
2
+ import { CommonAnswer } from '../ErrorScreen/types';
2
3
  import type { GptDialogProps } from '../GptDialog/GptDialog';
3
4
  import type { PresetListProps } from '../PresetList/PresetList';
4
- declare type UsePresetListProps = Pick<GptDialogProps, 'promptPresets'> & {
5
- onPresetClick: PresetListProps['onPresetClick'];
5
+ declare type UsePresetListProps<AnswerData extends CommonAnswer = CommonAnswer, PromptData extends unknown = unknown> = Pick<GptDialogProps<AnswerData, PromptData>, 'promptPresets'> & {
6
+ onPresetClick: PresetListProps<AnswerData, PromptData>['onPresetClick'];
6
7
  };
7
- export declare const usePresetList: ({ promptPresets, onPresetClick }: UsePresetListProps) => {
8
+ export declare const usePresetList: <AnswerData extends CommonAnswer = CommonAnswer, PromptData extends unknown = unknown>({ promptPresets, onPresetClick, }: UsePresetListProps<AnswerData, PromptData>) => {
8
9
  measured: boolean;
9
10
  showMoreButton: boolean;
10
11
  presetsContainerRef: import("react").RefObject<HTMLDivElement>;
11
- visiblePresets: import("../ErrorScreen/types").PromptPreset<unknown>[];
12
+ visiblePresets: import("../ErrorScreen/types").PromptPreset<PromptData>[];
12
13
  hiddenPresets: DropdownMenuItem<unknown>[];
13
14
  };
14
15
  export {};
@@ -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,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;
@@ -1,4 +1,5 @@
1
1
  import type React from 'react';
2
+ import { CommonAnswer } from './ErrorScreen/types';
2
3
  import { GptDialogProps } from './GptDialog/GptDialog';
3
4
  import { GptWidgetOptions } from './gptExtension/gptExtension';
4
5
  declare type CombinedKeyboardEvent = KeyboardEvent | React.KeyboardEvent;
@@ -11,5 +12,5 @@ export declare function getDisableReplaceButtonText(disablePromptPresets?: boole
11
12
  export declare function getInputPlaceHolder(disablePromptPresets?: boolean, disabledPromptPlaceholder?: string, customPromptPlaceholder?: string): string | undefined;
12
13
  export declare const isEnter: (event: CombinedKeyboardEvent) => boolean;
13
14
  export declare function focusWithoutScroll(element?: HTMLElement | null): void;
14
- export declare function isEmptyGptPrompts(gptWidgetOptions: GptWidgetOptions, disablePromptPresets: boolean): boolean;
15
+ export declare function isEmptyGptPrompts<AnswerData extends CommonAnswer = CommonAnswer, PromptData extends unknown = unknown>(gptWidgetOptions: GptWidgetOptions<AnswerData, PromptData>, disablePromptPresets: boolean): boolean;
15
16
  export {};
@@ -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
  }
@@ -1,2 +1,2 @@
1
1
  /** During build process, the current version will be injected here */
2
- export const VERSION = typeof '13.25.0' !== 'undefined' ? '13.25.0' : 'unknown';
2
+ export const VERSION = typeof '13.25.1' !== 'undefined' ? '13.25.1' : 'unknown';
package/build/styles.css CHANGED
@@ -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;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gravity-ui/markdown-editor",
3
- "version": "13.25.0",
3
+ "version": "13.25.1",
4
4
  "description": "Markdown wysiwyg and markup editor",
5
5
  "license": "MIT",
6
6
  "repository": {