@gravity-ui/markdown-editor 15.35.1 → 15.36.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/cjs/core/Editor.js +2 -0
- package/build/cjs/core/Editor.js.map +1 -1
- package/build/cjs/core/index.d.ts +1 -0
- package/build/cjs/core/index.js +3 -1
- package/build/cjs/core/index.js.map +1 -1
- package/build/cjs/core/markdown/MarkdownParser.d.ts +1 -0
- package/build/cjs/core/markdown/MarkdownParser.js +3 -0
- package/build/cjs/core/markdown/MarkdownParser.js.map +1 -1
- package/build/cjs/core/types/parser.d.ts +1 -0
- package/build/cjs/core/types/parser.js.map +1 -1
- package/build/cjs/core/utils/parser.d.ts +3 -0
- package/build/cjs/core/utils/parser.js +12 -0
- package/build/cjs/core/utils/parser.js.map +1 -0
- package/build/cjs/extensions/behavior/SelectionContext/tooltip.js +3 -0
- package/build/cjs/extensions/behavior/SelectionContext/tooltip.js.map +1 -1
- package/build/cjs/extensions/markdown/Bold/index.js +1 -1
- package/build/cjs/extensions/markdown/Bold/index.js.map +1 -1
- package/build/cjs/extensions/markdown/Code/index.js +1 -1
- package/build/cjs/extensions/markdown/Code/index.js.map +1 -1
- package/build/cjs/extensions/markdown/CodeBlock/CodeBlockHighlight/CodeBlockHighlight.js +75 -66
- package/build/cjs/extensions/markdown/CodeBlock/CodeBlockHighlight/CodeBlockHighlight.js.map +1 -1
- package/build/cjs/extensions/markdown/CodeBlock/CodeBlockHighlight/plugins/codeBlockLineNumbersPlugin.js +42 -22
- package/build/cjs/extensions/markdown/CodeBlock/CodeBlockHighlight/plugins/codeBlockLineNumbersPlugin.js.map +1 -1
- package/build/cjs/extensions/markdown/CodeBlock/CodeBlockHighlight/utils.js +20 -0
- package/build/cjs/extensions/markdown/CodeBlock/CodeBlockHighlight/utils.js.map +1 -1
- package/build/cjs/extensions/markdown/Italic/index.js +1 -1
- package/build/cjs/extensions/markdown/Italic/index.js.map +1 -1
- package/build/cjs/extensions/markdown/Mark/index.js +1 -1
- package/build/cjs/extensions/markdown/Mark/index.js.map +1 -1
- package/build/cjs/extensions/markdown/Strike/index.js +1 -1
- package/build/cjs/extensions/markdown/Strike/index.js.map +1 -1
- package/build/cjs/extensions/markdown/Underline/index.js +1 -1
- package/build/cjs/extensions/markdown/Underline/index.js.map +1 -1
- package/build/cjs/extensions/yfm/Monospace/index.js +1 -1
- package/build/cjs/extensions/yfm/Monospace/index.js.map +1 -1
- package/build/cjs/utils/actions.d.ts +6 -0
- package/build/cjs/utils/actions.js +24 -0
- package/build/cjs/utils/actions.js.map +1 -1
- package/build/cjs/utils/marks.d.ts +6 -0
- package/build/cjs/utils/marks.js +31 -0
- package/build/cjs/utils/marks.js.map +1 -1
- package/build/cjs/utils/transaction.d.ts +1 -0
- package/build/cjs/utils/transaction.js +40 -0
- package/build/cjs/utils/transaction.js.map +1 -0
- package/build/cjs/version.js +1 -1
- package/build/cjs/version.js.map +1 -1
- package/build/esm/core/Editor.js +2 -0
- package/build/esm/core/Editor.js.map +1 -1
- package/build/esm/core/index.d.ts +1 -0
- package/build/esm/core/index.js +1 -0
- package/build/esm/core/index.js.map +1 -1
- package/build/esm/core/markdown/MarkdownParser.d.ts +1 -0
- package/build/esm/core/markdown/MarkdownParser.js +3 -0
- package/build/esm/core/markdown/MarkdownParser.js.map +1 -1
- package/build/esm/core/types/parser.d.ts +1 -0
- package/build/esm/core/types/parser.js.map +1 -1
- package/build/esm/core/utils/parser.d.ts +3 -0
- package/build/esm/core/utils/parser.js +8 -0
- package/build/esm/core/utils/parser.js.map +1 -0
- package/build/esm/extensions/behavior/SelectionContext/tooltip.js +3 -0
- package/build/esm/extensions/behavior/SelectionContext/tooltip.js.map +1 -1
- package/build/esm/extensions/markdown/Bold/index.js +2 -2
- package/build/esm/extensions/markdown/Bold/index.js.map +1 -1
- package/build/esm/extensions/markdown/Code/index.js +2 -2
- package/build/esm/extensions/markdown/Code/index.js.map +1 -1
- package/build/esm/extensions/markdown/CodeBlock/CodeBlockHighlight/CodeBlockHighlight.js +75 -66
- package/build/esm/extensions/markdown/CodeBlock/CodeBlockHighlight/CodeBlockHighlight.js.map +1 -1
- package/build/esm/extensions/markdown/CodeBlock/CodeBlockHighlight/plugins/codeBlockLineNumbersPlugin.js +43 -23
- package/build/esm/extensions/markdown/CodeBlock/CodeBlockHighlight/plugins/codeBlockLineNumbersPlugin.js.map +1 -1
- package/build/esm/extensions/markdown/CodeBlock/CodeBlockHighlight/utils.js +20 -1
- package/build/esm/extensions/markdown/CodeBlock/CodeBlockHighlight/utils.js.map +1 -1
- package/build/esm/extensions/markdown/Italic/index.js +2 -2
- package/build/esm/extensions/markdown/Italic/index.js.map +1 -1
- package/build/esm/extensions/markdown/Mark/index.js +2 -2
- package/build/esm/extensions/markdown/Mark/index.js.map +1 -1
- package/build/esm/extensions/markdown/Strike/index.js +2 -2
- package/build/esm/extensions/markdown/Strike/index.js.map +1 -1
- package/build/esm/extensions/markdown/Underline/index.js +2 -2
- package/build/esm/extensions/markdown/Underline/index.js.map +1 -1
- package/build/esm/extensions/yfm/Monospace/index.js +2 -2
- package/build/esm/extensions/yfm/Monospace/index.js.map +1 -1
- package/build/esm/utils/actions.d.ts +6 -0
- package/build/esm/utils/actions.js +24 -1
- package/build/esm/utils/actions.js.map +1 -1
- package/build/esm/utils/marks.d.ts +6 -0
- package/build/esm/utils/marks.js +30 -0
- package/build/esm/utils/marks.js.map +1 -1
- package/build/esm/utils/transaction.d.ts +1 -0
- package/build/esm/utils/transaction.js +36 -0
- package/build/esm/utils/transaction.js.map +1 -0
- package/build/esm/version.js +1 -1
- package/build/esm/version.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { toggleMark } from 'prosemirror-commands';
|
|
2
|
-
import { isMarkActive } from "./marks.js";
|
|
2
|
+
import { canApplyInlineMarkInMarkdown, isMarkActive } from "./marks.js";
|
|
3
3
|
export function defineActions(actions) {
|
|
4
4
|
return actions;
|
|
5
5
|
}
|
|
@@ -11,4 +11,27 @@ export function createToggleMarkAction(markType) {
|
|
|
11
11
|
run: command,
|
|
12
12
|
};
|
|
13
13
|
}
|
|
14
|
+
/**
|
|
15
|
+
* Like createToggleMarkAction, but blocks applying the mark when the selection
|
|
16
|
+
* boundaries would produce markdown that cannot round-trip (e.g. `word**,**`).
|
|
17
|
+
* Removing the mark (toggling off) is always allowed.
|
|
18
|
+
*/
|
|
19
|
+
export function createMarkdownInlineMarkAction(markType) {
|
|
20
|
+
const base = createToggleMarkAction(markType);
|
|
21
|
+
return {
|
|
22
|
+
isActive: base.isActive,
|
|
23
|
+
isEnable: (state, dispatch, view, attrs) => {
|
|
24
|
+
const isBlocked = !isMarkActive(state, markType) && !canApplyInlineMarkInMarkdown(state);
|
|
25
|
+
if (isBlocked)
|
|
26
|
+
return false;
|
|
27
|
+
return base.isEnable(state, dispatch, view, attrs);
|
|
28
|
+
},
|
|
29
|
+
run: (state, dispatch, view, attrs) => {
|
|
30
|
+
const isBlocked = !isMarkActive(state, markType) && !canApplyInlineMarkInMarkdown(state);
|
|
31
|
+
if (isBlocked)
|
|
32
|
+
return;
|
|
33
|
+
base.run(state, dispatch, view, attrs);
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
}
|
|
14
37
|
//# sourceMappingURL=actions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actions.js","sourceRoot":"../../../src","sources":["utils/actions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,sBAAsB,CAAC;AAKhD,OAAO,EAAC,YAAY,EAAC,mBAAgB;
|
|
1
|
+
{"version":3,"file":"actions.js","sourceRoot":"../../../src","sources":["utils/actions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,sBAAsB,CAAC;AAKhD,OAAO,EAAC,4BAA4B,EAAE,YAAY,EAAC,mBAAgB;AAEnE,MAAM,UAAU,aAAa,CAAsB,OAAiC;IAChF,OAAO,OAAO,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,QAAkB;IACrD,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IACrC,OAAO;QACH,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC3D,QAAQ,EAAE,OAAO;QACjB,GAAG,EAAE,OAAO;KACf,CAAC;AACN,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,8BAA8B,CAAC,QAAkB;IAC7D,MAAM,IAAI,GAAG,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IAC9C,OAAO;QACH,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,QAAQ,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;YACvC,MAAM,SAAS,GACX,CAAC,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,4BAA4B,CAAC,KAAK,CAAC,CAAC;YAC3E,IAAI,SAAS;gBAAE,OAAO,KAAK,CAAC;YAC5B,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QACvD,CAAC;QACD,GAAG,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;YAClC,MAAM,SAAS,GACX,CAAC,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,4BAA4B,CAAC,KAAK,CAAC,CAAC;YAC3E,IAAI,SAAS;gBAAE,OAAO;YACtB,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QAC3C,CAAC;KACJ,CAAC;AACN,CAAC","sourcesContent":["import {toggleMark} from 'prosemirror-commands';\nimport type {MarkType} from 'prosemirror-model';\n\nimport type {ActionSpec} from '../core';\n\nimport {canApplyInlineMarkInMarkdown, isMarkActive} from './marks';\n\nexport function defineActions<Keys extends string>(actions: Record<Keys, ActionSpec>) {\n return actions;\n}\n\nexport function createToggleMarkAction(markType: MarkType): ActionSpec {\n const command = toggleMark(markType);\n return {\n isActive: (state) => Boolean(isMarkActive(state, markType)),\n isEnable: command,\n run: command,\n };\n}\n\n/**\n * Like createToggleMarkAction, but blocks applying the mark when the selection\n * boundaries would produce markdown that cannot round-trip (e.g. `word**,**`).\n * Removing the mark (toggling off) is always allowed.\n */\nexport function createMarkdownInlineMarkAction(markType: MarkType): ActionSpec {\n const base = createToggleMarkAction(markType);\n return {\n isActive: base.isActive,\n isEnable: (state, dispatch, view, attrs) => {\n const isBlocked =\n !isMarkActive(state, markType) && !canApplyInlineMarkInMarkdown(state);\n if (isBlocked) return false;\n return base.isEnable(state, dispatch, view, attrs);\n },\n run: (state, dispatch, view, attrs) => {\n const isBlocked =\n !isMarkActive(state, markType) && !canApplyInlineMarkInMarkdown(state);\n if (isBlocked) return;\n base.run(state, dispatch, view, attrs);\n },\n };\n}\n"]}
|
|
@@ -2,3 +2,9 @@ import type { Mark, MarkType, Node } from 'prosemirror-model';
|
|
|
2
2
|
import type { EditorState } from 'prosemirror-state';
|
|
3
3
|
export declare const findMark: (node: Node, markType: MarkType) => Mark | undefined;
|
|
4
4
|
export declare function isMarkActive(state: EditorState, type: MarkType): boolean | Mark | undefined;
|
|
5
|
+
/**
|
|
6
|
+
* Returns `false` when the current selection cannot be wrapped in an inline mark
|
|
7
|
+
* without breaking markdown round-trip, per CommonMark flanking delimiter rules:
|
|
8
|
+
* https://spec.commonmark.org/0.31.2/#left-flanking-delimiter-run
|
|
9
|
+
*/
|
|
10
|
+
export declare function canApplyInlineMarkInMarkdown(state: EditorState): boolean;
|
package/build/esm/utils/marks.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { getParserFromState } from "../core/utils/parser.js";
|
|
1
2
|
export const findMark = (node, markType) => {
|
|
2
3
|
return node.marks.find((mark) => mark.type.name === markType.name);
|
|
3
4
|
};
|
|
@@ -8,4 +9,33 @@ export function isMarkActive(state, type) {
|
|
|
8
9
|
}
|
|
9
10
|
return state.doc.rangeHasMark(from, to, type);
|
|
10
11
|
}
|
|
12
|
+
/**
|
|
13
|
+
* Returns `false` when the current selection cannot be wrapped in an inline mark
|
|
14
|
+
* without breaking markdown round-trip, per CommonMark flanking delimiter rules:
|
|
15
|
+
* https://spec.commonmark.org/0.31.2/#left-flanking-delimiter-run
|
|
16
|
+
*/
|
|
17
|
+
export function canApplyInlineMarkInMarkdown(state) {
|
|
18
|
+
const { from, to, empty } = state.selection;
|
|
19
|
+
if (empty) {
|
|
20
|
+
return true;
|
|
21
|
+
}
|
|
22
|
+
const text = state.doc.textBetween(from, to);
|
|
23
|
+
if (!text) {
|
|
24
|
+
return true;
|
|
25
|
+
}
|
|
26
|
+
const parser = getParserFromState(state);
|
|
27
|
+
const isPunct = (ch) => parser.isPunctChar(ch);
|
|
28
|
+
const isWordChar = (ch) => !/\s/.test(ch) && !isPunct(ch);
|
|
29
|
+
const chars = [...text];
|
|
30
|
+
const firstChar = chars[0];
|
|
31
|
+
const lastChar = chars.at(-1);
|
|
32
|
+
const charBefore = from > 0 ? state.doc.textBetween(from - 1, from) : '';
|
|
33
|
+
const charAfter = to < state.doc.content.size ? state.doc.textBetween(to, to + 1) : '';
|
|
34
|
+
// opening delimiter would not be left-flanking
|
|
35
|
+
if (isPunct(firstChar) && charBefore && isWordChar(charBefore)) {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
// closing delimiter would not be right-flanking
|
|
39
|
+
return !(lastChar && isPunct(lastChar) && charAfter && isWordChar(charAfter));
|
|
40
|
+
}
|
|
11
41
|
//# sourceMappingURL=marks.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"marks.js","sourceRoot":"../../../src","sources":["utils/marks.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,IAAU,EAAE,QAAkB,EAAoB,EAAE;IACzE,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,CAAC,CAAC;AACvE,CAAC,CAAC;AAEF,MAAM,UAAU,YAAY,CAAC,KAAkB,EAAE,IAAc;IAC3D,MAAM,EAAC,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAC,GAAG,KAAK,CAAC,SAAS,CAAC;IAEjD,IAAI,KAAK,EAAE,CAAC;QACR,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,OAAO,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;AAClD,CAAC","sourcesContent":["import type {Mark, MarkType, Node} from 'prosemirror-model';\nimport type {EditorState} from 'prosemirror-state';\n\nexport const findMark = (node: Node, markType: MarkType): Mark | undefined => {\n return node.marks.find((mark) => mark.type.name === markType.name);\n};\n\nexport function isMarkActive(state: EditorState, type: MarkType) {\n const {from, $from, to, empty} = state.selection;\n\n if (empty) {\n return type.isInSet(state.storedMarks || $from.marks());\n }\n\n return state.doc.rangeHasMark(from, to, type);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"marks.js","sourceRoot":"../../../src","sources":["utils/marks.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,kBAAkB,EAAC,gCAA6B;AAExD,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,IAAU,EAAE,QAAkB,EAAoB,EAAE;IACzE,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,CAAC,CAAC;AACvE,CAAC,CAAC;AAEF,MAAM,UAAU,YAAY,CAAC,KAAkB,EAAE,IAAc;IAC3D,MAAM,EAAC,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAC,GAAG,KAAK,CAAC,SAAS,CAAC;IAEjD,IAAI,KAAK,EAAE,CAAC;QACR,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,OAAO,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;AAClD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,4BAA4B,CAAC,KAAkB;IAC3D,MAAM,EAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAC,GAAG,KAAK,CAAC,SAAS,CAAC;IAC1C,IAAI,KAAK,EAAE,CAAC;QACR,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC7C,IAAI,CAAC,IAAI,EAAE,CAAC;QACR,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,MAAM,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACvD,MAAM,UAAU,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAElE,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;IACxB,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,QAAQ,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAE9B,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACzE,MAAM,SAAS,GAAG,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAEvF,+CAA+C;IAC/C,IAAI,OAAO,CAAC,SAAS,CAAC,IAAI,UAAU,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7D,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,gDAAgD;IAChD,OAAO,CAAC,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,SAAS,IAAI,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;AAClF,CAAC","sourcesContent":["import type {Mark, MarkType, Node} from 'prosemirror-model';\nimport type {EditorState} from 'prosemirror-state';\n\nimport {getParserFromState} from '../core/utils/parser';\n\nexport const findMark = (node: Node, markType: MarkType): Mark | undefined => {\n return node.marks.find((mark) => mark.type.name === markType.name);\n};\n\nexport function isMarkActive(state: EditorState, type: MarkType) {\n const {from, $from, to, empty} = state.selection;\n\n if (empty) {\n return type.isInSet(state.storedMarks || $from.marks());\n }\n\n return state.doc.rangeHasMark(from, to, type);\n}\n\n/**\n * Returns `false` when the current selection cannot be wrapped in an inline mark\n * without breaking markdown round-trip, per CommonMark flanking delimiter rules:\n * https://spec.commonmark.org/0.31.2/#left-flanking-delimiter-run\n */\nexport function canApplyInlineMarkInMarkdown(state: EditorState): boolean {\n const {from, to, empty} = state.selection;\n if (empty) {\n return true;\n }\n\n const text = state.doc.textBetween(from, to);\n if (!text) {\n return true;\n }\n\n const parser = getParserFromState(state);\n const isPunct = (ch: string) => parser.isPunctChar(ch);\n const isWordChar = (ch: string) => !/\\s/.test(ch) && !isPunct(ch);\n\n const chars = [...text];\n const firstChar = chars[0];\n const lastChar = chars.at(-1);\n\n const charBefore = from > 0 ? state.doc.textBetween(from - 1, from) : '';\n const charAfter = to < state.doc.content.size ? state.doc.textBetween(to, to + 1) : '';\n\n // opening delimiter would not be left-flanking\n if (isPunct(firstChar) && charBefore && isWordChar(charBefore)) {\n return false;\n }\n\n // closing delimiter would not be right-flanking\n return !(lastChar && isPunct(lastChar) && charAfter && isWordChar(charAfter));\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { AttrStep } from "../pm/transform.js";
|
|
2
|
+
/** @internal */
|
|
3
|
+
export function getChangedRanges(tr) {
|
|
4
|
+
const ranges = [];
|
|
5
|
+
const { maps } = tr.mapping;
|
|
6
|
+
tr.steps.forEach((step, i) => {
|
|
7
|
+
if (step instanceof AttrStep) {
|
|
8
|
+
let pos = step.pos;
|
|
9
|
+
for (let j = i + 1; j < maps.length; j++) {
|
|
10
|
+
pos = maps[j].map(pos);
|
|
11
|
+
}
|
|
12
|
+
const node = tr.doc.nodeAt(pos);
|
|
13
|
+
if (node) {
|
|
14
|
+
ranges.push({ from: pos, to: pos + node.nodeSize });
|
|
15
|
+
}
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
step.getMap().forEach((_oldStart, _oldEnd, newStart, newEnd) => {
|
|
19
|
+
let from = newStart;
|
|
20
|
+
let to = newEnd;
|
|
21
|
+
for (let j = i + 1; j < maps.length; j++) {
|
|
22
|
+
from = maps[j].map(from, -1);
|
|
23
|
+
to = maps[j].map(to, 1);
|
|
24
|
+
}
|
|
25
|
+
ranges.push({ from, to });
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
return ranges;
|
|
29
|
+
}
|
|
30
|
+
/** @internal */
|
|
31
|
+
export function forEachChangedNode(tr, callback) {
|
|
32
|
+
for (const { from, to } of getChangedRanges(tr)) {
|
|
33
|
+
tr.doc.nodesBetween(from, to, callback);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=transaction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transaction.js","sourceRoot":"../../../src","sources":["utils/transaction.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,QAAQ,EAAC,2BAAsB;AAEvC,gBAAgB;AAChB,MAAM,UAAU,gBAAgB,CAAC,EAAe;IAC5C,MAAM,MAAM,GAAiC,EAAE,CAAC;IAChD,MAAM,EAAC,IAAI,EAAC,GAAG,EAAE,CAAC,OAAO,CAAC;IAE1B,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;QACzB,IAAI,IAAI,YAAY,QAAQ,EAAE,CAAC;YAC3B,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;YACnB,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACvC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC3B,CAAC;YACD,MAAM,IAAI,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAChC,IAAI,IAAI,EAAE,CAAC;gBACP,MAAM,CAAC,IAAI,CAAC,EAAC,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAC,CAAC,CAAC;YACtD,CAAC;YACD,OAAO;QACX,CAAC;QAED,IAAI,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE;YAC3D,IAAI,IAAI,GAAG,QAAQ,CAAC;YACpB,IAAI,EAAE,GAAG,MAAM,CAAC;YAChB,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACvC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC7B,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAC5B,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,EAAC,IAAI,EAAE,EAAE,EAAC,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,gBAAgB;AAChB,MAAM,UAAU,kBAAkB,CAC9B,EAAe,EACf,QAAyF;IAEzF,KAAK,MAAM,EAAC,IAAI,EAAE,EAAE,EAAC,IAAI,gBAAgB,CAAC,EAAE,CAAC,EAAE,CAAC;QAC5C,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC5C,CAAC;AACL,CAAC","sourcesContent":["import type {Node} from '#pm/model';\nimport type {Transaction} from '#pm/state';\nimport {AttrStep} from '#pm/transform';\n\n/** @internal */\nexport function getChangedRanges(tr: Transaction): {from: number; to: number}[] {\n const ranges: {from: number; to: number}[] = [];\n const {maps} = tr.mapping;\n\n tr.steps.forEach((step, i) => {\n if (step instanceof AttrStep) {\n let pos = step.pos;\n for (let j = i + 1; j < maps.length; j++) {\n pos = maps[j].map(pos);\n }\n const node = tr.doc.nodeAt(pos);\n if (node) {\n ranges.push({from: pos, to: pos + node.nodeSize});\n }\n return;\n }\n\n step.getMap().forEach((_oldStart, _oldEnd, newStart, newEnd) => {\n let from = newStart;\n let to = newEnd;\n for (let j = i + 1; j < maps.length; j++) {\n from = maps[j].map(from, -1);\n to = maps[j].map(to, 1);\n }\n ranges.push({from, to});\n });\n });\n\n return ranges;\n}\n\n/** @internal */\nexport function forEachChangedNode(\n tr: Transaction,\n callback: (node: Node, pos: number, parent: Node | null, index: number) => boolean | void,\n): void {\n for (const {from, to} of getChangedRanges(tr)) {\n tr.doc.nodesBetween(from, to, callback);\n }\n}\n"]}
|
package/build/esm/version.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
/** During build process, the current version will be injected here */
|
|
2
|
-
export const VERSION = typeof '15.
|
|
2
|
+
export const VERSION = typeof '15.36.0' !== 'undefined' ? '15.36.0' : 'unknown';
|
|
3
3
|
//# sourceMappingURL=version.js.map
|
package/build/esm/version.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"../../src","sources":["version.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,WAAW,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC","sourcesContent":["/** During build process, the current version will be injected here */\nexport const VERSION = typeof '15.
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"../../src","sources":["version.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,WAAW,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC","sourcesContent":["/** During build process, the current version will be injected here */\nexport const VERSION = typeof '15.36.0' !== 'undefined' ? '15.36.0' : 'unknown';\n"]}
|