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