@prosekit/extensions 0.8.0 → 0.9.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.
- package/dist/commit/style.css +1 -1
- package/dist/commit/style.js +0 -0
- package/dist/enter-rule-RdhEA900.js +96 -0
- package/dist/gap-cursor/style.css +6 -3
- package/dist/gap-cursor/style.js +0 -0
- package/dist/input-rule-Gji4N7Oe.js +93 -0
- package/dist/list/style.css +7 -7
- package/dist/list/style.js +0 -0
- package/dist/loro/style.css +13 -9
- package/dist/loro/style.js +0 -0
- package/dist/mark-rule-wEOcDt6i.js +160 -0
- package/dist/placeholder/style.css +3 -3
- package/dist/placeholder/style.js +0 -0
- package/dist/prosekit-extensions-autocomplete.d.ts +33 -3
- package/dist/prosekit-extensions-autocomplete.js +126 -174
- package/dist/prosekit-extensions-blockquote.d.ts +48 -8
- package/dist/prosekit-extensions-blockquote.js +64 -78
- package/dist/prosekit-extensions-bold.d.ts +54 -8
- package/dist/prosekit-extensions-bold.js +61 -73
- package/dist/prosekit-extensions-code-block.d.ts +159 -20
- package/dist/prosekit-extensions-code-block.js +201 -184
- package/dist/prosekit-extensions-code.d.ts +54 -8
- package/dist/prosekit-extensions-code.js +44 -56
- package/dist/prosekit-extensions-commit.d.ts +52 -4
- package/dist/prosekit-extensions-commit.js +140 -183
- package/dist/prosekit-extensions-doc.d.ts +19 -2
- package/dist/prosekit-extensions-doc.js +14 -12
- package/dist/prosekit-extensions-drop-cursor.d.ts +35 -3
- package/dist/prosekit-extensions-drop-cursor.js +14 -8
- package/dist/prosekit-extensions-enter-rule.d.ts +105 -5
- package/dist/prosekit-extensions-enter-rule.js +3 -8
- package/dist/prosekit-extensions-file.d.ts +129 -8
- package/dist/prosekit-extensions-file.js +124 -132
- package/dist/prosekit-extensions-gap-cursor.d.ts +26 -2
- package/dist/prosekit-extensions-gap-cursor.js +21 -9
- package/dist/prosekit-extensions-hard-break.d.ts +53 -0
- package/dist/prosekit-extensions-hard-break.js +58 -0
- package/dist/prosekit-extensions-heading.d.ts +63 -9
- package/dist/prosekit-extensions-heading.js +121 -95
- package/dist/prosekit-extensions-horizontal-rule.d.ts +38 -8
- package/dist/prosekit-extensions-horizontal-rule.js +53 -71
- package/dist/prosekit-extensions-image.d.ts +50 -7
- package/dist/prosekit-extensions-image.js +71 -62
- package/dist/prosekit-extensions-input-rule.d.ts +129 -6
- package/dist/prosekit-extensions-input-rule.js +3 -14
- package/dist/prosekit-extensions-italic.d.ts +54 -8
- package/dist/prosekit-extensions-italic.js +51 -63
- package/dist/prosekit-extensions-link.d.ts +62 -10
- package/dist/prosekit-extensions-link.js +95 -100
- package/dist/prosekit-extensions-list.d.ts +104 -17
- package/dist/prosekit-extensions-list.js +115 -158
- package/dist/prosekit-extensions-loro.d.ts +69 -11
- package/dist/prosekit-extensions-loro.js +49 -77
- package/dist/prosekit-extensions-mark-rule.d.ts +37 -2
- package/dist/prosekit-extensions-mark-rule.js +3 -6
- package/dist/prosekit-extensions-mention.d.ts +39 -4
- package/dist/prosekit-extensions-mention.js +52 -50
- package/dist/prosekit-extensions-mod-click-prevention.d.ts +17 -2
- package/dist/prosekit-extensions-mod-click-prevention.js +20 -16
- package/dist/prosekit-extensions-paragraph.d.ts +60 -7
- package/dist/prosekit-extensions-paragraph.js +46 -45
- package/dist/prosekit-extensions-placeholder.d.ts +33 -2
- package/dist/prosekit-extensions-placeholder.js +39 -56
- package/dist/prosekit-extensions-readonly.d.ts +10 -1
- package/dist/prosekit-extensions-readonly.js +13 -14
- package/dist/prosekit-extensions-search.d.ts +74 -3
- package/dist/prosekit-extensions-search.js +48 -47
- package/dist/prosekit-extensions-strike.d.ts +47 -8
- package/dist/prosekit-extensions-strike.js +44 -49
- package/dist/prosekit-extensions-table.d.ts +231 -26
- package/dist/prosekit-extensions-table.js +3 -34
- package/dist/prosekit-extensions-text-align.d.ts +71 -8
- package/dist/prosekit-extensions-text-align.js +63 -44
- package/dist/prosekit-extensions-text.d.ts +19 -2
- package/dist/prosekit-extensions-text.js +13 -11
- package/dist/prosekit-extensions-underline.d.ts +43 -7
- package/dist/prosekit-extensions-underline.js +33 -37
- package/dist/prosekit-extensions-virtual-selection.d.ts +21 -2
- package/dist/prosekit-extensions-virtual-selection.js +49 -52
- package/dist/prosekit-extensions-yjs.d.ts +90 -14
- package/dist/prosekit-extensions-yjs.js +88 -131
- package/dist/prosekit-extensions.d.ts +1 -1
- package/dist/search/style.css +4 -3
- package/dist/search/style.js +0 -0
- package/dist/shiki-highlighter-chunk-CZGvZlhf.d.ts +18 -0
- package/dist/shiki-highlighter-chunk.d.ts +2 -0
- package/dist/shiki-highlighter-chunk.js +32 -39
- package/dist/table/style.css +10 -13
- package/dist/table/style.js +0 -0
- package/dist/table-DnVliJ6E.js +287 -0
- package/dist/virtual-selection/style.css +2 -2
- package/dist/virtual-selection/style.js +0 -0
- package/dist/yjs/style.css +9 -8
- package/dist/yjs/style.js +0 -0
- package/package.json +81 -54
- package/dist/_tsup-dts-rollup.d.ts +0 -2459
- package/dist/chunk-6UYLCVBX.js +0 -185
- package/dist/chunk-D54VSLLS.js +0 -105
- package/dist/chunk-I2UMHK3L.js +0 -99
- package/dist/chunk-QVFEYPQ6.js +0 -306
@@ -1,113 +1,139 @@
|
|
1
|
-
import {
|
2
|
-
|
3
|
-
} from "./chunk-I2UMHK3L.js";
|
1
|
+
import { defineTextBlockInputRule } from "./input-rule-Gji4N7Oe.js";
|
2
|
+
import { defineCommands, defineKeymap, defineNodeSpec, insertNode, isAtBlockStart, setBlockType, toggleNode, union, unsetBlockType, withSkipCodeBlock } from "@prosekit/core";
|
4
3
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
// src/heading/heading-commands.ts
|
11
|
-
import {
|
12
|
-
defineCommands,
|
13
|
-
insertNode,
|
14
|
-
setBlockType,
|
15
|
-
toggleNode
|
16
|
-
} from "@prosekit/core";
|
4
|
+
//#region src/heading/heading-commands.ts
|
5
|
+
/**
|
6
|
+
* @internal
|
7
|
+
*/
|
17
8
|
function defineHeadingCommands() {
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
9
|
+
return defineCommands({
|
10
|
+
setHeading: (attrs) => {
|
11
|
+
return setBlockType({
|
12
|
+
type: "heading",
|
13
|
+
attrs
|
14
|
+
});
|
15
|
+
},
|
16
|
+
insertHeading: (attrs) => {
|
17
|
+
return insertNode({
|
18
|
+
type: "heading",
|
19
|
+
attrs
|
20
|
+
});
|
21
|
+
},
|
22
|
+
toggleHeading: (attrs) => {
|
23
|
+
return toggleNode({
|
24
|
+
type: "heading",
|
25
|
+
attrs
|
26
|
+
});
|
27
|
+
}
|
28
|
+
});
|
29
29
|
}
|
30
30
|
|
31
|
-
|
31
|
+
//#endregion
|
32
|
+
//#region src/heading/heading-input-rule.ts
|
33
|
+
/**
|
34
|
+
* Converts the text block to a heading when `#` is typed at the start of a new
|
35
|
+
* line followed by a space.
|
36
|
+
*
|
37
|
+
* @internal
|
38
|
+
*/
|
32
39
|
function defineHeadingInputRule() {
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
40
|
+
return defineTextBlockInputRule({
|
41
|
+
regex: /^(#{1,6})\s$/,
|
42
|
+
type: "heading",
|
43
|
+
attrs: (match) => {
|
44
|
+
const level = match[1]?.length ?? 1;
|
45
|
+
return { level };
|
46
|
+
}
|
47
|
+
});
|
41
48
|
}
|
42
49
|
|
43
|
-
|
44
|
-
|
45
|
-
defineKeymap,
|
46
|
-
isAtBlockStart,
|
47
|
-
toggleNode as toggleNode2,
|
48
|
-
unsetBlockType,
|
49
|
-
withSkipCodeBlock
|
50
|
-
} from "@prosekit/core";
|
50
|
+
//#endregion
|
51
|
+
//#region src/heading/heading-keymap.ts
|
51
52
|
function toggleHeadingKeybinding(level) {
|
52
|
-
|
53
|
+
return withSkipCodeBlock(toggleNode({
|
54
|
+
type: "heading",
|
55
|
+
attrs: { level }
|
56
|
+
}));
|
53
57
|
}
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
58
|
+
/**
|
59
|
+
* Set the block type to default (usually `paragraph`) when pressing Backspace at
|
60
|
+
* the start of a heading block.
|
61
|
+
*/
|
62
|
+
const backspaceUnsetHeading = (state, dispatch, view) => {
|
63
|
+
const $pos = isAtBlockStart(state, view);
|
64
|
+
if ($pos?.parent.type.name === "heading") return unsetBlockType()(state, dispatch, view);
|
65
|
+
return false;
|
60
66
|
};
|
67
|
+
/**
|
68
|
+
* @internal
|
69
|
+
*/
|
61
70
|
function defineHeadingKeymap() {
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
+
return defineKeymap({
|
72
|
+
"mod-alt-1": toggleHeadingKeybinding(1),
|
73
|
+
"mod-alt-2": toggleHeadingKeybinding(2),
|
74
|
+
"mod-alt-3": toggleHeadingKeybinding(3),
|
75
|
+
"mod-alt-4": toggleHeadingKeybinding(4),
|
76
|
+
"mod-alt-5": toggleHeadingKeybinding(5),
|
77
|
+
"mod-alt-6": toggleHeadingKeybinding(6),
|
78
|
+
"Backspace": backspaceUnsetHeading
|
79
|
+
});
|
71
80
|
}
|
72
81
|
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
82
|
+
//#endregion
|
83
|
+
//#region src/heading/heading-spec.ts
|
84
|
+
/**
|
85
|
+
* @internal
|
86
|
+
*/
|
77
87
|
function defineHeadingSpec() {
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
88
|
+
return defineNodeSpec({
|
89
|
+
name: "heading",
|
90
|
+
attrs: { level: {
|
91
|
+
default: 1,
|
92
|
+
validate: "number"
|
93
|
+
} },
|
94
|
+
content: "inline*",
|
95
|
+
group: "block",
|
96
|
+
defining: true,
|
97
|
+
parseDOM: [
|
98
|
+
{
|
99
|
+
tag: "h1",
|
100
|
+
attrs: { level: 1 }
|
101
|
+
},
|
102
|
+
{
|
103
|
+
tag: "h2",
|
104
|
+
attrs: { level: 2 }
|
105
|
+
},
|
106
|
+
{
|
107
|
+
tag: "h3",
|
108
|
+
attrs: { level: 3 }
|
109
|
+
},
|
110
|
+
{
|
111
|
+
tag: "h4",
|
112
|
+
attrs: { level: 4 }
|
113
|
+
},
|
114
|
+
{
|
115
|
+
tag: "h5",
|
116
|
+
attrs: { level: 5 }
|
117
|
+
},
|
118
|
+
{
|
119
|
+
tag: "h6",
|
120
|
+
attrs: { level: 6 }
|
121
|
+
}
|
122
|
+
],
|
123
|
+
toDOM(node) {
|
124
|
+
return [`h${node.attrs.level}`, 0];
|
125
|
+
}
|
126
|
+
});
|
96
127
|
}
|
97
128
|
|
98
|
-
|
129
|
+
//#endregion
|
130
|
+
//#region src/heading/heading.ts
|
131
|
+
/**
|
132
|
+
* @public
|
133
|
+
*/
|
99
134
|
function defineHeading() {
|
100
|
-
|
101
|
-
defineHeadingSpec(),
|
102
|
-
defineHeadingInputRule(),
|
103
|
-
defineHeadingKeymap(),
|
104
|
-
defineHeadingCommands()
|
105
|
-
);
|
135
|
+
return union(defineHeadingSpec(), defineHeadingInputRule(), defineHeadingKeymap(), defineHeadingCommands());
|
106
136
|
}
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
defineHeadingInputRule,
|
111
|
-
defineHeadingKeymap,
|
112
|
-
defineHeadingSpec
|
113
|
-
};
|
137
|
+
|
138
|
+
//#endregion
|
139
|
+
export { defineHeading, defineHeadingCommands, defineHeadingInputRule, defineHeadingKeymap, defineHeadingSpec };
|
@@ -1,8 +1,38 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
1
|
+
import { Extension, PlainExtension, Union } from "@prosekit/core";
|
2
|
+
import { Command } from "@prosekit/pm/state";
|
3
|
+
import { Attrs } from "@prosekit/pm/model";
|
4
|
+
|
5
|
+
//#region src/horizontal-rule/horizontal-rule-commands.d.ts
|
6
|
+
type HorizontalRuleCommandsExtension = Extension<{
|
7
|
+
Commands: {
|
8
|
+
insertHorizontalRule: [];
|
9
|
+
};
|
10
|
+
}>;
|
11
|
+
/**
|
12
|
+
* Returns a command that inserts a horizontal rule at the current selection.
|
13
|
+
*/
|
14
|
+
declare function insertHorizontalRule(): Command;
|
15
|
+
declare function defineHorizontalRuleCommands(): HorizontalRuleCommandsExtension;
|
16
|
+
//#endregion
|
17
|
+
//#region src/horizontal-rule/horizontal-rule-spec.d.ts
|
18
|
+
type HorizontalRuleSpecExtension = Extension<{
|
19
|
+
Nodes: {
|
20
|
+
horizontalRule: Attrs;
|
21
|
+
};
|
22
|
+
}>;
|
23
|
+
declare function defineHorizontalRuleSpec(): HorizontalRuleSpecExtension;
|
24
|
+
//#endregion
|
25
|
+
//#region src/horizontal-rule/horizontal-rule.d.ts
|
26
|
+
type HorizontalRuleExtension = Union<[HorizontalRuleSpecExtension, HorizontalRuleCommandsExtension]>;
|
27
|
+
/**
|
28
|
+
* @public
|
29
|
+
*/
|
30
|
+
declare function defineHorizontalRule(): HorizontalRuleExtension;
|
31
|
+
//#endregion
|
32
|
+
//#region src/horizontal-rule/horizontal-rule-input-rule.d.ts
|
33
|
+
/**
|
34
|
+
* @public
|
35
|
+
*/
|
36
|
+
declare function defineHorizontalRuleInputRule(): PlainExtension;
|
37
|
+
//#endregion
|
38
|
+
export { HorizontalRuleCommandsExtension, HorizontalRuleExtension, HorizontalRuleSpecExtension, defineHorizontalRule, defineHorizontalRuleCommands, defineHorizontalRuleInputRule, defineHorizontalRuleSpec, insertHorizontalRule };
|
@@ -1,85 +1,67 @@
|
|
1
|
-
import {
|
2
|
-
|
3
|
-
} from "
|
4
|
-
|
5
|
-
// src/horizontal-rule/horizontal-rule.ts
|
6
|
-
import {
|
7
|
-
union as union2
|
8
|
-
} from "@prosekit/core";
|
1
|
+
import { defineInputRule } from "./input-rule-Gji4N7Oe.js";
|
2
|
+
import { defineCommands, defineNodeSpec, getNodeType, union } from "@prosekit/core";
|
3
|
+
import { InputRule } from "@prosekit/pm/inputrules";
|
4
|
+
import { Fragment, Slice } from "@prosekit/pm/model";
|
9
5
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
} from "@prosekit/core";
|
15
|
-
import {
|
16
|
-
Fragment,
|
17
|
-
Slice
|
18
|
-
} from "@prosekit/pm/model";
|
19
|
-
import "@prosekit/pm/state";
|
6
|
+
//#region src/horizontal-rule/horizontal-rule-commands.ts
|
7
|
+
/**
|
8
|
+
* Returns a command that inserts a horizontal rule at the current selection.
|
9
|
+
*/
|
20
10
|
function insertHorizontalRule() {
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
11
|
+
return (state, dispatch) => {
|
12
|
+
if (!dispatch) return true;
|
13
|
+
const { schema, tr } = state;
|
14
|
+
const type = getNodeType(schema, "horizontalRule");
|
15
|
+
const node = type.createChecked();
|
16
|
+
const pos = tr.selection.anchor;
|
17
|
+
tr.replaceRange(pos, pos, new Slice(Fragment.from(node), 0, 0));
|
18
|
+
dispatch(tr);
|
19
|
+
return true;
|
20
|
+
};
|
31
21
|
}
|
32
22
|
function defineHorizontalRuleCommands() {
|
33
|
-
|
23
|
+
return defineCommands({ insertHorizontalRule });
|
34
24
|
}
|
35
25
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
import { InputRule } from "@prosekit/pm/inputrules";
|
26
|
+
//#endregion
|
27
|
+
//#region src/horizontal-rule/horizontal-rule-input-rule.ts
|
28
|
+
/**
|
29
|
+
* @public
|
30
|
+
*/
|
42
31
|
function defineHorizontalRuleInputRule() {
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
return tr.scrollIntoView();
|
52
|
-
})
|
53
|
-
)
|
54
|
-
);
|
32
|
+
return union(defineInputRule(new InputRule(/^---$/, (state, match, start, end) => {
|
33
|
+
const { schema } = state;
|
34
|
+
const { tr } = state;
|
35
|
+
const type = getNodeType(schema, "horizontalRule");
|
36
|
+
const node = type.createChecked();
|
37
|
+
tr.delete(start, end).insert(start - 1, node);
|
38
|
+
return tr.scrollIntoView();
|
39
|
+
})));
|
55
40
|
}
|
56
41
|
|
57
|
-
|
58
|
-
|
59
|
-
defineNodeSpec
|
60
|
-
} from "@prosekit/core";
|
42
|
+
//#endregion
|
43
|
+
//#region src/horizontal-rule/horizontal-rule-spec.ts
|
61
44
|
function defineHorizontalRuleSpec() {
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
45
|
+
return defineNodeSpec({
|
46
|
+
name: "horizontalRule",
|
47
|
+
group: "block",
|
48
|
+
parseDOM: [{ tag: "hr" }],
|
49
|
+
toDOM: () => [
|
50
|
+
"div",
|
51
|
+
{ class: "prosekit-horizontal-rule" },
|
52
|
+
["hr"]
|
53
|
+
]
|
54
|
+
});
|
69
55
|
}
|
70
56
|
|
71
|
-
|
57
|
+
//#endregion
|
58
|
+
//#region src/horizontal-rule/horizontal-rule.ts
|
59
|
+
/**
|
60
|
+
* @public
|
61
|
+
*/
|
72
62
|
function defineHorizontalRule() {
|
73
|
-
|
74
|
-
defineHorizontalRuleSpec(),
|
75
|
-
defineHorizontalRuleInputRule(),
|
76
|
-
defineHorizontalRuleCommands()
|
77
|
-
);
|
63
|
+
return union(defineHorizontalRuleSpec(), defineHorizontalRuleInputRule(), defineHorizontalRuleCommands());
|
78
64
|
}
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
defineHorizontalRuleInputRule,
|
83
|
-
defineHorizontalRuleSpec,
|
84
|
-
insertHorizontalRule
|
85
|
-
};
|
65
|
+
|
66
|
+
//#endregion
|
67
|
+
export { defineHorizontalRule, defineHorizontalRuleCommands, defineHorizontalRuleInputRule, defineHorizontalRuleSpec, insertHorizontalRule };
|
@@ -1,7 +1,50 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
1
|
+
import { Extension, Union } from "@prosekit/core";
|
2
|
+
|
3
|
+
//#region src/image/image-spec.d.ts
|
4
|
+
|
5
|
+
/**
|
6
|
+
* @public
|
7
|
+
*/
|
8
|
+
interface ImageAttrs {
|
9
|
+
src?: string | null;
|
10
|
+
width?: number | null;
|
11
|
+
height?: number | null;
|
12
|
+
}
|
13
|
+
/**
|
14
|
+
* @internal
|
15
|
+
*/
|
16
|
+
type ImageSpecExtension = Extension<{
|
17
|
+
Nodes: {
|
18
|
+
image: ImageAttrs;
|
19
|
+
};
|
20
|
+
}>;
|
21
|
+
/**
|
22
|
+
* @internal
|
23
|
+
*/
|
24
|
+
declare function defineImageSpec(): ImageSpecExtension;
|
25
|
+
//#endregion
|
26
|
+
//#region src/image/image-commands.d.ts
|
27
|
+
/**
|
28
|
+
* @internal
|
29
|
+
*/
|
30
|
+
type ImageCommandsExtension = Extension<{
|
31
|
+
Commands: {
|
32
|
+
insertImage: [attrs?: ImageAttrs];
|
33
|
+
};
|
34
|
+
}>;
|
35
|
+
/**
|
36
|
+
* @internal
|
37
|
+
*/
|
38
|
+
declare function defineImageCommands(): ImageCommandsExtension;
|
39
|
+
//#endregion
|
40
|
+
//#region src/image/image.d.ts
|
41
|
+
/**
|
42
|
+
* @internal
|
43
|
+
*/
|
44
|
+
type ImageExtension = Union<[ImageSpecExtension, ImageCommandsExtension]>;
|
45
|
+
/**
|
46
|
+
* @public
|
47
|
+
*/
|
48
|
+
declare function defineImage(): ImageExtension;
|
49
|
+
//#endregion
|
50
|
+
export { ImageAttrs, ImageCommandsExtension, ImageExtension, ImageSpecExtension, defineImage, defineImageCommands, defineImageSpec };
|
@@ -1,71 +1,80 @@
|
|
1
|
-
|
2
|
-
import {
|
3
|
-
union
|
4
|
-
} from "@prosekit/core";
|
1
|
+
import { defineCommands, defineNodeSpec, insertNode, union } from "@prosekit/core";
|
5
2
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
} from "@prosekit/core";
|
3
|
+
//#region src/image/image-commands.ts
|
4
|
+
/**
|
5
|
+
* @internal
|
6
|
+
*/
|
11
7
|
function defineImageCommands() {
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
8
|
+
return defineCommands({ insertImage: (attrs) => {
|
9
|
+
return insertNode({
|
10
|
+
type: "image",
|
11
|
+
attrs
|
12
|
+
});
|
13
|
+
} });
|
17
14
|
}
|
18
15
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
16
|
+
//#endregion
|
17
|
+
//#region src/image/image-spec.ts
|
18
|
+
/**
|
19
|
+
* @internal
|
20
|
+
*/
|
23
21
|
function defineImageSpec() {
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
22
|
+
return defineNodeSpec({
|
23
|
+
name: "image",
|
24
|
+
attrs: {
|
25
|
+
src: {
|
26
|
+
default: null,
|
27
|
+
validate: "string|null"
|
28
|
+
},
|
29
|
+
width: {
|
30
|
+
default: null,
|
31
|
+
validate: "number|null"
|
32
|
+
},
|
33
|
+
height: {
|
34
|
+
default: null,
|
35
|
+
validate: "number|null"
|
36
|
+
}
|
37
|
+
},
|
38
|
+
group: "block",
|
39
|
+
defining: true,
|
40
|
+
draggable: true,
|
41
|
+
parseDOM: [{
|
42
|
+
tag: "img[src]",
|
43
|
+
getAttrs: (element) => {
|
44
|
+
if (typeof element === "string") return { src: null };
|
45
|
+
const src = element.getAttribute("src") || null;
|
46
|
+
let width = null;
|
47
|
+
let height = null;
|
48
|
+
const rect = element.getBoundingClientRect();
|
49
|
+
if (rect.width > 0 && rect.height > 0) {
|
50
|
+
width = rect.width;
|
51
|
+
height = rect.height;
|
52
|
+
} else if (element instanceof HTMLImageElement && element.naturalWidth > 0 && element.naturalHeight > 0) {
|
53
|
+
width = element.naturalWidth;
|
54
|
+
height = element.naturalHeight;
|
55
|
+
}
|
56
|
+
return {
|
57
|
+
src,
|
58
|
+
width,
|
59
|
+
height
|
60
|
+
};
|
61
|
+
}
|
62
|
+
}],
|
63
|
+
toDOM(node) {
|
64
|
+
const attrs = node.attrs;
|
65
|
+
return ["img", attrs];
|
66
|
+
}
|
67
|
+
});
|
61
68
|
}
|
62
69
|
|
63
|
-
|
70
|
+
//#endregion
|
71
|
+
//#region src/image/image.ts
|
72
|
+
/**
|
73
|
+
* @public
|
74
|
+
*/
|
64
75
|
function defineImage() {
|
65
|
-
|
76
|
+
return union(defineImageSpec(), defineImageCommands());
|
66
77
|
}
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
defineImageSpec
|
71
|
-
};
|
78
|
+
|
79
|
+
//#endregion
|
80
|
+
export { defineImage, defineImageCommands, defineImageSpec };
|