Skip to content

Commit 6efee79

Browse files
author
Полеводин Дмитрий Игоревич (4094029)
committed
feat: merge master
2 parents c3f5a1a + 1ba2b41 commit 6efee79

File tree

137 files changed

+1802
-453
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

137 files changed

+1802
-453
lines changed

.github/workflows/release.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,9 @@ jobs:
1818
node-version: 18
1919
default-branch: ${{ github.ref_name != 'main' && github.ref_name || null }}
2020
npm-dist-tag: ${{ github.ref_name != 'main' && 'untagged' || 'latest' }}
21+
changelog-types: >
22+
[{"type":"feat","section":"Features","hidden":false},
23+
{"type":"fix","section":"Bug Fixes","hidden":false},
24+
{"type":"refactor","section":"Refactoring","hidden":false},
25+
{"type":"perf","section":"Performance Improvements","hidden":false}]
26+

.storybook/main.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ const config: StorybookConfig = {
3838
config.resolve.alias[alias] = resolve(baseUrl, paths[alias][0])
3939
}
4040

41+
config.resolve.alias['demo/*'] = resolve(__dirname, '..', 'demo/*');
42+
4143
return config;
4244
},
4345
};

CHANGELOG.md

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,78 @@
11
# Changelog
22

3+
## [15.11.1](https://github.com/gravity-ui/markdown-editor/compare/v15.11.0...v15.11.1) (2025-05-13)
4+
5+
6+
### Bug Fixes
7+
8+
* don't paste url as image if shift pressed ([#750](https://github.com/gravity-ui/markdown-editor/issues/750)) ([1dd30c8](https://github.com/gravity-ui/markdown-editor/commit/1dd30c8cc4dabfc650f399f922259a710bf0f2aa))
9+
* **markup:** fixed paste handling in markup mode ([7ae1d59](https://github.com/gravity-ui/markdown-editor/commit/7ae1d59710b93cd559c7903992c691cac484610a))
10+
* **styles:** added spacing rules to prevent jumps when editing lists ([#751](https://github.com/gravity-ui/markdown-editor/issues/751)) ([9059b84](https://github.com/gravity-ui/markdown-editor/commit/9059b84c25e558a77bcc2cdd06a528f5dfdedf47))
11+
12+
## [15.11.0](https://github.com/gravity-ui/markdown-editor/compare/v15.10.1...v15.11.0) (2025-04-29)
13+
14+
15+
### Features
16+
17+
* **bundle:** added customization of display of the settings block ([#740](https://github.com/gravity-ui/markdown-editor/issues/740)) ([6e863a3](https://github.com/gravity-ui/markdown-editor/commit/6e863a350f5ad1cf6f7801e600afd4fd3930eeba))
18+
* **Gpt:** changed hotkey to open gpt popup ([#741](https://github.com/gravity-ui/markdown-editor/issues/741)) ([ccdf761](https://github.com/gravity-ui/markdown-editor/commit/ccdf76102488db57f51c8f1cca8e67f84f563007))
19+
20+
21+
### Bug Fixes
22+
23+
* **Lists:** fixed toolbar button activation for sink list item ([#744](https://github.com/gravity-ui/markdown-editor/issues/744)) ([f556e08](https://github.com/gravity-ui/markdown-editor/commit/f556e08df79c1bbadb43c70e53e533c68cc0f589))
24+
25+
## [15.10.1](https://github.com/gravity-ui/markdown-editor/compare/v15.10.0...v15.10.1) (2025-04-25)
26+
27+
28+
### Bug Fixes
29+
30+
* **markup:** fix pasting image urls to link lines ([#738](https://github.com/gravity-ui/markdown-editor/issues/738)) ([2dfba92](https://github.com/gravity-ui/markdown-editor/commit/2dfba92d97884c0d2506ec2d558cb91e7b7a301d))
31+
32+
## [15.10.0](https://github.com/gravity-ui/markdown-editor/compare/v15.9.0...v15.10.0) (2025-04-24)
33+
34+
35+
### Features
36+
37+
* **markup:** allow to disable search panel ([#736](https://github.com/gravity-ui/markdown-editor/issues/736)) ([1ecb513](https://github.com/gravity-ui/markdown-editor/commit/1ecb5137e4170d7eab7a4d433721ef21b76272a4))
38+
39+
## [15.9.0](https://github.com/gravity-ui/markdown-editor/compare/v15.8.1...v15.9.0) (2025-04-23)
40+
41+
42+
### Features
43+
44+
* **SelectionContext:** allow to change popup placement behavior ([#732](https://github.com/gravity-ui/markdown-editor/issues/732)) ([52e72e7](https://github.com/gravity-ui/markdown-editor/commit/52e72e74c2b3f90f8bfc0f28155383da1573d1ec))
45+
46+
47+
### Bug Fixes
48+
49+
* resolved log func via named import to avoid default mismatch ([#733](https://github.com/gravity-ui/markdown-editor/issues/733)) ([13906ed](https://github.com/gravity-ui/markdown-editor/commit/13906edfeb639ef6ffbe06bc4c77c58981127f28))
50+
51+
## [15.8.1](https://github.com/gravity-ui/markdown-editor/compare/v15.8.0...v15.8.1) (2025-04-18)
52+
53+
54+
### Bug Fixes
55+
56+
* **gpt:** fix gpt markup action for preset ([#727](https://github.com/gravity-ui/markdown-editor/issues/727)) ([9221b3a](https://github.com/gravity-ui/markdown-editor/commit/9221b3a5d9efb6c336f58cae5bfe620e61d87ab4))
57+
58+
## [15.8.0](https://github.com/gravity-ui/markdown-editor/compare/v15.7.0...v15.8.0) (2025-04-17)
59+
60+
61+
### Features
62+
63+
* **image:** move selection to the image title on toolbar item click ([#725](https://github.com/gravity-ui/markdown-editor/issues/725)) ([68096df](https://github.com/gravity-ui/markdown-editor/commit/68096df110a5d232290a35d30b31c4d99766d5e7))
64+
65+
66+
### Bug Fixes
67+
68+
* **markup:** fix pasting image urls to link lines ([#721](https://github.com/gravity-ui/markdown-editor/issues/721)) ([2fddf0a](https://github.com/gravity-ui/markdown-editor/commit/2fddf0a80d43a53630f2228b78ba89ec335c916c))
69+
* **QuoteLink:** move clipboard button style to the plugin styles ([#724](https://github.com/gravity-ui/markdown-editor/issues/724)) ([8b65ebd](https://github.com/gravity-ui/markdown-editor/commit/8b65ebd426945de60e986874c8241921c0adf252))
70+
71+
72+
### Refactoring
73+
74+
* **bundle:** move editor content to additional component ([#722](https://github.com/gravity-ui/markdown-editor/issues/722)) ([2b94fd3](https://github.com/gravity-ui/markdown-editor/commit/2b94fd36c4a9717252fb8dae790dc0c5574fa4a4))
75+
376
## [15.7.0](https://github.com/gravity-ui/markdown-editor/compare/v15.6.1...v15.7.0) (2025-04-15)
477

578

demo/components/Playground.tsx

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import {defaultOptions} from '@diplodoc/transform/lib/sanitize';
55
import {Button, DropdownMenu} from '@gravity-ui/uikit';
66

77
import type {ToolbarActionData} from 'src/bundle/Editor';
8+
import type {SettingItems} from 'src/bundle/settings';
89
import type {Extension} from 'src/cm/state';
910
import {FoldingHeading} from 'src/extensions/additional/FoldingHeading';
1011
import {Math} from 'src/extensions/additional/Math';
@@ -57,7 +58,7 @@ const wCommandMenuConfig = wysiwygToolbarConfigs.wCommandMenuConfig.concat(
5758
export type PlaygroundProps = {
5859
initial?: MarkupString;
5960
allowHTML?: boolean;
60-
settingsVisible?: boolean;
61+
settingsVisible?: boolean | SettingItems[];
6162
initialEditor?: MarkdownEditorMode;
6263
preserveEmptyRows?: boolean;
6364
breaks?: boolean;
@@ -67,6 +68,7 @@ export type PlaygroundProps = {
6768
sanitizeHtml?: boolean;
6869
prepareRawMarkup?: boolean;
6970
splitModeOrientation?: 'horizontal' | 'vertical' | false;
71+
searchPanel?: boolean;
7072
stickyToolbar?: boolean;
7173
initialSplitModeEnabled?: boolean;
7274
renderPreviewDefined?: boolean;
@@ -80,6 +82,7 @@ export type PlaygroundProps = {
8082
directiveSyntax?: DirectiveSyntaxValue;
8183
disabledHTMLBlockModes?: EmbeddingMode[];
8284
disableMarkdownItAttrs?: boolean;
85+
markupParseHtmlOnPaste?: boolean;
8386
} & Pick<UseMarkdownEditorProps, 'experimental' | 'wysiwygConfig'> &
8487
Pick<
8588
MarkdownEditorViewProps,
@@ -114,6 +117,7 @@ export const Playground = memo<PlaygroundProps>((props) => {
114117
sanitizeHtml,
115118
prepareRawMarkup,
116119
splitModeOrientation,
120+
searchPanel,
117121
stickyToolbar,
118122
renderPreviewDefined,
119123
height,
@@ -130,6 +134,7 @@ export const Playground = memo<PlaygroundProps>((props) => {
130134
directiveSyntax,
131135
disabledHTMLBlockModes,
132136
disableMarkdownItAttrs,
137+
markupParseHtmlOnPaste,
133138
} = props;
134139
const [editorMode, setEditorMode] = useState<MarkdownEditorMode>(initialEditor ?? 'wysiwyg');
135140
const [mdRaw, setMdRaw] = useState<MarkupString>(initial || '');
@@ -225,18 +230,20 @@ export const Playground = memo<PlaygroundProps>((props) => {
225230
uploadFile: fileUploadHandler,
226231
},
227232
experimental: {
228-
...experimental,
229233
directiveSyntax,
230234
preserveEmptyRows,
231235
prepareRawMarkup: prepareRawMarkup
232236
? (value) => '**prepare raw markup**\n\n' + value
233237
: undefined,
238+
...experimental,
234239
},
235240
markupConfig: {
241+
parseHtmlOnPaste: true,
236242
extensions: markupConfigExtensions,
237243
parseInsertedUrlAsImage,
238244
renderPreview,
239245
splitMode: splitModeOrientation,
246+
searchPanel,
240247
},
241248
},
242249
[
@@ -245,6 +252,7 @@ export const Playground = memo<PlaygroundProps>((props) => {
245252
linkifyTlds,
246253
breaks,
247254
splitModeOrientation,
255+
searchPanel,
248256
renderPreviewDefined,
249257
renderPreview,
250258
experimental?.needToSetDimensionsForUploadedImages,
@@ -253,8 +261,10 @@ export const Playground = memo<PlaygroundProps>((props) => {
253261
experimental?.needToSetDimensionsForUploadedImages,
254262
experimental?.beforeEditorModeChange,
255263
experimental?.prepareRawMarkup,
264+
experimental?.preserveEmptyRows,
256265
directiveSyntax,
257266
disableMarkdownItAttrs,
267+
markupParseHtmlOnPaste,
258268
],
259269
);
260270

demo/components/PlaygroundMini.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ export type PlaygroundMiniProps = Pick<
1515
| 'sanitizeHtml'
1616
| 'prepareRawMarkup'
1717
| 'splitModeOrientation'
18+
| 'searchPanel'
1819
| 'stickyToolbar'
1920
| 'initialSplitModeEnabled'
2021
| 'renderPreviewDefined'

demo/defaults/args.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ export const args: Meta<PlaygroundMiniProps>['args'] = {
1212
sanitizeHtml: false,
1313
prepareRawMarkup: false,
1414
splitModeOrientation: 'horizontal',
15+
searchPanel: true,
1516
stickyToolbar: true,
1617
initialSplitModeEnabled: false,
1718
renderPreviewDefined: true,

demo/defaults/content.ts

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -276,3 +276,29 @@ And ##monospace## can be **##com##**##bined\\*##
276276
---
277277
278278
`.trim();
279+
280+
export const loremIpsum = `
281+
282+
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse enim nisl, tincidunt sit amet auctor vitae, ullamcorper non urna. In feugiat sagittis risus, sit amet accumsan nisi consequat sit amet. Aenean a molestie tellus, vitae volutpat ante. Integer sagittis, turpis a blandit consequat, risus sem consequat ex, at elementum odio diam id nibh. Nam nec neque enim. Integer a risus mattis, lacinia ante nec, commodo eros. Cras erat erat, finibus vitae blandit ut, pulvinar sed quam. Vivamus porta, ipsum non pharetra porttitor, enim felis vestibulum nunc, eget tincidunt erat turpis nec risus. Fusce mollis neque ac porttitor mattis. Aliquam ultrices sagittis bibendum. Praesent a nisi eleifend metus congue fermentum.
283+
284+
Sed egestas enim ac massa varius mattis. Donec scelerisque maximus ultricies. Sed a laoreet dui, at porta enim. Maecenas accumsan a neque et luctus. Nullam venenatis nunc velit, sit amet egestas nisl elementum eu. Sed lobortis volutpat est eu facilisis. Aenean vitae tortor ac massa sagittis tristique at et leo. Nullam faucibus nulla eu vehicula pharetra. Nullam molestie interdum ligula eu malesuada. Pellentesque mauris nunc, volutpat sit amet pretium in, malesuada eu turpis.
285+
286+
Vivamus quis eros aliquet, aliquet odio eget, sollicitudin ligula. Interdum et malesuada fames ac ante ipsum primis in faucibus. Sed vitae justo felis. Proin quis enim leo. Aenean mattis placerat sem, eu suscipit leo venenatis vitae. Proin finibus augue gravida, rhoncus velit sed, ornare ipsum. Mauris pharetra justo quis risus cursus malesuada. In sed ante eget odio elementum viverra et ac libero. Nullam ultrices massa sit amet turpis convallis vehicula. Aenean lobortis magna quis metus aliquet iaculis. Nullam congue, odio vitae blandit placerat, purus velit condimentum nulla, ut placerat metus risus non turpis. Quisque justo neque, posuere id accumsan efficitur, fringilla non ex. Sed metus mauris, blandit eu imperdiet vitae, volutpat sit amet lectus. Proin molestie elit justo, nec fermentum arcu interdum et.
287+
288+
Nam euismod semper diam at efficitur. Maecenas porta velit posuere dui interdum, nec consequat ligula varius. Ut at ultricies ante, sit amet sollicitudin lectus. Praesent iaculis quam sed augue faucibus dapibus. Vestibulum non ipsum eu nibh suscipit pulvinar quis sed augue. Duis rhoncus, mi nec ullamcorper consectetur, urna magna hendrerit quam, id interdum purus arcu in risus. Interdum et malesuada fames ac ante ipsum primis in faucibus. Maecenas gravida magna eget vulputate faucibus. Quisque posuere, velit a maximus fermentum, ex sapien semper erat, sed tincidunt arcu enim ut felis. Vestibulum tempor, ante sit amet laoreet vehicula, nunc eros congue dui, quis imperdiet est leo in leo. Curabitur condimentum sapien nisi, sed volutpat odio euismod condimentum. Etiam velit sapien, finibus bibendum erat nec, feugiat pellentesque quam. Suspendisse cursus nulla ut leo sagittis viverra.
289+
290+
Quisque blandit rutrum nibh sit amet vehicula. Mauris nec interdum leo. Donec suscipit turpis semper pellentesque faucibus. Vestibulum vitae rhoncus tortor. Suspendisse vehicula nisi ac diam mollis, nec pellentesque risus auctor. Suspendisse sit amet turpis ut elit gravida hendrerit nec ornare erat. Nullam eu risus eget est tincidunt luctus sit amet in nisi. Curabitur tellus dolor, accumsan sed maximus nec, lacinia eu neque. Curabitur facilisis a augue semper laoreet. Pellentesque ac faucibus ipsum, a sagittis turpis. Sed eleifend libero ac urna porttitor, vitae finibus velit laoreet. In viverra eros quis iaculis porta.
291+
292+
Praesent viverra velit eu felis facilisis, eu commodo justo volutpat. Nullam eget hendrerit nibh. Vestibulum dui purus, hendrerit sit amet eros in, lacinia laoreet quam. Cras dui mauris, dictum ac ultricies eu, dignissim sit amet metus. Curabitur molestie ante lectus, eget volutpat urna efficitur non. Vivamus lacinia, ligula vitae ornare maximus, dolor odio volutpat velit, sit amet finibus nunc nunc nec augue. Morbi scelerisque tortor at metus ultricies vehicula.
293+
294+
Fusce elementum finibus quam, at tincidunt ipsum egestas eget. Aenean nec ipsum orci. Maecenas quis vehicula purus. Proin tellus magna, euismod eu neque quis, elementum elementum risus. Aenean nibh arcu, bibendum non lacus ac, dapibus pharetra urna. Nunc ut posuere dolor, ac ornare lorem. Nullam varius fringilla sapien ut dapibus. Praesent feugiat dolor nulla, sed commodo orci sagittis eget. Maecenas elementum eros sed magna cursus, quis scelerisque est posuere.
295+
296+
Aliquam aliquam, justo quis ultrices venenatis, eros mi posuere mauris, quis venenatis justo urna sed nisl. Quisque aliquam tincidunt ligula. Proin at tortor eget velit consequat dignissim. Suspendisse metus augue, ultricies sed varius ac, interdum at diam. Mauris laoreet interdum sapien a sagittis. Vivamus dignissim felis a ante porttitor consectetur. Fusce sodales magna et velit cursus dictum. Praesent sodales elit nec lectus porta lobortis. Sed eget metus ut mi ultrices mollis quis eget ante. Vestibulum viverra, magna non euismod mollis, magna lacus egestas ante, posuere faucibus risus diam eu dui. Maecenas maximus lorem orci, sit amet dignissim sem feugiat ac. Morbi tempus purus eu pellentesque bibendum.
297+
298+
Suspendisse dui lorem, fringilla sed arcu quis, aliquet finibus dolor. Sed fringilla aliquet enim nec tempor. Vivamus lectus leo, elementum et risus quis, porta cursus enim. Vivamus ac maximus justo, ac vestibulum risus. Donec ut nunc neque. Mauris in felis vulputate, tincidunt erat in, ullamcorper lorem. Aliquam eu lectus lectus. Nullam eget consectetur leo. Proin venenatis dolor sed magna scelerisque, vulputate imperdiet ante dictum. Etiam ac rhoncus arcu, a dignissim tellus. Donec viverra odio eget lacinia sodales.
299+
300+
Vivamus sed tellus at metus cursus imperdiet. Duis quis turpis elit. Quisque turpis magna, scelerisque in leo id, eleifend porttitor erat. Pellentesque fringilla vel felis eget congue. Pellentesque blandit sem nunc, eu vulputate sem pharetra ac. Ut sed dignissim lectus. Quisque nec nisi ut leo feugiat posuere. Mauris elit sapien, bibendum nec dolor id, pharetra ullamcorper augue. Vivamus et lacus efficitur, fermentum magna id, fermentum neque. Donec aliquet vehicula dapibus. Aenean efficitur nunc eu libero accumsan, sed dignissim neque convallis. Donec eleifend, nisl vel elementum bibendum, eros metus ultricies elit, sodales pharetra magna mauris in est. Donec imperdiet sapien in nibh placerat ultrices id eget quam. Fusce dapibus arcu fringilla dui bibendum, ut rutrum lectus dictum. Pellentesque at elit quam. In id neque in lectus dapibus congue et a tellus.
301+
302+
Donec vitae turpis lacus. Morbi imperdiet ipsum sed consectetur maximus. Quisque sodales ligula lacus, et pulvinar elit efficitur at. Pellentesque augue lorem, ullamcorper sed iaculis nec, blandit ac nunc. Cras purus justo, malesuada nec feugiat vitae, egestas cursus ipsum. Pellentesque in massa fermentum, fermentum lacus ut, rhoncus velit. Phasellus sodales bibendum tellus vel bibendum. Ut convallis libero leo, eu pulvinar lorem tincidunt eget. Vivamus fringilla ipsum quis lacus consectetur ornare.
303+
304+
`.trim();
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import type {StoryObj} from '@storybook/react';
2+
3+
import {HideSomeSettingsDemo as component} from './HideSomeSettings';
4+
5+
export const Story: StoryObj<typeof component> = {
6+
args: {settingsVisilbe: ['toolbar']},
7+
};
8+
Story.storyName = 'Hide some settings';
9+
10+
export default {
11+
title: 'Experiments / HideSomeSettings',
12+
component,
13+
};
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
import {memo, useCallback} from 'react';
2+
3+
import type {SettingItems} from 'src/bundle/settings';
4+
import {MarkdownEditorView, type RenderPreview, useMarkdownEditor} from 'src/index';
5+
6+
import {PlaygroundLayout} from '../../../components/PlaygroundLayout';
7+
import {SplitModePreview} from '../../../components/SplitModePreview';
8+
import {plugins} from '../../../defaults/md-plugins';
9+
10+
type HideSomeSettingsDemoProps = {
11+
settingsVisilbe: SettingItems[];
12+
};
13+
14+
export const HideSomeSettingsDemo = memo<HideSomeSettingsDemoProps>((props) => {
15+
const {settingsVisilbe} = props;
16+
17+
const renderPreview = useCallback<RenderPreview>(
18+
({getValue, md}) => (
19+
<SplitModePreview
20+
getValue={getValue}
21+
allowHTML={md.html}
22+
linkify={md.linkify}
23+
linkifyTlds={md.linkifyTlds}
24+
breaks={md.breaks}
25+
needToSanitizeHtml
26+
plugins={plugins}
27+
/>
28+
),
29+
[],
30+
);
31+
32+
const editor = useMarkdownEditor(
33+
{
34+
initial: {markup: ''},
35+
markupConfig: {renderPreview},
36+
},
37+
[],
38+
);
39+
40+
return (
41+
<PlaygroundLayout
42+
editor={editor}
43+
view={({className}) => (
44+
<MarkdownEditorView
45+
autofocus
46+
stickyToolbar
47+
settingsVisible={settingsVisilbe}
48+
editor={editor}
49+
className={className}
50+
/>
51+
)}
52+
/>
53+
);
54+
});
55+
56+
HideSomeSettingsDemo.displayName = 'HideSomeSettingsDemo';

0 commit comments

Comments
 (0)