@prosekit/extensions 0.14.2 → 0.16.0-beta.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/dist/commit/style.css +1 -3
- package/dist/{drop-indicator-DJq8pF92.js → drop-indicator.js} +2 -4
- package/dist/drop-indicator.js.map +1 -0
- package/dist/{file-upload-I9m1EJAM.js → file.js} +2 -6
- package/dist/file.js.map +1 -0
- package/dist/gap-cursor/style.css +5 -8
- package/dist/{file-upload-dr3IXUty.d.ts → index.d.ts} +1 -1
- package/dist/index.d.ts.map +1 -0
- package/dist/list/style.css +79 -110
- package/dist/loro/style.css +18 -21
- package/dist/{mark-rule-Bqdm49Eq.js → mark-rule.js} +2 -5
- package/dist/mark-rule.js.map +1 -0
- package/dist/page/style.css +43 -0
- package/dist/{mark-paste-rule--F1QPUcU.js → paste-rule.js} +2 -6
- package/dist/paste-rule.js.map +1 -0
- package/dist/placeholder/style.css +4 -7
- package/dist/prosekit-extensions-autocomplete.js +1 -5
- package/dist/prosekit-extensions-autocomplete.js.map +1 -1
- package/dist/prosekit-extensions-background-color.js +1 -4
- package/dist/prosekit-extensions-background-color.js.map +1 -1
- package/dist/prosekit-extensions-blockquote.js +1 -6
- package/dist/prosekit-extensions-blockquote.js.map +1 -1
- package/dist/prosekit-extensions-bold.js +1 -6
- package/dist/prosekit-extensions-bold.js.map +1 -1
- package/dist/prosekit-extensions-code-block.d.ts +4 -2
- package/dist/prosekit-extensions-code-block.d.ts.map +1 -1
- package/dist/prosekit-extensions-code-block.js +1 -10
- package/dist/prosekit-extensions-code-block.js.map +1 -1
- package/dist/prosekit-extensions-code.js +1 -6
- package/dist/prosekit-extensions-code.js.map +1 -1
- package/dist/prosekit-extensions-commit.js +1 -2
- package/dist/prosekit-extensions-commit.js.map +1 -1
- package/dist/prosekit-extensions-doc.js +1 -2
- package/dist/prosekit-extensions-doc.js.map +1 -1
- package/dist/prosekit-extensions-drop-cursor.js +1 -2
- package/dist/prosekit-extensions-drop-cursor.js.map +1 -1
- package/dist/prosekit-extensions-drop-indicator.js +2 -3
- package/dist/prosekit-extensions-enter-rule.js +1 -2
- package/dist/prosekit-extensions-enter-rule.js.map +1 -1
- package/dist/prosekit-extensions-file.d.ts +2 -2
- package/dist/prosekit-extensions-file.js +2 -3
- package/dist/prosekit-extensions-gap-cursor.js +1 -2
- package/dist/prosekit-extensions-gap-cursor.js.map +1 -1
- package/dist/prosekit-extensions-hard-break.js +1 -5
- package/dist/prosekit-extensions-hard-break.js.map +1 -1
- package/dist/prosekit-extensions-heading.js +1 -6
- package/dist/prosekit-extensions-heading.js.map +1 -1
- package/dist/prosekit-extensions-horizontal-rule.d.ts.map +1 -1
- package/dist/prosekit-extensions-horizontal-rule.js +3 -6
- package/dist/prosekit-extensions-horizontal-rule.js.map +1 -1
- package/dist/prosekit-extensions-image.d.ts +1 -2
- package/dist/prosekit-extensions-image.d.ts.map +1 -1
- package/dist/prosekit-extensions-image.js +2 -8
- package/dist/prosekit-extensions-image.js.map +1 -1
- package/dist/prosekit-extensions-input-rule.js +1 -2
- package/dist/prosekit-extensions-input-rule.js.map +1 -1
- package/dist/prosekit-extensions-italic.js +1 -6
- package/dist/prosekit-extensions-italic.js.map +1 -1
- package/dist/prosekit-extensions-link.js +3 -6
- package/dist/prosekit-extensions-link.js.map +1 -1
- package/dist/prosekit-extensions-list.js +2 -10
- package/dist/prosekit-extensions-list.js.map +1 -1
- package/dist/prosekit-extensions-loro.d.ts.map +1 -1
- package/dist/prosekit-extensions-loro.js +3 -9
- package/dist/prosekit-extensions-loro.js.map +1 -1
- package/dist/prosekit-extensions-mark-rule.js +2 -3
- package/dist/prosekit-extensions-math.js +1 -5
- package/dist/prosekit-extensions-math.js.map +1 -1
- package/dist/prosekit-extensions-mention.js +1 -2
- package/dist/prosekit-extensions-mention.js.map +1 -1
- package/dist/prosekit-extensions-mod-click-prevention.js +1 -2
- package/dist/prosekit-extensions-mod-click-prevention.js.map +1 -1
- package/dist/prosekit-extensions-page.d.ts +114 -0
- package/dist/prosekit-extensions-page.d.ts.map +1 -0
- package/dist/prosekit-extensions-page.js +324 -0
- package/dist/prosekit-extensions-page.js.map +1 -0
- package/dist/prosekit-extensions-paragraph.d.ts.map +1 -1
- package/dist/prosekit-extensions-paragraph.js +3 -7
- package/dist/prosekit-extensions-paragraph.js.map +1 -1
- package/dist/prosekit-extensions-paste-rule.js +2 -3
- package/dist/prosekit-extensions-placeholder.js +2 -3
- package/dist/prosekit-extensions-placeholder.js.map +1 -1
- package/dist/prosekit-extensions-readonly.js +1 -2
- package/dist/prosekit-extensions-readonly.js.map +1 -1
- package/dist/prosekit-extensions-search.js +1 -2
- package/dist/prosekit-extensions-search.js.map +1 -1
- package/dist/prosekit-extensions-strike.js +1 -2
- package/dist/prosekit-extensions-strike.js.map +1 -1
- package/dist/prosekit-extensions-table.js +2 -3
- package/dist/prosekit-extensions-text-align.js +1 -2
- package/dist/prosekit-extensions-text-align.js.map +1 -1
- package/dist/prosekit-extensions-text-color.js +1 -4
- package/dist/prosekit-extensions-text-color.js.map +1 -1
- package/dist/prosekit-extensions-text.js +1 -2
- package/dist/prosekit-extensions-text.js.map +1 -1
- package/dist/prosekit-extensions-underline.js +1 -2
- package/dist/prosekit-extensions-underline.js.map +1 -1
- package/dist/prosekit-extensions-virtual-selection.js +1 -2
- package/dist/prosekit-extensions-virtual-selection.js.map +1 -1
- package/dist/prosekit-extensions-yjs.d.ts.map +1 -1
- package/dist/prosekit-extensions-yjs.js +3 -9
- package/dist/prosekit-extensions-yjs.js.map +1 -1
- package/dist/prosekit-extensions.js +1 -1
- package/dist/search/style.css +4 -8
- package/dist/shiki-highlighter-chunk.js +1 -2
- package/dist/shiki-highlighter-chunk.js.map +1 -1
- package/dist/table/style.css +16 -16
- package/dist/{table-B81i9oH9.js → table.js} +3 -15
- package/dist/table.js.map +1 -0
- package/dist/virtual-selection/style.css +1 -4
- package/dist/yjs/style.css +14 -20
- package/package.json +27 -14
- package/src/horizontal-rule/horizontal-rule-commands.ts +2 -1
- package/src/loro/loro.ts +3 -2
- package/src/page/index.ts +5 -0
- package/src/page/page-break-commands.spec.ts +61 -0
- package/src/page/page-break-commands.ts +41 -0
- package/src/page/page-break-keymap.ts +17 -0
- package/src/page/page-break-spec.ts +33 -0
- package/src/page/page-break.ts +23 -0
- package/src/page/page-element.ts +246 -0
- package/src/page/page-rendering.ts +164 -0
- package/src/page/style.css +43 -0
- package/src/paragraph/paragraph.ts +3 -2
- package/src/yjs/yjs.ts +3 -2
- package/dist/commit/style.css.map +0 -1
- package/dist/commit/style.js +0 -1
- package/dist/drop-indicator-DJq8pF92.js.map +0 -1
- package/dist/file-upload-I9m1EJAM.js.map +0 -1
- package/dist/file-upload-dr3IXUty.d.ts.map +0 -1
- package/dist/gap-cursor/style.css.map +0 -1
- package/dist/gap-cursor/style.js +0 -1
- package/dist/list/style.css.map +0 -1
- package/dist/list/style.js +0 -1
- package/dist/loro/style.css.map +0 -1
- package/dist/loro/style.js +0 -1
- package/dist/mark-paste-rule--F1QPUcU.js.map +0 -1
- package/dist/mark-rule-Bqdm49Eq.js.map +0 -1
- package/dist/placeholder/style.css.map +0 -1
- package/dist/placeholder/style.js +0 -1
- package/dist/search/style.css.map +0 -1
- package/dist/search/style.js +0 -1
- package/dist/shiki-highlighter-chunk.d.ts +0 -19
- package/dist/shiki-highlighter-chunk.d.ts.map +0 -1
- package/dist/table/style.css.map +0 -1
- package/dist/table/style.js +0 -1
- package/dist/table-B81i9oH9.js.map +0 -1
- package/dist/virtual-selection/style.css.map +0 -1
- package/dist/virtual-selection/style.js +0 -1
- package/dist/yjs/style.css.map +0 -1
- package/dist/yjs/style.js +0 -1
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { defineMarkInputRule } from "./prosekit-extensions-input-rule.js";
|
|
2
2
|
import { canUseRegexLookbehind, defineCommands, defineKeymap, defineMarkSpec, toggleMark, union } from "@prosekit/core";
|
|
3
|
-
|
|
4
3
|
//#region src/italic/italic-commands.ts
|
|
5
4
|
/**
|
|
6
5
|
* @internal
|
|
@@ -8,7 +7,6 @@ import { canUseRegexLookbehind, defineCommands, defineKeymap, defineMarkSpec, to
|
|
|
8
7
|
function defineItalicCommands() {
|
|
9
8
|
return defineCommands({ toggleItalic: () => toggleMark({ type: "italic" }) });
|
|
10
9
|
}
|
|
11
|
-
|
|
12
10
|
//#endregion
|
|
13
11
|
//#region src/italic/italic-input-rule.ts
|
|
14
12
|
/**
|
|
@@ -20,7 +18,6 @@ function defineItalicInputRule() {
|
|
|
20
18
|
type: "italic"
|
|
21
19
|
});
|
|
22
20
|
}
|
|
23
|
-
|
|
24
21
|
//#endregion
|
|
25
22
|
//#region src/italic/italic-keymap.ts
|
|
26
23
|
/**
|
|
@@ -29,7 +26,6 @@ function defineItalicInputRule() {
|
|
|
29
26
|
function defineItalicKeymap() {
|
|
30
27
|
return defineKeymap({ "Mod-i": toggleMark({ type: "italic" }) });
|
|
31
28
|
}
|
|
32
|
-
|
|
33
29
|
//#endregion
|
|
34
30
|
//#region src/italic/italic-spec.ts
|
|
35
31
|
/**
|
|
@@ -52,7 +48,6 @@ function defineItalicSpec() {
|
|
|
52
48
|
}
|
|
53
49
|
});
|
|
54
50
|
}
|
|
55
|
-
|
|
56
51
|
//#endregion
|
|
57
52
|
//#region src/italic/italic.ts
|
|
58
53
|
/**
|
|
@@ -61,7 +56,7 @@ function defineItalicSpec() {
|
|
|
61
56
|
function defineItalic() {
|
|
62
57
|
return union(defineItalicSpec(), defineItalicCommands(), defineItalicKeymap(), defineItalicInputRule());
|
|
63
58
|
}
|
|
64
|
-
|
|
65
59
|
//#endregion
|
|
66
60
|
export { defineItalic, defineItalicCommands, defineItalicInputRule, defineItalicKeymap, defineItalicSpec };
|
|
61
|
+
|
|
67
62
|
//# sourceMappingURL=prosekit-extensions-italic.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prosekit-extensions-italic.js","names":[],"sources":["../src/italic/italic-commands.ts","../src/italic/italic-input-rule.ts","../src/italic/italic-keymap.ts","../src/italic/italic-spec.ts","../src/italic/italic.ts"],"sourcesContent":["import { defineCommands, toggleMark, type Extension } from '@prosekit/core'\n\n/**\n * @internal\n */\nexport type ItalicCommandsExtension = Extension<{\n Commands: {\n toggleItalic: []\n }\n}>\n\n/**\n * @internal\n */\nexport function defineItalicCommands(): ItalicCommandsExtension {\n return defineCommands({\n toggleItalic: () => toggleMark({ type: 'italic' }),\n })\n}\n","import { canUseRegexLookbehind, type PlainExtension } from '@prosekit/core'\n\nimport { defineMarkInputRule } from '../input-rule/index.ts'\n\n/**\n * @internal\n */\nexport function defineItalicInputRule(): PlainExtension {\n return defineMarkInputRule({\n regex: canUseRegexLookbehind()\n ? /(?<=\\s|^)\\*([^\\s*]|[^\\s*][^*]*[^\\s*])\\*$/\n : /\\*([^\\s*]|[^\\s*][^*]*[^\\s*])\\*$/,\n type: 'italic',\n })\n}\n","import { defineKeymap, toggleMark, type PlainExtension } from '@prosekit/core'\n\n/**\n * @internal\n */\nexport function defineItalicKeymap(): PlainExtension {\n return defineKeymap({\n 'Mod-i': toggleMark({ type: 'italic' }),\n })\n}\n","import { defineMarkSpec, type Extension } from '@prosekit/core'\nimport type { Attrs } from '@prosekit/pm/model'\n\n/**\n * @internal\n */\nexport type ItalicSpecExtension = Extension<{\n Marks: {\n italic: Attrs\n }\n}>\n\n/**\n * @internal\n */\nexport function defineItalicSpec(): ItalicSpecExtension {\n return defineMarkSpec({\n name: 'italic',\n parseDOM: [\n { tag: 'i' },\n { tag: 'em' },\n { style: 'font-style=italic' },\n {\n style: 'font-style=normal',\n clearMark: (m) => m.type.name === 'italic',\n },\n ],\n toDOM() {\n return ['em', 0]\n },\n })\n}\n","import { union, type Union } from '@prosekit/core'\n\nimport { defineItalicCommands, type ItalicCommandsExtension } from './italic-commands.ts'\nimport { defineItalicInputRule } from './italic-input-rule.ts'\nimport { defineItalicKeymap } from './italic-keymap.ts'\nimport { defineItalicSpec, type ItalicSpecExtension } from './italic-spec.ts'\n\n/**\n * @internal\n */\nexport type ItalicExtension = Union<\n [ItalicSpecExtension, ItalicCommandsExtension]\n>\n\n/**\n * @public\n */\nexport function defineItalic(): ItalicExtension {\n return union(\n defineItalicSpec(),\n defineItalicCommands(),\n defineItalicKeymap(),\n defineItalicInputRule(),\n )\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"prosekit-extensions-italic.js","names":[],"sources":["../src/italic/italic-commands.ts","../src/italic/italic-input-rule.ts","../src/italic/italic-keymap.ts","../src/italic/italic-spec.ts","../src/italic/italic.ts"],"sourcesContent":["import { defineCommands, toggleMark, type Extension } from '@prosekit/core'\n\n/**\n * @internal\n */\nexport type ItalicCommandsExtension = Extension<{\n Commands: {\n toggleItalic: []\n }\n}>\n\n/**\n * @internal\n */\nexport function defineItalicCommands(): ItalicCommandsExtension {\n return defineCommands({\n toggleItalic: () => toggleMark({ type: 'italic' }),\n })\n}\n","import { canUseRegexLookbehind, type PlainExtension } from '@prosekit/core'\n\nimport { defineMarkInputRule } from '../input-rule/index.ts'\n\n/**\n * @internal\n */\nexport function defineItalicInputRule(): PlainExtension {\n return defineMarkInputRule({\n regex: canUseRegexLookbehind()\n ? /(?<=\\s|^)\\*([^\\s*]|[^\\s*][^*]*[^\\s*])\\*$/\n : /\\*([^\\s*]|[^\\s*][^*]*[^\\s*])\\*$/,\n type: 'italic',\n })\n}\n","import { defineKeymap, toggleMark, type PlainExtension } from '@prosekit/core'\n\n/**\n * @internal\n */\nexport function defineItalicKeymap(): PlainExtension {\n return defineKeymap({\n 'Mod-i': toggleMark({ type: 'italic' }),\n })\n}\n","import { defineMarkSpec, type Extension } from '@prosekit/core'\nimport type { Attrs } from '@prosekit/pm/model'\n\n/**\n * @internal\n */\nexport type ItalicSpecExtension = Extension<{\n Marks: {\n italic: Attrs\n }\n}>\n\n/**\n * @internal\n */\nexport function defineItalicSpec(): ItalicSpecExtension {\n return defineMarkSpec({\n name: 'italic',\n parseDOM: [\n { tag: 'i' },\n { tag: 'em' },\n { style: 'font-style=italic' },\n {\n style: 'font-style=normal',\n clearMark: (m) => m.type.name === 'italic',\n },\n ],\n toDOM() {\n return ['em', 0]\n },\n })\n}\n","import { union, type Union } from '@prosekit/core'\n\nimport { defineItalicCommands, type ItalicCommandsExtension } from './italic-commands.ts'\nimport { defineItalicInputRule } from './italic-input-rule.ts'\nimport { defineItalicKeymap } from './italic-keymap.ts'\nimport { defineItalicSpec, type ItalicSpecExtension } from './italic-spec.ts'\n\n/**\n * @internal\n */\nexport type ItalicExtension = Union<\n [ItalicSpecExtension, ItalicCommandsExtension]\n>\n\n/**\n * @public\n */\nexport function defineItalic(): ItalicExtension {\n return union(\n defineItalicSpec(),\n defineItalicCommands(),\n defineItalicKeymap(),\n defineItalicInputRule(),\n )\n}\n"],"mappings":";;;;;;AAcA,SAAgB,uBAAgD;AAC9D,QAAO,eAAe,EACpB,oBAAoB,WAAW,EAAE,MAAM,UAAU,CAAC,EACnD,CAAC;;;;;;;ACVJ,SAAgB,wBAAwC;AACtD,QAAO,oBAAoB;EACzB,OAAO,uBAAuB,GAC1B,6CACA;EACJ,MAAM;EACP,CAAC;;;;;;;ACRJ,SAAgB,qBAAqC;AACnD,QAAO,aAAa,EAClB,SAAS,WAAW,EAAE,MAAM,UAAU,CAAC,EACxC,CAAC;;;;;;;ACOJ,SAAgB,mBAAwC;AACtD,QAAO,eAAe;EACpB,MAAM;EACN,UAAU;GACR,EAAE,KAAK,KAAK;GACZ,EAAE,KAAK,MAAM;GACb,EAAE,OAAO,qBAAqB;GAC9B;IACE,OAAO;IACP,YAAY,MAAM,EAAE,KAAK,SAAS;IACnC;GACF;EACD,QAAQ;AACN,UAAO,CAAC,MAAM,EAAE;;EAEnB,CAAC;;;;;;;ACbJ,SAAgB,eAAgC;AAC9C,QAAO,MACL,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,EACpB,uBAAuB,CACxB"}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { defineInputRule } from "./prosekit-extensions-input-rule.js";
|
|
2
2
|
import { defineEnterRule } from "./prosekit-extensions-enter-rule.js";
|
|
3
|
-
import { t as defineMarkRule } from "./mark-rule
|
|
4
|
-
import { t as defineMarkPasteRule } from "./
|
|
3
|
+
import { t as defineMarkRule } from "./mark-rule.js";
|
|
4
|
+
import { t as defineMarkPasteRule } from "./paste-rule.js";
|
|
5
5
|
import { addMark, defineCommands, defineMarkSpec, expandMark, removeMark, toggleMark, union } from "@prosekit/core";
|
|
6
6
|
import { InputRule } from "@prosekit/pm/inputrules";
|
|
7
|
-
|
|
8
7
|
//#region src/link/link-regex.ts
|
|
9
8
|
const TLD_RE_PATTERN = "a(?:a(?:a|rp)|b(?:arth|b(?:ott|vie)?|c|le|ogado|udhabi)|c(?:ademy|c(?:enture|ountants?)|o|tor)?|d(?:s|ult)?|e(?:g|ro|tna)?|f(?:l|rica)?|g(?:akhan|ency)?|i(?:g|r(?:bus|force|tel))?|kdn|l(?:faromeo|i(?:baba|pay)|l(?:finanz|state|y)|s(?:ace|tom))?|m(?:azon|e(?:rican(?:express|family)|x)|fam|ica|sterdam)?|n(?:alytics|droid|quan|z)|ol?|p(?:artments|p(?:le)?)|q(?:uarelle)?|r(?:a(?:b|mco)|chi|my|pa|te?)?|s(?:da|ia|sociates)?|t(?:hleta|torney)?|u(?:ction|di(?:ble|o)?|spost|t(?:hor|os?))?|vianca|ws?|xa?|z(?:ure)?)|b(?:a(?:by|idu|n(?:a(?:mex|narepublic)|d|k)|r(?:c(?:elona|lay(?:card|s))|efoot|gains)?|s(?:eball|ketball)|uhaus|yern)?|b(?:c|t|va)?|c[gn]|d|e(?:a(?:ts|uty)|er|ntley|rlin|st(?:buy)?|t)?|f|g|h(?:arti)?|i(?:ble|d|ke|ngo?|o|z)?|j|l(?:ack(?:friday)?|o(?:ckbuster|g|omberg)|ue)|m[sw]?|n(?:pparibas)?|o(?:ats|ehringer|fa|m|nd|o(?:k(?:ing)?)?|s(?:ch|t(?:ik|on))|t|utique|x)?|r(?:adesco|idgestone|o(?:adway|ker|ther)|ussels)?|s|t|u(?:ild(?:ers)?|siness|y|zz)|v|w|y|zh?)|c(?:a(?:b|fe|l(?:l|vinklein)?|m(?:era|p)?|non|p(?:etown|ital(?:one)?)|r(?:avan|ds|e(?:ers?)?|s)?|s(?:a|e|h|ino)|t(?:ering|holic)?)?|b(?:a|n|re|s)|c|d|e(?:nter|o|rn)|f[ad]?|g|h(?:a(?:n(?:el|nel)|rity|se|t)|eap|intai|r(?:istmas|ome)|urch)?|i(?:priani|rcle|sco|t(?:adel|ic?|y(?:eats)?))?|k|l(?:aims|eaning|i(?:ck|ni(?:c|que))|o(?:thing|ud)|ub(?:med)?)?|m|n|o(?:ach|des|ffee|l(?:lege|ogne)|m(?:cast|m(?:bank|unity)|p(?:a(?:ny|re)|uter)|sec)?|n(?:dos|s(?:truction|ulting)|t(?:act|ractors))|o(?:king(?:channel)?|l|p)|rsica|u(?:ntry|pons?|rses))?|pa|r(?:edit(?:card|union)?|icket|own|s|uises?)?|u(?:isinella)?|v|w|x|y(?:mru|ou)?|z)|d(?:a(?:bur|d|nce|t(?:a|e|ing|sun)|y)|clk|ds|e(?:al(?:er|s)?|gree|l(?:ivery|l|oitte|ta)|mocrat|nt(?:al|ist)|si(?:gn)?|v)?|hl|i(?:amonds|et|gital|rect(?:ory)?|s(?:co(?:unt|ver)|h)|y)|j|k|m|np|o(?:c(?:s|tor)|g|mains|t|wnload)?|rive|tv|u(?:bai|nlop|pont|rban)|v(?:ag|r)|z)|e(?:a(?:rth|t)|co?|d(?:eka|u(?:cation)?)|e|g|m(?:ail|erck)|n(?:ergy|gineer(?:ing)?|terprises)|pson|quipment|r(?:icsson|ni)?|s(?:q|tate)?|t(?:isalat)?|u(?:rovision|s)?|vents|x(?:change|p(?:ert|osed|ress)|traspace))|f(?:a(?:ge|i(?:l|rwinds|th)|mily|ns?|rm(?:ers)?|s(?:hion|t))|e(?:dex|edback|rr(?:ari|ero))|i(?:at|d(?:elity|o)|lm|na(?:l|nc(?:e|ial))|r(?:e(?:stone)?|mdale)|sh(?:ing)?|t(?:ness)?)?|j|k|l(?:i(?:ckr|ghts|r)|o(?:rist|wers)|y)|m|o(?:o(?:d(?:network)?|tball)?|r(?:d|ex|sale|um)|undation|x)?|r(?:e(?:e|senius)|l|o(?:gans|nt(?:door|ier)))?|tr|u(?:jitsu|nd?|rniture|tbol)|yi)|g(?:a(?:l(?:l(?:ery|o|up))?|mes?|p|rden|y)?|b(?:iz)?|dn?|e(?:a|nt(?:ing)?|orge)?|f|g(?:ee)?|h|i(?:fts?|v(?:es|ing))?|l(?:ass|e|ob(?:al|o))?|m(?:ail|bh|o|x)?|n|o(?:daddy|l(?:d(?:point)?|f)|o(?:dyear|g(?:le)?)?|p|t|v)|p|q|r(?:a(?:inger|phics|tis)|een|ipe|o(?:cery|up))?|s|t|u(?:ardian|cci|ge|i(?:de|tars)|ru)?|w|y)|h(?:a(?:ir|mburg|ngout|us)|bo|dfc(?:bank)?|e(?:alth(?:care)?|l(?:p|sinki)|r(?:e|mes))|gtv|i(?:phop|samitsu|tachi|v)|kt?|m|n|o(?:ckey|l(?:dings|iday)|me(?:depot|goods|s(?:ense)?)|nda|rse|s(?:pital|t(?:ing)?)|t(?:el(?:es|s)|mail)?|use|w)|r|sbc|t|u(?:ghes)?|y(?:att|undai))|i(?:bm|c(?:bc|e|u)|d|e(?:ee)?|fm|kano|l|m(?:amat|db|mo(?:bilien)?)?|n(?:c|dustries|f(?:initi|o)|g|k|s(?:titute|ur(?:ance|e))|t(?:ernational|uit)?|vestments)?|o|piranga|q|r(?:ish)?|s(?:maili|t(?:anbul)?)?|t(?:au|v)?)|j(?:a(?:guar|va)|cb|e(?:ep|tzt|welry)?|io|ll|mp?|nj|o(?:b(?:s|urg)|t|y)?|p(?:morgan|rs)?|u(?:egos|niper))|k(?:aufen|ddi|e(?:rry(?:hotels|logistics|properties))?|fh|g|h|i(?:a|ds|m|nd(?:er|le)|tchen|wi)?|m|n|o(?:eln|matsu|sher)|p(?:mg|n)?|r(?:d|ed)?|uokgroup|w|y(?:oto)?|z)|l(?:a(?:caixa|m(?:borghini|er)|n(?:c(?:aster|ia)|d(?:rover)?|xess)|salle|t(?:ino|robe)?|w(?:yer)?)?|b|c|ds|e(?:ase|clerc|frak|g(?:al|o)|xus)|gbt|i(?:dl|fe(?:insurance|style)?|ghting|ke|lly|m(?:ited|o)|n(?:coln|de|k)|psy|v(?:e|ing))?|k|l[cp]|o(?:ans?|c(?:ker|us)|l|ndon|tt[eo]|ve)|pl(?:financial)?|r|s|t(?:da?)?|u(?:ndbeck|x(?:e|ury))?|v|y)|m(?:a(?:cys|drid|i(?:f|son)|keup|n(?:agement|go)?|p|r(?:ket(?:ing|s)?|riott|shalls)|serati|ttel)?|ba|c(?:kinsey)?|d|e(?:d(?:ia)?|et|lbourne|m(?:e|orial)|nu?|rckmsd)?|g|h|i(?:ami|crosoft|l|n[it]|t(?:subishi)?)|k|l[bs]?|ma?|n|o(?:bi(?:le)?|da|e|i|m|n(?:ash|ey|ster)|r(?:mon|tgage)|scow|to(?:rcycles)?|v(?:ie)?)?|p|q|r|sd?|t[nr]?|u(?:s(?:eum|ic)|tual)?|v|w|x|y|z)|n(?:a(?:b|goya|me|tura|vy)?|ba|c|e(?:c|t(?:bank|flix|work)?|ustar|ws?|x(?:t(?:direct)?|us))?|fl?|go?|hk|i(?:co|k(?:e|on)|nja|ssa[ny])?|l|o(?:kia|rt(?:hwesternmutual|on)|w(?:ruz|tv)?)?|p|r[aw]?|tt|u|yc|z)|o(?:b(?:i|server)|ffice|kinawa|l(?:ayan(?:group)?|dnavy|lo)|m(?:ega)?|n(?:e|g|l(?:ine)?)|oo|pen|r(?:a(?:cle|nge)|g(?:anic)?|igins)|saka|t(?:suka|t)|vh)|p(?:a(?:ge|nasonic|r(?:is|s|t(?:ners|s|y))|ssagens|y)?|ccw|et?|f(?:izer)?|g|h(?:armacy|d|ilips|o(?:ne|to(?:graphy|s)?)|ysio)?|i(?:c(?:s|t(?:et|ures))|d|n[gk]?|oneer|zza)|k|l(?:a(?:ce|y(?:station)?)|u(?:mbing|s))?|m|nc?|o(?:hl|ker|litie|rn|st)|r(?:a(?:merica|xi)|ess|ime|o(?:d(?:uctions)?|f|gressive|mo|pert(?:ies|y)|tection)?|u(?:dential)?)?|s|t|ub|wc?|y)|q(?:a|pon|ue(?:bec|st))|r(?:a(?:cing|dio)|e(?:a(?:d|l(?:estate|t(?:or|y)))|cipes|d(?:stone|umbrella)?|hab|i(?:sen?|t)|liance|n(?:t(?:als)?)?|p(?:air|ort|ublican)|st(?:aurant)?|views?|xroth)?|i(?:c(?:h(?:ardli)?|oh)|l|o|p)|o(?:c(?:her|ks)|deo|gers|om)?|s(?:vp)?|u(?:gby|hr|n)?|we?|yukyu)|s(?:a(?:arland|fe(?:ty)?|kura|l(?:e|on)|ms(?:club|ung)|n(?:dvik(?:coromant)?|ofi)|p|rl|s|ve|xo)?|b[is]?|c(?:a|b|h(?:aeffler|midt|o(?:larships|ol)|ule|warz)|ience|ot)?|d|e(?:a(?:rch|t)|cur(?:e|ity)|ek|lect|ner|rvices|ven|w|xy?)?|fr|g|h(?:a(?:ngrila|rp|w)|ell|i(?:a|ksha)|o(?:es|p(?:ping)?|uji|w(?:time)?))?|i(?:lk|n(?:a|gles)|te)?|j|k(?:in?|y(?:pe)?)?|l(?:ing)?|m(?:art|ile)?|n(?:cf)?|o(?:c(?:cer|ial)|ft(?:bank|ware)|hu|l(?:ar|utions)|n[gy]|y)?|p(?:a(?:ce)?|o(?:rt|t))|rl?|s|t(?:a(?:da|ples|r|te(?:bank|farm))|c(?:group)?|o(?:ckholm|r(?:age|e))|ream|ud(?:io|y)|yle)?|u(?:cks|pp(?:l(?:ies|y)|ort)|r(?:f|gery)|zuki)?|v|w(?:atch|iss)|x|y(?:dney|stems)?|z)|t(?:a(?:b|ipei|lk|obao|rget|t(?:a(?:motors|r)|too)|xi?)|ci?|dk?|e(?:am|ch(?:nology)?|l|masek|nnis|va)|f|g|h(?:d|eat(?:er|re))?|i(?:aa|ckets|enda|ffany|ps|r(?:es|ol))|j(?:maxx|x)?|k(?:maxx)?|l|m(?:all)?|n|o(?:day|kyo|ols|p|ray|shiba|tal|urs|wn|y(?:ota|s))?|r(?:a(?:d(?:e|ing)|ining|vel(?:channel|ers(?:insurance)?)?)|ust|v)?|t|u(?:be|i|nes|shu)|vs?|w|z)|u(?:a|b(?:ank|s)|g|k|n(?:i(?:com|versity)|o)|ol|ps|s|y|z)|v(?:a(?:cations|n(?:a|guard))?|c|e(?:gas|ntures|r(?:isign|sicherung)|t)?|g|i(?:ajes|deo|g|king|llas|n|p|rgin|s(?:a|ion)|v[ao])?|laanderen|n|o(?:dka|l(?:kswagen|vo)|t(?:e|ing|o)|yage)|u(?:elos)?)|w(?:a(?:l(?:es|mart|ter)|ng(?:gou)?|tch(?:es)?)|e(?:ather(?:channel)?|b(?:cam|er|site)|d(?:ding)?|i(?:bo|r))|f|hoswho|i(?:en|ki|lliamhill|n(?:dows|e|ners)?)|me|o(?:lterskluwer|odside|r(?:ks?|ld)|w)|s|t[cf])|x(?:box|erox|finity|i(?:huan|n)|xx|yz)|y(?:a(?:chts|hoo|maxun|ndex)|e|o(?:dobashi|ga|kohama|u(?:tube)?)|t|un)|z(?:a(?:ppos|ra)?|ero|ip|m|one|uerich|w)";
|
|
10
9
|
const PUNCTUATION_CHAR_PATTERN = "\\.\\,\\;\\!\\?";
|
|
@@ -17,7 +16,6 @@ const LINK_MARK_PATTERN = LINK_RE_BASE_PATTERN + "(?=[\\.\\,\\;\\!\\?]|\\s|$)";
|
|
|
17
16
|
const LINK_ENTER_RE = new RegExp(LINK_ENTER_PATTERN, "gi");
|
|
18
17
|
const LINK_INPUT_RE = new RegExp(LINK_INPUT_PATTERN, "gi");
|
|
19
18
|
const LINK_MARK_RE = new RegExp(LINK_MARK_PATTERN, "gi");
|
|
20
|
-
|
|
21
19
|
//#endregion
|
|
22
20
|
//#region src/link/link-paste-rule.ts
|
|
23
21
|
/**
|
|
@@ -33,7 +31,6 @@ function defineLinkPasteRule() {
|
|
|
33
31
|
}
|
|
34
32
|
});
|
|
35
33
|
}
|
|
36
|
-
|
|
37
34
|
//#endregion
|
|
38
35
|
//#region src/link/index.ts
|
|
39
36
|
/**
|
|
@@ -140,7 +137,7 @@ function defineLinkMarkRule() {
|
|
|
140
137
|
function defineLink() {
|
|
141
138
|
return union(defineLinkSpec(), defineLinkCommands(), defineLinkInputRule(), defineLinkEnterRule(), defineLinkPasteRule());
|
|
142
139
|
}
|
|
143
|
-
|
|
144
140
|
//#endregion
|
|
145
141
|
export { defineLink, defineLinkCommands, defineLinkEnterRule, defineLinkInputRule, defineLinkMarkRule, defineLinkPasteRule, defineLinkSpec };
|
|
142
|
+
|
|
146
143
|
//# sourceMappingURL=prosekit-extensions-link.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prosekit-extensions-link.js","names":[],"sources":["../src/link/link-regex.ts","../src/link/link-paste-rule.ts","../src/link/index.ts"],"sourcesContent":["/* eslint-disable unicorn/prefer-string-raw -- Don't use String.raw here for better bundler minification */\n\n// All valid alpha TLDs.\n// Data source: https://data.iana.org/TLD/tlds-alpha-by-domain.txt\nconst TLD_RE_PATTERN =\n 'a(?:a(?:a|rp)|b(?:arth|b(?:ott|vie)?|c|le|ogado|udhabi)|c(?:ademy|c(?:enture|ountants?)|o|tor)?|d(?:s|ult)?|e(?:g|ro|tna)?|f(?:l|rica)?|g(?:akhan|ency)?|i(?:g|r(?:bus|force|tel))?|kdn|l(?:faromeo|i(?:baba|pay)|l(?:finanz|state|y)|s(?:ace|tom))?|m(?:azon|e(?:rican(?:express|family)|x)|fam|ica|sterdam)?|n(?:alytics|droid|quan|z)|ol?|p(?:artments|p(?:le)?)|q(?:uarelle)?|r(?:a(?:b|mco)|chi|my|pa|te?)?|s(?:da|ia|sociates)?|t(?:hleta|torney)?|u(?:ction|di(?:ble|o)?|spost|t(?:hor|os?))?|vianca|ws?|xa?|z(?:ure)?)|b(?:a(?:by|idu|n(?:a(?:mex|narepublic)|d|k)|r(?:c(?:elona|lay(?:card|s))|efoot|gains)?|s(?:eball|ketball)|uhaus|yern)?|b(?:c|t|va)?|c[gn]|d|e(?:a(?:ts|uty)|er|ntley|rlin|st(?:buy)?|t)?|f|g|h(?:arti)?|i(?:ble|d|ke|ngo?|o|z)?|j|l(?:ack(?:friday)?|o(?:ckbuster|g|omberg)|ue)|m[sw]?|n(?:pparibas)?|o(?:ats|ehringer|fa|m|nd|o(?:k(?:ing)?)?|s(?:ch|t(?:ik|on))|t|utique|x)?|r(?:adesco|idgestone|o(?:adway|ker|ther)|ussels)?|s|t|u(?:ild(?:ers)?|siness|y|zz)|v|w|y|zh?)|c(?:a(?:b|fe|l(?:l|vinklein)?|m(?:era|p)?|non|p(?:etown|ital(?:one)?)|r(?:avan|ds|e(?:ers?)?|s)?|s(?:a|e|h|ino)|t(?:ering|holic)?)?|b(?:a|n|re|s)|c|d|e(?:nter|o|rn)|f[ad]?|g|h(?:a(?:n(?:el|nel)|rity|se|t)|eap|intai|r(?:istmas|ome)|urch)?|i(?:priani|rcle|sco|t(?:adel|ic?|y(?:eats)?))?|k|l(?:aims|eaning|i(?:ck|ni(?:c|que))|o(?:thing|ud)|ub(?:med)?)?|m|n|o(?:ach|des|ffee|l(?:lege|ogne)|m(?:cast|m(?:bank|unity)|p(?:a(?:ny|re)|uter)|sec)?|n(?:dos|s(?:truction|ulting)|t(?:act|ractors))|o(?:king(?:channel)?|l|p)|rsica|u(?:ntry|pons?|rses))?|pa|r(?:edit(?:card|union)?|icket|own|s|uises?)?|u(?:isinella)?|v|w|x|y(?:mru|ou)?|z)|d(?:a(?:bur|d|nce|t(?:a|e|ing|sun)|y)|clk|ds|e(?:al(?:er|s)?|gree|l(?:ivery|l|oitte|ta)|mocrat|nt(?:al|ist)|si(?:gn)?|v)?|hl|i(?:amonds|et|gital|rect(?:ory)?|s(?:co(?:unt|ver)|h)|y)|j|k|m|np|o(?:c(?:s|tor)|g|mains|t|wnload)?|rive|tv|u(?:bai|nlop|pont|rban)|v(?:ag|r)|z)|e(?:a(?:rth|t)|co?|d(?:eka|u(?:cation)?)|e|g|m(?:ail|erck)|n(?:ergy|gineer(?:ing)?|terprises)|pson|quipment|r(?:icsson|ni)?|s(?:q|tate)?|t(?:isalat)?|u(?:rovision|s)?|vents|x(?:change|p(?:ert|osed|ress)|traspace))|f(?:a(?:ge|i(?:l|rwinds|th)|mily|ns?|rm(?:ers)?|s(?:hion|t))|e(?:dex|edback|rr(?:ari|ero))|i(?:at|d(?:elity|o)|lm|na(?:l|nc(?:e|ial))|r(?:e(?:stone)?|mdale)|sh(?:ing)?|t(?:ness)?)?|j|k|l(?:i(?:ckr|ghts|r)|o(?:rist|wers)|y)|m|o(?:o(?:d(?:network)?|tball)?|r(?:d|ex|sale|um)|undation|x)?|r(?:e(?:e|senius)|l|o(?:gans|nt(?:door|ier)))?|tr|u(?:jitsu|nd?|rniture|tbol)|yi)|g(?:a(?:l(?:l(?:ery|o|up))?|mes?|p|rden|y)?|b(?:iz)?|dn?|e(?:a|nt(?:ing)?|orge)?|f|g(?:ee)?|h|i(?:fts?|v(?:es|ing))?|l(?:ass|e|ob(?:al|o))?|m(?:ail|bh|o|x)?|n|o(?:daddy|l(?:d(?:point)?|f)|o(?:dyear|g(?:le)?)?|p|t|v)|p|q|r(?:a(?:inger|phics|tis)|een|ipe|o(?:cery|up))?|s|t|u(?:ardian|cci|ge|i(?:de|tars)|ru)?|w|y)|h(?:a(?:ir|mburg|ngout|us)|bo|dfc(?:bank)?|e(?:alth(?:care)?|l(?:p|sinki)|r(?:e|mes))|gtv|i(?:phop|samitsu|tachi|v)|kt?|m|n|o(?:ckey|l(?:dings|iday)|me(?:depot|goods|s(?:ense)?)|nda|rse|s(?:pital|t(?:ing)?)|t(?:el(?:es|s)|mail)?|use|w)|r|sbc|t|u(?:ghes)?|y(?:att|undai))|i(?:bm|c(?:bc|e|u)|d|e(?:ee)?|fm|kano|l|m(?:amat|db|mo(?:bilien)?)?|n(?:c|dustries|f(?:initi|o)|g|k|s(?:titute|ur(?:ance|e))|t(?:ernational|uit)?|vestments)?|o|piranga|q|r(?:ish)?|s(?:maili|t(?:anbul)?)?|t(?:au|v)?)|j(?:a(?:guar|va)|cb|e(?:ep|tzt|welry)?|io|ll|mp?|nj|o(?:b(?:s|urg)|t|y)?|p(?:morgan|rs)?|u(?:egos|niper))|k(?:aufen|ddi|e(?:rry(?:hotels|logistics|properties))?|fh|g|h|i(?:a|ds|m|nd(?:er|le)|tchen|wi)?|m|n|o(?:eln|matsu|sher)|p(?:mg|n)?|r(?:d|ed)?|uokgroup|w|y(?:oto)?|z)|l(?:a(?:caixa|m(?:borghini|er)|n(?:c(?:aster|ia)|d(?:rover)?|xess)|salle|t(?:ino|robe)?|w(?:yer)?)?|b|c|ds|e(?:ase|clerc|frak|g(?:al|o)|xus)|gbt|i(?:dl|fe(?:insurance|style)?|ghting|ke|lly|m(?:ited|o)|n(?:coln|de|k)|psy|v(?:e|ing))?|k|l[cp]|o(?:ans?|c(?:ker|us)|l|ndon|tt[eo]|ve)|pl(?:financial)?|r|s|t(?:da?)?|u(?:ndbeck|x(?:e|ury))?|v|y)|m(?:a(?:cys|drid|i(?:f|son)|keup|n(?:agement|go)?|p|r(?:ket(?:ing|s)?|riott|shalls)|serati|ttel)?|ba|c(?:kinsey)?|d|e(?:d(?:ia)?|et|lbourne|m(?:e|orial)|nu?|rckmsd)?|g|h|i(?:ami|crosoft|l|n[it]|t(?:subishi)?)|k|l[bs]?|ma?|n|o(?:bi(?:le)?|da|e|i|m|n(?:ash|ey|ster)|r(?:mon|tgage)|scow|to(?:rcycles)?|v(?:ie)?)?|p|q|r|sd?|t[nr]?|u(?:s(?:eum|ic)|tual)?|v|w|x|y|z)|n(?:a(?:b|goya|me|tura|vy)?|ba|c|e(?:c|t(?:bank|flix|work)?|ustar|ws?|x(?:t(?:direct)?|us))?|fl?|go?|hk|i(?:co|k(?:e|on)|nja|ssa[ny])?|l|o(?:kia|rt(?:hwesternmutual|on)|w(?:ruz|tv)?)?|p|r[aw]?|tt|u|yc|z)|o(?:b(?:i|server)|ffice|kinawa|l(?:ayan(?:group)?|dnavy|lo)|m(?:ega)?|n(?:e|g|l(?:ine)?)|oo|pen|r(?:a(?:cle|nge)|g(?:anic)?|igins)|saka|t(?:suka|t)|vh)|p(?:a(?:ge|nasonic|r(?:is|s|t(?:ners|s|y))|ssagens|y)?|ccw|et?|f(?:izer)?|g|h(?:armacy|d|ilips|o(?:ne|to(?:graphy|s)?)|ysio)?|i(?:c(?:s|t(?:et|ures))|d|n[gk]?|oneer|zza)|k|l(?:a(?:ce|y(?:station)?)|u(?:mbing|s))?|m|nc?|o(?:hl|ker|litie|rn|st)|r(?:a(?:merica|xi)|ess|ime|o(?:d(?:uctions)?|f|gressive|mo|pert(?:ies|y)|tection)?|u(?:dential)?)?|s|t|ub|wc?|y)|q(?:a|pon|ue(?:bec|st))|r(?:a(?:cing|dio)|e(?:a(?:d|l(?:estate|t(?:or|y)))|cipes|d(?:stone|umbrella)?|hab|i(?:sen?|t)|liance|n(?:t(?:als)?)?|p(?:air|ort|ublican)|st(?:aurant)?|views?|xroth)?|i(?:c(?:h(?:ardli)?|oh)|l|o|p)|o(?:c(?:her|ks)|deo|gers|om)?|s(?:vp)?|u(?:gby|hr|n)?|we?|yukyu)|s(?:a(?:arland|fe(?:ty)?|kura|l(?:e|on)|ms(?:club|ung)|n(?:dvik(?:coromant)?|ofi)|p|rl|s|ve|xo)?|b[is]?|c(?:a|b|h(?:aeffler|midt|o(?:larships|ol)|ule|warz)|ience|ot)?|d|e(?:a(?:rch|t)|cur(?:e|ity)|ek|lect|ner|rvices|ven|w|xy?)?|fr|g|h(?:a(?:ngrila|rp|w)|ell|i(?:a|ksha)|o(?:es|p(?:ping)?|uji|w(?:time)?))?|i(?:lk|n(?:a|gles)|te)?|j|k(?:in?|y(?:pe)?)?|l(?:ing)?|m(?:art|ile)?|n(?:cf)?|o(?:c(?:cer|ial)|ft(?:bank|ware)|hu|l(?:ar|utions)|n[gy]|y)?|p(?:a(?:ce)?|o(?:rt|t))|rl?|s|t(?:a(?:da|ples|r|te(?:bank|farm))|c(?:group)?|o(?:ckholm|r(?:age|e))|ream|ud(?:io|y)|yle)?|u(?:cks|pp(?:l(?:ies|y)|ort)|r(?:f|gery)|zuki)?|v|w(?:atch|iss)|x|y(?:dney|stems)?|z)|t(?:a(?:b|ipei|lk|obao|rget|t(?:a(?:motors|r)|too)|xi?)|ci?|dk?|e(?:am|ch(?:nology)?|l|masek|nnis|va)|f|g|h(?:d|eat(?:er|re))?|i(?:aa|ckets|enda|ffany|ps|r(?:es|ol))|j(?:maxx|x)?|k(?:maxx)?|l|m(?:all)?|n|o(?:day|kyo|ols|p|ray|shiba|tal|urs|wn|y(?:ota|s))?|r(?:a(?:d(?:e|ing)|ining|vel(?:channel|ers(?:insurance)?)?)|ust|v)?|t|u(?:be|i|nes|shu)|vs?|w|z)|u(?:a|b(?:ank|s)|g|k|n(?:i(?:com|versity)|o)|ol|ps|s|y|z)|v(?:a(?:cations|n(?:a|guard))?|c|e(?:gas|ntures|r(?:isign|sicherung)|t)?|g|i(?:ajes|deo|g|king|llas|n|p|rgin|s(?:a|ion)|v[ao])?|laanderen|n|o(?:dka|l(?:kswagen|vo)|t(?:e|ing|o)|yage)|u(?:elos)?)|w(?:a(?:l(?:es|mart|ter)|ng(?:gou)?|tch(?:es)?)|e(?:ather(?:channel)?|b(?:cam|er|site)|d(?:ding)?|i(?:bo|r))|f|hoswho|i(?:en|ki|lliamhill|n(?:dows|e|ners)?)|me|o(?:lterskluwer|odside|r(?:ks?|ld)|w)|s|t[cf])|x(?:box|erox|finity|i(?:huan|n)|xx|yz)|y(?:a(?:chts|hoo|maxun|ndex)|e|o(?:dobashi|ga|kohama|u(?:tube)?)|t|un)|z(?:a(?:ppos|ra)?|ero|ip|m|one|uerich|w)'\n\n// Some common punctuations that can be used to stop a link\nconst PUNCTUATION_CHAR_PATTERN = '\\\\.\\\\,\\\\;\\\\!\\\\?'\n\nconst STOP_CHAR_PATTERN = '[' + PUNCTUATION_CHAR_PATTERN + ']'\n\nconst END_CHAR_PATTERN = '[^' + '\\\\s' + PUNCTUATION_CHAR_PATTERN + ']'\n\n// dprint-ignore\nconst LINK_RE_BASE_PATTERN = (\n // start of the link group\n '(' + \n '(?:' +\n // protocol identifier (optional)\n // short syntax // is allowed\n '(?:(?:https?:)?\\\\/\\\\/)?' +\n\n // host & domain names.\n '(?:' +\n '(?:' +\n '[a-z0-9\\\\u00a1-\\\\uffff]' +\n '[a-z0-9\\\\u00a1-\\\\uffff_-]{0,62}' +\n ')?' +\n '[a-z0-9\\\\u00a1-\\\\uffff]\\\\.' +\n ')+' +\n\n // TLD identifier name, must not end with dot\n '(?:' +\n TLD_RE_PATTERN +\n ')' +\n ')' +\n\n // port number (optional)\n '(?::\\\\d{2,5})?' +\n\n // sub path (optional)\n '(?:/' +\n '(?:' + \n '\\\\S*' +\n END_CHAR_PATTERN +\n ')?' +\n ')?' +\n\n // query string (optional)\n '(?:\\\\?' + \n '(?:' + \n '\\\\S*' +\n END_CHAR_PATTERN +\n ')' +\n ')?' +\n\n // fragment (optional)\n '(?:\\\\#' + \n '(?:' + \n '\\\\S*' +\n END_CHAR_PATTERN +\n ')?' +\n ')?' +\n\n // end of the link group\n ')'\n)\n\n// dprint-ignore\nconst LINK_ENTER_PATTERN = LINK_RE_BASE_PATTERN + STOP_CHAR_PATTERN + '?' + '$'\n// dprint-ignore\nconst LINK_INPUT_PATTERN = LINK_RE_BASE_PATTERN + STOP_CHAR_PATTERN + '?' + '\\\\s$'\n// dprint-ignore\nconst LINK_MARK_PATTERN = LINK_RE_BASE_PATTERN + '(?=' + STOP_CHAR_PATTERN + '|\\\\s|$)'\n\nexport const LINK_ENTER_RE: RegExp = new RegExp(LINK_ENTER_PATTERN, 'gi')\nexport const LINK_INPUT_RE: RegExp = new RegExp(LINK_INPUT_PATTERN, 'gi')\nexport const LINK_MARK_RE: RegExp = new RegExp(LINK_MARK_PATTERN, 'gi')\n","import type { PlainExtension } from '@prosekit/core'\n\nimport { defineMarkPasteRule } from '../paste-rule/index.ts'\n\nimport { LINK_MARK_RE } from './link-regex.ts'\nimport type { LinkAttrs } from './link-types.ts'\n\n/**\n * @internal\n */\nexport function defineLinkPasteRule(): PlainExtension {\n return defineMarkPasteRule({\n type: 'link',\n regex: LINK_MARK_RE,\n getAttrs: (match: RegExpExecArray): LinkAttrs | false => {\n if (match[1]) {\n return { href: match[1] } satisfies LinkAttrs\n }\n return false\n },\n })\n}\n","import {\n addMark,\n defineCommands,\n defineMarkSpec,\n expandMark,\n removeMark,\n toggleMark,\n union,\n type Extension,\n type PlainExtension,\n type Union,\n} from '@prosekit/core'\nimport { InputRule } from '@prosekit/pm/inputrules'\n\nimport { defineEnterRule } from '../enter-rule/index.ts'\nimport { defineInputRule } from '../input-rule/index.ts'\nimport { defineMarkRule } from '../mark-rule/index.ts'\n\nimport { defineLinkPasteRule } from './link-paste-rule.ts'\nimport { LINK_ENTER_RE, LINK_INPUT_RE, LINK_MARK_RE } from './link-regex.ts'\nimport type { LinkAttrs } from './link-types.ts'\n\nexport { defineLinkPasteRule }\nexport type { LinkAttrs }\n\n/**\n * @internal\n */\nexport type LinkSpecExtension = Extension<{\n Marks: {\n link: LinkAttrs\n }\n}>\n\n/**\n * @internal\n */\nexport function defineLinkSpec(): LinkSpecExtension {\n return defineMarkSpec<'link', LinkAttrs>({\n name: 'link',\n inclusive: false,\n attrs: {\n href: { validate: 'string' },\n target: { default: null, validate: 'string|null' },\n rel: { default: null, validate: 'string|null' },\n },\n parseDOM: [\n {\n tag: 'a[href]',\n getAttrs: (dom: HTMLElement) => {\n return {\n href: dom.getAttribute('href') || '',\n target: dom.getAttribute('target') || null,\n rel: dom.getAttribute('rel') || null,\n }\n },\n },\n ],\n toDOM(node) {\n const { href, target, rel } = node.attrs as LinkAttrs\n return ['a', { href, target, rel }, 0]\n },\n })\n}\n\n/**\n * @internal\n */\nexport type LinkCommandsExtension = Extension<{\n Commands: {\n addLink: [attrs: LinkAttrs]\n removeLink: []\n toggleLink: [attrs: LinkAttrs]\n expandLink: []\n }\n}>\n\nexport function defineLinkCommands(): LinkCommandsExtension {\n return defineCommands({\n addLink: (attrs: LinkAttrs) => addMark({ type: 'link', attrs }),\n removeLink: () => removeMark({ type: 'link' }),\n toggleLink: (attrs: LinkAttrs) => toggleMark({ type: 'link', attrs }),\n expandLink: () => expandMark({ type: 'link' }),\n })\n}\n\n/**\n * Apply link marks after pressing Space.\n *\n * @internal\n */\nexport function defineLinkInputRule(): PlainExtension {\n return defineInputRule(\n new InputRule(LINK_INPUT_RE, (state, match, from) => {\n const href = match[1]\n if (!href) return null\n\n const mark = state.schema.marks.link.create({ href })\n return state.tr.addMark(from, from + href.length, mark).insertText(' ')\n }),\n )\n}\n\n/**\n * Apply link marks after typing Enter.\n *\n * @internal\n */\nexport function defineLinkEnterRule(): PlainExtension {\n return defineEnterRule({\n regex: LINK_ENTER_RE,\n handler: ({ state, from, match }) => {\n const href = match[1]\n if (!href) return null\n\n const mark = state.schema.marks.link.create({ href })\n const tr = state.tr.addMark(from, from + href.length, mark)\n return tr.docChanged ? tr : null\n },\n })\n}\n\n/**\n * Apply and remove link marks to the text during typing.\n *\n * @internal\n */\nexport function defineLinkMarkRule(): PlainExtension {\n return defineMarkRule({\n regex: LINK_MARK_RE,\n type: 'link',\n attrs: (match) => ({ href: match[1] }),\n })\n}\n\n/**\n * @internal\n */\nexport type LinkExtension = Union<[LinkSpecExtension, LinkCommandsExtension]>\n\n/**\n * @public\n */\nexport function defineLink(): LinkExtension {\n return union(\n defineLinkSpec(),\n defineLinkCommands(),\n defineLinkInputRule(),\n defineLinkEnterRule(),\n defineLinkPasteRule(),\n )\n}\n"],"mappings":";;;;;;;;AAIA,MAAM,iBACJ;AAGF,MAAM,2BAA2B;AAEjC,MAAM,oBAAoB,MAAM,2BAA2B;AAElC,KAAe;AAGxC,MAAM,uBAEF,6HAiBY,iBACJ;AAmCZ,MAAM,qBAAqB,uBAAuB,oBAAoB;AAEtE,MAAM,qBAAqB,uBAAuB,oBAAoB;AAEtE,MAAM,oBAAoB,uBAAuB;AAEjD,MAAa,gBAAwB,IAAI,OAAO,oBAAoB,KAAK;AACzE,MAAa,gBAAwB,IAAI,OAAO,oBAAoB,KAAK;AACzE,MAAa,eAAuB,IAAI,OAAO,mBAAmB,KAAK;;;;;;;ACpEvE,SAAgB,sBAAsC;AACpD,QAAO,oBAAoB;EACzB,MAAM;EACN,OAAO;EACP,WAAW,UAA8C;AACvD,OAAI,MAAM,GACR,QAAO,EAAE,MAAM,MAAM,IAAI;AAE3B,UAAO;;EAEV,CAAC;;;;;;;;ACiBJ,SAAgB,iBAAoC;AAClD,QAAO,eAAkC;EACvC,MAAM;EACN,WAAW;EACX,OAAO;GACL,MAAM,EAAE,UAAU,UAAU;GAC5B,QAAQ;IAAE,SAAS;IAAM,UAAU;IAAe;GAClD,KAAK;IAAE,SAAS;IAAM,UAAU;IAAe;GAChD;EACD,UAAU,CACR;GACE,KAAK;GACL,WAAW,QAAqB;AAC9B,WAAO;KACL,MAAM,IAAI,aAAa,OAAO,IAAI;KAClC,QAAQ,IAAI,aAAa,SAAS,IAAI;KACtC,KAAK,IAAI,aAAa,MAAM,IAAI;KACjC;;GAEJ,CACF;EACD,MAAM,MAAM;GACV,MAAM,EAAE,MAAM,QAAQ,QAAQ,KAAK;AACnC,UAAO;IAAC;IAAK;KAAE;KAAM;KAAQ;KAAK;IAAE;IAAE;;EAEzC,CAAC;;AAeJ,SAAgB,qBAA4C;AAC1D,QAAO,eAAe;EACpB,UAAU,UAAqB,QAAQ;GAAE,MAAM;GAAQ;GAAO,CAAC;EAC/D,kBAAkB,WAAW,EAAE,MAAM,QAAQ,CAAC;EAC9C,aAAa,UAAqB,WAAW;GAAE,MAAM;GAAQ;GAAO,CAAC;EACrE,kBAAkB,WAAW,EAAE,MAAM,QAAQ,CAAC;EAC/C,CAAC;;;;;;;AAQJ,SAAgB,sBAAsC;AACpD,QAAO,gBACL,IAAI,UAAU,gBAAgB,OAAO,OAAO,SAAS;EACnD,MAAM,OAAO,MAAM;AACnB,MAAI,CAAC,KAAM,QAAO;EAElB,MAAM,OAAO,MAAM,OAAO,MAAM,KAAK,OAAO,EAAE,MAAM,CAAC;AACrD,SAAO,MAAM,GAAG,QAAQ,MAAM,OAAO,KAAK,QAAQ,KAAK,CAAC,WAAW,IAAI;GACvE,CACH;;;;;;;AAQH,SAAgB,sBAAsC;AACpD,QAAO,gBAAgB;EACrB,OAAO;EACP,UAAU,EAAE,OAAO,MAAM,YAAY;GACnC,MAAM,OAAO,MAAM;AACnB,OAAI,CAAC,KAAM,QAAO;GAElB,MAAM,OAAO,MAAM,OAAO,MAAM,KAAK,OAAO,EAAE,MAAM,CAAC;GACrD,MAAM,KAAK,MAAM,GAAG,QAAQ,MAAM,OAAO,KAAK,QAAQ,KAAK;AAC3D,UAAO,GAAG,aAAa,KAAK;;EAE/B,CAAC;;;;;;;AAQJ,SAAgB,qBAAqC;AACnD,QAAO,eAAe;EACpB,OAAO;EACP,MAAM;EACN,QAAQ,WAAW,EAAE,MAAM,MAAM,IAAI;EACtC,CAAC;;;;;AAWJ,SAAgB,aAA4B;AAC1C,QAAO,MACL,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,CACtB"}
|
|
1
|
+
{"version":3,"file":"prosekit-extensions-link.js","names":[],"sources":["../src/link/link-regex.ts","../src/link/link-paste-rule.ts","../src/link/index.ts"],"sourcesContent":["/* eslint-disable unicorn/prefer-string-raw -- Don't use String.raw here for better bundler minification */\n\n// All valid alpha TLDs.\n// Data source: https://data.iana.org/TLD/tlds-alpha-by-domain.txt\nconst TLD_RE_PATTERN =\n 'a(?:a(?:a|rp)|b(?:arth|b(?:ott|vie)?|c|le|ogado|udhabi)|c(?:ademy|c(?:enture|ountants?)|o|tor)?|d(?:s|ult)?|e(?:g|ro|tna)?|f(?:l|rica)?|g(?:akhan|ency)?|i(?:g|r(?:bus|force|tel))?|kdn|l(?:faromeo|i(?:baba|pay)|l(?:finanz|state|y)|s(?:ace|tom))?|m(?:azon|e(?:rican(?:express|family)|x)|fam|ica|sterdam)?|n(?:alytics|droid|quan|z)|ol?|p(?:artments|p(?:le)?)|q(?:uarelle)?|r(?:a(?:b|mco)|chi|my|pa|te?)?|s(?:da|ia|sociates)?|t(?:hleta|torney)?|u(?:ction|di(?:ble|o)?|spost|t(?:hor|os?))?|vianca|ws?|xa?|z(?:ure)?)|b(?:a(?:by|idu|n(?:a(?:mex|narepublic)|d|k)|r(?:c(?:elona|lay(?:card|s))|efoot|gains)?|s(?:eball|ketball)|uhaus|yern)?|b(?:c|t|va)?|c[gn]|d|e(?:a(?:ts|uty)|er|ntley|rlin|st(?:buy)?|t)?|f|g|h(?:arti)?|i(?:ble|d|ke|ngo?|o|z)?|j|l(?:ack(?:friday)?|o(?:ckbuster|g|omberg)|ue)|m[sw]?|n(?:pparibas)?|o(?:ats|ehringer|fa|m|nd|o(?:k(?:ing)?)?|s(?:ch|t(?:ik|on))|t|utique|x)?|r(?:adesco|idgestone|o(?:adway|ker|ther)|ussels)?|s|t|u(?:ild(?:ers)?|siness|y|zz)|v|w|y|zh?)|c(?:a(?:b|fe|l(?:l|vinklein)?|m(?:era|p)?|non|p(?:etown|ital(?:one)?)|r(?:avan|ds|e(?:ers?)?|s)?|s(?:a|e|h|ino)|t(?:ering|holic)?)?|b(?:a|n|re|s)|c|d|e(?:nter|o|rn)|f[ad]?|g|h(?:a(?:n(?:el|nel)|rity|se|t)|eap|intai|r(?:istmas|ome)|urch)?|i(?:priani|rcle|sco|t(?:adel|ic?|y(?:eats)?))?|k|l(?:aims|eaning|i(?:ck|ni(?:c|que))|o(?:thing|ud)|ub(?:med)?)?|m|n|o(?:ach|des|ffee|l(?:lege|ogne)|m(?:cast|m(?:bank|unity)|p(?:a(?:ny|re)|uter)|sec)?|n(?:dos|s(?:truction|ulting)|t(?:act|ractors))|o(?:king(?:channel)?|l|p)|rsica|u(?:ntry|pons?|rses))?|pa|r(?:edit(?:card|union)?|icket|own|s|uises?)?|u(?:isinella)?|v|w|x|y(?:mru|ou)?|z)|d(?:a(?:bur|d|nce|t(?:a|e|ing|sun)|y)|clk|ds|e(?:al(?:er|s)?|gree|l(?:ivery|l|oitte|ta)|mocrat|nt(?:al|ist)|si(?:gn)?|v)?|hl|i(?:amonds|et|gital|rect(?:ory)?|s(?:co(?:unt|ver)|h)|y)|j|k|m|np|o(?:c(?:s|tor)|g|mains|t|wnload)?|rive|tv|u(?:bai|nlop|pont|rban)|v(?:ag|r)|z)|e(?:a(?:rth|t)|co?|d(?:eka|u(?:cation)?)|e|g|m(?:ail|erck)|n(?:ergy|gineer(?:ing)?|terprises)|pson|quipment|r(?:icsson|ni)?|s(?:q|tate)?|t(?:isalat)?|u(?:rovision|s)?|vents|x(?:change|p(?:ert|osed|ress)|traspace))|f(?:a(?:ge|i(?:l|rwinds|th)|mily|ns?|rm(?:ers)?|s(?:hion|t))|e(?:dex|edback|rr(?:ari|ero))|i(?:at|d(?:elity|o)|lm|na(?:l|nc(?:e|ial))|r(?:e(?:stone)?|mdale)|sh(?:ing)?|t(?:ness)?)?|j|k|l(?:i(?:ckr|ghts|r)|o(?:rist|wers)|y)|m|o(?:o(?:d(?:network)?|tball)?|r(?:d|ex|sale|um)|undation|x)?|r(?:e(?:e|senius)|l|o(?:gans|nt(?:door|ier)))?|tr|u(?:jitsu|nd?|rniture|tbol)|yi)|g(?:a(?:l(?:l(?:ery|o|up))?|mes?|p|rden|y)?|b(?:iz)?|dn?|e(?:a|nt(?:ing)?|orge)?|f|g(?:ee)?|h|i(?:fts?|v(?:es|ing))?|l(?:ass|e|ob(?:al|o))?|m(?:ail|bh|o|x)?|n|o(?:daddy|l(?:d(?:point)?|f)|o(?:dyear|g(?:le)?)?|p|t|v)|p|q|r(?:a(?:inger|phics|tis)|een|ipe|o(?:cery|up))?|s|t|u(?:ardian|cci|ge|i(?:de|tars)|ru)?|w|y)|h(?:a(?:ir|mburg|ngout|us)|bo|dfc(?:bank)?|e(?:alth(?:care)?|l(?:p|sinki)|r(?:e|mes))|gtv|i(?:phop|samitsu|tachi|v)|kt?|m|n|o(?:ckey|l(?:dings|iday)|me(?:depot|goods|s(?:ense)?)|nda|rse|s(?:pital|t(?:ing)?)|t(?:el(?:es|s)|mail)?|use|w)|r|sbc|t|u(?:ghes)?|y(?:att|undai))|i(?:bm|c(?:bc|e|u)|d|e(?:ee)?|fm|kano|l|m(?:amat|db|mo(?:bilien)?)?|n(?:c|dustries|f(?:initi|o)|g|k|s(?:titute|ur(?:ance|e))|t(?:ernational|uit)?|vestments)?|o|piranga|q|r(?:ish)?|s(?:maili|t(?:anbul)?)?|t(?:au|v)?)|j(?:a(?:guar|va)|cb|e(?:ep|tzt|welry)?|io|ll|mp?|nj|o(?:b(?:s|urg)|t|y)?|p(?:morgan|rs)?|u(?:egos|niper))|k(?:aufen|ddi|e(?:rry(?:hotels|logistics|properties))?|fh|g|h|i(?:a|ds|m|nd(?:er|le)|tchen|wi)?|m|n|o(?:eln|matsu|sher)|p(?:mg|n)?|r(?:d|ed)?|uokgroup|w|y(?:oto)?|z)|l(?:a(?:caixa|m(?:borghini|er)|n(?:c(?:aster|ia)|d(?:rover)?|xess)|salle|t(?:ino|robe)?|w(?:yer)?)?|b|c|ds|e(?:ase|clerc|frak|g(?:al|o)|xus)|gbt|i(?:dl|fe(?:insurance|style)?|ghting|ke|lly|m(?:ited|o)|n(?:coln|de|k)|psy|v(?:e|ing))?|k|l[cp]|o(?:ans?|c(?:ker|us)|l|ndon|tt[eo]|ve)|pl(?:financial)?|r|s|t(?:da?)?|u(?:ndbeck|x(?:e|ury))?|v|y)|m(?:a(?:cys|drid|i(?:f|son)|keup|n(?:agement|go)?|p|r(?:ket(?:ing|s)?|riott|shalls)|serati|ttel)?|ba|c(?:kinsey)?|d|e(?:d(?:ia)?|et|lbourne|m(?:e|orial)|nu?|rckmsd)?|g|h|i(?:ami|crosoft|l|n[it]|t(?:subishi)?)|k|l[bs]?|ma?|n|o(?:bi(?:le)?|da|e|i|m|n(?:ash|ey|ster)|r(?:mon|tgage)|scow|to(?:rcycles)?|v(?:ie)?)?|p|q|r|sd?|t[nr]?|u(?:s(?:eum|ic)|tual)?|v|w|x|y|z)|n(?:a(?:b|goya|me|tura|vy)?|ba|c|e(?:c|t(?:bank|flix|work)?|ustar|ws?|x(?:t(?:direct)?|us))?|fl?|go?|hk|i(?:co|k(?:e|on)|nja|ssa[ny])?|l|o(?:kia|rt(?:hwesternmutual|on)|w(?:ruz|tv)?)?|p|r[aw]?|tt|u|yc|z)|o(?:b(?:i|server)|ffice|kinawa|l(?:ayan(?:group)?|dnavy|lo)|m(?:ega)?|n(?:e|g|l(?:ine)?)|oo|pen|r(?:a(?:cle|nge)|g(?:anic)?|igins)|saka|t(?:suka|t)|vh)|p(?:a(?:ge|nasonic|r(?:is|s|t(?:ners|s|y))|ssagens|y)?|ccw|et?|f(?:izer)?|g|h(?:armacy|d|ilips|o(?:ne|to(?:graphy|s)?)|ysio)?|i(?:c(?:s|t(?:et|ures))|d|n[gk]?|oneer|zza)|k|l(?:a(?:ce|y(?:station)?)|u(?:mbing|s))?|m|nc?|o(?:hl|ker|litie|rn|st)|r(?:a(?:merica|xi)|ess|ime|o(?:d(?:uctions)?|f|gressive|mo|pert(?:ies|y)|tection)?|u(?:dential)?)?|s|t|ub|wc?|y)|q(?:a|pon|ue(?:bec|st))|r(?:a(?:cing|dio)|e(?:a(?:d|l(?:estate|t(?:or|y)))|cipes|d(?:stone|umbrella)?|hab|i(?:sen?|t)|liance|n(?:t(?:als)?)?|p(?:air|ort|ublican)|st(?:aurant)?|views?|xroth)?|i(?:c(?:h(?:ardli)?|oh)|l|o|p)|o(?:c(?:her|ks)|deo|gers|om)?|s(?:vp)?|u(?:gby|hr|n)?|we?|yukyu)|s(?:a(?:arland|fe(?:ty)?|kura|l(?:e|on)|ms(?:club|ung)|n(?:dvik(?:coromant)?|ofi)|p|rl|s|ve|xo)?|b[is]?|c(?:a|b|h(?:aeffler|midt|o(?:larships|ol)|ule|warz)|ience|ot)?|d|e(?:a(?:rch|t)|cur(?:e|ity)|ek|lect|ner|rvices|ven|w|xy?)?|fr|g|h(?:a(?:ngrila|rp|w)|ell|i(?:a|ksha)|o(?:es|p(?:ping)?|uji|w(?:time)?))?|i(?:lk|n(?:a|gles)|te)?|j|k(?:in?|y(?:pe)?)?|l(?:ing)?|m(?:art|ile)?|n(?:cf)?|o(?:c(?:cer|ial)|ft(?:bank|ware)|hu|l(?:ar|utions)|n[gy]|y)?|p(?:a(?:ce)?|o(?:rt|t))|rl?|s|t(?:a(?:da|ples|r|te(?:bank|farm))|c(?:group)?|o(?:ckholm|r(?:age|e))|ream|ud(?:io|y)|yle)?|u(?:cks|pp(?:l(?:ies|y)|ort)|r(?:f|gery)|zuki)?|v|w(?:atch|iss)|x|y(?:dney|stems)?|z)|t(?:a(?:b|ipei|lk|obao|rget|t(?:a(?:motors|r)|too)|xi?)|ci?|dk?|e(?:am|ch(?:nology)?|l|masek|nnis|va)|f|g|h(?:d|eat(?:er|re))?|i(?:aa|ckets|enda|ffany|ps|r(?:es|ol))|j(?:maxx|x)?|k(?:maxx)?|l|m(?:all)?|n|o(?:day|kyo|ols|p|ray|shiba|tal|urs|wn|y(?:ota|s))?|r(?:a(?:d(?:e|ing)|ining|vel(?:channel|ers(?:insurance)?)?)|ust|v)?|t|u(?:be|i|nes|shu)|vs?|w|z)|u(?:a|b(?:ank|s)|g|k|n(?:i(?:com|versity)|o)|ol|ps|s|y|z)|v(?:a(?:cations|n(?:a|guard))?|c|e(?:gas|ntures|r(?:isign|sicherung)|t)?|g|i(?:ajes|deo|g|king|llas|n|p|rgin|s(?:a|ion)|v[ao])?|laanderen|n|o(?:dka|l(?:kswagen|vo)|t(?:e|ing|o)|yage)|u(?:elos)?)|w(?:a(?:l(?:es|mart|ter)|ng(?:gou)?|tch(?:es)?)|e(?:ather(?:channel)?|b(?:cam|er|site)|d(?:ding)?|i(?:bo|r))|f|hoswho|i(?:en|ki|lliamhill|n(?:dows|e|ners)?)|me|o(?:lterskluwer|odside|r(?:ks?|ld)|w)|s|t[cf])|x(?:box|erox|finity|i(?:huan|n)|xx|yz)|y(?:a(?:chts|hoo|maxun|ndex)|e|o(?:dobashi|ga|kohama|u(?:tube)?)|t|un)|z(?:a(?:ppos|ra)?|ero|ip|m|one|uerich|w)'\n\n// Some common punctuations that can be used to stop a link\nconst PUNCTUATION_CHAR_PATTERN = '\\\\.\\\\,\\\\;\\\\!\\\\?'\n\nconst STOP_CHAR_PATTERN = '[' + PUNCTUATION_CHAR_PATTERN + ']'\n\nconst END_CHAR_PATTERN = '[^' + '\\\\s' + PUNCTUATION_CHAR_PATTERN + ']'\n\n// dprint-ignore\nconst LINK_RE_BASE_PATTERN = (\n // start of the link group\n '(' + \n '(?:' +\n // protocol identifier (optional)\n // short syntax // is allowed\n '(?:(?:https?:)?\\\\/\\\\/)?' +\n\n // host & domain names.\n '(?:' +\n '(?:' +\n '[a-z0-9\\\\u00a1-\\\\uffff]' +\n '[a-z0-9\\\\u00a1-\\\\uffff_-]{0,62}' +\n ')?' +\n '[a-z0-9\\\\u00a1-\\\\uffff]\\\\.' +\n ')+' +\n\n // TLD identifier name, must not end with dot\n '(?:' +\n TLD_RE_PATTERN +\n ')' +\n ')' +\n\n // port number (optional)\n '(?::\\\\d{2,5})?' +\n\n // sub path (optional)\n '(?:/' +\n '(?:' + \n '\\\\S*' +\n END_CHAR_PATTERN +\n ')?' +\n ')?' +\n\n // query string (optional)\n '(?:\\\\?' + \n '(?:' + \n '\\\\S*' +\n END_CHAR_PATTERN +\n ')' +\n ')?' +\n\n // fragment (optional)\n '(?:\\\\#' + \n '(?:' + \n '\\\\S*' +\n END_CHAR_PATTERN +\n ')?' +\n ')?' +\n\n // end of the link group\n ')'\n)\n\n// dprint-ignore\nconst LINK_ENTER_PATTERN = LINK_RE_BASE_PATTERN + STOP_CHAR_PATTERN + '?' + '$'\n// dprint-ignore\nconst LINK_INPUT_PATTERN = LINK_RE_BASE_PATTERN + STOP_CHAR_PATTERN + '?' + '\\\\s$'\n// dprint-ignore\nconst LINK_MARK_PATTERN = LINK_RE_BASE_PATTERN + '(?=' + STOP_CHAR_PATTERN + '|\\\\s|$)'\n\nexport const LINK_ENTER_RE: RegExp = new RegExp(LINK_ENTER_PATTERN, 'gi')\nexport const LINK_INPUT_RE: RegExp = new RegExp(LINK_INPUT_PATTERN, 'gi')\nexport const LINK_MARK_RE: RegExp = new RegExp(LINK_MARK_PATTERN, 'gi')\n","import type { PlainExtension } from '@prosekit/core'\n\nimport { defineMarkPasteRule } from '../paste-rule/index.ts'\n\nimport { LINK_MARK_RE } from './link-regex.ts'\nimport type { LinkAttrs } from './link-types.ts'\n\n/**\n * @internal\n */\nexport function defineLinkPasteRule(): PlainExtension {\n return defineMarkPasteRule({\n type: 'link',\n regex: LINK_MARK_RE,\n getAttrs: (match: RegExpExecArray): LinkAttrs | false => {\n if (match[1]) {\n return { href: match[1] } satisfies LinkAttrs\n }\n return false\n },\n })\n}\n","import {\n addMark,\n defineCommands,\n defineMarkSpec,\n expandMark,\n removeMark,\n toggleMark,\n union,\n type Extension,\n type PlainExtension,\n type Union,\n} from '@prosekit/core'\nimport { InputRule } from '@prosekit/pm/inputrules'\n\nimport { defineEnterRule } from '../enter-rule/index.ts'\nimport { defineInputRule } from '../input-rule/index.ts'\nimport { defineMarkRule } from '../mark-rule/index.ts'\n\nimport { defineLinkPasteRule } from './link-paste-rule.ts'\nimport { LINK_ENTER_RE, LINK_INPUT_RE, LINK_MARK_RE } from './link-regex.ts'\nimport type { LinkAttrs } from './link-types.ts'\n\nexport { defineLinkPasteRule }\nexport type { LinkAttrs }\n\n/**\n * @internal\n */\nexport type LinkSpecExtension = Extension<{\n Marks: {\n link: LinkAttrs\n }\n}>\n\n/**\n * @internal\n */\nexport function defineLinkSpec(): LinkSpecExtension {\n return defineMarkSpec<'link', LinkAttrs>({\n name: 'link',\n inclusive: false,\n attrs: {\n href: { validate: 'string' },\n target: { default: null, validate: 'string|null' },\n rel: { default: null, validate: 'string|null' },\n },\n parseDOM: [\n {\n tag: 'a[href]',\n getAttrs: (dom: HTMLElement) => {\n return {\n href: dom.getAttribute('href') || '',\n target: dom.getAttribute('target') || null,\n rel: dom.getAttribute('rel') || null,\n }\n },\n },\n ],\n toDOM(node) {\n const { href, target, rel } = node.attrs as LinkAttrs\n return ['a', { href, target, rel }, 0]\n },\n })\n}\n\n/**\n * @internal\n */\nexport type LinkCommandsExtension = Extension<{\n Commands: {\n addLink: [attrs: LinkAttrs]\n removeLink: []\n toggleLink: [attrs: LinkAttrs]\n expandLink: []\n }\n}>\n\nexport function defineLinkCommands(): LinkCommandsExtension {\n return defineCommands({\n addLink: (attrs: LinkAttrs) => addMark({ type: 'link', attrs }),\n removeLink: () => removeMark({ type: 'link' }),\n toggleLink: (attrs: LinkAttrs) => toggleMark({ type: 'link', attrs }),\n expandLink: () => expandMark({ type: 'link' }),\n })\n}\n\n/**\n * Apply link marks after pressing Space.\n *\n * @internal\n */\nexport function defineLinkInputRule(): PlainExtension {\n return defineInputRule(\n new InputRule(LINK_INPUT_RE, (state, match, from) => {\n const href = match[1]\n if (!href) return null\n\n const mark = state.schema.marks.link.create({ href })\n return state.tr.addMark(from, from + href.length, mark).insertText(' ')\n }),\n )\n}\n\n/**\n * Apply link marks after typing Enter.\n *\n * @internal\n */\nexport function defineLinkEnterRule(): PlainExtension {\n return defineEnterRule({\n regex: LINK_ENTER_RE,\n handler: ({ state, from, match }) => {\n const href = match[1]\n if (!href) return null\n\n const mark = state.schema.marks.link.create({ href })\n const tr = state.tr.addMark(from, from + href.length, mark)\n return tr.docChanged ? tr : null\n },\n })\n}\n\n/**\n * Apply and remove link marks to the text during typing.\n *\n * @internal\n */\nexport function defineLinkMarkRule(): PlainExtension {\n return defineMarkRule({\n regex: LINK_MARK_RE,\n type: 'link',\n attrs: (match) => ({ href: match[1] }),\n })\n}\n\n/**\n * @internal\n */\nexport type LinkExtension = Union<[LinkSpecExtension, LinkCommandsExtension]>\n\n/**\n * @public\n */\nexport function defineLink(): LinkExtension {\n return union(\n defineLinkSpec(),\n defineLinkCommands(),\n defineLinkInputRule(),\n defineLinkEnterRule(),\n defineLinkPasteRule(),\n )\n}\n"],"mappings":";;;;;;;AAIA,MAAM,iBACJ;AAGF,MAAM,2BAA2B;AAEjC,MAAM,oBAAoB,MAAM,2BAA2B;AAElC,KAAe;AAGxC,MAAM,uBAEF,6HAiBY,iBACJ;AAmCZ,MAAM,qBAAqB,uBAAuB,oBAAoB;AAEtE,MAAM,qBAAqB,uBAAuB,oBAAoB;AAEtE,MAAM,oBAAoB,uBAAuB;AAEjD,MAAa,gBAAwB,IAAI,OAAO,oBAAoB,KAAK;AACzE,MAAa,gBAAwB,IAAI,OAAO,oBAAoB,KAAK;AACzE,MAAa,eAAuB,IAAI,OAAO,mBAAmB,KAAK;;;;;;ACpEvE,SAAgB,sBAAsC;AACpD,QAAO,oBAAoB;EACzB,MAAM;EACN,OAAO;EACP,WAAW,UAA8C;AACvD,OAAI,MAAM,GACR,QAAO,EAAE,MAAM,MAAM,IAAI;AAE3B,UAAO;;EAEV,CAAC;;;;;;;ACiBJ,SAAgB,iBAAoC;AAClD,QAAO,eAAkC;EACvC,MAAM;EACN,WAAW;EACX,OAAO;GACL,MAAM,EAAE,UAAU,UAAU;GAC5B,QAAQ;IAAE,SAAS;IAAM,UAAU;IAAe;GAClD,KAAK;IAAE,SAAS;IAAM,UAAU;IAAe;GAChD;EACD,UAAU,CACR;GACE,KAAK;GACL,WAAW,QAAqB;AAC9B,WAAO;KACL,MAAM,IAAI,aAAa,OAAO,IAAI;KAClC,QAAQ,IAAI,aAAa,SAAS,IAAI;KACtC,KAAK,IAAI,aAAa,MAAM,IAAI;KACjC;;GAEJ,CACF;EACD,MAAM,MAAM;GACV,MAAM,EAAE,MAAM,QAAQ,QAAQ,KAAK;AACnC,UAAO;IAAC;IAAK;KAAE;KAAM;KAAQ;KAAK;IAAE;IAAE;;EAEzC,CAAC;;AAeJ,SAAgB,qBAA4C;AAC1D,QAAO,eAAe;EACpB,UAAU,UAAqB,QAAQ;GAAE,MAAM;GAAQ;GAAO,CAAC;EAC/D,kBAAkB,WAAW,EAAE,MAAM,QAAQ,CAAC;EAC9C,aAAa,UAAqB,WAAW;GAAE,MAAM;GAAQ;GAAO,CAAC;EACrE,kBAAkB,WAAW,EAAE,MAAM,QAAQ,CAAC;EAC/C,CAAC;;;;;;;AAQJ,SAAgB,sBAAsC;AACpD,QAAO,gBACL,IAAI,UAAU,gBAAgB,OAAO,OAAO,SAAS;EACnD,MAAM,OAAO,MAAM;AACnB,MAAI,CAAC,KAAM,QAAO;EAElB,MAAM,OAAO,MAAM,OAAO,MAAM,KAAK,OAAO,EAAE,MAAM,CAAC;AACrD,SAAO,MAAM,GAAG,QAAQ,MAAM,OAAO,KAAK,QAAQ,KAAK,CAAC,WAAW,IAAI;GACvE,CACH;;;;;;;AAQH,SAAgB,sBAAsC;AACpD,QAAO,gBAAgB;EACrB,OAAO;EACP,UAAU,EAAE,OAAO,MAAM,YAAY;GACnC,MAAM,OAAO,MAAM;AACnB,OAAI,CAAC,KAAM,QAAO;GAElB,MAAM,OAAO,MAAM,OAAO,MAAM,KAAK,OAAO,EAAE,MAAM,CAAC;GACrD,MAAM,KAAK,MAAM,GAAG,QAAQ,MAAM,OAAO,KAAK,QAAQ,KAAK;AAC3D,UAAO,GAAG,aAAa,KAAK;;EAE/B,CAAC;;;;;;;AAQJ,SAAgB,qBAAqC;AACnD,QAAO,eAAe;EACpB,OAAO;EACP,MAAM;EACN,QAAQ,WAAW,EAAE,MAAM,MAAM,IAAI;EACtC,CAAC;;;;;AAWJ,SAAgB,aAA4B;AAC1C,QAAO,MACL,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,CACtB"}
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { defineInputRule } from "./prosekit-extensions-input-rule.js";
|
|
2
|
-
import { t as defineDropIndicator } from "./drop-indicator
|
|
2
|
+
import { t as defineDropIndicator } from "./drop-indicator.js";
|
|
3
3
|
import { Plugin } from "@prosekit/pm/state";
|
|
4
4
|
import { defineClipboardSerializer, defineCommands, defineKeymap, defineNodeSpec, definePlugin, insertNode, union } from "@prosekit/core";
|
|
5
5
|
import { chainCommands, deleteSelection } from "@prosekit/pm/commands";
|
|
6
6
|
import { isElementLike } from "@ocavue/utils";
|
|
7
7
|
import { ListDOMSerializer, createDedentListCommand, createIndentListCommand, createListEventPlugin, createListRenderingPlugin, createListSpec, createMoveListCommand, createSafariInputMethodWorkaroundPlugin, createSplitListCommand, createToggleCollapsedCommand, createToggleListCommand, createUnwrapListCommand, createWrapInListCommand, deleteCommand, enterCommand, findCheckboxInListItem, joinCollapsedListBackward, joinListElements, joinListUp, listInputRules, listToDOM, protectCollapsed, unwrapListSlice } from "prosemirror-flat-list";
|
|
8
|
-
|
|
9
8
|
//#region src/list/list-commands.ts
|
|
10
9
|
function insertList(attrs) {
|
|
11
10
|
return insertNode({
|
|
@@ -31,7 +30,6 @@ function defineListCommands() {
|
|
|
31
30
|
insertList
|
|
32
31
|
});
|
|
33
32
|
}
|
|
34
|
-
|
|
35
33
|
//#endregion
|
|
36
34
|
//#region src/list/list-input-rules.ts
|
|
37
35
|
/**
|
|
@@ -40,7 +38,6 @@ function defineListCommands() {
|
|
|
40
38
|
function defineListInputRules() {
|
|
41
39
|
return union(listInputRules.map(defineInputRule));
|
|
42
40
|
}
|
|
43
|
-
|
|
44
41
|
//#endregion
|
|
45
42
|
//#region src/list/list-keymap.ts
|
|
46
43
|
const backspaceCommand = chainCommands(protectCollapsed, deleteSelection, joinListUp, joinCollapsedListBackward);
|
|
@@ -63,7 +60,6 @@ const listKeymap = {
|
|
|
63
60
|
function defineListKeymap() {
|
|
64
61
|
return defineKeymap(listKeymap);
|
|
65
62
|
}
|
|
66
|
-
|
|
67
63
|
//#endregion
|
|
68
64
|
//#region src/list/list-plugins.ts
|
|
69
65
|
function createListClipboardPlugin() {
|
|
@@ -83,7 +79,6 @@ function createListPlugins() {
|
|
|
83
79
|
function defineListPlugins() {
|
|
84
80
|
return definePlugin(createListPlugins);
|
|
85
81
|
}
|
|
86
|
-
|
|
87
82
|
//#endregion
|
|
88
83
|
//#region src/list/list-serializer.ts
|
|
89
84
|
/**
|
|
@@ -145,7 +140,6 @@ function normalizeTaskList(node) {
|
|
|
145
140
|
node.replaceChildren(...content.children);
|
|
146
141
|
textBlock.prepend(checkbox);
|
|
147
142
|
}
|
|
148
|
-
|
|
149
143
|
//#endregion
|
|
150
144
|
//#region src/list/list-spec.ts
|
|
151
145
|
function getMarkers(node) {
|
|
@@ -173,7 +167,6 @@ function defineListSpec() {
|
|
|
173
167
|
name: "list"
|
|
174
168
|
});
|
|
175
169
|
}
|
|
176
|
-
|
|
177
170
|
//#endregion
|
|
178
171
|
//#region src/list/list-drop-indicator.ts
|
|
179
172
|
/**
|
|
@@ -197,7 +190,6 @@ const onDrag = ({ view, pos }) => {
|
|
|
197
190
|
}
|
|
198
191
|
return true;
|
|
199
192
|
};
|
|
200
|
-
|
|
201
193
|
//#endregion
|
|
202
194
|
//#region src/list/list.ts
|
|
203
195
|
/**
|
|
@@ -206,7 +198,7 @@ const onDrag = ({ view, pos }) => {
|
|
|
206
198
|
function defineList() {
|
|
207
199
|
return union(defineListSpec(), defineListPlugins(), defineListKeymap(), defineListInputRules(), defineListCommands(), defineListSerializer(), defineListDropIndicator());
|
|
208
200
|
}
|
|
209
|
-
|
|
210
201
|
//#endregion
|
|
211
202
|
export { ListDOMSerializer, defineList, defineListCommands, defineListInputRules, defineListKeymap, defineListPlugins, defineListSerializer, defineListSpec };
|
|
203
|
+
|
|
212
204
|
//# sourceMappingURL=prosekit-extensions-list.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prosekit-extensions-list.js","names":[],"sources":["../src/list/list-commands.ts","../src/list/list-input-rules.ts","../src/list/list-keymap.ts","../src/list/list-plugins.ts","../src/list/list-serializer.ts","../src/list/list-spec.ts","../src/list/list-drop-indicator.ts","../src/list/list.ts"],"sourcesContent":["import { defineCommands, insertNode, type Extension } from '@prosekit/core'\nimport type { Command } from '@prosekit/pm/state'\nimport {\n createDedentListCommand as dedentList,\n createIndentListCommand as indentList,\n createMoveListCommand as moveList,\n createSplitListCommand as splitList,\n createToggleCollapsedCommand as toggleCollapsed,\n createToggleListCommand as toggleList,\n createUnwrapListCommand as unwrapList,\n createWrapInListCommand as wrapInList,\n type DedentListOptions,\n type IndentListOptions,\n type ListAttributes,\n type ToggleCollapsedOptions,\n type UnwrapListOptions,\n} from 'prosemirror-flat-list'\n\nfunction insertList(attrs?: ListAttributes): Command {\n return insertNode({ type: 'list', attrs })\n}\n\n/**\n * @internal\n */\nexport type ListCommandsExtension = Extension<{\n Commands: {\n dedentList: [options?: DedentListOptions]\n indentList: [options?: IndentListOptions]\n moveList: [direction: 'up' | 'down']\n splitList: []\n toggleCollapsed: [options?: ToggleCollapsedOptions]\n unwrapList: [options?: UnwrapListOptions]\n toggleList: [attrs?: ListAttributes]\n wrapInList: [attrs?: ListAttributes]\n insertList: [attrs?: ListAttributes]\n }\n}>\n\n/**\n * Defines list commands.\n *\n * @internal\n */\nexport function defineListCommands(): ListCommandsExtension {\n return defineCommands({\n dedentList,\n indentList,\n moveList,\n splitList,\n toggleCollapsed,\n unwrapList,\n toggleList,\n wrapInList,\n insertList,\n })\n}\n","import { union, type Extension } from '@prosekit/core'\nimport { listInputRules } from 'prosemirror-flat-list'\n\nimport { defineInputRule } from '../input-rule/index.ts'\n\n/**\n * @internal\n */\nexport function defineListInputRules(): Extension {\n return union(listInputRules.map(defineInputRule))\n}\n","import { defineKeymap, type PlainExtension } from '@prosekit/core'\nimport { chainCommands, deleteSelection } from '@prosekit/pm/commands'\nimport {\n createDedentListCommand,\n createIndentListCommand,\n deleteCommand,\n enterCommand,\n joinCollapsedListBackward,\n joinListUp,\n protectCollapsed,\n} from 'prosemirror-flat-list'\n\n// This is different from the one exported by prosemirror-flat-list, because\n// some commands are moved to `defineBaseKeymap` in `prosekit/core`.\nconst backspaceCommand = chainCommands(\n protectCollapsed,\n deleteSelection,\n joinListUp,\n joinCollapsedListBackward,\n)\n\nconst dedentListCommand = createDedentListCommand()\nconst indentListCommand = createIndentListCommand()\n\nconst listKeymap = {\n 'Enter': enterCommand,\n 'Backspace': backspaceCommand,\n 'Delete': deleteCommand,\n 'Mod-]': indentListCommand,\n 'Mod-[': dedentListCommand,\n 'Tab': indentListCommand,\n 'Shift-Tab': dedentListCommand,\n}\n\n/**\n * Returns a extension that adds key bindings for list.\n *\n * @internal\n */\nexport function defineListKeymap(): PlainExtension {\n return defineKeymap(listKeymap)\n}\n","import { definePlugin, type PlainExtension } from '@prosekit/core'\nimport { Plugin } from '@prosekit/pm/state'\nimport {\n createListEventPlugin,\n createListRenderingPlugin,\n createSafariInputMethodWorkaroundPlugin,\n unwrapListSlice,\n} from 'prosemirror-flat-list'\n\nfunction createListClipboardPlugin(): Plugin {\n return new Plugin({\n props: {\n transformCopied: unwrapListSlice,\n },\n })\n}\n\nfunction createListPlugins(): Plugin[] {\n return [\n createListEventPlugin(),\n createListRenderingPlugin(),\n createListClipboardPlugin(),\n createSafariInputMethodWorkaroundPlugin(),\n ]\n}\n\n/**\n * @internal\n */\nexport function defineListPlugins(): PlainExtension {\n return definePlugin(createListPlugins)\n}\n","import { isElementLike } from '@ocavue/utils'\nimport { defineClipboardSerializer, type PlainExtension } from '@prosekit/core'\nimport { findCheckboxInListItem, joinListElements, listToDOM } from 'prosemirror-flat-list'\n\n/**\n * @internal\n */\nexport function defineListSerializer(): PlainExtension {\n return defineClipboardSerializer({\n serializeFragmentWrapper: (fn) => {\n return (...args) => {\n const dom = fn(...args)\n return normalizeElementTree(joinListElements(dom))\n }\n },\n serializeNodeWrapper: (fn) => {\n return (...args) => {\n const dom = fn(...args)\n return isElementLike(dom)\n ? normalizeElementTree(joinListElements(dom))\n : dom\n }\n },\n nodesFromSchemaWrapper: (fn) => {\n return (...args) => {\n const nodes = fn(...args)\n return {\n ...nodes,\n list: (node) => listToDOM({ node, nativeList: true }),\n }\n }\n },\n })\n}\n\nfunction normalizeElementTree<T extends Element | DocumentFragment>(\n node: T,\n): T {\n if (isElementLike(node)) {\n normalizeTaskList(node)\n }\n\n for (const child of node.children) {\n normalizeElementTree(child)\n }\n\n return node\n}\n\n/**\n * Modifies the DOM tree for task lists to ensure that the output HTML can be\n * parsed by rehype-remark.\n */\nfunction normalizeTaskList(node: Element): void {\n if (\n !node.classList.contains('prosemirror-flat-list')\n || node.getAttribute('data-list-kind') !== 'task'\n || node.children.length !== 2\n ) {\n return\n }\n\n const marker = node.children.item(0)\n if (!marker || !marker.classList.contains('list-marker')) {\n return\n }\n\n const checkbox = findCheckboxInListItem(marker)\n if (!checkbox) {\n return\n }\n\n const content = node.children.item(1)\n if (!content || !content.classList.contains('list-content')) {\n return\n }\n\n const textBlock = content.children.item(0)\n if (!textBlock || !['P', 'H1', 'H2', 'H3', 'H4', 'H5', 'H6'].includes(textBlock.tagName)) {\n return\n }\n\n node.replaceChildren(...content.children)\n textBlock.prepend(checkbox)\n}\n","import { defineNodeSpec, type Extension } from '@prosekit/core'\nimport type { DOMOutputSpec, ProseMirrorNode } from '@prosekit/pm/model'\nimport { createListSpec, listToDOM, type ListAttributes } from 'prosemirror-flat-list'\n\nimport type { ListAttrs } from './list-types.ts'\n\n/**\n * @internal\n */\nexport type ListSpecExtension = Extension<{\n Nodes: {\n list: ListAttrs\n }\n}>\n\nfunction getMarkers(node: ProseMirrorNode): DOMOutputSpec[] {\n const attrs = node.attrs as ListAttributes\n switch (attrs.kind) {\n case 'task':\n // Use a `label` element here so that the area around the checkbox is also checkable.\n return [\n [\n 'label',\n [\n 'input',\n { type: 'checkbox', checked: attrs.checked ? '' : undefined },\n ],\n ],\n ]\n default:\n // Always return an empty array so that the marker element is rendered. This\n // is required to make the drop indicator locate the correct position.\n return []\n }\n}\n\n/**\n * @internal\n */\nexport function defineListSpec(): ListSpecExtension {\n const spec = createListSpec()\n\n return defineNodeSpec<'list', ListAttrs>({\n ...spec,\n toDOM: (node) => {\n return listToDOM({ node, getMarkers })\n },\n name: 'list',\n })\n}\n","import type { PlainExtension } from '@prosekit/core'\n\nimport type { DragEventHandler } from '../drop-indicator/index.ts'\nimport { defineDropIndicator } from '../drop-indicator/index.ts'\n\n/**\n * Configures drop indicator to avoid unexpected drop point.\n *\n * We don't want to drag a list node and drop it as the first\n * child of another list node.\n *\n * @internal\n */\nexport function defineListDropIndicator(): PlainExtension {\n return defineDropIndicator({\n onDrag,\n })\n}\n\nconst onDrag: DragEventHandler = ({ view, pos }): boolean => {\n const slice = view.dragging?.slice\n if (\n slice\n && slice.openStart === 0\n && slice.openEnd === 0\n && slice.content.childCount === 1\n ) {\n const node = slice.content.child(0)\n if (node.type.name === 'list') {\n const $pos = view.state.doc.resolve(pos)\n if ($pos.parent.type.name === 'list' && $pos.index() === 0) {\n return false\n }\n }\n }\n return true\n}\n","import { union, type Union } from '@prosekit/core'\n\nimport { defineListCommands, type ListCommandsExtension } from './list-commands.ts'\nimport { defineListDropIndicator } from './list-drop-indicator.ts'\nimport { defineListInputRules } from './list-input-rules.ts'\nimport { defineListKeymap } from './list-keymap.ts'\nimport { defineListPlugins } from './list-plugins.ts'\nimport { defineListSerializer } from './list-serializer.ts'\nimport { defineListSpec, type ListSpecExtension } from './list-spec.ts'\n\n/**\n * @internal\n */\nexport type ListExtension = Union<[ListSpecExtension, ListCommandsExtension]>\n\n/**\n * @public\n */\nexport function defineList(): ListExtension {\n return union(\n defineListSpec(),\n defineListPlugins(),\n defineListKeymap(),\n defineListInputRules(),\n defineListCommands(),\n defineListSerializer(),\n defineListDropIndicator(),\n )\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"prosekit-extensions-list.js","names":[],"sources":["../src/list/list-commands.ts","../src/list/list-input-rules.ts","../src/list/list-keymap.ts","../src/list/list-plugins.ts","../src/list/list-serializer.ts","../src/list/list-spec.ts","../src/list/list-drop-indicator.ts","../src/list/list.ts"],"sourcesContent":["import { defineCommands, insertNode, type Extension } from '@prosekit/core'\nimport type { Command } from '@prosekit/pm/state'\nimport {\n createDedentListCommand as dedentList,\n createIndentListCommand as indentList,\n createMoveListCommand as moveList,\n createSplitListCommand as splitList,\n createToggleCollapsedCommand as toggleCollapsed,\n createToggleListCommand as toggleList,\n createUnwrapListCommand as unwrapList,\n createWrapInListCommand as wrapInList,\n type DedentListOptions,\n type IndentListOptions,\n type ListAttributes,\n type ToggleCollapsedOptions,\n type UnwrapListOptions,\n} from 'prosemirror-flat-list'\n\nfunction insertList(attrs?: ListAttributes): Command {\n return insertNode({ type: 'list', attrs })\n}\n\n/**\n * @internal\n */\nexport type ListCommandsExtension = Extension<{\n Commands: {\n dedentList: [options?: DedentListOptions]\n indentList: [options?: IndentListOptions]\n moveList: [direction: 'up' | 'down']\n splitList: []\n toggleCollapsed: [options?: ToggleCollapsedOptions]\n unwrapList: [options?: UnwrapListOptions]\n toggleList: [attrs?: ListAttributes]\n wrapInList: [attrs?: ListAttributes]\n insertList: [attrs?: ListAttributes]\n }\n}>\n\n/**\n * Defines list commands.\n *\n * @internal\n */\nexport function defineListCommands(): ListCommandsExtension {\n return defineCommands({\n dedentList,\n indentList,\n moveList,\n splitList,\n toggleCollapsed,\n unwrapList,\n toggleList,\n wrapInList,\n insertList,\n })\n}\n","import { union, type Extension } from '@prosekit/core'\nimport { listInputRules } from 'prosemirror-flat-list'\n\nimport { defineInputRule } from '../input-rule/index.ts'\n\n/**\n * @internal\n */\nexport function defineListInputRules(): Extension {\n return union(listInputRules.map(defineInputRule))\n}\n","import { defineKeymap, type PlainExtension } from '@prosekit/core'\nimport { chainCommands, deleteSelection } from '@prosekit/pm/commands'\nimport {\n createDedentListCommand,\n createIndentListCommand,\n deleteCommand,\n enterCommand,\n joinCollapsedListBackward,\n joinListUp,\n protectCollapsed,\n} from 'prosemirror-flat-list'\n\n// This is different from the one exported by prosemirror-flat-list, because\n// some commands are moved to `defineBaseKeymap` in `prosekit/core`.\nconst backspaceCommand = chainCommands(\n protectCollapsed,\n deleteSelection,\n joinListUp,\n joinCollapsedListBackward,\n)\n\nconst dedentListCommand = createDedentListCommand()\nconst indentListCommand = createIndentListCommand()\n\nconst listKeymap = {\n 'Enter': enterCommand,\n 'Backspace': backspaceCommand,\n 'Delete': deleteCommand,\n 'Mod-]': indentListCommand,\n 'Mod-[': dedentListCommand,\n 'Tab': indentListCommand,\n 'Shift-Tab': dedentListCommand,\n}\n\n/**\n * Returns a extension that adds key bindings for list.\n *\n * @internal\n */\nexport function defineListKeymap(): PlainExtension {\n return defineKeymap(listKeymap)\n}\n","import { definePlugin, type PlainExtension } from '@prosekit/core'\nimport { Plugin } from '@prosekit/pm/state'\nimport {\n createListEventPlugin,\n createListRenderingPlugin,\n createSafariInputMethodWorkaroundPlugin,\n unwrapListSlice,\n} from 'prosemirror-flat-list'\n\nfunction createListClipboardPlugin(): Plugin {\n return new Plugin({\n props: {\n transformCopied: unwrapListSlice,\n },\n })\n}\n\nfunction createListPlugins(): Plugin[] {\n return [\n createListEventPlugin(),\n createListRenderingPlugin(),\n createListClipboardPlugin(),\n createSafariInputMethodWorkaroundPlugin(),\n ]\n}\n\n/**\n * @internal\n */\nexport function defineListPlugins(): PlainExtension {\n return definePlugin(createListPlugins)\n}\n","import { isElementLike } from '@ocavue/utils'\nimport { defineClipboardSerializer, type PlainExtension } from '@prosekit/core'\nimport { findCheckboxInListItem, joinListElements, listToDOM } from 'prosemirror-flat-list'\n\n/**\n * @internal\n */\nexport function defineListSerializer(): PlainExtension {\n return defineClipboardSerializer({\n serializeFragmentWrapper: (fn) => {\n return (...args) => {\n const dom = fn(...args)\n return normalizeElementTree(joinListElements(dom))\n }\n },\n serializeNodeWrapper: (fn) => {\n return (...args) => {\n const dom = fn(...args)\n return isElementLike(dom)\n ? normalizeElementTree(joinListElements(dom))\n : dom\n }\n },\n nodesFromSchemaWrapper: (fn) => {\n return (...args) => {\n const nodes = fn(...args)\n return {\n ...nodes,\n list: (node) => listToDOM({ node, nativeList: true }),\n }\n }\n },\n })\n}\n\nfunction normalizeElementTree<T extends Element | DocumentFragment>(\n node: T,\n): T {\n if (isElementLike(node)) {\n normalizeTaskList(node)\n }\n\n for (const child of node.children) {\n normalizeElementTree(child)\n }\n\n return node\n}\n\n/**\n * Modifies the DOM tree for task lists to ensure that the output HTML can be\n * parsed by rehype-remark.\n */\nfunction normalizeTaskList(node: Element): void {\n if (\n !node.classList.contains('prosemirror-flat-list')\n || node.getAttribute('data-list-kind') !== 'task'\n || node.children.length !== 2\n ) {\n return\n }\n\n const marker = node.children.item(0)\n if (!marker || !marker.classList.contains('list-marker')) {\n return\n }\n\n const checkbox = findCheckboxInListItem(marker)\n if (!checkbox) {\n return\n }\n\n const content = node.children.item(1)\n if (!content || !content.classList.contains('list-content')) {\n return\n }\n\n const textBlock = content.children.item(0)\n if (!textBlock || !['P', 'H1', 'H2', 'H3', 'H4', 'H5', 'H6'].includes(textBlock.tagName)) {\n return\n }\n\n node.replaceChildren(...content.children)\n textBlock.prepend(checkbox)\n}\n","import { defineNodeSpec, type Extension } from '@prosekit/core'\nimport type { DOMOutputSpec, ProseMirrorNode } from '@prosekit/pm/model'\nimport { createListSpec, listToDOM, type ListAttributes } from 'prosemirror-flat-list'\n\nimport type { ListAttrs } from './list-types.ts'\n\n/**\n * @internal\n */\nexport type ListSpecExtension = Extension<{\n Nodes: {\n list: ListAttrs\n }\n}>\n\nfunction getMarkers(node: ProseMirrorNode): DOMOutputSpec[] {\n const attrs = node.attrs as ListAttributes\n switch (attrs.kind) {\n case 'task':\n // Use a `label` element here so that the area around the checkbox is also checkable.\n return [\n [\n 'label',\n [\n 'input',\n { type: 'checkbox', checked: attrs.checked ? '' : undefined },\n ],\n ],\n ]\n default:\n // Always return an empty array so that the marker element is rendered. This\n // is required to make the drop indicator locate the correct position.\n return []\n }\n}\n\n/**\n * @internal\n */\nexport function defineListSpec(): ListSpecExtension {\n const spec = createListSpec()\n\n return defineNodeSpec<'list', ListAttrs>({\n ...spec,\n toDOM: (node) => {\n return listToDOM({ node, getMarkers })\n },\n name: 'list',\n })\n}\n","import type { PlainExtension } from '@prosekit/core'\n\nimport type { DragEventHandler } from '../drop-indicator/index.ts'\nimport { defineDropIndicator } from '../drop-indicator/index.ts'\n\n/**\n * Configures drop indicator to avoid unexpected drop point.\n *\n * We don't want to drag a list node and drop it as the first\n * child of another list node.\n *\n * @internal\n */\nexport function defineListDropIndicator(): PlainExtension {\n return defineDropIndicator({\n onDrag,\n })\n}\n\nconst onDrag: DragEventHandler = ({ view, pos }): boolean => {\n const slice = view.dragging?.slice\n if (\n slice\n && slice.openStart === 0\n && slice.openEnd === 0\n && slice.content.childCount === 1\n ) {\n const node = slice.content.child(0)\n if (node.type.name === 'list') {\n const $pos = view.state.doc.resolve(pos)\n if ($pos.parent.type.name === 'list' && $pos.index() === 0) {\n return false\n }\n }\n }\n return true\n}\n","import { union, type Union } from '@prosekit/core'\n\nimport { defineListCommands, type ListCommandsExtension } from './list-commands.ts'\nimport { defineListDropIndicator } from './list-drop-indicator.ts'\nimport { defineListInputRules } from './list-input-rules.ts'\nimport { defineListKeymap } from './list-keymap.ts'\nimport { defineListPlugins } from './list-plugins.ts'\nimport { defineListSerializer } from './list-serializer.ts'\nimport { defineListSpec, type ListSpecExtension } from './list-spec.ts'\n\n/**\n * @internal\n */\nexport type ListExtension = Union<[ListSpecExtension, ListCommandsExtension]>\n\n/**\n * @public\n */\nexport function defineList(): ListExtension {\n return union(\n defineListSpec(),\n defineListPlugins(),\n defineListKeymap(),\n defineListInputRules(),\n defineListCommands(),\n defineListSerializer(),\n defineListDropIndicator(),\n )\n}\n"],"mappings":";;;;;;;;AAkBA,SAAS,WAAW,OAAiC;AACnD,QAAO,WAAW;EAAE,MAAM;EAAQ;EAAO,CAAC;;;;;;;AAyB5C,SAAgB,qBAA4C;AAC1D,QAAO,eAAe;EACpB,YAAA;EACA,YAAA;EACA,UAAA;EACA,WAAA;EACA,iBAAA;EACA,YAAA;EACA,YAAA;EACA,YAAA;EACA;EACD,CAAC;;;;;;;AC/CJ,SAAgB,uBAAkC;AAChD,QAAO,MAAM,eAAe,IAAI,gBAAgB,CAAC;;;;ACKnD,MAAM,mBAAmB,cACvB,kBACA,iBACA,YACA,0BACD;AAED,MAAM,oBAAoB,yBAAyB;AACnD,MAAM,oBAAoB,yBAAyB;AAEnD,MAAM,aAAa;CACjB,SAAS;CACT,aAAa;CACb,UAAU;CACV,SAAS;CACT,SAAS;CACT,OAAO;CACP,aAAa;CACd;;;;;;AAOD,SAAgB,mBAAmC;AACjD,QAAO,aAAa,WAAW;;;;AC/BjC,SAAS,4BAAoC;AAC3C,QAAO,IAAI,OAAO,EAChB,OAAO,EACL,iBAAiB,iBAClB,EACF,CAAC;;AAGJ,SAAS,oBAA8B;AACrC,QAAO;EACL,uBAAuB;EACvB,2BAA2B;EAC3B,2BAA2B;EAC3B,yCAAyC;EAC1C;;;;;AAMH,SAAgB,oBAAoC;AAClD,QAAO,aAAa,kBAAkB;;;;;;;ACvBxC,SAAgB,uBAAuC;AACrD,QAAO,0BAA0B;EAC/B,2BAA2B,OAAO;AAChC,WAAQ,GAAG,SAAS;AAElB,WAAO,qBAAqB,iBADhB,GAAG,GAAG,KAAK,CAC0B,CAAC;;;EAGtD,uBAAuB,OAAO;AAC5B,WAAQ,GAAG,SAAS;IAClB,MAAM,MAAM,GAAG,GAAG,KAAK;AACvB,WAAO,cAAc,IAAI,GACrB,qBAAqB,iBAAiB,IAAI,CAAC,GAC3C;;;EAGR,yBAAyB,OAAO;AAC9B,WAAQ,GAAG,SAAS;AAElB,WAAO;KACL,GAFY,GAAG,GAAG,KAAK;KAGvB,OAAO,SAAS,UAAU;MAAE;MAAM,YAAY;MAAM,CAAC;KACtD;;;EAGN,CAAC;;AAGJ,SAAS,qBACP,MACG;AACH,KAAI,cAAc,KAAK,CACrB,mBAAkB,KAAK;AAGzB,MAAK,MAAM,SAAS,KAAK,SACvB,sBAAqB,MAAM;AAG7B,QAAO;;;;;;AAOT,SAAS,kBAAkB,MAAqB;AAC9C,KACE,CAAC,KAAK,UAAU,SAAS,wBAAwB,IAC9C,KAAK,aAAa,iBAAiB,KAAK,UACxC,KAAK,SAAS,WAAW,EAE5B;CAGF,MAAM,SAAS,KAAK,SAAS,KAAK,EAAE;AACpC,KAAI,CAAC,UAAU,CAAC,OAAO,UAAU,SAAS,cAAc,CACtD;CAGF,MAAM,WAAW,uBAAuB,OAAO;AAC/C,KAAI,CAAC,SACH;CAGF,MAAM,UAAU,KAAK,SAAS,KAAK,EAAE;AACrC,KAAI,CAAC,WAAW,CAAC,QAAQ,UAAU,SAAS,eAAe,CACzD;CAGF,MAAM,YAAY,QAAQ,SAAS,KAAK,EAAE;AAC1C,KAAI,CAAC,aAAa,CAAC;EAAC;EAAK;EAAM;EAAM;EAAM;EAAM;EAAM;EAAK,CAAC,SAAS,UAAU,QAAQ,CACtF;AAGF,MAAK,gBAAgB,GAAG,QAAQ,SAAS;AACzC,WAAU,QAAQ,SAAS;;;;ACpE7B,SAAS,WAAW,MAAwC;CAC1D,MAAM,QAAQ,KAAK;AACnB,SAAQ,MAAM,MAAd;EACE,KAAK,OAEH,QAAO,CACL,CACE,SACA,CACE,SACA;GAAE,MAAM;GAAY,SAAS,MAAM,UAAU,KAAK,KAAA;GAAW,CAC9D,CACF,CACF;EACH,QAGE,QAAO,EAAE;;;;;;AAOf,SAAgB,iBAAoC;AAGlD,QAAO,eAAkC;EACvC,GAHW,gBAAgB;EAI3B,QAAQ,SAAS;AACf,UAAO,UAAU;IAAE;IAAM;IAAY,CAAC;;EAExC,MAAM;EACP,CAAC;;;;;;;;;;;;ACnCJ,SAAgB,0BAA0C;AACxD,QAAO,oBAAoB,EACzB,QACD,CAAC;;AAGJ,MAAM,UAA4B,EAAE,MAAM,UAAmB;CAC3D,MAAM,QAAQ,KAAK,UAAU;AAC7B,KACE,SACG,MAAM,cAAc,KACpB,MAAM,YAAY,KAClB,MAAM,QAAQ,eAAe;MAEnB,MAAM,QAAQ,MAAM,EAAE,CAC1B,KAAK,SAAS,QAAQ;GAC7B,MAAM,OAAO,KAAK,MAAM,IAAI,QAAQ,IAAI;AACxC,OAAI,KAAK,OAAO,KAAK,SAAS,UAAU,KAAK,OAAO,KAAK,EACvD,QAAO;;;AAIb,QAAO;;;;;;;ACjBT,SAAgB,aAA4B;AAC1C,QAAO,MACL,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,EACpB,sBAAsB,EACtB,yBAAyB,CAC1B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prosekit-extensions-loro.d.ts","names":[],"sources":["../src/loro/loro-commands.ts","../src/loro/loro-cursor-plugin.ts","../src/loro/loro-keymap.ts","../src/loro/loro-sync-plugin.ts","../src/loro/loro-undo-plugin.ts","../src/loro/loro.ts"],"mappings":";;;;;;;KAWY,qBAAA,GAAwB,SAAA;EAClC,QAAA;IACE,IAAA;IACA,IAAA;EAAA;AAAA;AAAA,iBAIY,kBAAA,CAAA,GAAsB,qBAAA;;;UCbrB,iBAAA,SAA0B,mBAAA;EACzC,SAAA,GAAY,eAAA;EACZ,QAAA,GAAW,oBAAA;AAAA;AAAA,iBAGG,sBAAA,CACd,OAAA,EAAS,iBAAA,GACR,cAAA;;;iBCAa,gBAAA,CAAA,GAAoB,cAAA;;;iBCTpB,oBAAA,CACd,OAAA,EAAS,qBAAA,GACR,cAAA;;;iBCFa,oBAAA,CAAqB,OAAA,EAAS,qBAAA,GAAsB,cAAA;;;
|
|
1
|
+
{"version":3,"file":"prosekit-extensions-loro.d.ts","names":[],"sources":["../src/loro/loro-commands.ts","../src/loro/loro-cursor-plugin.ts","../src/loro/loro-keymap.ts","../src/loro/loro-sync-plugin.ts","../src/loro/loro-undo-plugin.ts","../src/loro/loro.ts"],"mappings":";;;;;;;KAWY,qBAAA,GAAwB,SAAA;EAClC,QAAA;IACE,IAAA;IACA,IAAA;EAAA;AAAA;AAAA,iBAIY,kBAAA,CAAA,GAAsB,qBAAA;;;UCbrB,iBAAA,SAA0B,mBAAA;EACzC,SAAA,GAAY,eAAA;EACZ,QAAA,GAAW,oBAAA;AAAA;AAAA,iBAGG,sBAAA,CACd,OAAA,EAAS,iBAAA,GACR,cAAA;;;iBCAa,gBAAA,CAAA,GAAoB,cAAA;;;iBCTpB,oBAAA,CACd,OAAA,EAAS,qBAAA,GACR,cAAA;;;iBCFa,oBAAA,CAAqB,OAAA,EAAS,qBAAA,GAAsB,cAAA;;;UCcnD,WAAA;ELNL;;;EKUV,GAAA,EAAK,WAAA;ELV6B;;;EKelC,SAAA,GAAY,eAAA;ELZN;;AAIR;EKaE,QAAA,GAAW,oBAAA;;;;EAKX,IAAA,GAAO,IAAA,CAAK,qBAAA;;;AJ/Bd;EIoCE,IAAA,GAAO,IAAA,CAAK,qBAAA;;;;EAKZ,MAAA,GAAS,mBAAA;AAAA;;;;KAMC,aAAA,GAAgB,KAAA,EAAO,qBAAA,EAAuB,cAAA;;;;iBAK1C,UAAA,CAAW,OAAA,EAAS,WAAA,GAAc,aAAA"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { defineCommands, defineKeymap, definePlugin, isApple, union, withPriority } from "@prosekit/core";
|
|
2
2
|
import { LoroCursorPlugin, LoroEphemeralCursorPlugin, LoroSyncPlugin, LoroUndoPlugin, redo, undo } from "loro-prosemirror";
|
|
3
|
-
|
|
4
3
|
//#region src/loro/loro-commands.ts
|
|
5
4
|
const commands = {
|
|
6
5
|
undo: () => undo,
|
|
@@ -9,7 +8,6 @@ const commands = {
|
|
|
9
8
|
function defineLoroCommands() {
|
|
10
9
|
return defineCommands(commands);
|
|
11
10
|
}
|
|
12
|
-
|
|
13
11
|
//#endregion
|
|
14
12
|
//#region src/loro/loro-cursor-plugin.ts
|
|
15
13
|
function defineLoroCursorPlugin(options) {
|
|
@@ -22,7 +20,6 @@ function createLoroCursorPlugin(options) {
|
|
|
22
20
|
else if (presence) return LoroEphemeralCursorPlugin(presence, rest);
|
|
23
21
|
else throw new Error("Either awareness or presence must be provided");
|
|
24
22
|
}
|
|
25
|
-
|
|
26
23
|
//#endregion
|
|
27
24
|
//#region src/loro/loro-keymap.ts
|
|
28
25
|
const keymap = {
|
|
@@ -33,19 +30,16 @@ if (!isApple) keymap["Mod-y"] = redo;
|
|
|
33
30
|
function defineLoroKeymap() {
|
|
34
31
|
return defineKeymap(keymap);
|
|
35
32
|
}
|
|
36
|
-
|
|
37
33
|
//#endregion
|
|
38
34
|
//#region src/loro/loro-sync-plugin.ts
|
|
39
35
|
function defineLoroSyncPlugin(options) {
|
|
40
36
|
return definePlugin(LoroSyncPlugin(options));
|
|
41
37
|
}
|
|
42
|
-
|
|
43
38
|
//#endregion
|
|
44
39
|
//#region src/loro/loro-undo-plugin.ts
|
|
45
40
|
function defineLoroUndoPlugin(options) {
|
|
46
41
|
return definePlugin(LoroUndoPlugin(options));
|
|
47
42
|
}
|
|
48
|
-
|
|
49
43
|
//#endregion
|
|
50
44
|
//#region src/loro/loro.ts
|
|
51
45
|
/**
|
|
@@ -69,9 +63,9 @@ function defineLoro(options) {
|
|
|
69
63
|
...sync,
|
|
70
64
|
doc
|
|
71
65
|
})
|
|
72
|
-
]),
|
|
66
|
+
]), 3);
|
|
73
67
|
}
|
|
74
|
-
|
|
75
68
|
//#endregion
|
|
76
69
|
export { defineLoro, defineLoroCommands, defineLoroCursorPlugin, defineLoroKeymap, defineLoroSyncPlugin, defineLoroUndoPlugin };
|
|
70
|
+
|
|
77
71
|
//# sourceMappingURL=prosekit-extensions-loro.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prosekit-extensions-loro.js","names":[],"sources":["../src/loro/loro-commands.ts","../src/loro/loro-cursor-plugin.ts","../src/loro/loro-keymap.ts","../src/loro/loro-sync-plugin.ts","../src/loro/loro-undo-plugin.ts","../src/loro/loro.ts"],"sourcesContent":["import { defineCommands, type Extension } from '@prosekit/core'\nimport { redo, undo } from 'loro-prosemirror'\n\nconst commands = {\n undo: () => undo,\n redo: () => redo,\n} as const\n\n/**\n * @internal\n */\nexport type LoroCommandsExtension = Extension<{\n Commands: {\n undo: []\n redo: []\n }\n}>\n\nexport function defineLoroCommands(): LoroCommandsExtension {\n return defineCommands(commands)\n}\n","import { definePlugin, type PlainExtension } from '@prosekit/core'\nimport type { Plugin } from '@prosekit/pm/state'\nimport type { CursorAwareness, CursorEphemeralStore, CursorPluginOptions } from 'loro-prosemirror'\nimport { LoroCursorPlugin, LoroEphemeralCursorPlugin } from 'loro-prosemirror'\n\nexport interface LoroCursorOptions extends CursorPluginOptions {\n awareness?: CursorAwareness\n presence?: CursorEphemeralStore\n}\n\nexport function defineLoroCursorPlugin(\n options: LoroCursorOptions,\n): PlainExtension {\n return definePlugin(createLoroCursorPlugin(options))\n}\n\nfunction createLoroCursorPlugin(options: LoroCursorOptions): Plugin {\n const { awareness, presence, ...rest } = options\n if (awareness && presence) {\n throw new Error('Only one of awareness and presence can be provided')\n } else if (awareness) {\n return LoroCursorPlugin(awareness, rest)\n } else if (presence) {\n return LoroEphemeralCursorPlugin(presence, rest)\n } else {\n throw new Error('Either awareness or presence must be provided')\n }\n}\n","import { defineKeymap, isApple, type Keymap, type PlainExtension } from '@prosekit/core'\nimport { redo, undo } from 'loro-prosemirror'\n\nconst keymap: Keymap = {\n 'Mod-z': undo,\n 'Mod-Z': redo,\n}\n\nif (!isApple) {\n keymap['Mod-y'] = redo\n}\n\nexport function defineLoroKeymap(): PlainExtension {\n return defineKeymap(keymap)\n}\n","import { definePlugin, type PlainExtension } from '@prosekit/core'\nimport { LoroSyncPlugin, type LoroSyncPluginProps } from 'loro-prosemirror'\n\nexport function defineLoroSyncPlugin(\n options: LoroSyncPluginProps,\n): PlainExtension {\n return definePlugin(LoroSyncPlugin(options))\n}\n","import { definePlugin, type PlainExtension } from '@prosekit/core'\nimport { LoroUndoPlugin, type LoroUndoPluginProps } from 'loro-prosemirror'\n\nexport function defineLoroUndoPlugin(options: LoroUndoPluginProps): PlainExtension {\n return definePlugin(LoroUndoPlugin(options))\n}\n","import { Priority
|
|
1
|
+
{"version":3,"file":"prosekit-extensions-loro.js","names":[],"sources":["../src/loro/loro-commands.ts","../src/loro/loro-cursor-plugin.ts","../src/loro/loro-keymap.ts","../src/loro/loro-sync-plugin.ts","../src/loro/loro-undo-plugin.ts","../src/loro/loro.ts"],"sourcesContent":["import { defineCommands, type Extension } from '@prosekit/core'\nimport { redo, undo } from 'loro-prosemirror'\n\nconst commands = {\n undo: () => undo,\n redo: () => redo,\n} as const\n\n/**\n * @internal\n */\nexport type LoroCommandsExtension = Extension<{\n Commands: {\n undo: []\n redo: []\n }\n}>\n\nexport function defineLoroCommands(): LoroCommandsExtension {\n return defineCommands(commands)\n}\n","import { definePlugin, type PlainExtension } from '@prosekit/core'\nimport type { Plugin } from '@prosekit/pm/state'\nimport type { CursorAwareness, CursorEphemeralStore, CursorPluginOptions } from 'loro-prosemirror'\nimport { LoroCursorPlugin, LoroEphemeralCursorPlugin } from 'loro-prosemirror'\n\nexport interface LoroCursorOptions extends CursorPluginOptions {\n awareness?: CursorAwareness\n presence?: CursorEphemeralStore\n}\n\nexport function defineLoroCursorPlugin(\n options: LoroCursorOptions,\n): PlainExtension {\n return definePlugin(createLoroCursorPlugin(options))\n}\n\nfunction createLoroCursorPlugin(options: LoroCursorOptions): Plugin {\n const { awareness, presence, ...rest } = options\n if (awareness && presence) {\n throw new Error('Only one of awareness and presence can be provided')\n } else if (awareness) {\n return LoroCursorPlugin(awareness, rest)\n } else if (presence) {\n return LoroEphemeralCursorPlugin(presence, rest)\n } else {\n throw new Error('Either awareness or presence must be provided')\n }\n}\n","import { defineKeymap, isApple, type Keymap, type PlainExtension } from '@prosekit/core'\nimport { redo, undo } from 'loro-prosemirror'\n\nconst keymap: Keymap = {\n 'Mod-z': undo,\n 'Mod-Z': redo,\n}\n\nif (!isApple) {\n keymap['Mod-y'] = redo\n}\n\nexport function defineLoroKeymap(): PlainExtension {\n return defineKeymap(keymap)\n}\n","import { definePlugin, type PlainExtension } from '@prosekit/core'\nimport { LoroSyncPlugin, type LoroSyncPluginProps } from 'loro-prosemirror'\n\nexport function defineLoroSyncPlugin(\n options: LoroSyncPluginProps,\n): PlainExtension {\n return definePlugin(LoroSyncPlugin(options))\n}\n","import { definePlugin, type PlainExtension } from '@prosekit/core'\nimport { LoroUndoPlugin, type LoroUndoPluginProps } from 'loro-prosemirror'\n\nexport function defineLoroUndoPlugin(options: LoroUndoPluginProps): PlainExtension {\n return definePlugin(LoroUndoPlugin(options))\n}\n","import type { Priority } from '@prosekit/core'\nimport { union, withPriority, type PlainExtension, type Union } from '@prosekit/core'\nimport type {\n CursorAwareness,\n CursorEphemeralStore,\n CursorPluginOptions,\n LoroDocType,\n LoroSyncPluginProps,\n LoroUndoPluginProps,\n} from 'loro-prosemirror'\n\nimport { defineLoroCommands, type LoroCommandsExtension } from './loro-commands.ts'\nimport { defineLoroCursorPlugin } from './loro-cursor-plugin.ts'\nimport { defineLoroKeymap } from './loro-keymap.ts'\nimport { defineLoroSyncPlugin } from './loro-sync-plugin.ts'\nimport { defineLoroUndoPlugin } from './loro-undo-plugin.ts'\n\nexport interface LoroOptions {\n /**\n * The Loro instance handles the state of shared data.\n */\n doc: LoroDocType\n\n /**\n * The (legacy) Awareness instance. One of `awareness` or `presence` must be provided.\n */\n awareness?: CursorAwareness\n\n /**\n * The CursorEphemeralStore instance. One of `awareness` or `presence` must be provided.\n */\n presence?: CursorEphemeralStore\n\n /**\n * Extra options for `LoroSyncPlugin`.\n */\n sync?: Omit<LoroSyncPluginProps, 'doc'>\n\n /**\n * Extra options for the `LoroUndoPlugin`.\n */\n undo?: Omit<LoroUndoPluginProps, 'doc'>\n\n /**\n * Extra options for `LoroCursorPlugin` or `LoroEphemeralCursorPlugin`.\n */\n cursor?: CursorPluginOptions\n}\n\n/**\n * @internal\n */\nexport type LoroExtension = Union<[LoroCommandsExtension, PlainExtension]>\n\n/**\n * @public\n */\nexport function defineLoro(options: LoroOptions): LoroExtension {\n const { doc, awareness, presence, sync, undo, cursor } = options\n\n return withPriority(\n union([\n defineLoroKeymap(),\n defineLoroCommands(),\n defineLoroCursorPlugin({ ...cursor, awareness, presence }),\n defineLoroUndoPlugin({ ...undo, doc }),\n defineLoroSyncPlugin({ ...sync, doc }),\n ]),\n 3 satisfies typeof Priority.high,\n )\n}\n"],"mappings":";;;AAGA,MAAM,WAAW;CACf,YAAY;CACZ,YAAY;CACb;AAYD,SAAgB,qBAA4C;AAC1D,QAAO,eAAe,SAAS;;;;ACTjC,SAAgB,uBACd,SACgB;AAChB,QAAO,aAAa,uBAAuB,QAAQ,CAAC;;AAGtD,SAAS,uBAAuB,SAAoC;CAClE,MAAM,EAAE,WAAW,UAAU,GAAG,SAAS;AACzC,KAAI,aAAa,SACf,OAAM,IAAI,MAAM,qDAAqD;UAC5D,UACT,QAAO,iBAAiB,WAAW,KAAK;UAC/B,SACT,QAAO,0BAA0B,UAAU,KAAK;KAEhD,OAAM,IAAI,MAAM,gDAAgD;;;;ACtBpE,MAAM,SAAiB;CACrB,SAAS;CACT,SAAS;CACV;AAED,IAAI,CAAC,QACH,QAAO,WAAW;AAGpB,SAAgB,mBAAmC;AACjD,QAAO,aAAa,OAAO;;;;ACV7B,SAAgB,qBACd,SACgB;AAChB,QAAO,aAAa,eAAe,QAAQ,CAAC;;;;ACH9C,SAAgB,qBAAqB,SAA8C;AACjF,QAAO,aAAa,eAAe,QAAQ,CAAC;;;;;;;ACqD9C,SAAgB,WAAW,SAAqC;CAC9D,MAAM,EAAE,KAAK,WAAW,UAAU,MAAM,MAAM,WAAW;AAEzD,QAAO,aACL,MAAM;EACJ,kBAAkB;EAClB,oBAAoB;EACpB,uBAAuB;GAAE,GAAG;GAAQ;GAAW;GAAU,CAAC;EAC1D,qBAAqB;GAAE,GAAG;GAAM;GAAK,CAAC;EACtC,qBAAqB;GAAE,GAAG;GAAM;GAAK,CAAC;EACvC,CAAC,EACF,EACD"}
|
|
@@ -1,3 +1,2 @@
|
|
|
1
|
-
import { t as defineMarkRule } from "./mark-rule
|
|
2
|
-
|
|
3
|
-
export { defineMarkRule };
|
|
1
|
+
import { t as defineMarkRule } from "./mark-rule.js";
|
|
2
|
+
export { defineMarkRule };
|
|
@@ -2,7 +2,6 @@ import { defineInputRule } from "./prosekit-extensions-input-rule.js";
|
|
|
2
2
|
import { defineEnterRule } from "./prosekit-extensions-enter-rule.js";
|
|
3
3
|
import { defineNodeSpec, defineNodeView, definePlugin, union } from "@prosekit/core";
|
|
4
4
|
import { createCursorInsidePlugin, createMathBlockView, createMathInlineInputRule, createMathInlineView, mathBlockEnterRule, mathBlockSpec, mathInlineSpec } from "prosemirror-math";
|
|
5
|
-
|
|
6
5
|
//#region src/math/math-block.ts
|
|
7
6
|
/**
|
|
8
7
|
* @internal
|
|
@@ -46,7 +45,6 @@ function defineMathBlockEnterRule() {
|
|
|
46
45
|
function defineMathBlock(options) {
|
|
47
46
|
return union(defineMathBlockSpec(), defineMathBlockView(options), defineMathBlockEnterRule());
|
|
48
47
|
}
|
|
49
|
-
|
|
50
48
|
//#endregion
|
|
51
49
|
//#region src/math/math-inline.ts
|
|
52
50
|
/**
|
|
@@ -87,13 +85,11 @@ function defineMathInlineInputRule() {
|
|
|
87
85
|
function defineMathInline(options) {
|
|
88
86
|
return union(defineMathInlineSpec(), defineMathInlineView(options), defineMathInlineInputRule());
|
|
89
87
|
}
|
|
90
|
-
|
|
91
88
|
//#endregion
|
|
92
89
|
//#region src/math/math-plugin.ts
|
|
93
90
|
function defineMathPlugin() {
|
|
94
91
|
return definePlugin(createCursorInsidePlugin());
|
|
95
92
|
}
|
|
96
|
-
|
|
97
93
|
//#endregion
|
|
98
94
|
//#region src/math/math.ts
|
|
99
95
|
/**
|
|
@@ -102,7 +98,7 @@ function defineMathPlugin() {
|
|
|
102
98
|
function defineMath(options) {
|
|
103
99
|
return union(defineMathBlock({ render: options.renderMathBlock }), defineMathInline({ render: options.renderMathInline }), defineMathPlugin());
|
|
104
100
|
}
|
|
105
|
-
|
|
106
101
|
//#endregion
|
|
107
102
|
export { defineMath, defineMathBlock, defineMathBlockEnterRule, defineMathBlockSpec, defineMathBlockView, defineMathInline, defineMathInlineInputRule, defineMathInlineSpec, defineMathInlineView, defineMathPlugin };
|
|
103
|
+
|
|
108
104
|
//# sourceMappingURL=prosekit-extensions-math.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prosekit-extensions-math.js","names":[],"sources":["../src/math/math-block.ts","../src/math/math-inline.ts","../src/math/math-plugin.ts","../src/math/math.ts"],"sourcesContent":["import { defineNodeSpec, defineNodeView, union, type Extension, type PlainExtension, type Union } from '@prosekit/core'\nimport type { Attrs } from '@prosekit/pm/model'\nimport { createMathBlockView, mathBlockEnterRule, mathBlockSpec, type RenderMathBlock } from 'prosemirror-math'\n\nimport { defineEnterRule } from '../enter-rule/index.ts'\n\n/**\n * @internal\n */\nexport type MathBlockSpecExtension = Extension<{\n Nodes: {\n mathBlock: Attrs\n }\n}>\n\n/**\n * @internal\n */\nexport function defineMathBlockSpec(): MathBlockSpecExtension {\n return defineNodeSpec<'mathBlock', Attrs>({\n ...mathBlockSpec,\n attrs: {\n // The language in the `mathBlock` node, useful for syntax highlighting.\n // This library doesn't focus on using the TeX language in a `mathBlock` node,\n // but this is the most common language used for math blocks in rich text\n // editors, so 'tex' is set as the default value.\n language: { default: 'tex', validate: 'string' },\n },\n name: 'mathBlock',\n })\n}\n\n/**\n * Options for {@link defineMathBlockView}.\n *\n * @internal\n */\nexport interface MathBlockViewOptions {\n /**\n * The function to render the math block.\n */\n render: RenderMathBlock\n}\n\n/**\n * Defines an extension that renders a math block using a custom node view.\n *\n * @param options\n * @internal\n */\nexport function defineMathBlockView({ render }: MathBlockViewOptions): Extension {\n return defineNodeView({\n name: 'mathBlock',\n constructor: (node, view, getPos, decorations) => {\n return createMathBlockView(render, node, decorations)\n },\n })\n}\n\n/**\n * @internal\n */\nexport function defineMathBlockEnterRule(): PlainExtension {\n return defineEnterRule(mathBlockEnterRule)\n}\n\n/**\n * Options for {@link defineMathBlock}.\n *\n * @internal\n */\nexport interface MathBlockOptions {\n /**\n * The function to render the math block.\n */\n render: RenderMathBlock\n}\n\n/**\n * @internal\n */\nexport type MathBlockExtension = Union<[MathBlockSpecExtension]>\n\n/**\n * Defines node `mathBlock` and related functionalities.\n *\n * @param options\n * @public\n */\nexport function defineMathBlock(options: MathBlockOptions): MathBlockExtension {\n return union(\n defineMathBlockSpec(),\n defineMathBlockView(options),\n defineMathBlockEnterRule(),\n )\n}\n","import { defineNodeSpec, defineNodeView, union, type Extension, type PlainExtension, type Union } from '@prosekit/core'\nimport type { Attrs } from '@prosekit/pm/model'\nimport { createMathInlineInputRule, createMathInlineView, mathInlineSpec, type RenderMathInline } from 'prosemirror-math'\n\nimport { defineInputRule } from '../input-rule/index.ts'\n\n/**\n * @internal\n */\nexport type MathInlineSpecExtension = Extension<{\n Nodes: {\n mathInline: Attrs\n }\n}>\n\n/**\n * @internal\n */\nexport function defineMathInlineSpec(): MathInlineSpecExtension {\n return defineNodeSpec<'mathInline', Attrs>({\n ...mathInlineSpec,\n name: 'mathInline',\n })\n}\n\n/**\n * Options for {@link defineMathInlineView}.\n *\n * @internal\n */\nexport interface MathInlineViewOptions {\n /**\n * The function to render the math inline.\n */\n render: RenderMathInline\n}\n\n/**\n * Defines an extension that renders a math inline using a custom node view.\n *\n * @param options\n * @internal\n */\nexport function defineMathInlineView({ render }: MathInlineViewOptions): Extension {\n return defineNodeView({\n name: 'mathInline',\n constructor: (node, view, getPos, decorations) => {\n return createMathInlineView(render, node, decorations)\n },\n })\n}\n\n/**\n * @internal\n */\nexport function defineMathInlineInputRule(): PlainExtension {\n return defineInputRule(createMathInlineInputRule('mathInline'))\n}\n\n/**\n * Options for {@link defineMathInline}.\n *\n * @internal\n */\nexport interface MathInlineOptions {\n /**\n * The function to render the math inline.\n */\n render: RenderMathInline\n}\n\n/**\n * @internal\n */\nexport type MathInlineExtension = Union<[MathInlineSpecExtension]>\n\n/**\n * Defines node `mathInline` and related functionalities.\n *\n * @param options\n * @public\n */\nexport function defineMathInline(options: MathInlineOptions): MathInlineExtension {\n return union(\n defineMathInlineSpec(),\n defineMathInlineView(options),\n defineMathInlineInputRule(),\n )\n}\n","import { definePlugin, type PlainExtension } from '@prosekit/core'\nimport { createCursorInsidePlugin } from 'prosemirror-math'\n\nexport function defineMathPlugin(): PlainExtension {\n return definePlugin(\n createCursorInsidePlugin(),\n )\n}\n","import { union, type Union } from '@prosekit/core'\nimport type { RenderMathBlock, RenderMathInline } from 'prosemirror-math'\n\nimport { defineMathBlock, type MathBlockExtension } from './math-block.ts'\nimport { defineMathInline, type MathInlineExtension } from './math-inline.ts'\nimport { defineMathPlugin } from './math-plugin.ts'\n\n/**\n * @public\n */\nexport type MathExtension = Union<[MathInlineExtension, MathBlockExtension]>\n\n/**\n * Options for {@link defineMath}.\n *\n * @public\n */\nexport interface MathOptions {\n /**\n * The function to render the math block.\n */\n renderMathBlock: RenderMathBlock\n\n /**\n * The function to render the math inline.\n */\n renderMathInline: RenderMathInline\n}\n\n/**\n * @public\n */\nexport function defineMath(options: MathOptions): MathExtension {\n return union(\n defineMathBlock({ render: options.renderMathBlock }),\n defineMathInline({ render: options.renderMathInline }),\n defineMathPlugin(),\n )\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"prosekit-extensions-math.js","names":[],"sources":["../src/math/math-block.ts","../src/math/math-inline.ts","../src/math/math-plugin.ts","../src/math/math.ts"],"sourcesContent":["import { defineNodeSpec, defineNodeView, union, type Extension, type PlainExtension, type Union } from '@prosekit/core'\nimport type { Attrs } from '@prosekit/pm/model'\nimport { createMathBlockView, mathBlockEnterRule, mathBlockSpec, type RenderMathBlock } from 'prosemirror-math'\n\nimport { defineEnterRule } from '../enter-rule/index.ts'\n\n/**\n * @internal\n */\nexport type MathBlockSpecExtension = Extension<{\n Nodes: {\n mathBlock: Attrs\n }\n}>\n\n/**\n * @internal\n */\nexport function defineMathBlockSpec(): MathBlockSpecExtension {\n return defineNodeSpec<'mathBlock', Attrs>({\n ...mathBlockSpec,\n attrs: {\n // The language in the `mathBlock` node, useful for syntax highlighting.\n // This library doesn't focus on using the TeX language in a `mathBlock` node,\n // but this is the most common language used for math blocks in rich text\n // editors, so 'tex' is set as the default value.\n language: { default: 'tex', validate: 'string' },\n },\n name: 'mathBlock',\n })\n}\n\n/**\n * Options for {@link defineMathBlockView}.\n *\n * @internal\n */\nexport interface MathBlockViewOptions {\n /**\n * The function to render the math block.\n */\n render: RenderMathBlock\n}\n\n/**\n * Defines an extension that renders a math block using a custom node view.\n *\n * @param options\n * @internal\n */\nexport function defineMathBlockView({ render }: MathBlockViewOptions): Extension {\n return defineNodeView({\n name: 'mathBlock',\n constructor: (node, view, getPos, decorations) => {\n return createMathBlockView(render, node, decorations)\n },\n })\n}\n\n/**\n * @internal\n */\nexport function defineMathBlockEnterRule(): PlainExtension {\n return defineEnterRule(mathBlockEnterRule)\n}\n\n/**\n * Options for {@link defineMathBlock}.\n *\n * @internal\n */\nexport interface MathBlockOptions {\n /**\n * The function to render the math block.\n */\n render: RenderMathBlock\n}\n\n/**\n * @internal\n */\nexport type MathBlockExtension = Union<[MathBlockSpecExtension]>\n\n/**\n * Defines node `mathBlock` and related functionalities.\n *\n * @param options\n * @public\n */\nexport function defineMathBlock(options: MathBlockOptions): MathBlockExtension {\n return union(\n defineMathBlockSpec(),\n defineMathBlockView(options),\n defineMathBlockEnterRule(),\n )\n}\n","import { defineNodeSpec, defineNodeView, union, type Extension, type PlainExtension, type Union } from '@prosekit/core'\nimport type { Attrs } from '@prosekit/pm/model'\nimport { createMathInlineInputRule, createMathInlineView, mathInlineSpec, type RenderMathInline } from 'prosemirror-math'\n\nimport { defineInputRule } from '../input-rule/index.ts'\n\n/**\n * @internal\n */\nexport type MathInlineSpecExtension = Extension<{\n Nodes: {\n mathInline: Attrs\n }\n}>\n\n/**\n * @internal\n */\nexport function defineMathInlineSpec(): MathInlineSpecExtension {\n return defineNodeSpec<'mathInline', Attrs>({\n ...mathInlineSpec,\n name: 'mathInline',\n })\n}\n\n/**\n * Options for {@link defineMathInlineView}.\n *\n * @internal\n */\nexport interface MathInlineViewOptions {\n /**\n * The function to render the math inline.\n */\n render: RenderMathInline\n}\n\n/**\n * Defines an extension that renders a math inline using a custom node view.\n *\n * @param options\n * @internal\n */\nexport function defineMathInlineView({ render }: MathInlineViewOptions): Extension {\n return defineNodeView({\n name: 'mathInline',\n constructor: (node, view, getPos, decorations) => {\n return createMathInlineView(render, node, decorations)\n },\n })\n}\n\n/**\n * @internal\n */\nexport function defineMathInlineInputRule(): PlainExtension {\n return defineInputRule(createMathInlineInputRule('mathInline'))\n}\n\n/**\n * Options for {@link defineMathInline}.\n *\n * @internal\n */\nexport interface MathInlineOptions {\n /**\n * The function to render the math inline.\n */\n render: RenderMathInline\n}\n\n/**\n * @internal\n */\nexport type MathInlineExtension = Union<[MathInlineSpecExtension]>\n\n/**\n * Defines node `mathInline` and related functionalities.\n *\n * @param options\n * @public\n */\nexport function defineMathInline(options: MathInlineOptions): MathInlineExtension {\n return union(\n defineMathInlineSpec(),\n defineMathInlineView(options),\n defineMathInlineInputRule(),\n )\n}\n","import { definePlugin, type PlainExtension } from '@prosekit/core'\nimport { createCursorInsidePlugin } from 'prosemirror-math'\n\nexport function defineMathPlugin(): PlainExtension {\n return definePlugin(\n createCursorInsidePlugin(),\n )\n}\n","import { union, type Union } from '@prosekit/core'\nimport type { RenderMathBlock, RenderMathInline } from 'prosemirror-math'\n\nimport { defineMathBlock, type MathBlockExtension } from './math-block.ts'\nimport { defineMathInline, type MathInlineExtension } from './math-inline.ts'\nimport { defineMathPlugin } from './math-plugin.ts'\n\n/**\n * @public\n */\nexport type MathExtension = Union<[MathInlineExtension, MathBlockExtension]>\n\n/**\n * Options for {@link defineMath}.\n *\n * @public\n */\nexport interface MathOptions {\n /**\n * The function to render the math block.\n */\n renderMathBlock: RenderMathBlock\n\n /**\n * The function to render the math inline.\n */\n renderMathInline: RenderMathInline\n}\n\n/**\n * @public\n */\nexport function defineMath(options: MathOptions): MathExtension {\n return union(\n defineMathBlock({ render: options.renderMathBlock }),\n defineMathInline({ render: options.renderMathInline }),\n defineMathPlugin(),\n )\n}\n"],"mappings":";;;;;;;;AAkBA,SAAgB,sBAA8C;AAC5D,QAAO,eAAmC;EACxC,GAAG;EACH,OAAO,EAKL,UAAU;GAAE,SAAS;GAAO,UAAU;GAAU,EACjD;EACD,MAAM;EACP,CAAC;;;;;;;;AAqBJ,SAAgB,oBAAoB,EAAE,UAA2C;AAC/E,QAAO,eAAe;EACpB,MAAM;EACN,cAAc,MAAM,MAAM,QAAQ,gBAAgB;AAChD,UAAO,oBAAoB,QAAQ,MAAM,YAAY;;EAExD,CAAC;;;;;AAMJ,SAAgB,2BAA2C;AACzD,QAAO,gBAAgB,mBAAmB;;;;;;;;AA0B5C,SAAgB,gBAAgB,SAA+C;AAC7E,QAAO,MACL,qBAAqB,EACrB,oBAAoB,QAAQ,EAC5B,0BAA0B,CAC3B;;;;;;;AC5EH,SAAgB,uBAAgD;AAC9D,QAAO,eAAoC;EACzC,GAAG;EACH,MAAM;EACP,CAAC;;;;;;;;AAqBJ,SAAgB,qBAAqB,EAAE,UAA4C;AACjF,QAAO,eAAe;EACpB,MAAM;EACN,cAAc,MAAM,MAAM,QAAQ,gBAAgB;AAChD,UAAO,qBAAqB,QAAQ,MAAM,YAAY;;EAEzD,CAAC;;;;;AAMJ,SAAgB,4BAA4C;AAC1D,QAAO,gBAAgB,0BAA0B,aAAa,CAAC;;;;;;;;AA0BjE,SAAgB,iBAAiB,SAAiD;AAChF,QAAO,MACL,sBAAsB,EACtB,qBAAqB,QAAQ,EAC7B,2BAA2B,CAC5B;;;;ACpFH,SAAgB,mBAAmC;AACjD,QAAO,aACL,0BAA0B,CAC3B;;;;;;;AC0BH,SAAgB,WAAW,SAAqC;AAC9D,QAAO,MACL,gBAAgB,EAAE,QAAQ,QAAQ,iBAAiB,CAAC,EACpD,iBAAiB,EAAE,QAAQ,QAAQ,kBAAkB,CAAC,EACtD,kBAAkB,CACnB"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { defineCommands, defineNodeSpec, insertNode, union } from "@prosekit/core";
|
|
2
|
-
|
|
3
2
|
//#region src/mention/index.ts
|
|
4
3
|
/**
|
|
5
4
|
* @public
|
|
@@ -53,7 +52,7 @@ function defineMentionCommands() {
|
|
|
53
52
|
function defineMention() {
|
|
54
53
|
return union(defineMentionSpec(), defineMentionCommands());
|
|
55
54
|
}
|
|
56
|
-
|
|
57
55
|
//#endregion
|
|
58
56
|
export { defineMention, defineMentionCommands, defineMentionSpec };
|
|
57
|
+
|
|
59
58
|
//# sourceMappingURL=prosekit-extensions-mention.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prosekit-extensions-mention.js","names":[],"sources":["../src/mention/index.ts"],"sourcesContent":["import { defineCommands, defineNodeSpec, insertNode, union, type Extension, type Union } from '@prosekit/core'\n\nexport interface MentionAttrs {\n id: string\n value: string\n kind: string\n}\n\n/**\n * @internal\n */\nexport type MentionSpecExtension = Extension<{\n Nodes: {\n mention: MentionAttrs\n }\n}>\n\n/**\n * @public\n */\nexport function defineMentionSpec(): MentionSpecExtension {\n return defineNodeSpec<'mention', MentionAttrs>({\n name: 'mention',\n atom: true,\n group: 'inline',\n attrs: {\n id: { validate: 'string' },\n value: { validate: 'string' },\n kind: { default: '', validate: 'string' },\n },\n inline: true,\n leafText: (node) => (node.attrs as MentionAttrs).value.toString(),\n parseDOM: [\n {\n tag: `span[data-mention]`,\n getAttrs: (dom: HTMLElement): MentionAttrs => ({\n id: dom.getAttribute('data-id') || '',\n kind: dom.getAttribute('data-mention') || '',\n value: dom.textContent || '',\n }),\n },\n ],\n toDOM(node) {\n return [\n 'span',\n {\n 'data-id': (node.attrs as MentionAttrs).id.toString(),\n 'data-mention': (node.attrs as MentionAttrs).kind.toString(),\n },\n (node.attrs as MentionAttrs).value.toString(),\n ]\n },\n })\n}\n\n/**\n * @internal\n */\nexport type MentionCommandsExtension = Extension<{\n Commands: {\n insertMention: [attrs: MentionAttrs]\n }\n}>\n\nexport function defineMentionCommands(): MentionCommandsExtension {\n return defineCommands({\n insertMention: (attrs: MentionAttrs) => {\n return insertNode({ type: 'mention', attrs })\n },\n })\n}\n\n/**\n * @internal\n */\nexport type MentionExtension = Union<[MentionSpecExtension, MentionCommandsExtension]>\n\n/**\n * @public\n */\nexport function defineMention(): MentionExtension {\n return union(defineMentionSpec(), defineMentionCommands())\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"prosekit-extensions-mention.js","names":[],"sources":["../src/mention/index.ts"],"sourcesContent":["import { defineCommands, defineNodeSpec, insertNode, union, type Extension, type Union } from '@prosekit/core'\n\nexport interface MentionAttrs {\n id: string\n value: string\n kind: string\n}\n\n/**\n * @internal\n */\nexport type MentionSpecExtension = Extension<{\n Nodes: {\n mention: MentionAttrs\n }\n}>\n\n/**\n * @public\n */\nexport function defineMentionSpec(): MentionSpecExtension {\n return defineNodeSpec<'mention', MentionAttrs>({\n name: 'mention',\n atom: true,\n group: 'inline',\n attrs: {\n id: { validate: 'string' },\n value: { validate: 'string' },\n kind: { default: '', validate: 'string' },\n },\n inline: true,\n leafText: (node) => (node.attrs as MentionAttrs).value.toString(),\n parseDOM: [\n {\n tag: `span[data-mention]`,\n getAttrs: (dom: HTMLElement): MentionAttrs => ({\n id: dom.getAttribute('data-id') || '',\n kind: dom.getAttribute('data-mention') || '',\n value: dom.textContent || '',\n }),\n },\n ],\n toDOM(node) {\n return [\n 'span',\n {\n 'data-id': (node.attrs as MentionAttrs).id.toString(),\n 'data-mention': (node.attrs as MentionAttrs).kind.toString(),\n },\n (node.attrs as MentionAttrs).value.toString(),\n ]\n },\n })\n}\n\n/**\n * @internal\n */\nexport type MentionCommandsExtension = Extension<{\n Commands: {\n insertMention: [attrs: MentionAttrs]\n }\n}>\n\nexport function defineMentionCommands(): MentionCommandsExtension {\n return defineCommands({\n insertMention: (attrs: MentionAttrs) => {\n return insertNode({ type: 'mention', attrs })\n },\n })\n}\n\n/**\n * @internal\n */\nexport type MentionExtension = Union<[MentionSpecExtension, MentionCommandsExtension]>\n\n/**\n * @public\n */\nexport function defineMention(): MentionExtension {\n return union(defineMentionSpec(), defineMentionCommands())\n}\n"],"mappings":";;;;;AAoBA,SAAgB,oBAA0C;AACxD,QAAO,eAAwC;EAC7C,MAAM;EACN,MAAM;EACN,OAAO;EACP,OAAO;GACL,IAAI,EAAE,UAAU,UAAU;GAC1B,OAAO,EAAE,UAAU,UAAU;GAC7B,MAAM;IAAE,SAAS;IAAI,UAAU;IAAU;GAC1C;EACD,QAAQ;EACR,WAAW,SAAU,KAAK,MAAuB,MAAM,UAAU;EACjE,UAAU,CACR;GACE,KAAK;GACL,WAAW,SAAoC;IAC7C,IAAI,IAAI,aAAa,UAAU,IAAI;IACnC,MAAM,IAAI,aAAa,eAAe,IAAI;IAC1C,OAAO,IAAI,eAAe;IAC3B;GACF,CACF;EACD,MAAM,MAAM;AACV,UAAO;IACL;IACA;KACE,WAAY,KAAK,MAAuB,GAAG,UAAU;KACrD,gBAAiB,KAAK,MAAuB,KAAK,UAAU;KAC7D;IACA,KAAK,MAAuB,MAAM,UAAU;IAC9C;;EAEJ,CAAC;;AAYJ,SAAgB,wBAAkD;AAChE,QAAO,eAAe,EACpB,gBAAgB,UAAwB;AACtC,SAAO,WAAW;GAAE,MAAM;GAAW;GAAO,CAAC;IAEhD,CAAC;;;;;AAWJ,SAAgB,gBAAkC;AAChD,QAAO,MAAM,mBAAmB,EAAE,uBAAuB,CAAC"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { Plugin, PluginKey } from "@prosekit/pm/state";
|
|
2
2
|
import { definePlugin, isApple } from "@prosekit/core";
|
|
3
|
-
|
|
4
3
|
//#region src/mod-click-prevention/index.ts
|
|
5
4
|
/**
|
|
6
5
|
* By default, clicking a node while holding the mod key will select the node. This
|
|
@@ -19,7 +18,7 @@ function handleClick(_view, _pos, event) {
|
|
|
19
18
|
return !!event[selectNodeModifier];
|
|
20
19
|
}
|
|
21
20
|
const selectNodeModifier = isApple ? "metaKey" : "ctrlKey";
|
|
22
|
-
|
|
23
21
|
//#endregion
|
|
24
22
|
export { defineModClickPrevention };
|
|
23
|
+
|
|
25
24
|
//# sourceMappingURL=prosekit-extensions-mod-click-prevention.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prosekit-extensions-mod-click-prevention.js","names":[],"sources":["../src/mod-click-prevention/index.ts"],"sourcesContent":["import { definePlugin, isApple, type PlainExtension } from '@prosekit/core'\nimport { Plugin, PluginKey } from '@prosekit/pm/state'\nimport type { EditorView } from '@prosekit/pm/view'\n\n/**\n * @internal\n */\nexport type ModClickPreventionExtension = PlainExtension\n\n/**\n * By default, clicking a node while holding the mod key will select the node. This\n * extension disables that behavior.\n *\n * @public\n */\nexport function defineModClickPrevention(): ModClickPreventionExtension {\n return definePlugin(new Plugin({ key, props: { handleClick } }))\n}\n\nconst key = new PluginKey('prosekit-mod-click-prevention')\n\nfunction handleClick(_view: EditorView, _pos: number, event: MouseEvent) {\n return !!event[selectNodeModifier]\n}\n\nconst selectNodeModifier: 'metaKey' | 'ctrlKey' = isApple\n ? 'metaKey'\n : 'ctrlKey'\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"prosekit-extensions-mod-click-prevention.js","names":[],"sources":["../src/mod-click-prevention/index.ts"],"sourcesContent":["import { definePlugin, isApple, type PlainExtension } from '@prosekit/core'\nimport { Plugin, PluginKey } from '@prosekit/pm/state'\nimport type { EditorView } from '@prosekit/pm/view'\n\n/**\n * @internal\n */\nexport type ModClickPreventionExtension = PlainExtension\n\n/**\n * By default, clicking a node while holding the mod key will select the node. This\n * extension disables that behavior.\n *\n * @public\n */\nexport function defineModClickPrevention(): ModClickPreventionExtension {\n return definePlugin(new Plugin({ key, props: { handleClick } }))\n}\n\nconst key = new PluginKey('prosekit-mod-click-prevention')\n\nfunction handleClick(_view: EditorView, _pos: number, event: MouseEvent) {\n return !!event[selectNodeModifier]\n}\n\nconst selectNodeModifier: 'metaKey' | 'ctrlKey' = isApple\n ? 'metaKey'\n : 'ctrlKey'\n"],"mappings":";;;;;;;;;AAeA,SAAgB,2BAAwD;AACtE,QAAO,aAAa,IAAI,OAAO;EAAE;EAAK,OAAO,EAAE,aAAa;EAAE,CAAC,CAAC;;AAGlE,MAAM,MAAM,IAAI,UAAU,gCAAgC;AAE1D,SAAS,YAAY,OAAmB,MAAc,OAAmB;AACvE,QAAO,CAAC,CAAC,MAAM;;AAGjB,MAAM,qBAA4C,UAC9C,YACA"}
|