@portabletext/plugin-markdown-shortcuts 3.0.0 → 3.0.2
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/index.d.ts +55 -0
- package/dist/index.js +11 -5
- package/dist/index.js.map +1 -1
- package/package.json +5 -5
- package/src/behavior.markdown-shortcuts.ts +6 -0
- package/src/behavior.markdown.feature +108 -0
- package/src/behavior.markdown.test.tsx +63 -0
- package/src/plugin.markdown-shortcuts.tsx +50 -0
- package/src/rule.blockquote.ts +6 -0
- package/src/rule.heading.ts +12 -0
- package/src/rule.ordered-list.ts +6 -0
- package/src/rule.unordered-list.ts +6 -0
package/dist/index.d.ts
CHANGED
|
@@ -9,8 +9,13 @@ declare type MarkdownBehaviorsConfig = {
|
|
|
9
9
|
}) => ObjectWithOptionalKey | undefined
|
|
10
10
|
defaultStyle?: ({
|
|
11
11
|
context,
|
|
12
|
+
schema,
|
|
12
13
|
}: {
|
|
13
14
|
context: Pick<EditorContext, 'schema'>
|
|
15
|
+
/**
|
|
16
|
+
* @deprecated Use `context.schema` instead
|
|
17
|
+
*/
|
|
18
|
+
schema: EditorContext['schema']
|
|
14
19
|
}) => string | undefined
|
|
15
20
|
}
|
|
16
21
|
|
|
@@ -37,22 +42,42 @@ export declare function MarkdownShortcutsPlugin({
|
|
|
37
42
|
export declare type MarkdownShortcutsPluginProps = MarkdownBehaviorsConfig & {
|
|
38
43
|
blockquoteStyle?: ({
|
|
39
44
|
context,
|
|
45
|
+
schema,
|
|
40
46
|
}: {
|
|
41
47
|
context: Pick<EditorContext, 'schema'>
|
|
48
|
+
/**
|
|
49
|
+
* @deprecated Use `context.schema` instead
|
|
50
|
+
*/
|
|
51
|
+
schema: EditorContext['schema']
|
|
42
52
|
}) => string | undefined
|
|
43
53
|
defaultStyle?: ({
|
|
44
54
|
context,
|
|
55
|
+
schema,
|
|
45
56
|
}: {
|
|
46
57
|
context: Pick<EditorContext, 'schema'>
|
|
58
|
+
/**
|
|
59
|
+
* @deprecated Use `context.schema` instead
|
|
60
|
+
*/
|
|
61
|
+
schema: EditorContext['schema']
|
|
47
62
|
}) => string | undefined
|
|
48
63
|
headingStyle?: ({
|
|
49
64
|
context,
|
|
65
|
+
schema,
|
|
50
66
|
props,
|
|
67
|
+
level,
|
|
51
68
|
}: {
|
|
52
69
|
context: Pick<EditorContext, 'schema'>
|
|
70
|
+
/**
|
|
71
|
+
* @deprecated Use `context.schema` instead
|
|
72
|
+
*/
|
|
73
|
+
schema: EditorContext['schema']
|
|
53
74
|
props: {
|
|
54
75
|
level: number
|
|
55
76
|
}
|
|
77
|
+
/**
|
|
78
|
+
* @deprecated Use `props.level` instead
|
|
79
|
+
*/
|
|
80
|
+
level: number
|
|
56
81
|
}) => string | undefined
|
|
57
82
|
linkObject?: ({
|
|
58
83
|
context,
|
|
@@ -65,33 +90,63 @@ export declare type MarkdownShortcutsPluginProps = MarkdownBehaviorsConfig & {
|
|
|
65
90
|
}) => ObjectWithOptionalKey | undefined
|
|
66
91
|
unorderedList?: ({
|
|
67
92
|
context,
|
|
93
|
+
schema,
|
|
68
94
|
}: {
|
|
69
95
|
context: Pick<EditorContext, 'schema'>
|
|
96
|
+
/**
|
|
97
|
+
* @deprecated Use `context.schema` instead
|
|
98
|
+
*/
|
|
99
|
+
schema: EditorContext['schema']
|
|
70
100
|
}) => string | undefined
|
|
71
101
|
orderedList?: ({
|
|
72
102
|
context,
|
|
103
|
+
schema,
|
|
73
104
|
}: {
|
|
74
105
|
context: Pick<EditorContext, 'schema'>
|
|
106
|
+
/**
|
|
107
|
+
* @deprecated Use `context.schema` instead
|
|
108
|
+
*/
|
|
109
|
+
schema: EditorContext['schema']
|
|
75
110
|
}) => string | undefined
|
|
76
111
|
boldDecorator?: ({
|
|
77
112
|
context,
|
|
113
|
+
schema,
|
|
78
114
|
}: {
|
|
79
115
|
context: Pick<EditorContext, 'schema'>
|
|
116
|
+
/**
|
|
117
|
+
* @deprecated Use `context.schema` instead
|
|
118
|
+
*/
|
|
119
|
+
schema: EditorContext['schema']
|
|
80
120
|
}) => string | undefined
|
|
81
121
|
codeDecorator?: ({
|
|
82
122
|
context,
|
|
123
|
+
schema,
|
|
83
124
|
}: {
|
|
84
125
|
context: Pick<EditorContext, 'schema'>
|
|
126
|
+
/**
|
|
127
|
+
* @deprecated Use `context.schema` instead
|
|
128
|
+
*/
|
|
129
|
+
schema: EditorContext['schema']
|
|
85
130
|
}) => string | undefined
|
|
86
131
|
italicDecorator?: ({
|
|
87
132
|
context,
|
|
133
|
+
schema,
|
|
88
134
|
}: {
|
|
89
135
|
context: Pick<EditorContext, 'schema'>
|
|
136
|
+
/**
|
|
137
|
+
* @deprecated Use `context.schema` instead
|
|
138
|
+
*/
|
|
139
|
+
schema: EditorContext['schema']
|
|
90
140
|
}) => string | undefined
|
|
91
141
|
strikeThroughDecorator?: ({
|
|
92
142
|
context,
|
|
143
|
+
schema,
|
|
93
144
|
}: {
|
|
94
145
|
context: Pick<EditorContext, 'schema'>
|
|
146
|
+
/**
|
|
147
|
+
* @deprecated Use `context.schema` instead
|
|
148
|
+
*/
|
|
149
|
+
schema: EditorContext['schema']
|
|
95
150
|
}) => string | undefined
|
|
96
151
|
}
|
|
97
152
|
|
package/dist/index.js
CHANGED
|
@@ -68,7 +68,8 @@ function createMarkdownBehaviors(config) {
|
|
|
68
68
|
const atTheBeginningOfBLock = focusTextBlock.node.children[0]._key === focusSpan.node._key && snapshot.context.selection?.focus.offset === 0, defaultStyle = config.defaultStyle?.({
|
|
69
69
|
context: {
|
|
70
70
|
schema: snapshot.context.schema
|
|
71
|
-
}
|
|
71
|
+
},
|
|
72
|
+
schema: snapshot.context.schema
|
|
72
73
|
});
|
|
73
74
|
return atTheBeginningOfBLock && defaultStyle && focusTextBlock.node.style !== defaultStyle ? {
|
|
74
75
|
defaultStyle,
|
|
@@ -98,7 +99,8 @@ function createBlockquoteRule(config) {
|
|
|
98
99
|
const style = config.blockquoteStyle({
|
|
99
100
|
context: {
|
|
100
101
|
schema: snapshot.context.schema
|
|
101
|
-
}
|
|
102
|
+
},
|
|
103
|
+
schema: snapshot.context.schema
|
|
102
104
|
});
|
|
103
105
|
if (!style || getPreviousInlineObject(snapshot))
|
|
104
106
|
return !1;
|
|
@@ -145,9 +147,11 @@ function createHeadingRule(config) {
|
|
|
145
147
|
context: {
|
|
146
148
|
schema: snapshot.context.schema
|
|
147
149
|
},
|
|
150
|
+
schema: snapshot.context.schema,
|
|
148
151
|
props: {
|
|
149
152
|
level
|
|
150
|
-
}
|
|
153
|
+
},
|
|
154
|
+
level
|
|
151
155
|
});
|
|
152
156
|
return style ? {
|
|
153
157
|
match,
|
|
@@ -289,7 +293,8 @@ function createOrderedListRule(config) {
|
|
|
289
293
|
const orderedList = config.orderedList({
|
|
290
294
|
context: {
|
|
291
295
|
schema: snapshot.context.schema
|
|
292
|
-
}
|
|
296
|
+
},
|
|
297
|
+
schema: snapshot.context.schema
|
|
293
298
|
});
|
|
294
299
|
if (!orderedList || getPreviousInlineObject(snapshot))
|
|
295
300
|
return !1;
|
|
@@ -331,7 +336,8 @@ function createUnorderedListRule(config) {
|
|
|
331
336
|
const unorderedList = config.unorderedList({
|
|
332
337
|
context: {
|
|
333
338
|
schema: snapshot.context.schema
|
|
334
|
-
}
|
|
339
|
+
},
|
|
340
|
+
schema: snapshot.context.schema
|
|
335
341
|
});
|
|
336
342
|
if (!unorderedList || getPreviousInlineObject(snapshot))
|
|
337
343
|
return !1;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/behavior.markdown-shortcuts.ts","../src/rule.blockquote.ts","../src/rule.heading.ts","../src/rule.horizontal-rule.ts","../src/rule.markdown-link.ts","../src/rule.ordered-list.ts","../src/rule.unordered-list.ts","../src/plugin.markdown-shortcuts.tsx"],"sourcesContent":["import type {EditorContext} from '@portabletext/editor'\nimport {defineBehavior, raise} from '@portabletext/editor/behaviors'\nimport * as selectors from '@portabletext/editor/selectors'\n\nexport type ObjectWithOptionalKey = {\n _type: string\n _key?: string\n [other: string]: unknown\n}\n\nexport type MarkdownBehaviorsConfig = {\n horizontalRuleObject?: ({\n context,\n }: {\n context: Pick<EditorContext, 'schema' | 'keyGenerator'>\n }) => ObjectWithOptionalKey | undefined\n defaultStyle?: ({\n context,\n }: {\n context: Pick<EditorContext, 'schema'>\n }) => string | undefined\n}\n\nexport function createMarkdownBehaviors(config: MarkdownBehaviorsConfig) {\n const automaticHrOnPaste = defineBehavior({\n on: 'clipboard.paste',\n guard: ({snapshot, event}) => {\n const text = event.originEvent.dataTransfer.getData('text/plain')\n const hrRegExp = /^(---)$|^(—-)$|^(___)$|^(\\*\\*\\*)$/\n const hrCharacters = text.match(hrRegExp)?.[0]\n const hrObject = config.horizontalRuleObject?.({\n context: {\n schema: snapshot.context.schema,\n keyGenerator: snapshot.context.keyGenerator,\n },\n })\n const focusBlock = selectors.getFocusBlock(snapshot)\n const focusTextBlock = selectors.getFocusTextBlock(snapshot)\n\n if (!hrCharacters || !hrObject || !focusBlock) {\n return false\n }\n\n return {hrCharacters, hrObject, focusBlock, focusTextBlock}\n },\n actions: [\n (_, {hrCharacters}) => [\n raise({\n type: 'insert.text',\n text: hrCharacters,\n }),\n ],\n ({snapshot}, {hrObject, focusBlock, focusTextBlock}) =>\n focusTextBlock\n ? [\n raise({\n type: 'insert.block',\n block: {\n _type: snapshot.context.schema.block.name,\n children: focusTextBlock.node.children,\n },\n placement: 'after',\n }),\n raise({\n type: 'insert.block',\n block: hrObject,\n placement: 'after',\n }),\n raise({\n type: 'delete.block',\n at: focusBlock.path,\n }),\n ]\n : [\n raise({\n type: 'insert.block',\n block: hrObject,\n placement: 'after',\n }),\n ],\n ],\n })\n\n const clearStyleOnBackspace = defineBehavior({\n on: 'delete.backward',\n guard: ({snapshot}) => {\n const selectionCollapsed = selectors.isSelectionCollapsed(snapshot)\n const focusTextBlock = selectors.getFocusTextBlock(snapshot)\n const focusSpan = selectors.getFocusSpan(snapshot)\n\n if (!selectionCollapsed || !focusTextBlock || !focusSpan) {\n return false\n }\n\n const atTheBeginningOfBLock =\n focusTextBlock.node.children[0]._key === focusSpan.node._key &&\n snapshot.context.selection?.focus.offset === 0\n\n const defaultStyle = config.defaultStyle?.({\n context: {schema: snapshot.context.schema},\n })\n\n if (\n atTheBeginningOfBLock &&\n defaultStyle &&\n focusTextBlock.node.style !== defaultStyle\n ) {\n return {defaultStyle, focusTextBlock}\n }\n\n return false\n },\n actions: [\n (_, {defaultStyle, focusTextBlock}) => [\n raise({\n type: 'block.set',\n props: {style: defaultStyle},\n at: focusTextBlock.path,\n }),\n ],\n ],\n })\n\n const markdownBehaviors = [automaticHrOnPaste, clearStyleOnBackspace]\n\n return markdownBehaviors\n}\n","import type {EditorContext} from '@portabletext/editor'\nimport {raise} from '@portabletext/editor/behaviors'\nimport {getPreviousInlineObject} from '@portabletext/editor/selectors'\nimport {defineInputRule} from '@portabletext/plugin-input-rule'\n\nexport function createBlockquoteRule(config: {\n blockquoteStyle: ({\n context,\n }: {\n context: Pick<EditorContext, 'schema'>\n }) => string | undefined\n}) {\n return defineInputRule({\n on: /^> /,\n guard: ({snapshot, event}) => {\n const style = config.blockquoteStyle({\n context: {schema: snapshot.context.schema},\n })\n\n if (!style) {\n return false\n }\n\n const previousInlineObject = getPreviousInlineObject(snapshot)\n\n if (previousInlineObject) {\n return false\n }\n\n const match = event.matches.at(0)\n\n if (!match) {\n return false\n }\n\n return {style, match}\n },\n actions: [\n ({event}, {style, match}) => [\n raise({\n type: 'block.unset',\n props: ['listItem', 'level'],\n at: event.focusTextBlock.path,\n }),\n raise({\n type: 'block.set',\n props: {style},\n at: event.focusTextBlock.path,\n }),\n raise({\n type: 'delete',\n at: match.targetOffsets,\n }),\n ],\n ],\n })\n}\n","import type {EditorContext} from '@portabletext/editor'\nimport {raise} from '@portabletext/editor/behaviors'\nimport {getPreviousInlineObject} from '@portabletext/editor/selectors'\nimport {defineInputRule} from '@portabletext/plugin-input-rule'\n\nexport function createHeadingRule(config: {\n headingStyle: ({\n context,\n props,\n }: {\n context: Pick<EditorContext, 'schema'>\n props: {level: number}\n }) => string | undefined\n}) {\n return defineInputRule({\n on: /^#+ /,\n guard: ({snapshot, event}) => {\n const previousInlineObject = getPreviousInlineObject(snapshot)\n\n if (previousInlineObject) {\n return false\n }\n\n const match = event.matches.at(0)\n\n if (!match) {\n return false\n }\n\n const level = match.text.length - 1\n\n const style = config.headingStyle({\n context: {schema: snapshot.context.schema},\n props: {level},\n })\n\n if (!style) {\n return false\n }\n\n return {match, style}\n },\n actions: [\n ({event}, {match, style}) => [\n raise({\n type: 'block.unset',\n props: ['listItem', 'level'],\n at: event.focusTextBlock.path,\n }),\n raise({\n type: 'block.set',\n props: {style},\n at: event.focusTextBlock.path,\n }),\n raise({\n type: 'delete',\n at: match.targetOffsets,\n }),\n ],\n ],\n })\n}\n","import type {EditorContext} from '@portabletext/editor'\nimport {raise} from '@portabletext/editor/behaviors'\nimport {getPreviousInlineObject} from '@portabletext/editor/selectors'\nimport {defineInputRule} from '@portabletext/plugin-input-rule'\nimport type {ObjectWithOptionalKey} from './behavior.markdown-shortcuts'\n\nexport function createHorizontalRuleRule(config: {\n horizontalRuleObject: ({\n context,\n }: {\n context: Pick<EditorContext, 'schema' | 'keyGenerator'>\n }) => ObjectWithOptionalKey | undefined\n}) {\n return defineInputRule({\n on: /^(---)|^(—-)|^(___)|^(\\*\\*\\*)/,\n guard: ({snapshot, event}) => {\n const hrObject = config.horizontalRuleObject({\n context: {\n schema: snapshot.context.schema,\n keyGenerator: snapshot.context.keyGenerator,\n },\n })\n\n if (!hrObject) {\n // If no horizontal rule object is provided, then we can safely skip\n // this rule.\n return false\n }\n\n const previousInlineObject = getPreviousInlineObject(snapshot)\n\n if (previousInlineObject) {\n // Input Rules only look at the plain text of the text block. This\n // means that the RegExp is matched even if there is a leading inline\n // object.\n return false\n }\n\n // In theory, an Input Rule could return multiple matches. But in this\n // case we only expect one match.\n const match = event.matches.at(0)\n\n if (!match) {\n return false\n }\n\n return {hrObject, match}\n },\n actions: [\n (_, {hrObject, match}) => [\n raise({\n type: 'insert.block',\n block: hrObject,\n placement: 'before',\n select: 'none',\n }),\n raise({\n type: 'delete',\n at: match.targetOffsets,\n }),\n ],\n ],\n })\n}\n","import type {EditorContext} from '@portabletext/editor'\nimport {raise, type BehaviorAction} from '@portabletext/editor/behaviors'\nimport {defineInputRule} from '@portabletext/plugin-input-rule'\nimport type {ObjectWithOptionalKey} from './behavior.markdown-shortcuts'\n\nexport function createMarkdownLinkRule(config: {\n linkObject: ({\n context,\n props,\n }: {\n context: Pick<EditorContext, 'schema' | 'keyGenerator'>\n props: {href: string}\n }) => ObjectWithOptionalKey | undefined\n}) {\n return defineInputRule({\n on: /\\[([^[\\]]+)]\\((.+)\\)/,\n actions: [\n ({snapshot, event}) => {\n const newText = event.textBefore + event.textInserted\n let textLengthDelta = 0\n const actions: Array<BehaviorAction> = []\n\n for (const match of event.matches.reverse()) {\n const textMatch = match.groupMatches.at(0)\n const hrefMatch = match.groupMatches.at(1)\n\n if (textMatch === undefined || hrefMatch === undefined) {\n continue\n }\n\n textLengthDelta =\n textLengthDelta -\n (match.targetOffsets.focus.offset -\n match.targetOffsets.anchor.offset -\n textMatch.text.length)\n\n const linkObject = config.linkObject({\n context: {\n schema: snapshot.context.schema,\n keyGenerator: snapshot.context.keyGenerator,\n },\n props: {href: hrefMatch.text},\n })\n\n if (!linkObject) {\n continue\n }\n\n const {_type, _key, ...value} = linkObject\n\n const leftSideOffsets = {\n anchor: match.targetOffsets.anchor,\n focus: textMatch.targetOffsets.anchor,\n }\n const rightSideOffsets = {\n anchor: textMatch.targetOffsets.focus,\n focus: match.targetOffsets.focus,\n }\n\n actions.push(\n raise({\n type: 'select',\n at: textMatch.targetOffsets,\n }),\n )\n actions.push(\n raise({\n type: 'annotation.add',\n annotation: {\n name: _type,\n _key,\n value,\n },\n }),\n )\n actions.push(\n raise({\n type: 'delete',\n at: rightSideOffsets,\n }),\n )\n actions.push(\n raise({\n type: 'delete',\n at: leftSideOffsets,\n }),\n )\n }\n\n const endCaretPosition = {\n path: event.focusTextBlock.path,\n offset: newText.length - textLengthDelta * -1,\n }\n\n return [\n ...actions,\n raise({\n type: 'select',\n at: {\n anchor: endCaretPosition,\n focus: endCaretPosition,\n },\n }),\n ]\n },\n ],\n })\n}\n","import type {EditorContext} from '@portabletext/editor'\nimport {raise} from '@portabletext/editor/behaviors'\nimport {getPreviousInlineObject} from '@portabletext/editor/selectors'\nimport {defineInputRule} from '@portabletext/plugin-input-rule'\n\nexport function createOrderedListRule(config: {\n orderedList: ({\n context,\n }: {\n context: Pick<EditorContext, 'schema'>\n }) => string | undefined\n}) {\n return defineInputRule({\n on: /^1\\. /,\n guard: ({snapshot, event}) => {\n const orderedList = config.orderedList({\n context: {schema: snapshot.context.schema},\n })\n\n if (!orderedList) {\n return false\n }\n\n const previousInlineObject = getPreviousInlineObject(snapshot)\n\n if (previousInlineObject) {\n return false\n }\n\n const match = event.matches.at(0)\n\n if (!match) {\n return false\n }\n\n return {match, orderedList}\n },\n actions: [\n ({event}, {match, orderedList}) => [\n raise({\n type: 'block.unset',\n props: ['style'],\n at: event.focusTextBlock.path,\n }),\n raise({\n type: 'block.set',\n props: {\n listItem: orderedList,\n level: event.focusTextBlock.node.level ?? 1,\n },\n at: event.focusTextBlock.path,\n }),\n raise({\n type: 'delete',\n at: match.targetOffsets,\n }),\n ],\n ],\n })\n}\n","import type {EditorContext} from '@portabletext/editor'\nimport {raise} from '@portabletext/editor/behaviors'\nimport {getPreviousInlineObject} from '@portabletext/editor/selectors'\nimport {defineInputRule} from '@portabletext/plugin-input-rule'\n\nexport function createUnorderedListRule(config: {\n unorderedList: ({\n context,\n }: {\n context: Pick<EditorContext, 'schema'>\n }) => string | undefined\n}) {\n return defineInputRule({\n on: /^(-|\\*) /,\n guard: ({snapshot, event}) => {\n const unorderedList = config.unorderedList({\n context: {schema: snapshot.context.schema},\n })\n\n if (!unorderedList) {\n return false\n }\n\n const previousInlineObject = getPreviousInlineObject(snapshot)\n\n if (previousInlineObject) {\n return false\n }\n\n const match = event.matches.at(0)\n\n if (!match) {\n return false\n }\n\n return {match, unorderedList}\n },\n actions: [\n ({event}, {match, unorderedList}) => [\n raise({\n type: 'block.unset',\n props: ['style'],\n at: event.focusTextBlock.path,\n }),\n raise({\n type: 'block.set',\n props: {\n listItem: unorderedList,\n level: event.focusTextBlock.node.level ?? 1,\n },\n at: event.focusTextBlock.path,\n }),\n raise({\n type: 'delete',\n at: match.targetOffsets,\n }),\n ],\n ],\n })\n}\n","import type {EditorContext} from '@portabletext/editor'\nimport {useEditor} from '@portabletext/editor'\nimport {CharacterPairDecoratorPlugin} from '@portabletext/plugin-character-pair-decorator'\nimport {InputRulePlugin} from '@portabletext/plugin-input-rule'\nimport {useEffect, useMemo} from 'react'\nimport {\n createMarkdownBehaviors,\n type MarkdownBehaviorsConfig,\n type ObjectWithOptionalKey,\n} from './behavior.markdown-shortcuts'\nimport {createBlockquoteRule} from './rule.blockquote'\nimport {createHeadingRule} from './rule.heading'\nimport {createHorizontalRuleRule} from './rule.horizontal-rule'\nimport {createMarkdownLinkRule} from './rule.markdown-link'\nimport {createOrderedListRule} from './rule.ordered-list'\nimport {createUnorderedListRule} from './rule.unordered-list'\n\n/**\n * @public\n */\nexport type MarkdownShortcutsPluginProps = MarkdownBehaviorsConfig & {\n blockquoteStyle?: ({\n context,\n }: {\n context: Pick<EditorContext, 'schema'>\n }) => string | undefined\n defaultStyle?: ({\n context,\n }: {\n context: Pick<EditorContext, 'schema'>\n }) => string | undefined\n headingStyle?: ({\n context,\n props,\n }: {\n context: Pick<EditorContext, 'schema'>\n props: {level: number}\n }) => string | undefined\n linkObject?: ({\n context,\n props,\n }: {\n context: Pick<EditorContext, 'schema' | 'keyGenerator'>\n props: {href: string}\n }) => ObjectWithOptionalKey | undefined\n unorderedList?: ({\n context,\n }: {\n context: Pick<EditorContext, 'schema'>\n }) => string | undefined\n orderedList?: ({\n context,\n }: {\n context: Pick<EditorContext, 'schema'>\n }) => string | undefined\n boldDecorator?: ({\n context,\n }: {\n context: Pick<EditorContext, 'schema'>\n }) => string | undefined\n codeDecorator?: ({\n context,\n }: {\n context: Pick<EditorContext, 'schema'>\n }) => string | undefined\n italicDecorator?: ({\n context,\n }: {\n context: Pick<EditorContext, 'schema'>\n }) => string | undefined\n strikeThroughDecorator?: ({\n context,\n }: {\n context: Pick<EditorContext, 'schema'>\n }) => string | undefined\n}\n\n/**\n * @public\n */\nexport function MarkdownShortcutsPlugin({\n blockquoteStyle,\n boldDecorator,\n codeDecorator,\n defaultStyle,\n headingStyle,\n horizontalRuleObject,\n linkObject,\n italicDecorator,\n orderedList,\n strikeThroughDecorator,\n unorderedList,\n}: MarkdownShortcutsPluginProps) {\n const editor = useEditor()\n\n useEffect(() => {\n const behaviors = createMarkdownBehaviors({\n defaultStyle,\n })\n\n const unregisterBehaviors = behaviors.map((behavior) =>\n editor.registerBehavior({behavior}),\n )\n\n return () => {\n for (const unregisterBehavior of unregisterBehaviors) {\n unregisterBehavior()\n }\n }\n }, [defaultStyle, editor])\n\n const inputRules = useMemo(() => {\n const rules = []\n if (blockquoteStyle) {\n rules.push(createBlockquoteRule({blockquoteStyle}))\n }\n if (headingStyle) {\n rules.push(createHeadingRule({headingStyle}))\n }\n if (horizontalRuleObject) {\n rules.push(createHorizontalRuleRule({horizontalRuleObject}))\n }\n if (linkObject) {\n rules.push(createMarkdownLinkRule({linkObject}))\n }\n if (orderedList) {\n rules.push(createOrderedListRule({orderedList}))\n }\n if (unorderedList) {\n rules.push(createUnorderedListRule({unorderedList}))\n }\n return rules.length > 0 ? rules : null\n }, [\n blockquoteStyle,\n headingStyle,\n horizontalRuleObject,\n linkObject,\n orderedList,\n unorderedList,\n ])\n\n return (\n <>\n {boldDecorator ? (\n <>\n <CharacterPairDecoratorPlugin\n decorator={boldDecorator}\n pair={{char: '*', amount: 2}}\n />\n <CharacterPairDecoratorPlugin\n decorator={boldDecorator}\n pair={{char: '_', amount: 2}}\n />\n </>\n ) : null}\n {codeDecorator ? (\n <CharacterPairDecoratorPlugin\n decorator={codeDecorator}\n pair={{char: '`', amount: 1}}\n />\n ) : null}\n {italicDecorator ? (\n <>\n <CharacterPairDecoratorPlugin\n decorator={italicDecorator}\n pair={{char: '*', amount: 1}}\n />\n <CharacterPairDecoratorPlugin\n decorator={italicDecorator}\n pair={{char: '_', amount: 1}}\n />\n </>\n ) : null}\n {strikeThroughDecorator ? (\n <CharacterPairDecoratorPlugin\n decorator={strikeThroughDecorator}\n pair={{char: '~', amount: 2}}\n />\n ) : null}\n {inputRules ? <InputRulePlugin rules={inputRules} /> : null}\n </>\n )\n}\n"],"names":["createMarkdownBehaviors","config","automaticHrOnPaste","defineBehavior","on","guard","snapshot","event","text","originEvent","dataTransfer","getData","hrRegExp","hrCharacters","match","hrObject","horizontalRuleObject","context","schema","keyGenerator","focusBlock","selectors","getFocusBlock","focusTextBlock","getFocusTextBlock","actions","_","raise","type","block","_type","name","children","node","placement","at","path","clearStyleOnBackspace","selectionCollapsed","isSelectionCollapsed","focusSpan","getFocusSpan","atTheBeginningOfBLock","_key","selection","focus","offset","defaultStyle","style","props","createBlockquoteRule","defineInputRule","blockquoteStyle","getPreviousInlineObject","matches","targetOffsets","createHeadingRule","level","length","headingStyle","createHorizontalRuleRule","select","createMarkdownLinkRule","newText","textBefore","textInserted","textLengthDelta","reverse","textMatch","groupMatches","hrefMatch","undefined","anchor","linkObject","href","value","leftSideOffsets","rightSideOffsets","push","annotation","endCaretPosition","createOrderedListRule","orderedList","listItem","createUnorderedListRule","unorderedList","MarkdownShortcutsPlugin","t0","$","_c","boldDecorator","codeDecorator","italicDecorator","strikeThroughDecorator","editor","useEditor","t1","t2","unregisterBehaviors","map","behavior","registerBehavior","unregisterBehavior","useEffect","rules","t3","inputRules","char","amount","t4","t5","t6","t7","t8"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/behavior.markdown-shortcuts.ts","../src/rule.blockquote.ts","../src/rule.heading.ts","../src/rule.horizontal-rule.ts","../src/rule.markdown-link.ts","../src/rule.ordered-list.ts","../src/rule.unordered-list.ts","../src/plugin.markdown-shortcuts.tsx"],"sourcesContent":["import type {EditorContext} from '@portabletext/editor'\nimport {defineBehavior, raise} from '@portabletext/editor/behaviors'\nimport * as selectors from '@portabletext/editor/selectors'\n\nexport type ObjectWithOptionalKey = {\n _type: string\n _key?: string\n [other: string]: unknown\n}\n\nexport type MarkdownBehaviorsConfig = {\n horizontalRuleObject?: ({\n context,\n }: {\n context: Pick<EditorContext, 'schema' | 'keyGenerator'>\n }) => ObjectWithOptionalKey | undefined\n defaultStyle?: ({\n context,\n schema,\n }: {\n context: Pick<EditorContext, 'schema'>\n /**\n * @deprecated Use `context.schema` instead\n */\n schema: EditorContext['schema']\n }) => string | undefined\n}\n\nexport function createMarkdownBehaviors(config: MarkdownBehaviorsConfig) {\n const automaticHrOnPaste = defineBehavior({\n on: 'clipboard.paste',\n guard: ({snapshot, event}) => {\n const text = event.originEvent.dataTransfer.getData('text/plain')\n const hrRegExp = /^(---)$|^(—-)$|^(___)$|^(\\*\\*\\*)$/\n const hrCharacters = text.match(hrRegExp)?.[0]\n const hrObject = config.horizontalRuleObject?.({\n context: {\n schema: snapshot.context.schema,\n keyGenerator: snapshot.context.keyGenerator,\n },\n })\n const focusBlock = selectors.getFocusBlock(snapshot)\n const focusTextBlock = selectors.getFocusTextBlock(snapshot)\n\n if (!hrCharacters || !hrObject || !focusBlock) {\n return false\n }\n\n return {hrCharacters, hrObject, focusBlock, focusTextBlock}\n },\n actions: [\n (_, {hrCharacters}) => [\n raise({\n type: 'insert.text',\n text: hrCharacters,\n }),\n ],\n ({snapshot}, {hrObject, focusBlock, focusTextBlock}) =>\n focusTextBlock\n ? [\n raise({\n type: 'insert.block',\n block: {\n _type: snapshot.context.schema.block.name,\n children: focusTextBlock.node.children,\n },\n placement: 'after',\n }),\n raise({\n type: 'insert.block',\n block: hrObject,\n placement: 'after',\n }),\n raise({\n type: 'delete.block',\n at: focusBlock.path,\n }),\n ]\n : [\n raise({\n type: 'insert.block',\n block: hrObject,\n placement: 'after',\n }),\n ],\n ],\n })\n\n const clearStyleOnBackspace = defineBehavior({\n on: 'delete.backward',\n guard: ({snapshot}) => {\n const selectionCollapsed = selectors.isSelectionCollapsed(snapshot)\n const focusTextBlock = selectors.getFocusTextBlock(snapshot)\n const focusSpan = selectors.getFocusSpan(snapshot)\n\n if (!selectionCollapsed || !focusTextBlock || !focusSpan) {\n return false\n }\n\n const atTheBeginningOfBLock =\n focusTextBlock.node.children[0]._key === focusSpan.node._key &&\n snapshot.context.selection?.focus.offset === 0\n\n const defaultStyle = config.defaultStyle?.({\n context: {schema: snapshot.context.schema},\n schema: snapshot.context.schema,\n })\n\n if (\n atTheBeginningOfBLock &&\n defaultStyle &&\n focusTextBlock.node.style !== defaultStyle\n ) {\n return {defaultStyle, focusTextBlock}\n }\n\n return false\n },\n actions: [\n (_, {defaultStyle, focusTextBlock}) => [\n raise({\n type: 'block.set',\n props: {style: defaultStyle},\n at: focusTextBlock.path,\n }),\n ],\n ],\n })\n\n const markdownBehaviors = [automaticHrOnPaste, clearStyleOnBackspace]\n\n return markdownBehaviors\n}\n","import type {EditorContext} from '@portabletext/editor'\nimport {raise} from '@portabletext/editor/behaviors'\nimport {getPreviousInlineObject} from '@portabletext/editor/selectors'\nimport {defineInputRule} from '@portabletext/plugin-input-rule'\n\nexport function createBlockquoteRule(config: {\n blockquoteStyle: ({\n context,\n schema,\n }: {\n context: Pick<EditorContext, 'schema'>\n /**\n * @deprecated Use `context.schema` instead\n */\n schema: EditorContext['schema']\n }) => string | undefined\n}) {\n return defineInputRule({\n on: /^> /,\n guard: ({snapshot, event}) => {\n const style = config.blockquoteStyle({\n context: {schema: snapshot.context.schema},\n schema: snapshot.context.schema,\n })\n\n if (!style) {\n return false\n }\n\n const previousInlineObject = getPreviousInlineObject(snapshot)\n\n if (previousInlineObject) {\n return false\n }\n\n const match = event.matches.at(0)\n\n if (!match) {\n return false\n }\n\n return {style, match}\n },\n actions: [\n ({event}, {style, match}) => [\n raise({\n type: 'block.unset',\n props: ['listItem', 'level'],\n at: event.focusTextBlock.path,\n }),\n raise({\n type: 'block.set',\n props: {style},\n at: event.focusTextBlock.path,\n }),\n raise({\n type: 'delete',\n at: match.targetOffsets,\n }),\n ],\n ],\n })\n}\n","import type {EditorContext} from '@portabletext/editor'\nimport {raise} from '@portabletext/editor/behaviors'\nimport {getPreviousInlineObject} from '@portabletext/editor/selectors'\nimport {defineInputRule} from '@portabletext/plugin-input-rule'\n\nexport function createHeadingRule(config: {\n headingStyle: ({\n context,\n schema,\n props,\n level,\n }: {\n context: Pick<EditorContext, 'schema'>\n /**\n * @deprecated Use `context.schema` instead\n */\n schema: EditorContext['schema']\n props: {level: number}\n /**\n * @deprecated Use `props.level` instead\n */\n level: number\n }) => string | undefined\n}) {\n return defineInputRule({\n on: /^#+ /,\n guard: ({snapshot, event}) => {\n const previousInlineObject = getPreviousInlineObject(snapshot)\n\n if (previousInlineObject) {\n return false\n }\n\n const match = event.matches.at(0)\n\n if (!match) {\n return false\n }\n\n const level = match.text.length - 1\n\n const style = config.headingStyle({\n context: {schema: snapshot.context.schema},\n schema: snapshot.context.schema,\n props: {level},\n level,\n })\n\n if (!style) {\n return false\n }\n\n return {match, style}\n },\n actions: [\n ({event}, {match, style}) => [\n raise({\n type: 'block.unset',\n props: ['listItem', 'level'],\n at: event.focusTextBlock.path,\n }),\n raise({\n type: 'block.set',\n props: {style},\n at: event.focusTextBlock.path,\n }),\n raise({\n type: 'delete',\n at: match.targetOffsets,\n }),\n ],\n ],\n })\n}\n","import type {EditorContext} from '@portabletext/editor'\nimport {raise} from '@portabletext/editor/behaviors'\nimport {getPreviousInlineObject} from '@portabletext/editor/selectors'\nimport {defineInputRule} from '@portabletext/plugin-input-rule'\nimport type {ObjectWithOptionalKey} from './behavior.markdown-shortcuts'\n\nexport function createHorizontalRuleRule(config: {\n horizontalRuleObject: ({\n context,\n }: {\n context: Pick<EditorContext, 'schema' | 'keyGenerator'>\n }) => ObjectWithOptionalKey | undefined\n}) {\n return defineInputRule({\n on: /^(---)|^(—-)|^(___)|^(\\*\\*\\*)/,\n guard: ({snapshot, event}) => {\n const hrObject = config.horizontalRuleObject({\n context: {\n schema: snapshot.context.schema,\n keyGenerator: snapshot.context.keyGenerator,\n },\n })\n\n if (!hrObject) {\n // If no horizontal rule object is provided, then we can safely skip\n // this rule.\n return false\n }\n\n const previousInlineObject = getPreviousInlineObject(snapshot)\n\n if (previousInlineObject) {\n // Input Rules only look at the plain text of the text block. This\n // means that the RegExp is matched even if there is a leading inline\n // object.\n return false\n }\n\n // In theory, an Input Rule could return multiple matches. But in this\n // case we only expect one match.\n const match = event.matches.at(0)\n\n if (!match) {\n return false\n }\n\n return {hrObject, match}\n },\n actions: [\n (_, {hrObject, match}) => [\n raise({\n type: 'insert.block',\n block: hrObject,\n placement: 'before',\n select: 'none',\n }),\n raise({\n type: 'delete',\n at: match.targetOffsets,\n }),\n ],\n ],\n })\n}\n","import type {EditorContext} from '@portabletext/editor'\nimport {raise, type BehaviorAction} from '@portabletext/editor/behaviors'\nimport {defineInputRule} from '@portabletext/plugin-input-rule'\nimport type {ObjectWithOptionalKey} from './behavior.markdown-shortcuts'\n\nexport function createMarkdownLinkRule(config: {\n linkObject: ({\n context,\n props,\n }: {\n context: Pick<EditorContext, 'schema' | 'keyGenerator'>\n props: {href: string}\n }) => ObjectWithOptionalKey | undefined\n}) {\n return defineInputRule({\n on: /\\[([^[\\]]+)]\\((.+)\\)/,\n actions: [\n ({snapshot, event}) => {\n const newText = event.textBefore + event.textInserted\n let textLengthDelta = 0\n const actions: Array<BehaviorAction> = []\n\n for (const match of event.matches.reverse()) {\n const textMatch = match.groupMatches.at(0)\n const hrefMatch = match.groupMatches.at(1)\n\n if (textMatch === undefined || hrefMatch === undefined) {\n continue\n }\n\n textLengthDelta =\n textLengthDelta -\n (match.targetOffsets.focus.offset -\n match.targetOffsets.anchor.offset -\n textMatch.text.length)\n\n const linkObject = config.linkObject({\n context: {\n schema: snapshot.context.schema,\n keyGenerator: snapshot.context.keyGenerator,\n },\n props: {href: hrefMatch.text},\n })\n\n if (!linkObject) {\n continue\n }\n\n const {_type, _key, ...value} = linkObject\n\n const leftSideOffsets = {\n anchor: match.targetOffsets.anchor,\n focus: textMatch.targetOffsets.anchor,\n }\n const rightSideOffsets = {\n anchor: textMatch.targetOffsets.focus,\n focus: match.targetOffsets.focus,\n }\n\n actions.push(\n raise({\n type: 'select',\n at: textMatch.targetOffsets,\n }),\n )\n actions.push(\n raise({\n type: 'annotation.add',\n annotation: {\n name: _type,\n _key,\n value,\n },\n }),\n )\n actions.push(\n raise({\n type: 'delete',\n at: rightSideOffsets,\n }),\n )\n actions.push(\n raise({\n type: 'delete',\n at: leftSideOffsets,\n }),\n )\n }\n\n const endCaretPosition = {\n path: event.focusTextBlock.path,\n offset: newText.length - textLengthDelta * -1,\n }\n\n return [\n ...actions,\n raise({\n type: 'select',\n at: {\n anchor: endCaretPosition,\n focus: endCaretPosition,\n },\n }),\n ]\n },\n ],\n })\n}\n","import type {EditorContext} from '@portabletext/editor'\nimport {raise} from '@portabletext/editor/behaviors'\nimport {getPreviousInlineObject} from '@portabletext/editor/selectors'\nimport {defineInputRule} from '@portabletext/plugin-input-rule'\n\nexport function createOrderedListRule(config: {\n orderedList: ({\n context,\n schema,\n }: {\n context: Pick<EditorContext, 'schema'>\n /**\n * @deprecated Use `context.schema` instead\n */\n schema: EditorContext['schema']\n }) => string | undefined\n}) {\n return defineInputRule({\n on: /^1\\. /,\n guard: ({snapshot, event}) => {\n const orderedList = config.orderedList({\n context: {schema: snapshot.context.schema},\n schema: snapshot.context.schema,\n })\n\n if (!orderedList) {\n return false\n }\n\n const previousInlineObject = getPreviousInlineObject(snapshot)\n\n if (previousInlineObject) {\n return false\n }\n\n const match = event.matches.at(0)\n\n if (!match) {\n return false\n }\n\n return {match, orderedList}\n },\n actions: [\n ({event}, {match, orderedList}) => [\n raise({\n type: 'block.unset',\n props: ['style'],\n at: event.focusTextBlock.path,\n }),\n raise({\n type: 'block.set',\n props: {\n listItem: orderedList,\n level: event.focusTextBlock.node.level ?? 1,\n },\n at: event.focusTextBlock.path,\n }),\n raise({\n type: 'delete',\n at: match.targetOffsets,\n }),\n ],\n ],\n })\n}\n","import type {EditorContext} from '@portabletext/editor'\nimport {raise} from '@portabletext/editor/behaviors'\nimport {getPreviousInlineObject} from '@portabletext/editor/selectors'\nimport {defineInputRule} from '@portabletext/plugin-input-rule'\n\nexport function createUnorderedListRule(config: {\n unorderedList: ({\n context,\n schema,\n }: {\n context: Pick<EditorContext, 'schema'>\n /**\n * @deprecated Use `context.schema` instead\n */\n schema: EditorContext['schema']\n }) => string | undefined\n}) {\n return defineInputRule({\n on: /^(-|\\*) /,\n guard: ({snapshot, event}) => {\n const unorderedList = config.unorderedList({\n context: {schema: snapshot.context.schema},\n schema: snapshot.context.schema,\n })\n\n if (!unorderedList) {\n return false\n }\n\n const previousInlineObject = getPreviousInlineObject(snapshot)\n\n if (previousInlineObject) {\n return false\n }\n\n const match = event.matches.at(0)\n\n if (!match) {\n return false\n }\n\n return {match, unorderedList}\n },\n actions: [\n ({event}, {match, unorderedList}) => [\n raise({\n type: 'block.unset',\n props: ['style'],\n at: event.focusTextBlock.path,\n }),\n raise({\n type: 'block.set',\n props: {\n listItem: unorderedList,\n level: event.focusTextBlock.node.level ?? 1,\n },\n at: event.focusTextBlock.path,\n }),\n raise({\n type: 'delete',\n at: match.targetOffsets,\n }),\n ],\n ],\n })\n}\n","import type {EditorContext} from '@portabletext/editor'\nimport {useEditor} from '@portabletext/editor'\nimport {CharacterPairDecoratorPlugin} from '@portabletext/plugin-character-pair-decorator'\nimport {InputRulePlugin} from '@portabletext/plugin-input-rule'\nimport {useEffect, useMemo} from 'react'\nimport {\n createMarkdownBehaviors,\n type MarkdownBehaviorsConfig,\n type ObjectWithOptionalKey,\n} from './behavior.markdown-shortcuts'\nimport {createBlockquoteRule} from './rule.blockquote'\nimport {createHeadingRule} from './rule.heading'\nimport {createHorizontalRuleRule} from './rule.horizontal-rule'\nimport {createMarkdownLinkRule} from './rule.markdown-link'\nimport {createOrderedListRule} from './rule.ordered-list'\nimport {createUnorderedListRule} from './rule.unordered-list'\n\n/**\n * @public\n */\nexport type MarkdownShortcutsPluginProps = MarkdownBehaviorsConfig & {\n blockquoteStyle?: ({\n context,\n schema,\n }: {\n context: Pick<EditorContext, 'schema'>\n /**\n * @deprecated Use `context.schema` instead\n */\n schema: EditorContext['schema']\n }) => string | undefined\n defaultStyle?: ({\n context,\n schema,\n }: {\n context: Pick<EditorContext, 'schema'>\n /**\n * @deprecated Use `context.schema` instead\n */\n schema: EditorContext['schema']\n }) => string | undefined\n headingStyle?: ({\n context,\n schema,\n props,\n level,\n }: {\n context: Pick<EditorContext, 'schema'>\n /**\n * @deprecated Use `context.schema` instead\n */\n schema: EditorContext['schema']\n props: {level: number}\n /**\n * @deprecated Use `props.level` instead\n */\n level: number\n }) => string | undefined\n linkObject?: ({\n context,\n props,\n }: {\n context: Pick<EditorContext, 'schema' | 'keyGenerator'>\n props: {href: string}\n }) => ObjectWithOptionalKey | undefined\n unorderedList?: ({\n context,\n schema,\n }: {\n context: Pick<EditorContext, 'schema'>\n /**\n * @deprecated Use `context.schema` instead\n */\n schema: EditorContext['schema']\n }) => string | undefined\n orderedList?: ({\n context,\n schema,\n }: {\n context: Pick<EditorContext, 'schema'>\n /**\n * @deprecated Use `context.schema` instead\n */\n schema: EditorContext['schema']\n }) => string | undefined\n boldDecorator?: ({\n context,\n schema,\n }: {\n context: Pick<EditorContext, 'schema'>\n /**\n * @deprecated Use `context.schema` instead\n */\n schema: EditorContext['schema']\n }) => string | undefined\n codeDecorator?: ({\n context,\n schema,\n }: {\n context: Pick<EditorContext, 'schema'>\n /**\n * @deprecated Use `context.schema` instead\n */\n schema: EditorContext['schema']\n }) => string | undefined\n italicDecorator?: ({\n context,\n schema,\n }: {\n context: Pick<EditorContext, 'schema'>\n /**\n * @deprecated Use `context.schema` instead\n */\n schema: EditorContext['schema']\n }) => string | undefined\n strikeThroughDecorator?: ({\n context,\n schema,\n }: {\n context: Pick<EditorContext, 'schema'>\n /**\n * @deprecated Use `context.schema` instead\n */\n schema: EditorContext['schema']\n }) => string | undefined\n}\n\n/**\n * @public\n */\nexport function MarkdownShortcutsPlugin({\n blockquoteStyle,\n boldDecorator,\n codeDecorator,\n defaultStyle,\n headingStyle,\n horizontalRuleObject,\n linkObject,\n italicDecorator,\n orderedList,\n strikeThroughDecorator,\n unorderedList,\n}: MarkdownShortcutsPluginProps) {\n const editor = useEditor()\n\n useEffect(() => {\n const behaviors = createMarkdownBehaviors({\n defaultStyle,\n })\n\n const unregisterBehaviors = behaviors.map((behavior) =>\n editor.registerBehavior({behavior}),\n )\n\n return () => {\n for (const unregisterBehavior of unregisterBehaviors) {\n unregisterBehavior()\n }\n }\n }, [defaultStyle, editor])\n\n const inputRules = useMemo(() => {\n const rules = []\n if (blockquoteStyle) {\n rules.push(createBlockquoteRule({blockquoteStyle}))\n }\n if (headingStyle) {\n rules.push(createHeadingRule({headingStyle}))\n }\n if (horizontalRuleObject) {\n rules.push(createHorizontalRuleRule({horizontalRuleObject}))\n }\n if (linkObject) {\n rules.push(createMarkdownLinkRule({linkObject}))\n }\n if (orderedList) {\n rules.push(createOrderedListRule({orderedList}))\n }\n if (unorderedList) {\n rules.push(createUnorderedListRule({unorderedList}))\n }\n return rules.length > 0 ? rules : null\n }, [\n blockquoteStyle,\n headingStyle,\n horizontalRuleObject,\n linkObject,\n orderedList,\n unorderedList,\n ])\n\n return (\n <>\n {boldDecorator ? (\n <>\n <CharacterPairDecoratorPlugin\n decorator={boldDecorator}\n pair={{char: '*', amount: 2}}\n />\n <CharacterPairDecoratorPlugin\n decorator={boldDecorator}\n pair={{char: '_', amount: 2}}\n />\n </>\n ) : null}\n {codeDecorator ? (\n <CharacterPairDecoratorPlugin\n decorator={codeDecorator}\n pair={{char: '`', amount: 1}}\n />\n ) : null}\n {italicDecorator ? (\n <>\n <CharacterPairDecoratorPlugin\n decorator={italicDecorator}\n pair={{char: '*', amount: 1}}\n />\n <CharacterPairDecoratorPlugin\n decorator={italicDecorator}\n pair={{char: '_', amount: 1}}\n />\n </>\n ) : null}\n {strikeThroughDecorator ? (\n <CharacterPairDecoratorPlugin\n decorator={strikeThroughDecorator}\n pair={{char: '~', amount: 2}}\n />\n ) : null}\n {inputRules ? <InputRulePlugin rules={inputRules} /> : null}\n </>\n )\n}\n"],"names":["createMarkdownBehaviors","config","automaticHrOnPaste","defineBehavior","on","guard","snapshot","event","text","originEvent","dataTransfer","getData","hrRegExp","hrCharacters","match","hrObject","horizontalRuleObject","context","schema","keyGenerator","focusBlock","selectors","getFocusBlock","focusTextBlock","getFocusTextBlock","actions","_","raise","type","block","_type","name","children","node","placement","at","path","clearStyleOnBackspace","selectionCollapsed","isSelectionCollapsed","focusSpan","getFocusSpan","atTheBeginningOfBLock","_key","selection","focus","offset","defaultStyle","style","props","createBlockquoteRule","defineInputRule","blockquoteStyle","getPreviousInlineObject","matches","targetOffsets","createHeadingRule","level","length","headingStyle","createHorizontalRuleRule","select","createMarkdownLinkRule","newText","textBefore","textInserted","textLengthDelta","reverse","textMatch","groupMatches","hrefMatch","undefined","anchor","linkObject","href","value","leftSideOffsets","rightSideOffsets","push","annotation","endCaretPosition","createOrderedListRule","orderedList","listItem","createUnorderedListRule","unorderedList","MarkdownShortcutsPlugin","t0","$","_c","boldDecorator","codeDecorator","italicDecorator","strikeThroughDecorator","editor","useEditor","t1","t2","unregisterBehaviors","map","behavior","registerBehavior","unregisterBehavior","useEffect","rules","t3","inputRules","char","amount","t4","t5","t6","t7","t8"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@portabletext/plugin-markdown-shortcuts",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.2",
|
|
4
4
|
"description": "Adds helpful Markdown shortcuts to the editor",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"portabletext",
|
|
@@ -36,8 +36,8 @@
|
|
|
36
36
|
"dist"
|
|
37
37
|
],
|
|
38
38
|
"dependencies": {
|
|
39
|
-
"@portabletext/plugin-character-pair-decorator": "^3.0.
|
|
40
|
-
"@portabletext/plugin-input-rule": "~0.5.
|
|
39
|
+
"@portabletext/plugin-character-pair-decorator": "^3.0.2",
|
|
40
|
+
"@portabletext/plugin-input-rule": "~0.5.3"
|
|
41
41
|
},
|
|
42
42
|
"devDependencies": {
|
|
43
43
|
"@types/react": "^19.2.2",
|
|
@@ -51,12 +51,12 @@
|
|
|
51
51
|
"typescript": "5.9.3",
|
|
52
52
|
"typescript-eslint": "^8.46.1",
|
|
53
53
|
"vitest": "^4.0.6",
|
|
54
|
-
"@portabletext/editor": "^2.19.
|
|
54
|
+
"@portabletext/editor": "^2.19.1",
|
|
55
55
|
"racejar": "2.0.0"
|
|
56
56
|
},
|
|
57
57
|
"peerDependencies": {
|
|
58
58
|
"react": "^19",
|
|
59
|
-
"@portabletext/editor": "^2.19.
|
|
59
|
+
"@portabletext/editor": "^2.19.1"
|
|
60
60
|
},
|
|
61
61
|
"engines": {
|
|
62
62
|
"node": ">=20.19 <22 || >=22.12"
|
|
@@ -16,8 +16,13 @@ export type MarkdownBehaviorsConfig = {
|
|
|
16
16
|
}) => ObjectWithOptionalKey | undefined
|
|
17
17
|
defaultStyle?: ({
|
|
18
18
|
context,
|
|
19
|
+
schema,
|
|
19
20
|
}: {
|
|
20
21
|
context: Pick<EditorContext, 'schema'>
|
|
22
|
+
/**
|
|
23
|
+
* @deprecated Use `context.schema` instead
|
|
24
|
+
*/
|
|
25
|
+
schema: EditorContext['schema']
|
|
21
26
|
}) => string | undefined
|
|
22
27
|
}
|
|
23
28
|
|
|
@@ -98,6 +103,7 @@ export function createMarkdownBehaviors(config: MarkdownBehaviorsConfig) {
|
|
|
98
103
|
|
|
99
104
|
const defaultStyle = config.defaultStyle?.({
|
|
100
105
|
context: {schema: snapshot.context.schema},
|
|
106
|
+
schema: snapshot.context.schema,
|
|
101
107
|
})
|
|
102
108
|
|
|
103
109
|
if (
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
Feature: Markdown Behaviors
|
|
2
|
+
|
|
3
|
+
Background:
|
|
4
|
+
Given a global keymap
|
|
5
|
+
|
|
6
|
+
Scenario: Automatic blockquote
|
|
7
|
+
Given the text ">"
|
|
8
|
+
When "{Space}" is pressed
|
|
9
|
+
Then the text is "q:"
|
|
10
|
+
|
|
11
|
+
Scenario: Automatic blockquote not toggled by space in the beginning
|
|
12
|
+
Given the text ">"
|
|
13
|
+
When the caret is put before ">"
|
|
14
|
+
When "{Space}" is pressed
|
|
15
|
+
Then the text is " >"
|
|
16
|
+
|
|
17
|
+
Scenario: Automatic blockquote in non-empty block
|
|
18
|
+
Given the text ">foo"
|
|
19
|
+
When the caret is put before "f"
|
|
20
|
+
And "{Space}" is pressed
|
|
21
|
+
Then the text is "q:foo"
|
|
22
|
+
|
|
23
|
+
Scenario Outline: Automatic headings
|
|
24
|
+
Given the text <text>
|
|
25
|
+
When "{Space}" is pressed
|
|
26
|
+
Then the text is <new text>
|
|
27
|
+
|
|
28
|
+
Examples:
|
|
29
|
+
| text | new text |
|
|
30
|
+
| "#" | "h1:" |
|
|
31
|
+
| "##" | "h2:" |
|
|
32
|
+
| "###" | "h3:" |
|
|
33
|
+
| "####" | "h4:" |
|
|
34
|
+
| "#####" | "h5:" |
|
|
35
|
+
| "######" | "h6:" |
|
|
36
|
+
| "#######" | "####### " |
|
|
37
|
+
|
|
38
|
+
Scenario Outline: Automatic headings not toggled by space in the beginning
|
|
39
|
+
Given the text <text>
|
|
40
|
+
When the caret is put <position>
|
|
41
|
+
When "{Space}" is pressed
|
|
42
|
+
Then the text is <new text>
|
|
43
|
+
|
|
44
|
+
Examples:
|
|
45
|
+
| text | position | new text |
|
|
46
|
+
| "#" | before "#" | " #" |
|
|
47
|
+
| "##" | before "##" | " ##" |
|
|
48
|
+
| "###" | before "###" | " ###" |
|
|
49
|
+
|
|
50
|
+
Scenario Outline: Automatic headings toggled by space mid-heading
|
|
51
|
+
Given the text <text>
|
|
52
|
+
When the caret is put <position>
|
|
53
|
+
When "{ArrowRight}" is pressed
|
|
54
|
+
When "{Space}" is pressed
|
|
55
|
+
Then the text is <new text>
|
|
56
|
+
|
|
57
|
+
Examples:
|
|
58
|
+
| text | position | new text |
|
|
59
|
+
| "##" | before "##" | "h1:#" |
|
|
60
|
+
| "###" | before "###" | "h1:##" |
|
|
61
|
+
|
|
62
|
+
Scenario Outline: Automatic headings in non-empty block
|
|
63
|
+
Given the text <text>
|
|
64
|
+
When the caret is put <position>
|
|
65
|
+
And "{Space}" is pressed
|
|
66
|
+
Then the text is <new text>
|
|
67
|
+
|
|
68
|
+
Examples:
|
|
69
|
+
| text | position | new text |
|
|
70
|
+
| "foo" | before "foo" | " foo" |
|
|
71
|
+
| "#foo" | before "foo" | "h1:foo" |
|
|
72
|
+
| "##foo" | before "foo" | "h2:foo" |
|
|
73
|
+
| "###foo" | before "foo" | "h3:foo" |
|
|
74
|
+
| "####foo" | before "foo" | "h4:foo" |
|
|
75
|
+
| "#####foo" | before "foo" | "h5:foo" |
|
|
76
|
+
| "######foo" | before "foo" | "h6:foo" |
|
|
77
|
+
| "#######foo" | before "foo" | "####### foo" |
|
|
78
|
+
|
|
79
|
+
Scenario Outline: Clear style on Backspace
|
|
80
|
+
Given the text "foo"
|
|
81
|
+
When <style> is toggled
|
|
82
|
+
And "{Backspace}" is pressed 4 times
|
|
83
|
+
Then the text is ""
|
|
84
|
+
|
|
85
|
+
Examples:
|
|
86
|
+
| style |
|
|
87
|
+
| "h1" |
|
|
88
|
+
| "h2" |
|
|
89
|
+
| "h3" |
|
|
90
|
+
| "h4" |
|
|
91
|
+
| "h5" |
|
|
92
|
+
| "h6" |
|
|
93
|
+
|
|
94
|
+
Scenario Outline: Clear style on Backspace in empty block
|
|
95
|
+
Given the text "foo"
|
|
96
|
+
When <style> is toggled
|
|
97
|
+
And "{Backspace}" is pressed 4 times
|
|
98
|
+
And "bar" is typed
|
|
99
|
+
Then the text is "bar"
|
|
100
|
+
|
|
101
|
+
Examples:
|
|
102
|
+
| style |
|
|
103
|
+
| "h1" |
|
|
104
|
+
| "h2" |
|
|
105
|
+
| "h3" |
|
|
106
|
+
| "h4" |
|
|
107
|
+
| "h5" |
|
|
108
|
+
| "h6" |
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import {defineSchema} from '@portabletext/editor'
|
|
2
|
+
import {parameterTypes} from '@portabletext/editor/test'
|
|
3
|
+
import {
|
|
4
|
+
createTestEditor,
|
|
5
|
+
stepDefinitions,
|
|
6
|
+
type Context,
|
|
7
|
+
} from '@portabletext/editor/test/vitest'
|
|
8
|
+
import {Before} from 'racejar'
|
|
9
|
+
import {Feature} from 'racejar/vitest'
|
|
10
|
+
import behaviorMarkdownFeature from './behavior.markdown.feature?raw'
|
|
11
|
+
import {MarkdownShortcutsPlugin} from './plugin.markdown-shortcuts'
|
|
12
|
+
|
|
13
|
+
Feature({
|
|
14
|
+
hooks: [
|
|
15
|
+
Before(async (context: Context) => {
|
|
16
|
+
const {editor, locator} = await createTestEditor({
|
|
17
|
+
children: (
|
|
18
|
+
<MarkdownShortcutsPlugin
|
|
19
|
+
defaultStyle={({context}) => context.schema.styles[0]?.name}
|
|
20
|
+
headingStyle={({context, props}) =>
|
|
21
|
+
context.schema.styles.find(
|
|
22
|
+
(style) => style.name === `h${props.level}`,
|
|
23
|
+
)?.name
|
|
24
|
+
}
|
|
25
|
+
blockquoteStyle={({context}) =>
|
|
26
|
+
context.schema.styles.find((style) => style.name === 'blockquote')
|
|
27
|
+
?.name
|
|
28
|
+
}
|
|
29
|
+
unorderedList={({context}) =>
|
|
30
|
+
context.schema.lists.find((list) => list.name === 'bullet')?.name
|
|
31
|
+
}
|
|
32
|
+
orderedList={({context}) =>
|
|
33
|
+
context.schema.lists.find((list) => list.name === 'number')?.name
|
|
34
|
+
}
|
|
35
|
+
/>
|
|
36
|
+
),
|
|
37
|
+
schemaDefinition: defineSchema({
|
|
38
|
+
annotations: [{name: 'comment'}, {name: 'link'}],
|
|
39
|
+
decorators: [{name: 'em'}, {name: 'strong'}],
|
|
40
|
+
blockObjects: [{name: 'image'}, {name: 'break'}],
|
|
41
|
+
inlineObjects: [{name: 'stock-ticker'}],
|
|
42
|
+
lists: [{name: 'bullet'}, {name: 'number'}],
|
|
43
|
+
styles: [
|
|
44
|
+
{name: 'normal'},
|
|
45
|
+
{name: 'h1'},
|
|
46
|
+
{name: 'h2'},
|
|
47
|
+
{name: 'h3'},
|
|
48
|
+
{name: 'h4'},
|
|
49
|
+
{name: 'h5'},
|
|
50
|
+
{name: 'h6'},
|
|
51
|
+
{name: 'blockquote'},
|
|
52
|
+
],
|
|
53
|
+
}),
|
|
54
|
+
})
|
|
55
|
+
|
|
56
|
+
context.locator = locator
|
|
57
|
+
context.editor = editor
|
|
58
|
+
}),
|
|
59
|
+
],
|
|
60
|
+
featureText: behaviorMarkdownFeature,
|
|
61
|
+
stepDefinitions: stepDefinitions,
|
|
62
|
+
parameterTypes,
|
|
63
|
+
})
|
|
@@ -21,20 +21,40 @@ import {createUnorderedListRule} from './rule.unordered-list'
|
|
|
21
21
|
export type MarkdownShortcutsPluginProps = MarkdownBehaviorsConfig & {
|
|
22
22
|
blockquoteStyle?: ({
|
|
23
23
|
context,
|
|
24
|
+
schema,
|
|
24
25
|
}: {
|
|
25
26
|
context: Pick<EditorContext, 'schema'>
|
|
27
|
+
/**
|
|
28
|
+
* @deprecated Use `context.schema` instead
|
|
29
|
+
*/
|
|
30
|
+
schema: EditorContext['schema']
|
|
26
31
|
}) => string | undefined
|
|
27
32
|
defaultStyle?: ({
|
|
28
33
|
context,
|
|
34
|
+
schema,
|
|
29
35
|
}: {
|
|
30
36
|
context: Pick<EditorContext, 'schema'>
|
|
37
|
+
/**
|
|
38
|
+
* @deprecated Use `context.schema` instead
|
|
39
|
+
*/
|
|
40
|
+
schema: EditorContext['schema']
|
|
31
41
|
}) => string | undefined
|
|
32
42
|
headingStyle?: ({
|
|
33
43
|
context,
|
|
44
|
+
schema,
|
|
34
45
|
props,
|
|
46
|
+
level,
|
|
35
47
|
}: {
|
|
36
48
|
context: Pick<EditorContext, 'schema'>
|
|
49
|
+
/**
|
|
50
|
+
* @deprecated Use `context.schema` instead
|
|
51
|
+
*/
|
|
52
|
+
schema: EditorContext['schema']
|
|
37
53
|
props: {level: number}
|
|
54
|
+
/**
|
|
55
|
+
* @deprecated Use `props.level` instead
|
|
56
|
+
*/
|
|
57
|
+
level: number
|
|
38
58
|
}) => string | undefined
|
|
39
59
|
linkObject?: ({
|
|
40
60
|
context,
|
|
@@ -45,33 +65,63 @@ export type MarkdownShortcutsPluginProps = MarkdownBehaviorsConfig & {
|
|
|
45
65
|
}) => ObjectWithOptionalKey | undefined
|
|
46
66
|
unorderedList?: ({
|
|
47
67
|
context,
|
|
68
|
+
schema,
|
|
48
69
|
}: {
|
|
49
70
|
context: Pick<EditorContext, 'schema'>
|
|
71
|
+
/**
|
|
72
|
+
* @deprecated Use `context.schema` instead
|
|
73
|
+
*/
|
|
74
|
+
schema: EditorContext['schema']
|
|
50
75
|
}) => string | undefined
|
|
51
76
|
orderedList?: ({
|
|
52
77
|
context,
|
|
78
|
+
schema,
|
|
53
79
|
}: {
|
|
54
80
|
context: Pick<EditorContext, 'schema'>
|
|
81
|
+
/**
|
|
82
|
+
* @deprecated Use `context.schema` instead
|
|
83
|
+
*/
|
|
84
|
+
schema: EditorContext['schema']
|
|
55
85
|
}) => string | undefined
|
|
56
86
|
boldDecorator?: ({
|
|
57
87
|
context,
|
|
88
|
+
schema,
|
|
58
89
|
}: {
|
|
59
90
|
context: Pick<EditorContext, 'schema'>
|
|
91
|
+
/**
|
|
92
|
+
* @deprecated Use `context.schema` instead
|
|
93
|
+
*/
|
|
94
|
+
schema: EditorContext['schema']
|
|
60
95
|
}) => string | undefined
|
|
61
96
|
codeDecorator?: ({
|
|
62
97
|
context,
|
|
98
|
+
schema,
|
|
63
99
|
}: {
|
|
64
100
|
context: Pick<EditorContext, 'schema'>
|
|
101
|
+
/**
|
|
102
|
+
* @deprecated Use `context.schema` instead
|
|
103
|
+
*/
|
|
104
|
+
schema: EditorContext['schema']
|
|
65
105
|
}) => string | undefined
|
|
66
106
|
italicDecorator?: ({
|
|
67
107
|
context,
|
|
108
|
+
schema,
|
|
68
109
|
}: {
|
|
69
110
|
context: Pick<EditorContext, 'schema'>
|
|
111
|
+
/**
|
|
112
|
+
* @deprecated Use `context.schema` instead
|
|
113
|
+
*/
|
|
114
|
+
schema: EditorContext['schema']
|
|
70
115
|
}) => string | undefined
|
|
71
116
|
strikeThroughDecorator?: ({
|
|
72
117
|
context,
|
|
118
|
+
schema,
|
|
73
119
|
}: {
|
|
74
120
|
context: Pick<EditorContext, 'schema'>
|
|
121
|
+
/**
|
|
122
|
+
* @deprecated Use `context.schema` instead
|
|
123
|
+
*/
|
|
124
|
+
schema: EditorContext['schema']
|
|
75
125
|
}) => string | undefined
|
|
76
126
|
}
|
|
77
127
|
|
package/src/rule.blockquote.ts
CHANGED
|
@@ -6,8 +6,13 @@ import {defineInputRule} from '@portabletext/plugin-input-rule'
|
|
|
6
6
|
export function createBlockquoteRule(config: {
|
|
7
7
|
blockquoteStyle: ({
|
|
8
8
|
context,
|
|
9
|
+
schema,
|
|
9
10
|
}: {
|
|
10
11
|
context: Pick<EditorContext, 'schema'>
|
|
12
|
+
/**
|
|
13
|
+
* @deprecated Use `context.schema` instead
|
|
14
|
+
*/
|
|
15
|
+
schema: EditorContext['schema']
|
|
11
16
|
}) => string | undefined
|
|
12
17
|
}) {
|
|
13
18
|
return defineInputRule({
|
|
@@ -15,6 +20,7 @@ export function createBlockquoteRule(config: {
|
|
|
15
20
|
guard: ({snapshot, event}) => {
|
|
16
21
|
const style = config.blockquoteStyle({
|
|
17
22
|
context: {schema: snapshot.context.schema},
|
|
23
|
+
schema: snapshot.context.schema,
|
|
18
24
|
})
|
|
19
25
|
|
|
20
26
|
if (!style) {
|
package/src/rule.heading.ts
CHANGED
|
@@ -6,10 +6,20 @@ import {defineInputRule} from '@portabletext/plugin-input-rule'
|
|
|
6
6
|
export function createHeadingRule(config: {
|
|
7
7
|
headingStyle: ({
|
|
8
8
|
context,
|
|
9
|
+
schema,
|
|
9
10
|
props,
|
|
11
|
+
level,
|
|
10
12
|
}: {
|
|
11
13
|
context: Pick<EditorContext, 'schema'>
|
|
14
|
+
/**
|
|
15
|
+
* @deprecated Use `context.schema` instead
|
|
16
|
+
*/
|
|
17
|
+
schema: EditorContext['schema']
|
|
12
18
|
props: {level: number}
|
|
19
|
+
/**
|
|
20
|
+
* @deprecated Use `props.level` instead
|
|
21
|
+
*/
|
|
22
|
+
level: number
|
|
13
23
|
}) => string | undefined
|
|
14
24
|
}) {
|
|
15
25
|
return defineInputRule({
|
|
@@ -31,7 +41,9 @@ export function createHeadingRule(config: {
|
|
|
31
41
|
|
|
32
42
|
const style = config.headingStyle({
|
|
33
43
|
context: {schema: snapshot.context.schema},
|
|
44
|
+
schema: snapshot.context.schema,
|
|
34
45
|
props: {level},
|
|
46
|
+
level,
|
|
35
47
|
})
|
|
36
48
|
|
|
37
49
|
if (!style) {
|
package/src/rule.ordered-list.ts
CHANGED
|
@@ -6,8 +6,13 @@ import {defineInputRule} from '@portabletext/plugin-input-rule'
|
|
|
6
6
|
export function createOrderedListRule(config: {
|
|
7
7
|
orderedList: ({
|
|
8
8
|
context,
|
|
9
|
+
schema,
|
|
9
10
|
}: {
|
|
10
11
|
context: Pick<EditorContext, 'schema'>
|
|
12
|
+
/**
|
|
13
|
+
* @deprecated Use `context.schema` instead
|
|
14
|
+
*/
|
|
15
|
+
schema: EditorContext['schema']
|
|
11
16
|
}) => string | undefined
|
|
12
17
|
}) {
|
|
13
18
|
return defineInputRule({
|
|
@@ -15,6 +20,7 @@ export function createOrderedListRule(config: {
|
|
|
15
20
|
guard: ({snapshot, event}) => {
|
|
16
21
|
const orderedList = config.orderedList({
|
|
17
22
|
context: {schema: snapshot.context.schema},
|
|
23
|
+
schema: snapshot.context.schema,
|
|
18
24
|
})
|
|
19
25
|
|
|
20
26
|
if (!orderedList) {
|
|
@@ -6,8 +6,13 @@ import {defineInputRule} from '@portabletext/plugin-input-rule'
|
|
|
6
6
|
export function createUnorderedListRule(config: {
|
|
7
7
|
unorderedList: ({
|
|
8
8
|
context,
|
|
9
|
+
schema,
|
|
9
10
|
}: {
|
|
10
11
|
context: Pick<EditorContext, 'schema'>
|
|
12
|
+
/**
|
|
13
|
+
* @deprecated Use `context.schema` instead
|
|
14
|
+
*/
|
|
15
|
+
schema: EditorContext['schema']
|
|
11
16
|
}) => string | undefined
|
|
12
17
|
}) {
|
|
13
18
|
return defineInputRule({
|
|
@@ -15,6 +20,7 @@ export function createUnorderedListRule(config: {
|
|
|
15
20
|
guard: ({snapshot, event}) => {
|
|
16
21
|
const unorderedList = config.unorderedList({
|
|
17
22
|
context: {schema: snapshot.context.schema},
|
|
23
|
+
schema: snapshot.context.schema,
|
|
18
24
|
})
|
|
19
25
|
|
|
20
26
|
if (!unorderedList) {
|