@portabletext/plugin-markdown-shortcuts 1.4.0 → 1.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +57 -44
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +58 -45
- package/dist/index.js.map +1 -1
- package/package.json +5 -5
- package/src/plugin.markdown-shortcuts.tsx +33 -22
package/dist/index.cjs
CHANGED
|
@@ -355,7 +355,7 @@ function createUnorderedListRule(config) {
|
|
|
355
355
|
});
|
|
356
356
|
}
|
|
357
357
|
function MarkdownShortcutsPlugin(t0) {
|
|
358
|
-
const $ = compilerRuntime.c(
|
|
358
|
+
const $ = compilerRuntime.c(39), {
|
|
359
359
|
blockquoteStyle,
|
|
360
360
|
boldDecorator,
|
|
361
361
|
codeDecorator,
|
|
@@ -368,7 +368,7 @@ function MarkdownShortcutsPlugin(t0) {
|
|
|
368
368
|
strikeThroughDecorator,
|
|
369
369
|
unorderedList
|
|
370
370
|
} = t0, editor$1 = editor.useEditor();
|
|
371
|
-
let t1;
|
|
371
|
+
let t1, t2;
|
|
372
372
|
$[0] !== defaultStyle || $[1] !== editor$1 ? (t1 = () => {
|
|
373
373
|
const unregisterBehaviors = createMarkdownBehaviors({
|
|
374
374
|
defaultStyle
|
|
@@ -379,11 +379,51 @@ function MarkdownShortcutsPlugin(t0) {
|
|
|
379
379
|
for (const unregisterBehavior of unregisterBehaviors)
|
|
380
380
|
unregisterBehavior();
|
|
381
381
|
};
|
|
382
|
-
}, $[0] = defaultStyle, $[1] = editor$1, $[2] = t1) : t1 = $[2];
|
|
383
|
-
let
|
|
384
|
-
$[
|
|
382
|
+
}, t2 = [defaultStyle, editor$1], $[0] = defaultStyle, $[1] = editor$1, $[2] = t1, $[3] = t2) : (t1 = $[2], t2 = $[3]), react.useEffect(t1, t2);
|
|
383
|
+
let rules;
|
|
384
|
+
if ($[4] !== blockquoteStyle || $[5] !== headingStyle || $[6] !== horizontalRuleObject || $[7] !== linkObject || $[8] !== orderedList || $[9] !== unorderedList) {
|
|
385
|
+
if (rules = [], blockquoteStyle) {
|
|
386
|
+
let t32;
|
|
387
|
+
$[11] !== blockquoteStyle ? (t32 = createBlockquoteRule({
|
|
388
|
+
blockquoteStyle
|
|
389
|
+
}), $[11] = blockquoteStyle, $[12] = t32) : t32 = $[12], rules.push(t32);
|
|
390
|
+
}
|
|
391
|
+
if (headingStyle) {
|
|
392
|
+
let t32;
|
|
393
|
+
$[13] !== headingStyle ? (t32 = createHeadingRule({
|
|
394
|
+
headingStyle
|
|
395
|
+
}), $[13] = headingStyle, $[14] = t32) : t32 = $[14], rules.push(t32);
|
|
396
|
+
}
|
|
397
|
+
if (horizontalRuleObject) {
|
|
398
|
+
let t32;
|
|
399
|
+
$[15] !== horizontalRuleObject ? (t32 = createHorizontalRuleRule({
|
|
400
|
+
horizontalRuleObject
|
|
401
|
+
}), $[15] = horizontalRuleObject, $[16] = t32) : t32 = $[16], rules.push(t32);
|
|
402
|
+
}
|
|
403
|
+
if (linkObject) {
|
|
404
|
+
let t32;
|
|
405
|
+
$[17] !== linkObject ? (t32 = createMarkdownLinkRule({
|
|
406
|
+
linkObject
|
|
407
|
+
}), $[17] = linkObject, $[18] = t32) : t32 = $[18], rules.push(t32);
|
|
408
|
+
}
|
|
409
|
+
if (orderedList) {
|
|
410
|
+
let t32;
|
|
411
|
+
$[19] !== orderedList ? (t32 = createOrderedListRule({
|
|
412
|
+
orderedList
|
|
413
|
+
}), $[19] = orderedList, $[20] = t32) : t32 = $[20], rules.push(t32);
|
|
414
|
+
}
|
|
415
|
+
if (unorderedList) {
|
|
416
|
+
let t32;
|
|
417
|
+
$[21] !== unorderedList ? (t32 = createUnorderedListRule({
|
|
418
|
+
unorderedList
|
|
419
|
+
}), $[21] = unorderedList, $[22] = t32) : t32 = $[22], rules.push(t32);
|
|
420
|
+
}
|
|
421
|
+
$[4] = blockquoteStyle, $[5] = headingStyle, $[6] = horizontalRuleObject, $[7] = linkObject, $[8] = orderedList, $[9] = unorderedList, $[10] = rules;
|
|
422
|
+
} else
|
|
423
|
+
rules = $[10];
|
|
424
|
+
const inputRules = rules.length > 0 ? rules : null;
|
|
385
425
|
let t3;
|
|
386
|
-
$[
|
|
426
|
+
$[23] !== boldDecorator ? (t3 = boldDecorator ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
387
427
|
/* @__PURE__ */ jsxRuntime.jsx(pluginCharacterPairDecorator.CharacterPairDecoratorPlugin, { decorator: boldDecorator, pair: {
|
|
388
428
|
char: "*",
|
|
389
429
|
amount: 2
|
|
@@ -392,14 +432,14 @@ function MarkdownShortcutsPlugin(t0) {
|
|
|
392
432
|
char: "_",
|
|
393
433
|
amount: 2
|
|
394
434
|
} })
|
|
395
|
-
] }) : null, $[
|
|
435
|
+
] }) : null, $[23] = boldDecorator, $[24] = t3) : t3 = $[24];
|
|
396
436
|
let t4;
|
|
397
|
-
$[
|
|
437
|
+
$[25] !== codeDecorator ? (t4 = codeDecorator ? /* @__PURE__ */ jsxRuntime.jsx(pluginCharacterPairDecorator.CharacterPairDecoratorPlugin, { decorator: codeDecorator, pair: {
|
|
398
438
|
char: "`",
|
|
399
439
|
amount: 1
|
|
400
|
-
} }) : null, $[
|
|
440
|
+
} }) : null, $[25] = codeDecorator, $[26] = t4) : t4 = $[26];
|
|
401
441
|
let t5;
|
|
402
|
-
$[
|
|
442
|
+
$[27] !== italicDecorator ? (t5 = italicDecorator ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
403
443
|
/* @__PURE__ */ jsxRuntime.jsx(pluginCharacterPairDecorator.CharacterPairDecoratorPlugin, { decorator: italicDecorator, pair: {
|
|
404
444
|
char: "*",
|
|
405
445
|
amount: 1
|
|
@@ -408,49 +448,22 @@ function MarkdownShortcutsPlugin(t0) {
|
|
|
408
448
|
char: "_",
|
|
409
449
|
amount: 1
|
|
410
450
|
} })
|
|
411
|
-
] }) : null, $[
|
|
451
|
+
] }) : null, $[27] = italicDecorator, $[28] = t5) : t5 = $[28];
|
|
412
452
|
let t6;
|
|
413
|
-
$[
|
|
453
|
+
$[29] !== strikeThroughDecorator ? (t6 = strikeThroughDecorator ? /* @__PURE__ */ jsxRuntime.jsx(pluginCharacterPairDecorator.CharacterPairDecoratorPlugin, { decorator: strikeThroughDecorator, pair: {
|
|
414
454
|
char: "~",
|
|
415
455
|
amount: 2
|
|
416
|
-
} }) : null, $[
|
|
456
|
+
} }) : null, $[29] = strikeThroughDecorator, $[30] = t6) : t6 = $[30];
|
|
417
457
|
let t7;
|
|
418
|
-
$[
|
|
419
|
-
blockquoteStyle
|
|
420
|
-
})] }) : null, $[15] = blockquoteStyle, $[16] = t7) : t7 = $[16];
|
|
458
|
+
$[31] !== inputRules ? (t7 = inputRules ? /* @__PURE__ */ jsxRuntime.jsx(pluginInputRule.InputRulePlugin, { rules: inputRules }) : null, $[31] = inputRules, $[32] = t7) : t7 = $[32];
|
|
421
459
|
let t8;
|
|
422
|
-
$[
|
|
423
|
-
headingStyle
|
|
424
|
-
})] }) : null, $[17] = headingStyle, $[18] = t8) : t8 = $[18];
|
|
425
|
-
let t9;
|
|
426
|
-
$[19] !== horizontalRuleObject ? (t9 = horizontalRuleObject ? /* @__PURE__ */ jsxRuntime.jsx(pluginInputRule.InputRulePlugin, { rules: [createHorizontalRuleRule({
|
|
427
|
-
horizontalRuleObject
|
|
428
|
-
})] }) : null, $[19] = horizontalRuleObject, $[20] = t9) : t9 = $[20];
|
|
429
|
-
let t10;
|
|
430
|
-
$[21] !== linkObject ? (t10 = linkObject ? /* @__PURE__ */ jsxRuntime.jsx(pluginInputRule.InputRulePlugin, { rules: [createMarkdownLinkRule({
|
|
431
|
-
linkObject
|
|
432
|
-
})] }) : null, $[21] = linkObject, $[22] = t10) : t10 = $[22];
|
|
433
|
-
let t11;
|
|
434
|
-
$[23] !== orderedList ? (t11 = orderedList ? /* @__PURE__ */ jsxRuntime.jsx(pluginInputRule.InputRulePlugin, { rules: [createOrderedListRule({
|
|
435
|
-
orderedList
|
|
436
|
-
})] }) : null, $[23] = orderedList, $[24] = t11) : t11 = $[24];
|
|
437
|
-
let t12;
|
|
438
|
-
$[25] !== unorderedList ? (t12 = unorderedList ? /* @__PURE__ */ jsxRuntime.jsx(pluginInputRule.InputRulePlugin, { rules: [createUnorderedListRule({
|
|
439
|
-
unorderedList
|
|
440
|
-
})] }) : null, $[25] = unorderedList, $[26] = t12) : t12 = $[26];
|
|
441
|
-
let t13;
|
|
442
|
-
return $[27] !== t10 || $[28] !== t11 || $[29] !== t12 || $[30] !== t3 || $[31] !== t4 || $[32] !== t5 || $[33] !== t6 || $[34] !== t7 || $[35] !== t8 || $[36] !== t9 ? (t13 = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
460
|
+
return $[33] !== t3 || $[34] !== t4 || $[35] !== t5 || $[36] !== t6 || $[37] !== t7 ? (t8 = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
443
461
|
t3,
|
|
444
462
|
t4,
|
|
445
463
|
t5,
|
|
446
464
|
t6,
|
|
447
|
-
t7
|
|
448
|
-
|
|
449
|
-
t9,
|
|
450
|
-
t10,
|
|
451
|
-
t11,
|
|
452
|
-
t12
|
|
453
|
-
] }), $[27] = t10, $[28] = t11, $[29] = t12, $[30] = t3, $[31] = t4, $[32] = t5, $[33] = t6, $[34] = t7, $[35] = t8, $[36] = t9, $[37] = t13) : t13 = $[37], t13;
|
|
465
|
+
t7
|
|
466
|
+
] }), $[33] = t3, $[34] = t4, $[35] = t5, $[36] = t6, $[37] = t7, $[38] = t8) : t8 = $[38], t8;
|
|
454
467
|
}
|
|
455
468
|
exports.MarkdownShortcutsPlugin = MarkdownShortcutsPlugin;
|
|
456
469
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","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 {EditorSchema} from '@portabletext/editor'\nimport {defineBehavior, execute} from '@portabletext/editor/behaviors'\nimport * as selectors from '@portabletext/editor/selectors'\n\nexport type MarkdownBehaviorsConfig = {\n horizontalRuleObject?: (context: {\n schema: EditorSchema\n }) => {name: string; value?: {[prop: string]: unknown}} | undefined\n defaultStyle?: (context: {schema: EditorSchema}) => 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 schema: snapshot.context.schema,\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 execute({\n type: 'insert.text',\n text: hrCharacters,\n }),\n ],\n ({snapshot}, {hrObject, focusBlock, focusTextBlock}) =>\n focusTextBlock\n ? [\n execute({\n type: 'insert.block',\n block: {\n _type: snapshot.context.schema.block.name,\n children: focusTextBlock.node.children,\n },\n placement: 'after',\n }),\n execute({\n type: 'insert.block',\n block: {\n _type: hrObject.name,\n ...(hrObject.value ?? {}),\n },\n placement: 'after',\n }),\n execute({\n type: 'delete.block',\n at: focusBlock.path,\n }),\n ]\n : [\n execute({\n type: 'insert.block',\n block: {\n _type: hrObject.name,\n ...(hrObject.value ?? {}),\n },\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 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 execute({\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 {EditorSchema} 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: (context: {schema: EditorSchema}) => string | undefined\n}) {\n return defineInputRule({\n on: /^> /,\n guard: ({snapshot, event}) => {\n const style = config.blockquoteStyle({\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 {EditorSchema} 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: (context: {\n schema: EditorSchema\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 schema: snapshot.context.schema,\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 {EditorSchema} 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 createHorizontalRuleRule(config: {\n horizontalRuleObject: (context: {\n schema: EditorSchema\n }) => {name: string; value?: {[prop: string]: unknown}} | undefined\n}) {\n return defineInputRule({\n on: /^(---)|^(—-)|^(___)|^(\\*\\*\\*)/,\n guard: ({snapshot, event}) => {\n const hrObject = config.horizontalRuleObject({\n schema: snapshot.context.schema,\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: {\n _type: hrObject.name,\n ...(hrObject.value ?? {}),\n },\n placement: 'before',\n select: 'none',\n }),\n raise({\n type: 'delete',\n at: match.targetOffsets,\n }),\n ],\n ],\n })\n}\n","import type {EditorSchema} from '@portabletext/editor'\nimport {raise, type BehaviorAction} from '@portabletext/editor/behaviors'\nimport {defineInputRule} from '@portabletext/plugin-input-rule'\n\nexport function createMarkdownLinkRule(config: {\n linkObject: (context: {\n schema: EditorSchema\n href: string\n }) => {name: string; value?: {[prop: string]: unknown}} | 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 schema: snapshot.context.schema,\n href: hrefMatch.text,\n })\n\n if (!linkObject) {\n continue\n }\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: linkObject.name,\n value: linkObject.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 {EditorSchema} 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: (context: {schema: EditorSchema}) => string | undefined\n}) {\n return defineInputRule({\n on: /^1\\. /,\n guard: ({snapshot, event}) => {\n const orderedList = config.orderedList({\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 {EditorSchema} 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: (context: {schema: EditorSchema}) => string | undefined\n}) {\n return defineInputRule({\n on: /^(-|\\*) /,\n guard: ({snapshot, event}) => {\n const unorderedList = config.unorderedList({\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 {EditorSchema} 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} from 'react'\nimport {\n createMarkdownBehaviors,\n type MarkdownBehaviorsConfig,\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 * @beta\n */\nexport type MarkdownShortcutsPluginProps = MarkdownBehaviorsConfig & {\n blockquoteStyle?: (context: {schema: EditorSchema}) => string | undefined\n defaultStyle?: (context: {schema: EditorSchema}) => string | undefined\n headingStyle?: (context: {\n schema: EditorSchema\n level: number\n }) => string | undefined\n linkObject?: (context: {\n schema: EditorSchema\n href: string\n }) => {name: string; value?: {[prop: string]: unknown}} | undefined\n unorderedList?: (context: {schema: EditorSchema}) => string | undefined\n orderedList?: (context: {schema: EditorSchema}) => string | undefined\n boldDecorator?: ({schema}: {schema: EditorSchema}) => string | undefined\n codeDecorator?: ({schema}: {schema: EditorSchema}) => string | undefined\n italicDecorator?: ({schema}: {schema: EditorSchema}) => string | undefined\n strikeThroughDecorator?: ({\n schema,\n }: {\n schema: EditorSchema\n }) => string | undefined\n}\n\n/**\n * @beta\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, horizontalRuleObject])\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 {blockquoteStyle ? (\n <InputRulePlugin rules={[createBlockquoteRule({blockquoteStyle})]} />\n ) : null}\n {headingStyle ? (\n <InputRulePlugin rules={[createHeadingRule({headingStyle})]} />\n ) : null}\n {horizontalRuleObject ? (\n <InputRulePlugin\n rules={[createHorizontalRuleRule({horizontalRuleObject})]}\n />\n ) : null}\n {linkObject ? (\n <InputRulePlugin rules={[createMarkdownLinkRule({linkObject})]} />\n ) : null}\n {orderedList ? (\n <InputRulePlugin rules={[createOrderedListRule({orderedList})]} />\n ) : null}\n {unorderedList ? (\n <InputRulePlugin rules={[createUnorderedListRule({unorderedList})]} />\n ) : null}\n </>\n )\n}\n"],"names":["createMarkdownBehaviors","config","automaticHrOnPaste","defineBehavior","on","guard","snapshot","event","text","originEvent","dataTransfer","getData","hrRegExp","hrCharacters","match","hrObject","horizontalRuleObject","schema","context","focusBlock","selectors","getFocusBlock","focusTextBlock","getFocusTextBlock","actions","_","execute","type","block","_type","name","children","node","placement","value","at","path","clearStyleOnBackspace","selectionCollapsed","isSelectionCollapsed","focusSpan","getFocusSpan","atTheBeginningOfBLock","_key","selection","focus","offset","defaultStyle","style","props","createBlockquoteRule","defineInputRule","blockquoteStyle","getPreviousInlineObject","matches","raise","targetOffsets","createHeadingRule","level","length","headingStyle","createHorizontalRuleRule","select","createMarkdownLinkRule","newText","textBefore","textInserted","textLengthDelta","reverse","textMatch","groupMatches","hrefMatch","undefined","anchor","linkObject","href","leftSideOffsets","rightSideOffsets","push","annotation","endCaretPosition","createOrderedListRule","orderedList","listItem","createUnorderedListRule","unorderedList","MarkdownShortcutsPlugin","t0","$","_c","boldDecorator","codeDecorator","italicDecorator","strikeThroughDecorator","editor","useEditor","t1","unregisterBehaviors","map","behavior","registerBehavior","unregisterBehavior","t2","useEffect","t3","jsxs","Fragment","jsx","CharacterPairDecoratorPlugin","char","amount","t4","t5","t6","t7","InputRulePlugin","t8","t9","t10","t11","t12","t13"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","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 {EditorSchema} from '@portabletext/editor'\nimport {defineBehavior, execute} from '@portabletext/editor/behaviors'\nimport * as selectors from '@portabletext/editor/selectors'\n\nexport type MarkdownBehaviorsConfig = {\n horizontalRuleObject?: (context: {\n schema: EditorSchema\n }) => {name: string; value?: {[prop: string]: unknown}} | undefined\n defaultStyle?: (context: {schema: EditorSchema}) => 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 schema: snapshot.context.schema,\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 execute({\n type: 'insert.text',\n text: hrCharacters,\n }),\n ],\n ({snapshot}, {hrObject, focusBlock, focusTextBlock}) =>\n focusTextBlock\n ? [\n execute({\n type: 'insert.block',\n block: {\n _type: snapshot.context.schema.block.name,\n children: focusTextBlock.node.children,\n },\n placement: 'after',\n }),\n execute({\n type: 'insert.block',\n block: {\n _type: hrObject.name,\n ...(hrObject.value ?? {}),\n },\n placement: 'after',\n }),\n execute({\n type: 'delete.block',\n at: focusBlock.path,\n }),\n ]\n : [\n execute({\n type: 'insert.block',\n block: {\n _type: hrObject.name,\n ...(hrObject.value ?? {}),\n },\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 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 execute({\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 {EditorSchema} 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: (context: {schema: EditorSchema}) => string | undefined\n}) {\n return defineInputRule({\n on: /^> /,\n guard: ({snapshot, event}) => {\n const style = config.blockquoteStyle({\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 {EditorSchema} 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: (context: {\n schema: EditorSchema\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 schema: snapshot.context.schema,\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 {EditorSchema} 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 createHorizontalRuleRule(config: {\n horizontalRuleObject: (context: {\n schema: EditorSchema\n }) => {name: string; value?: {[prop: string]: unknown}} | undefined\n}) {\n return defineInputRule({\n on: /^(---)|^(—-)|^(___)|^(\\*\\*\\*)/,\n guard: ({snapshot, event}) => {\n const hrObject = config.horizontalRuleObject({\n schema: snapshot.context.schema,\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: {\n _type: hrObject.name,\n ...(hrObject.value ?? {}),\n },\n placement: 'before',\n select: 'none',\n }),\n raise({\n type: 'delete',\n at: match.targetOffsets,\n }),\n ],\n ],\n })\n}\n","import type {EditorSchema} from '@portabletext/editor'\nimport {raise, type BehaviorAction} from '@portabletext/editor/behaviors'\nimport {defineInputRule} from '@portabletext/plugin-input-rule'\n\nexport function createMarkdownLinkRule(config: {\n linkObject: (context: {\n schema: EditorSchema\n href: string\n }) => {name: string; value?: {[prop: string]: unknown}} | 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 schema: snapshot.context.schema,\n href: hrefMatch.text,\n })\n\n if (!linkObject) {\n continue\n }\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: linkObject.name,\n value: linkObject.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 {EditorSchema} 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: (context: {schema: EditorSchema}) => string | undefined\n}) {\n return defineInputRule({\n on: /^1\\. /,\n guard: ({snapshot, event}) => {\n const orderedList = config.orderedList({\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 {EditorSchema} 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: (context: {schema: EditorSchema}) => string | undefined\n}) {\n return defineInputRule({\n on: /^(-|\\*) /,\n guard: ({snapshot, event}) => {\n const unorderedList = config.unorderedList({\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 {EditorSchema} 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} 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 * @beta\n */\nexport type MarkdownShortcutsPluginProps = MarkdownBehaviorsConfig & {\n blockquoteStyle?: (context: {schema: EditorSchema}) => string | undefined\n defaultStyle?: (context: {schema: EditorSchema}) => string | undefined\n headingStyle?: (context: {\n schema: EditorSchema\n level: number\n }) => string | undefined\n linkObject?: (context: {\n schema: EditorSchema\n href: string\n }) => {name: string; value?: {[prop: string]: unknown}} | undefined\n unorderedList?: (context: {schema: EditorSchema}) => string | undefined\n orderedList?: (context: {schema: EditorSchema}) => string | undefined\n boldDecorator?: ({schema}: {schema: EditorSchema}) => string | undefined\n codeDecorator?: ({schema}: {schema: EditorSchema}) => string | undefined\n italicDecorator?: ({schema}: {schema: EditorSchema}) => string | undefined\n strikeThroughDecorator?: ({\n schema,\n }: {\n schema: EditorSchema\n }) => string | undefined\n}\n\n/**\n * @beta\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","schema","context","focusBlock","selectors","getFocusBlock","focusTextBlock","getFocusTextBlock","actions","_","execute","type","block","_type","name","children","node","placement","value","at","path","clearStyleOnBackspace","selectionCollapsed","isSelectionCollapsed","focusSpan","getFocusSpan","atTheBeginningOfBLock","_key","selection","focus","offset","defaultStyle","style","props","createBlockquoteRule","defineInputRule","blockquoteStyle","getPreviousInlineObject","matches","raise","targetOffsets","createHeadingRule","level","length","headingStyle","createHorizontalRuleRule","select","createMarkdownLinkRule","newText","textBefore","textInserted","textLengthDelta","reverse","textMatch","groupMatches","hrefMatch","undefined","anchor","linkObject","href","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","jsxs","Fragment","jsx","CharacterPairDecoratorPlugin","char","amount","t4","t5","t6","t7","InputRulePlugin","t8"],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { jsxs, Fragment, jsx } from "react/jsx-runtime";
|
|
2
2
|
import { c } from "react/compiler-runtime";
|
|
3
3
|
import { useEditor } from "@portabletext/editor";
|
|
4
4
|
import { CharacterPairDecoratorPlugin } from "@portabletext/plugin-character-pair-decorator";
|
|
@@ -345,7 +345,7 @@ function createUnorderedListRule(config) {
|
|
|
345
345
|
});
|
|
346
346
|
}
|
|
347
347
|
function MarkdownShortcutsPlugin(t0) {
|
|
348
|
-
const $ = c(
|
|
348
|
+
const $ = c(39), {
|
|
349
349
|
blockquoteStyle,
|
|
350
350
|
boldDecorator,
|
|
351
351
|
codeDecorator,
|
|
@@ -358,7 +358,7 @@ function MarkdownShortcutsPlugin(t0) {
|
|
|
358
358
|
strikeThroughDecorator,
|
|
359
359
|
unorderedList
|
|
360
360
|
} = t0, editor = useEditor();
|
|
361
|
-
let t1;
|
|
361
|
+
let t1, t2;
|
|
362
362
|
$[0] !== defaultStyle || $[1] !== editor ? (t1 = () => {
|
|
363
363
|
const unregisterBehaviors = createMarkdownBehaviors({
|
|
364
364
|
defaultStyle
|
|
@@ -369,11 +369,51 @@ function MarkdownShortcutsPlugin(t0) {
|
|
|
369
369
|
for (const unregisterBehavior of unregisterBehaviors)
|
|
370
370
|
unregisterBehavior();
|
|
371
371
|
};
|
|
372
|
-
}, $[0] = defaultStyle, $[1] = editor, $[2] = t1) : t1 = $[2];
|
|
373
|
-
let
|
|
374
|
-
$[
|
|
372
|
+
}, t2 = [defaultStyle, editor], $[0] = defaultStyle, $[1] = editor, $[2] = t1, $[3] = t2) : (t1 = $[2], t2 = $[3]), useEffect(t1, t2);
|
|
373
|
+
let rules;
|
|
374
|
+
if ($[4] !== blockquoteStyle || $[5] !== headingStyle || $[6] !== horizontalRuleObject || $[7] !== linkObject || $[8] !== orderedList || $[9] !== unorderedList) {
|
|
375
|
+
if (rules = [], blockquoteStyle) {
|
|
376
|
+
let t32;
|
|
377
|
+
$[11] !== blockquoteStyle ? (t32 = createBlockquoteRule({
|
|
378
|
+
blockquoteStyle
|
|
379
|
+
}), $[11] = blockquoteStyle, $[12] = t32) : t32 = $[12], rules.push(t32);
|
|
380
|
+
}
|
|
381
|
+
if (headingStyle) {
|
|
382
|
+
let t32;
|
|
383
|
+
$[13] !== headingStyle ? (t32 = createHeadingRule({
|
|
384
|
+
headingStyle
|
|
385
|
+
}), $[13] = headingStyle, $[14] = t32) : t32 = $[14], rules.push(t32);
|
|
386
|
+
}
|
|
387
|
+
if (horizontalRuleObject) {
|
|
388
|
+
let t32;
|
|
389
|
+
$[15] !== horizontalRuleObject ? (t32 = createHorizontalRuleRule({
|
|
390
|
+
horizontalRuleObject
|
|
391
|
+
}), $[15] = horizontalRuleObject, $[16] = t32) : t32 = $[16], rules.push(t32);
|
|
392
|
+
}
|
|
393
|
+
if (linkObject) {
|
|
394
|
+
let t32;
|
|
395
|
+
$[17] !== linkObject ? (t32 = createMarkdownLinkRule({
|
|
396
|
+
linkObject
|
|
397
|
+
}), $[17] = linkObject, $[18] = t32) : t32 = $[18], rules.push(t32);
|
|
398
|
+
}
|
|
399
|
+
if (orderedList) {
|
|
400
|
+
let t32;
|
|
401
|
+
$[19] !== orderedList ? (t32 = createOrderedListRule({
|
|
402
|
+
orderedList
|
|
403
|
+
}), $[19] = orderedList, $[20] = t32) : t32 = $[20], rules.push(t32);
|
|
404
|
+
}
|
|
405
|
+
if (unorderedList) {
|
|
406
|
+
let t32;
|
|
407
|
+
$[21] !== unorderedList ? (t32 = createUnorderedListRule({
|
|
408
|
+
unorderedList
|
|
409
|
+
}), $[21] = unorderedList, $[22] = t32) : t32 = $[22], rules.push(t32);
|
|
410
|
+
}
|
|
411
|
+
$[4] = blockquoteStyle, $[5] = headingStyle, $[6] = horizontalRuleObject, $[7] = linkObject, $[8] = orderedList, $[9] = unorderedList, $[10] = rules;
|
|
412
|
+
} else
|
|
413
|
+
rules = $[10];
|
|
414
|
+
const inputRules = rules.length > 0 ? rules : null;
|
|
375
415
|
let t3;
|
|
376
|
-
$[
|
|
416
|
+
$[23] !== boldDecorator ? (t3 = boldDecorator ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
377
417
|
/* @__PURE__ */ jsx(CharacterPairDecoratorPlugin, { decorator: boldDecorator, pair: {
|
|
378
418
|
char: "*",
|
|
379
419
|
amount: 2
|
|
@@ -382,14 +422,14 @@ function MarkdownShortcutsPlugin(t0) {
|
|
|
382
422
|
char: "_",
|
|
383
423
|
amount: 2
|
|
384
424
|
} })
|
|
385
|
-
] }) : null, $[
|
|
425
|
+
] }) : null, $[23] = boldDecorator, $[24] = t3) : t3 = $[24];
|
|
386
426
|
let t4;
|
|
387
|
-
$[
|
|
427
|
+
$[25] !== codeDecorator ? (t4 = codeDecorator ? /* @__PURE__ */ jsx(CharacterPairDecoratorPlugin, { decorator: codeDecorator, pair: {
|
|
388
428
|
char: "`",
|
|
389
429
|
amount: 1
|
|
390
|
-
} }) : null, $[
|
|
430
|
+
} }) : null, $[25] = codeDecorator, $[26] = t4) : t4 = $[26];
|
|
391
431
|
let t5;
|
|
392
|
-
$[
|
|
432
|
+
$[27] !== italicDecorator ? (t5 = italicDecorator ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
393
433
|
/* @__PURE__ */ jsx(CharacterPairDecoratorPlugin, { decorator: italicDecorator, pair: {
|
|
394
434
|
char: "*",
|
|
395
435
|
amount: 1
|
|
@@ -398,49 +438,22 @@ function MarkdownShortcutsPlugin(t0) {
|
|
|
398
438
|
char: "_",
|
|
399
439
|
amount: 1
|
|
400
440
|
} })
|
|
401
|
-
] }) : null, $[
|
|
441
|
+
] }) : null, $[27] = italicDecorator, $[28] = t5) : t5 = $[28];
|
|
402
442
|
let t6;
|
|
403
|
-
$[
|
|
443
|
+
$[29] !== strikeThroughDecorator ? (t6 = strikeThroughDecorator ? /* @__PURE__ */ jsx(CharacterPairDecoratorPlugin, { decorator: strikeThroughDecorator, pair: {
|
|
404
444
|
char: "~",
|
|
405
445
|
amount: 2
|
|
406
|
-
} }) : null, $[
|
|
446
|
+
} }) : null, $[29] = strikeThroughDecorator, $[30] = t6) : t6 = $[30];
|
|
407
447
|
let t7;
|
|
408
|
-
$[
|
|
409
|
-
blockquoteStyle
|
|
410
|
-
})] }) : null, $[15] = blockquoteStyle, $[16] = t7) : t7 = $[16];
|
|
448
|
+
$[31] !== inputRules ? (t7 = inputRules ? /* @__PURE__ */ jsx(InputRulePlugin, { rules: inputRules }) : null, $[31] = inputRules, $[32] = t7) : t7 = $[32];
|
|
411
449
|
let t8;
|
|
412
|
-
$[
|
|
413
|
-
headingStyle
|
|
414
|
-
})] }) : null, $[17] = headingStyle, $[18] = t8) : t8 = $[18];
|
|
415
|
-
let t9;
|
|
416
|
-
$[19] !== horizontalRuleObject ? (t9 = horizontalRuleObject ? /* @__PURE__ */ jsx(InputRulePlugin, { rules: [createHorizontalRuleRule({
|
|
417
|
-
horizontalRuleObject
|
|
418
|
-
})] }) : null, $[19] = horizontalRuleObject, $[20] = t9) : t9 = $[20];
|
|
419
|
-
let t10;
|
|
420
|
-
$[21] !== linkObject ? (t10 = linkObject ? /* @__PURE__ */ jsx(InputRulePlugin, { rules: [createMarkdownLinkRule({
|
|
421
|
-
linkObject
|
|
422
|
-
})] }) : null, $[21] = linkObject, $[22] = t10) : t10 = $[22];
|
|
423
|
-
let t11;
|
|
424
|
-
$[23] !== orderedList ? (t11 = orderedList ? /* @__PURE__ */ jsx(InputRulePlugin, { rules: [createOrderedListRule({
|
|
425
|
-
orderedList
|
|
426
|
-
})] }) : null, $[23] = orderedList, $[24] = t11) : t11 = $[24];
|
|
427
|
-
let t12;
|
|
428
|
-
$[25] !== unorderedList ? (t12 = unorderedList ? /* @__PURE__ */ jsx(InputRulePlugin, { rules: [createUnorderedListRule({
|
|
429
|
-
unorderedList
|
|
430
|
-
})] }) : null, $[25] = unorderedList, $[26] = t12) : t12 = $[26];
|
|
431
|
-
let t13;
|
|
432
|
-
return $[27] !== t10 || $[28] !== t11 || $[29] !== t12 || $[30] !== t3 || $[31] !== t4 || $[32] !== t5 || $[33] !== t6 || $[34] !== t7 || $[35] !== t8 || $[36] !== t9 ? (t13 = /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
450
|
+
return $[33] !== t3 || $[34] !== t4 || $[35] !== t5 || $[36] !== t6 || $[37] !== t7 ? (t8 = /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
433
451
|
t3,
|
|
434
452
|
t4,
|
|
435
453
|
t5,
|
|
436
454
|
t6,
|
|
437
|
-
t7
|
|
438
|
-
|
|
439
|
-
t9,
|
|
440
|
-
t10,
|
|
441
|
-
t11,
|
|
442
|
-
t12
|
|
443
|
-
] }), $[27] = t10, $[28] = t11, $[29] = t12, $[30] = t3, $[31] = t4, $[32] = t5, $[33] = t6, $[34] = t7, $[35] = t8, $[36] = t9, $[37] = t13) : t13 = $[37], t13;
|
|
455
|
+
t7
|
|
456
|
+
] }), $[33] = t3, $[34] = t4, $[35] = t5, $[36] = t6, $[37] = t7, $[38] = t8) : t8 = $[38], t8;
|
|
444
457
|
}
|
|
445
458
|
export {
|
|
446
459
|
MarkdownShortcutsPlugin
|
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 {EditorSchema} from '@portabletext/editor'\nimport {defineBehavior, execute} from '@portabletext/editor/behaviors'\nimport * as selectors from '@portabletext/editor/selectors'\n\nexport type MarkdownBehaviorsConfig = {\n horizontalRuleObject?: (context: {\n schema: EditorSchema\n }) => {name: string; value?: {[prop: string]: unknown}} | undefined\n defaultStyle?: (context: {schema: EditorSchema}) => 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 schema: snapshot.context.schema,\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 execute({\n type: 'insert.text',\n text: hrCharacters,\n }),\n ],\n ({snapshot}, {hrObject, focusBlock, focusTextBlock}) =>\n focusTextBlock\n ? [\n execute({\n type: 'insert.block',\n block: {\n _type: snapshot.context.schema.block.name,\n children: focusTextBlock.node.children,\n },\n placement: 'after',\n }),\n execute({\n type: 'insert.block',\n block: {\n _type: hrObject.name,\n ...(hrObject.value ?? {}),\n },\n placement: 'after',\n }),\n execute({\n type: 'delete.block',\n at: focusBlock.path,\n }),\n ]\n : [\n execute({\n type: 'insert.block',\n block: {\n _type: hrObject.name,\n ...(hrObject.value ?? {}),\n },\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 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 execute({\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 {EditorSchema} 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: (context: {schema: EditorSchema}) => string | undefined\n}) {\n return defineInputRule({\n on: /^> /,\n guard: ({snapshot, event}) => {\n const style = config.blockquoteStyle({\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 {EditorSchema} 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: (context: {\n schema: EditorSchema\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 schema: snapshot.context.schema,\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 {EditorSchema} 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 createHorizontalRuleRule(config: {\n horizontalRuleObject: (context: {\n schema: EditorSchema\n }) => {name: string; value?: {[prop: string]: unknown}} | undefined\n}) {\n return defineInputRule({\n on: /^(---)|^(—-)|^(___)|^(\\*\\*\\*)/,\n guard: ({snapshot, event}) => {\n const hrObject = config.horizontalRuleObject({\n schema: snapshot.context.schema,\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: {\n _type: hrObject.name,\n ...(hrObject.value ?? {}),\n },\n placement: 'before',\n select: 'none',\n }),\n raise({\n type: 'delete',\n at: match.targetOffsets,\n }),\n ],\n ],\n })\n}\n","import type {EditorSchema} from '@portabletext/editor'\nimport {raise, type BehaviorAction} from '@portabletext/editor/behaviors'\nimport {defineInputRule} from '@portabletext/plugin-input-rule'\n\nexport function createMarkdownLinkRule(config: {\n linkObject: (context: {\n schema: EditorSchema\n href: string\n }) => {name: string; value?: {[prop: string]: unknown}} | 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 schema: snapshot.context.schema,\n href: hrefMatch.text,\n })\n\n if (!linkObject) {\n continue\n }\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: linkObject.name,\n value: linkObject.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 {EditorSchema} 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: (context: {schema: EditorSchema}) => string | undefined\n}) {\n return defineInputRule({\n on: /^1\\. /,\n guard: ({snapshot, event}) => {\n const orderedList = config.orderedList({\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 {EditorSchema} 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: (context: {schema: EditorSchema}) => string | undefined\n}) {\n return defineInputRule({\n on: /^(-|\\*) /,\n guard: ({snapshot, event}) => {\n const unorderedList = config.unorderedList({\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 {EditorSchema} 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} from 'react'\nimport {\n createMarkdownBehaviors,\n type MarkdownBehaviorsConfig,\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 * @beta\n */\nexport type MarkdownShortcutsPluginProps = MarkdownBehaviorsConfig & {\n blockquoteStyle?: (context: {schema: EditorSchema}) => string | undefined\n defaultStyle?: (context: {schema: EditorSchema}) => string | undefined\n headingStyle?: (context: {\n schema: EditorSchema\n level: number\n }) => string | undefined\n linkObject?: (context: {\n schema: EditorSchema\n href: string\n }) => {name: string; value?: {[prop: string]: unknown}} | undefined\n unorderedList?: (context: {schema: EditorSchema}) => string | undefined\n orderedList?: (context: {schema: EditorSchema}) => string | undefined\n boldDecorator?: ({schema}: {schema: EditorSchema}) => string | undefined\n codeDecorator?: ({schema}: {schema: EditorSchema}) => string | undefined\n italicDecorator?: ({schema}: {schema: EditorSchema}) => string | undefined\n strikeThroughDecorator?: ({\n schema,\n }: {\n schema: EditorSchema\n }) => string | undefined\n}\n\n/**\n * @beta\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, horizontalRuleObject])\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 {blockquoteStyle ? (\n <InputRulePlugin rules={[createBlockquoteRule({blockquoteStyle})]} />\n ) : null}\n {headingStyle ? (\n <InputRulePlugin rules={[createHeadingRule({headingStyle})]} />\n ) : null}\n {horizontalRuleObject ? (\n <InputRulePlugin\n rules={[createHorizontalRuleRule({horizontalRuleObject})]}\n />\n ) : null}\n {linkObject ? (\n <InputRulePlugin rules={[createMarkdownLinkRule({linkObject})]} />\n ) : null}\n {orderedList ? (\n <InputRulePlugin rules={[createOrderedListRule({orderedList})]} />\n ) : null}\n {unorderedList ? (\n <InputRulePlugin rules={[createUnorderedListRule({unorderedList})]} />\n ) : null}\n </>\n )\n}\n"],"names":["createMarkdownBehaviors","config","automaticHrOnPaste","defineBehavior","on","guard","snapshot","event","text","originEvent","dataTransfer","getData","hrRegExp","hrCharacters","match","hrObject","horizontalRuleObject","schema","context","focusBlock","selectors","getFocusBlock","focusTextBlock","getFocusTextBlock","actions","_","execute","type","block","_type","name","children","node","placement","value","at","path","clearStyleOnBackspace","selectionCollapsed","isSelectionCollapsed","focusSpan","getFocusSpan","atTheBeginningOfBLock","_key","selection","focus","offset","defaultStyle","style","props","createBlockquoteRule","defineInputRule","blockquoteStyle","getPreviousInlineObject","matches","raise","targetOffsets","createHeadingRule","level","length","headingStyle","createHorizontalRuleRule","select","createMarkdownLinkRule","newText","textBefore","textInserted","textLengthDelta","reverse","textMatch","groupMatches","hrefMatch","undefined","anchor","linkObject","href","leftSideOffsets","rightSideOffsets","push","annotation","endCaretPosition","createOrderedListRule","orderedList","listItem","createUnorderedListRule","unorderedList","MarkdownShortcutsPlugin","t0","$","_c","boldDecorator","codeDecorator","italicDecorator","strikeThroughDecorator","editor","useEditor","t1","unregisterBehaviors","map","behavior","registerBehavior","unregisterBehavior","t2","useEffect","t3","char","amount","t4","t5","t6","t7","t8","t9","t10","t11","t12","t13"],"mappings":";;;;;;;;;AAWO,SAASA,wBAAwBC,QAAiC;AACvE,QAAMC,qBAAqBC,eAAe;AAAA,IACxCC,IAAI;AAAA,IACJC,OAAOA,CAAC;AAAA,MAACC;AAAAA,MAAUC;AAAAA,IAAAA,MAAW;AAC5B,YAAMC,OAAOD,MAAME,YAAYC,aAAaC,QAAQ,YAAY,GAC1DC,WAAW,qCACXC,eAAeL,KAAKM,MAAMF,QAAQ,IAAI,CAAC,GACvCG,WAAWd,OAAOe,uBAAuB;AAAA,QAC7CC,QAAQX,SAASY,QAAQD;AAAAA,MAAAA,CAC1B,GACKE,aAAaC,UAAUC,cAAcf,QAAQ,GAC7CgB,iBAAiBF,UAAUG,kBAAkBjB,QAAQ;AAE3D,aAAI,CAACO,gBAAgB,CAACE,YAAY,CAACI,aAC1B,KAGF;AAAA,QAACN;AAAAA,QAAcE;AAAAA,QAAUI;AAAAA,QAAYG;AAAAA,MAAAA;AAAAA,IAC9C;AAAA,IACAE,SAAS,CACP,CAACC,GAAG;AAAA,MAACZ;AAAAA,IAAAA,MAAkB,CACrBa,QAAQ;AAAA,MACNC,MAAM;AAAA,MACNnB,MAAMK;AAAAA,IAAAA,CACP,CAAC,GAEJ,CAAC;AAAA,MAACP;AAAAA,IAAAA,GAAW;AAAA,MAACS;AAAAA,MAAUI;AAAAA,MAAYG;AAAAA,IAAAA,MAClCA,iBACI,CACEI,QAAQ;AAAA,MACNC,MAAM;AAAA,MACNC,OAAO;AAAA,QACLC,OAAOvB,SAASY,QAAQD,OAAOW,MAAME;AAAAA,QACrCC,UAAUT,eAAeU,KAAKD;AAAAA,MAAAA;AAAAA,MAEhCE,WAAW;AAAA,IAAA,CACZ,GACDP,QAAQ;AAAA,MACNC,MAAM;AAAA,MACNC,OAAO;AAAA,QACLC,OAAOd,SAASe;AAAAA,QAChB,GAAIf,SAASmB,SAAS,CAAA;AAAA,MAAC;AAAA,MAEzBD,WAAW;AAAA,IAAA,CACZ,GACDP,QAAQ;AAAA,MACNC,MAAM;AAAA,MACNQ,IAAIhB,WAAWiB;AAAAA,IAAAA,CAChB,CAAC,IAEJ,CACEV,QAAQ;AAAA,MACNC,MAAM;AAAA,MACNC,OAAO;AAAA,QACLC,OAAOd,SAASe;AAAAA,QAChB,GAAIf,SAASmB,SAAS,CAAA;AAAA,MAAC;AAAA,MAEzBD,WAAW;AAAA,IAAA,CACZ,CAAC,CACH;AAAA,EAAA,CAEV,GAEKI,wBAAwBlC,eAAe;AAAA,IAC3CC,IAAI;AAAA,IACJC,OAAOA,CAAC;AAAA,MAACC;AAAAA,IAAAA,MAAc;AACrB,YAAMgC,qBAAqBlB,UAAUmB,qBAAqBjC,QAAQ,GAC5DgB,iBAAiBF,UAAUG,kBAAkBjB,QAAQ,GACrDkC,YAAYpB,UAAUqB,aAAanC,QAAQ;AAEjD,UAAI,CAACgC,sBAAsB,CAAChB,kBAAkB,CAACkB;AAC7C,eAAO;AAGT,YAAME,wBACJpB,eAAeU,KAAKD,SAAS,CAAC,EAAEY,SAASH,UAAUR,KAAKW,QACxDrC,SAASY,QAAQ0B,WAAWC,MAAMC,WAAW,GAEzCC,eAAe9C,OAAO8C,eAAe;AAAA,QACzC9B,QAAQX,SAASY,QAAQD;AAAAA,MAAAA,CAC1B;AAED,aACEyB,yBACAK,gBACAzB,eAAeU,KAAKgB,UAAUD,eAEvB;AAAA,QAACA;AAAAA,QAAczB;AAAAA,MAAAA,IAGjB;AAAA,IACT;AAAA,IACAE,SAAS,CACP,CAACC,GAAG;AAAA,MAACsB;AAAAA,MAAczB;AAAAA,IAAAA,MAAoB,CACrCI,QAAQ;AAAA,MACNC,MAAM;AAAA,MACNsB,OAAO;AAAA,QAACD,OAAOD;AAAAA,MAAAA;AAAAA,MACfZ,IAAIb,eAAec;AAAAA,IAAAA,CACpB,CAAC,CACH;AAAA,EAAA,CAEJ;AAID,SAF0B,CAAClC,oBAAoBmC,qBAAqB;AAGtE;AChHO,SAASa,qBAAqBjD,QAElC;AACD,SAAOkD,gBAAgB;AAAA,IACrB/C,IAAI;AAAA,IACJC,OAAOA,CAAC;AAAA,MAACC;AAAAA,MAAUC;AAAAA,IAAAA,MAAW;AAC5B,YAAMyC,QAAQ/C,OAAOmD,gBAAgB;AAAA,QACnCnC,QAAQX,SAASY,QAAQD;AAAAA,MAAAA,CAC1B;AAQD,UANI,CAAC+B,SAIwBK,wBAAwB/C,QAAQ;AAG3D,eAAO;AAGT,YAAMQ,QAAQP,MAAM+C,QAAQnB,GAAG,CAAC;AAEhC,aAAKrB,QAIE;AAAA,QAACkC;AAAAA,QAAOlC;AAAAA,MAAAA,IAHN;AAAA,IAIX;AAAA,IACAU,SAAS,CACP,CAAC;AAAA,MAACjB;AAAAA,IAAAA,GAAQ;AAAA,MAACyC;AAAAA,MAAOlC;AAAAA,IAAAA,MAAW,CAC3ByC,MAAM;AAAA,MACJ5B,MAAM;AAAA,MACNsB,OAAO,CAAC,YAAY,OAAO;AAAA,MAC3Bd,IAAI5B,MAAMe,eAAec;AAAAA,IAAAA,CAC1B,GACDmB,MAAM;AAAA,MACJ5B,MAAM;AAAA,MACNsB,OAAO;AAAA,QAACD;AAAAA,MAAAA;AAAAA,MACRb,IAAI5B,MAAMe,eAAec;AAAAA,IAAAA,CAC1B,GACDmB,MAAM;AAAA,MACJ5B,MAAM;AAAA,MACNQ,IAAIrB,MAAM0C;AAAAA,IAAAA,CACX,CAAC,CACH;AAAA,EAAA,CAEJ;AACH;AC/CO,SAASC,kBAAkBxD,QAK/B;AACD,SAAOkD,gBAAgB;AAAA,IACrB/C,IAAI;AAAA,IACJC,OAAOA,CAAC;AAAA,MAACC;AAAAA,MAAUC;AAAAA,IAAAA,MAAW;AAG5B,UAF6B8C,wBAAwB/C,QAAQ;AAG3D,eAAO;AAGT,YAAMQ,QAAQP,MAAM+C,QAAQnB,GAAG,CAAC;AAEhC,UAAI,CAACrB;AACH,eAAO;AAGT,YAAM4C,QAAQ5C,MAAMN,KAAKmD,SAAS,GAE5BX,QAAQ/C,OAAO2D,aAAa;AAAA,QAChC3C,QAAQX,SAASY,QAAQD;AAAAA,QACzByC;AAAAA,MAAAA,CACD;AAED,aAAKV,QAIE;AAAA,QAAClC;AAAAA,QAAOkC;AAAAA,MAAAA,IAHN;AAAA,IAIX;AAAA,IACAxB,SAAS,CACP,CAAC;AAAA,MAACjB;AAAAA,IAAAA,GAAQ;AAAA,MAACO;AAAAA,MAAOkC;AAAAA,IAAAA,MAAW,CAC3BO,MAAM;AAAA,MACJ5B,MAAM;AAAA,MACNsB,OAAO,CAAC,YAAY,OAAO;AAAA,MAC3Bd,IAAI5B,MAAMe,eAAec;AAAAA,IAAAA,CAC1B,GACDmB,MAAM;AAAA,MACJ5B,MAAM;AAAA,MACNsB,OAAO;AAAA,QAACD;AAAAA,MAAAA;AAAAA,MACRb,IAAI5B,MAAMe,eAAec;AAAAA,IAAAA,CAC1B,GACDmB,MAAM;AAAA,MACJ5B,MAAM;AAAA,MACNQ,IAAIrB,MAAM0C;AAAAA,IAAAA,CACX,CAAC,CACH;AAAA,EAAA,CAEJ;AACH;ACrDO,SAASK,yBAAyB5D,QAItC;AACD,SAAOkD,gBAAgB;AAAA,IACrB/C,IAAI;AAAA,IACJC,OAAOA,CAAC;AAAA,MAACC;AAAAA,MAAUC;AAAAA,IAAAA,MAAW;AAC5B,YAAMQ,WAAWd,OAAOe,qBAAqB;AAAA,QAC3CC,QAAQX,SAASY,QAAQD;AAAAA,MAAAA,CAC1B;AAUD,UARI,CAACF,YAMwBsC,wBAAwB/C,QAAQ;AAM3D,eAAO;AAKT,YAAMQ,QAAQP,MAAM+C,QAAQnB,GAAG,CAAC;AAEhC,aAAKrB,QAIE;AAAA,QAACC;AAAAA,QAAUD;AAAAA,MAAAA,IAHT;AAAA,IAIX;AAAA,IACAU,SAAS,CACP,CAACC,GAAG;AAAA,MAACV;AAAAA,MAAUD;AAAAA,IAAAA,MAAW,CACxByC,MAAM;AAAA,MACJ5B,MAAM;AAAA,MACNC,OAAO;AAAA,QACLC,OAAOd,SAASe;AAAAA,QAChB,GAAIf,SAASmB,SAAS,CAAA;AAAA,MAAC;AAAA,MAEzBD,WAAW;AAAA,MACX6B,QAAQ;AAAA,IAAA,CACT,GACDP,MAAM;AAAA,MACJ5B,MAAM;AAAA,MACNQ,IAAIrB,MAAM0C;AAAAA,IAAAA,CACX,CAAC,CACH;AAAA,EAAA,CAEJ;AACH;ACxDO,SAASO,uBAAuB9D,QAKpC;AACD,SAAOkD,gBAAgB;AAAA,IACrB/C,IAAI;AAAA,IACJoB,SAAS,CACP,CAAC;AAAA,MAAClB;AAAAA,MAAUC;AAAAA,IAAAA,MAAW;AACrB,YAAMyD,UAAUzD,MAAM0D,aAAa1D,MAAM2D;AACzC,UAAIC,kBAAkB;AACtB,YAAM3C,UAAiC,CAAA;AAEvC,iBAAWV,SAASP,MAAM+C,QAAQc,QAAAA,GAAW;AAC3C,cAAMC,YAAYvD,MAAMwD,aAAanC,GAAG,CAAC,GACnCoC,YAAYzD,MAAMwD,aAAanC,GAAG,CAAC;AAEzC,YAAIkC,cAAcG,UAAaD,cAAcC;AAC3C;AAGFL,0BACEA,mBACCrD,MAAM0C,cAAcX,MAAMC,SACzBhC,MAAM0C,cAAciB,OAAO3B,SAC3BuB,UAAU7D,KAAKmD;AAEnB,cAAMe,aAAazE,OAAOyE,WAAW;AAAA,UACnCzD,QAAQX,SAASY,QAAQD;AAAAA,UACzB0D,MAAMJ,UAAU/D;AAAAA,QAAAA,CACjB;AAED,YAAI,CAACkE;AACH;AAGF,cAAME,kBAAkB;AAAA,UACtBH,QAAQ3D,MAAM0C,cAAciB;AAAAA,UAC5B5B,OAAOwB,UAAUb,cAAciB;AAAAA,QAAAA,GAE3BI,mBAAmB;AAAA,UACvBJ,QAAQJ,UAAUb,cAAcX;AAAAA,UAChCA,OAAO/B,MAAM0C,cAAcX;AAAAA,QAAAA;AAG7BrB,gBAAQsD,KACNvB,MAAM;AAAA,UACJ5B,MAAM;AAAA,UACNQ,IAAIkC,UAAUb;AAAAA,QAAAA,CACf,CACH,GACAhC,QAAQsD,KACNvB,MAAM;AAAA,UACJ5B,MAAM;AAAA,UACNoD,YAAY;AAAA,YACVjD,MAAM4C,WAAW5C;AAAAA,YACjBI,OAAOwC,WAAWxC,SAAS,CAAA;AAAA,UAAC;AAAA,QAC9B,CACD,CACH,GACAV,QAAQsD,KACNvB,MAAM;AAAA,UACJ5B,MAAM;AAAA,UACNQ,IAAI0C;AAAAA,QAAAA,CACL,CACH,GACArD,QAAQsD,KACNvB,MAAM;AAAA,UACJ5B,MAAM;AAAA,UACNQ,IAAIyC;AAAAA,QAAAA,CACL,CACH;AAAA,MACF;AAEA,YAAMI,mBAAmB;AAAA,QACvB5C,MAAM7B,MAAMe,eAAec;AAAAA,QAC3BU,QAAQkB,QAAQL,SAASQ,kBAAkB;AAAA,MAAA;AAG7C,aAAO,CACL,GAAG3C,SACH+B,MAAM;AAAA,QACJ5B,MAAM;AAAA,QACNQ,IAAI;AAAA,UACFsC,QAAQO;AAAAA,UACRnC,OAAOmC;AAAAA,QAAAA;AAAAA,MACT,CACD,CAAC;AAAA,IAEN,CAAC;AAAA,EAAA,CAEJ;AACH;AC5FO,SAASC,sBAAsBhF,QAEnC;AACD,SAAOkD,gBAAgB;AAAA,IACrB/C,IAAI;AAAA,IACJC,OAAOA,CAAC;AAAA,MAACC;AAAAA,MAAUC;AAAAA,IAAAA,MAAW;AAC5B,YAAM2E,cAAcjF,OAAOiF,YAAY;AAAA,QACrCjE,QAAQX,SAASY,QAAQD;AAAAA,MAAAA,CAC1B;AAQD,UANI,CAACiE,eAIwB7B,wBAAwB/C,QAAQ;AAG3D,eAAO;AAGT,YAAMQ,QAAQP,MAAM+C,QAAQnB,GAAG,CAAC;AAEhC,aAAKrB,QAIE;AAAA,QAACA;AAAAA,QAAOoE;AAAAA,MAAAA,IAHN;AAAA,IAIX;AAAA,IACA1D,SAAS,CACP,CAAC;AAAA,MAACjB;AAAAA,IAAAA,GAAQ;AAAA,MAACO;AAAAA,MAAOoE;AAAAA,IAAAA,MAAiB,CACjC3B,MAAM;AAAA,MACJ5B,MAAM;AAAA,MACNsB,OAAO,CAAC,OAAO;AAAA,MACfd,IAAI5B,MAAMe,eAAec;AAAAA,IAAAA,CAC1B,GACDmB,MAAM;AAAA,MACJ5B,MAAM;AAAA,MACNsB,OAAO;AAAA,QACLkC,UAAUD;AAAAA,QACVxB,OAAOnD,MAAMe,eAAeU,KAAK0B,SAAS;AAAA,MAAA;AAAA,MAE5CvB,IAAI5B,MAAMe,eAAec;AAAAA,IAAAA,CAC1B,GACDmB,MAAM;AAAA,MACJ5B,MAAM;AAAA,MACNQ,IAAIrB,MAAM0C;AAAAA,IAAAA,CACX,CAAC,CACH;AAAA,EAAA,CAEJ;AACH;AClDO,SAAS4B,wBAAwBnF,QAErC;AACD,SAAOkD,gBAAgB;AAAA,IACrB/C,IAAI;AAAA,IACJC,OAAOA,CAAC;AAAA,MAACC;AAAAA,MAAUC;AAAAA,IAAAA,MAAW;AAC5B,YAAM8E,gBAAgBpF,OAAOoF,cAAc;AAAA,QACzCpE,QAAQX,SAASY,QAAQD;AAAAA,MAAAA,CAC1B;AAQD,UANI,CAACoE,iBAIwBhC,wBAAwB/C,QAAQ;AAG3D,eAAO;AAGT,YAAMQ,QAAQP,MAAM+C,QAAQnB,GAAG,CAAC;AAEhC,aAAKrB,QAIE;AAAA,QAACA;AAAAA,QAAOuE;AAAAA,MAAAA,IAHN;AAAA,IAIX;AAAA,IACA7D,SAAS,CACP,CAAC;AAAA,MAACjB;AAAAA,IAAAA,GAAQ;AAAA,MAACO;AAAAA,MAAOuE;AAAAA,IAAAA,MAAmB,CACnC9B,MAAM;AAAA,MACJ5B,MAAM;AAAA,MACNsB,OAAO,CAAC,OAAO;AAAA,MACfd,IAAI5B,MAAMe,eAAec;AAAAA,IAAAA,CAC1B,GACDmB,MAAM;AAAA,MACJ5B,MAAM;AAAA,MACNsB,OAAO;AAAA,QACLkC,UAAUE;AAAAA,QACV3B,OAAOnD,MAAMe,eAAeU,KAAK0B,SAAS;AAAA,MAAA;AAAA,MAE5CvB,IAAI5B,MAAMe,eAAec;AAAAA,IAAAA,CAC1B,GACDmB,MAAM;AAAA,MACJ5B,MAAM;AAAA,MACNQ,IAAIrB,MAAM0C;AAAAA,IAAAA,CACX,CAAC,CACH;AAAA,EAAA,CAEJ;AACH;ACVO,SAAA8B,wBAAAC,IAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAAiC;AAAA,IAAArC;AAAAA,IAAAsC;AAAAA,IAAAC;AAAAA,IAAA5C;AAAAA,IAAAa;AAAAA,IAAA5C;AAAAA,IAAA0D;AAAAA,IAAAkB;AAAAA,IAAAV;AAAAA,IAAAW;AAAAA,IAAAR;AAAAA,EAAAA,IAAAE,IAatCO,SAAeC,UAAAA;AAAW,MAAAC;AAAAR,IAAA,CAAA,MAAAzC,gBAAAyC,SAAAM,UAEhBE,KAAAA,MAAA;AAKR,UAAAC,sBAJkBjG,wBAAA;AAAA,MAAA+C;AAAAA,IAAAA,CAEjB,EAEoCmD,IAAAC,CAAAA,aACnCL,OAAMM,iBAAA;AAAA,MAAAD;AAAAA,IAAAA,CAA4B,CACpC;AAAC,WAAA,MAAA;AAAA,iBAGME,sBAA4BJ;AAC/BI,2BAAAA;AAAAA,IAAoB;AAAA,EAAA,GAGzBb,OAAAzC,cAAAyC,OAAAM,QAAAN,OAAAQ,MAAAA,KAAAR,EAAA,CAAA;AAAA,MAAAc;AAAAd,IAAA,CAAA,MAAAzC,gBAAAyC,SAAAM,UAAAN,EAAA,CAAA,MAAAxE,wBAAEsF,KAAA,CAACvD,cAAc+C,QAAQ9E,oBAAoB,GAACwE,OAAAzC,cAAAyC,OAAAM,QAAAN,OAAAxE,sBAAAwE,OAAAc,MAAAA,KAAAd,EAAA,CAAA,GAd/Ce,UAAUP,IAcPM,EAA4C;AAAC,MAAAE;AAAAhB,WAAAE,iBAI3Cc,KAAAd,gBAAa,qBAAA,UAAA,EAEV,UAAA;AAAA,IAAA,oBAAC,8BAAA,EACYA,WAAAA,eACL,MAAA;AAAA,MAAAe,MAAO;AAAA,MAAGC,QAAA;AAAA,IAAA,GAAY;AAAA,IAE9B,oBAAC,8BAAA,EACYhB,WAAAA,eACL,MAAA;AAAA,MAAAe,MAAO;AAAA,MAAGC,QAAA;AAAA,IAAA,EAAA;KAChB,IAAA,MAEElB,OAAAE,eAAAF,OAAAgB,MAAAA,KAAAhB,EAAA,CAAA;AAAA,MAAAmB;AAAAnB,WAAAG,iBACPgB,KAAAhB,gBACC,oBAAC,8BAAA,EACYA,WAAAA,eACL,MAAA;AAAA,IAAAc,MAAO;AAAA,IAAGC,QAAA;AAAA,EAAA,EAAA,KAChB,MACIlB,OAAAG,eAAAH,QAAAmB,MAAAA,KAAAnB,EAAA,EAAA;AAAA,MAAAoB;AAAApB,YAAAI,mBACPgB,KAAAhB,kBAAe,qBAAA,UAAA,EAEZ,UAAA;AAAA,IAAA,oBAAC,8BAAA,EACYA,WAAAA,iBACL,MAAA;AAAA,MAAAa,MAAO;AAAA,MAAGC,QAAA;AAAA,IAAA,GAAY;AAAA,IAE9B,oBAAC,8BAAA,EACYd,WAAAA,iBACL,MAAA;AAAA,MAAAa,MAAO;AAAA,MAAGC,QAAA;AAAA,IAAA,EAAA;KAChB,IAAA,MAEElB,QAAAI,iBAAAJ,QAAAoB,MAAAA,KAAApB,EAAA,EAAA;AAAA,MAAAqB;AAAArB,YAAAK,0BACPgB,KAAAhB,yBACC,oBAAC,8BAAA,EACYA,WAAAA,wBACL,MAAA;AAAA,IAAAY,MAAO;AAAA,IAAGC,QAAA;AAAA,EAAA,EAAA,KAChB,MACIlB,QAAAK,wBAAAL,QAAAqB,MAAAA,KAAArB,EAAA,EAAA;AAAA,MAAAsB;AAAAtB,YAAApC,mBACP0D,KAAA1D,kBACC,oBAAC,iBAAA,EAAuB,OAAA,CAACF,qBAAA;AAAA,IAAAE;AAAAA,EAAAA,CAAsC,CAAC,EAAA,CAAC,IAAI,MAC/DoC,QAAApC,iBAAAoC,QAAAsB,MAAAA,KAAAtB,EAAA,EAAA;AAAA,MAAAuB;AAAAvB,YAAA5B,gBACPmD,KAAAnD,eACC,oBAAC,iBAAA,EAAuB,OAAA,CAACH,kBAAA;AAAA,IAAAG;AAAAA,EAAAA,CAAgC,CAAC,EAAA,CAAC,IAAI,MACzD4B,QAAA5B,cAAA4B,QAAAuB,MAAAA,KAAAvB,EAAA,EAAA;AAAA,MAAAwB;AAAAxB,YAAAxE,wBACPgG,KAAAhG,uBACC,oBAAC,iBAAA,EACQ,OAAA,CAAC6C,yBAAA;AAAA,IAAA7C;AAAAA,EAAAA,CAA+C,CAAC,EAAA,CAAC,IACzD,MACIwE,QAAAxE,sBAAAwE,QAAAwB,MAAAA,KAAAxB,EAAA,EAAA;AAAA,MAAAyB;AAAAzB,YAAAd,cACPuC,MAAAvC,aACC,oBAAC,iBAAA,EAAuB,OAAA,CAACX,uBAAA;AAAA,IAAAW;AAAAA,EAAAA,CAAmC,CAAC,EAAA,CAAC,IAAI,MAC5Dc,QAAAd,YAAAc,QAAAyB,OAAAA,MAAAzB,EAAA,EAAA;AAAA,MAAA0B;AAAA1B,YAAAN,eACPgC,MAAAhC,cACC,oBAAC,iBAAA,EAAuB,OAAA,CAACD,sBAAA;AAAA,IAAAC;AAAAA,EAAAA,CAAmC,CAAC,EAAA,CAAC,IAAI,MAC5DM,QAAAN,aAAAM,QAAA0B,OAAAA,MAAA1B,EAAA,EAAA;AAAA,MAAA2B;AAAA3B,YAAAH,iBACP8B,MAAA9B,gBACC,oBAAC,iBAAA,EAAuB,OAAA,CAACD,wBAAA;AAAA,IAAAC;AAAAA,EAAAA,CAAuC,CAAC,EAAA,CAAC,IAAI,MAChEG,QAAAH,eAAAG,QAAA2B,OAAAA,MAAA3B,EAAA,EAAA;AAAA,MAAA4B;AAAA,SAAA5B,EAAA,EAAA,MAAAyB,OAAAzB,UAAA0B,OAAA1B,EAAA,EAAA,MAAA2B,OAAA3B,UAAAgB,MAAAhB,EAAA,EAAA,MAAAmB,MAAAnB,UAAAoB,MAAApB,EAAA,EAAA,MAAAqB,MAAArB,EAAA,EAAA,MAAAsB,MAAAtB,EAAA,EAAA,MAAAuB,MAAAvB,UAAAwB,MAxDVI,MAAA,qBAAA,UAAA,EACGZ,UAAAA;AAAAA,IAAAA;AAAAA,IAYAG;AAAAA,IAMAC;AAAAA,IAYAC;AAAAA,IAMAC;AAAAA,IAGAC;AAAAA,IAGAC;AAAAA,IAKAC;AAAAA,IAGAC;AAAAA,IAGAC;AAAAA,EAAAA,GAEO,GACP3B,QAAAyB,KAAAzB,QAAA0B,KAAA1B,QAAA2B,KAAA3B,QAAAgB,IAAAhB,QAAAmB,IAAAnB,QAAAoB,IAAApB,QAAAqB,IAAArB,QAAAsB,IAAAtB,QAAAuB,IAAAvB,QAAAwB,IAAAxB,QAAA4B,OAAAA,MAAA5B,EAAA,EAAA,GAzDH4B;AAyDG;"}
|
|
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 {EditorSchema} from '@portabletext/editor'\nimport {defineBehavior, execute} from '@portabletext/editor/behaviors'\nimport * as selectors from '@portabletext/editor/selectors'\n\nexport type MarkdownBehaviorsConfig = {\n horizontalRuleObject?: (context: {\n schema: EditorSchema\n }) => {name: string; value?: {[prop: string]: unknown}} | undefined\n defaultStyle?: (context: {schema: EditorSchema}) => 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 schema: snapshot.context.schema,\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 execute({\n type: 'insert.text',\n text: hrCharacters,\n }),\n ],\n ({snapshot}, {hrObject, focusBlock, focusTextBlock}) =>\n focusTextBlock\n ? [\n execute({\n type: 'insert.block',\n block: {\n _type: snapshot.context.schema.block.name,\n children: focusTextBlock.node.children,\n },\n placement: 'after',\n }),\n execute({\n type: 'insert.block',\n block: {\n _type: hrObject.name,\n ...(hrObject.value ?? {}),\n },\n placement: 'after',\n }),\n execute({\n type: 'delete.block',\n at: focusBlock.path,\n }),\n ]\n : [\n execute({\n type: 'insert.block',\n block: {\n _type: hrObject.name,\n ...(hrObject.value ?? {}),\n },\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 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 execute({\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 {EditorSchema} 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: (context: {schema: EditorSchema}) => string | undefined\n}) {\n return defineInputRule({\n on: /^> /,\n guard: ({snapshot, event}) => {\n const style = config.blockquoteStyle({\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 {EditorSchema} 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: (context: {\n schema: EditorSchema\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 schema: snapshot.context.schema,\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 {EditorSchema} 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 createHorizontalRuleRule(config: {\n horizontalRuleObject: (context: {\n schema: EditorSchema\n }) => {name: string; value?: {[prop: string]: unknown}} | undefined\n}) {\n return defineInputRule({\n on: /^(---)|^(—-)|^(___)|^(\\*\\*\\*)/,\n guard: ({snapshot, event}) => {\n const hrObject = config.horizontalRuleObject({\n schema: snapshot.context.schema,\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: {\n _type: hrObject.name,\n ...(hrObject.value ?? {}),\n },\n placement: 'before',\n select: 'none',\n }),\n raise({\n type: 'delete',\n at: match.targetOffsets,\n }),\n ],\n ],\n })\n}\n","import type {EditorSchema} from '@portabletext/editor'\nimport {raise, type BehaviorAction} from '@portabletext/editor/behaviors'\nimport {defineInputRule} from '@portabletext/plugin-input-rule'\n\nexport function createMarkdownLinkRule(config: {\n linkObject: (context: {\n schema: EditorSchema\n href: string\n }) => {name: string; value?: {[prop: string]: unknown}} | 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 schema: snapshot.context.schema,\n href: hrefMatch.text,\n })\n\n if (!linkObject) {\n continue\n }\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: linkObject.name,\n value: linkObject.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 {EditorSchema} 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: (context: {schema: EditorSchema}) => string | undefined\n}) {\n return defineInputRule({\n on: /^1\\. /,\n guard: ({snapshot, event}) => {\n const orderedList = config.orderedList({\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 {EditorSchema} 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: (context: {schema: EditorSchema}) => string | undefined\n}) {\n return defineInputRule({\n on: /^(-|\\*) /,\n guard: ({snapshot, event}) => {\n const unorderedList = config.unorderedList({\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 {EditorSchema} 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} 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 * @beta\n */\nexport type MarkdownShortcutsPluginProps = MarkdownBehaviorsConfig & {\n blockquoteStyle?: (context: {schema: EditorSchema}) => string | undefined\n defaultStyle?: (context: {schema: EditorSchema}) => string | undefined\n headingStyle?: (context: {\n schema: EditorSchema\n level: number\n }) => string | undefined\n linkObject?: (context: {\n schema: EditorSchema\n href: string\n }) => {name: string; value?: {[prop: string]: unknown}} | undefined\n unorderedList?: (context: {schema: EditorSchema}) => string | undefined\n orderedList?: (context: {schema: EditorSchema}) => string | undefined\n boldDecorator?: ({schema}: {schema: EditorSchema}) => string | undefined\n codeDecorator?: ({schema}: {schema: EditorSchema}) => string | undefined\n italicDecorator?: ({schema}: {schema: EditorSchema}) => string | undefined\n strikeThroughDecorator?: ({\n schema,\n }: {\n schema: EditorSchema\n }) => string | undefined\n}\n\n/**\n * @beta\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","schema","context","focusBlock","selectors","getFocusBlock","focusTextBlock","getFocusTextBlock","actions","_","execute","type","block","_type","name","children","node","placement","value","at","path","clearStyleOnBackspace","selectionCollapsed","isSelectionCollapsed","focusSpan","getFocusSpan","atTheBeginningOfBLock","_key","selection","focus","offset","defaultStyle","style","props","createBlockquoteRule","defineInputRule","blockquoteStyle","getPreviousInlineObject","matches","raise","targetOffsets","createHeadingRule","level","length","headingStyle","createHorizontalRuleRule","select","createMarkdownLinkRule","newText","textBefore","textInserted","textLengthDelta","reverse","textMatch","groupMatches","hrefMatch","undefined","anchor","linkObject","href","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": "1.4.
|
|
3
|
+
"version": "1.4.1",
|
|
4
4
|
"description": "Adds helpful Markdown shortcuts to the editor",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"portabletext",
|
|
@@ -39,8 +39,8 @@
|
|
|
39
39
|
"dist"
|
|
40
40
|
],
|
|
41
41
|
"dependencies": {
|
|
42
|
-
"@portabletext/plugin-character-pair-decorator": "^1.1.
|
|
43
|
-
"@portabletext/plugin-input-rule": "~0.3.
|
|
42
|
+
"@portabletext/plugin-character-pair-decorator": "^1.1.5",
|
|
43
|
+
"@portabletext/plugin-input-rule": "~0.3.3"
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
46
|
"@types/react": "^19.1.12",
|
|
@@ -52,12 +52,12 @@
|
|
|
52
52
|
"typescript": "5.9.3",
|
|
53
53
|
"typescript-eslint": "^8.46.1",
|
|
54
54
|
"vitest": "^3.2.4",
|
|
55
|
-
"@portabletext/editor": "^2.14.
|
|
55
|
+
"@portabletext/editor": "^2.14.2",
|
|
56
56
|
"racejar": "1.3.1"
|
|
57
57
|
},
|
|
58
58
|
"peerDependencies": {
|
|
59
59
|
"react": "^19",
|
|
60
|
-
"@portabletext/editor": "^2.14.
|
|
60
|
+
"@portabletext/editor": "^2.14.2"
|
|
61
61
|
},
|
|
62
62
|
"scripts": {
|
|
63
63
|
"build": "pkg-utils build --strict --check --clean",
|
|
@@ -2,7 +2,7 @@ import type {EditorSchema} from '@portabletext/editor'
|
|
|
2
2
|
import {useEditor} from '@portabletext/editor'
|
|
3
3
|
import {CharacterPairDecoratorPlugin} from '@portabletext/plugin-character-pair-decorator'
|
|
4
4
|
import {InputRulePlugin} from '@portabletext/plugin-input-rule'
|
|
5
|
-
import {useEffect} from 'react'
|
|
5
|
+
import {useEffect, useMemo} from 'react'
|
|
6
6
|
import {
|
|
7
7
|
createMarkdownBehaviors,
|
|
8
8
|
type MarkdownBehaviorsConfig,
|
|
@@ -72,7 +72,37 @@ export function MarkdownShortcutsPlugin({
|
|
|
72
72
|
unregisterBehavior()
|
|
73
73
|
}
|
|
74
74
|
}
|
|
75
|
-
}, [defaultStyle, editor
|
|
75
|
+
}, [defaultStyle, editor])
|
|
76
|
+
|
|
77
|
+
const inputRules = useMemo(() => {
|
|
78
|
+
const rules = []
|
|
79
|
+
if (blockquoteStyle) {
|
|
80
|
+
rules.push(createBlockquoteRule({blockquoteStyle}))
|
|
81
|
+
}
|
|
82
|
+
if (headingStyle) {
|
|
83
|
+
rules.push(createHeadingRule({headingStyle}))
|
|
84
|
+
}
|
|
85
|
+
if (horizontalRuleObject) {
|
|
86
|
+
rules.push(createHorizontalRuleRule({horizontalRuleObject}))
|
|
87
|
+
}
|
|
88
|
+
if (linkObject) {
|
|
89
|
+
rules.push(createMarkdownLinkRule({linkObject}))
|
|
90
|
+
}
|
|
91
|
+
if (orderedList) {
|
|
92
|
+
rules.push(createOrderedListRule({orderedList}))
|
|
93
|
+
}
|
|
94
|
+
if (unorderedList) {
|
|
95
|
+
rules.push(createUnorderedListRule({unorderedList}))
|
|
96
|
+
}
|
|
97
|
+
return rules.length > 0 ? rules : null
|
|
98
|
+
}, [
|
|
99
|
+
blockquoteStyle,
|
|
100
|
+
headingStyle,
|
|
101
|
+
horizontalRuleObject,
|
|
102
|
+
linkObject,
|
|
103
|
+
orderedList,
|
|
104
|
+
unorderedList,
|
|
105
|
+
])
|
|
76
106
|
|
|
77
107
|
return (
|
|
78
108
|
<>
|
|
@@ -112,26 +142,7 @@ export function MarkdownShortcutsPlugin({
|
|
|
112
142
|
pair={{char: '~', amount: 2}}
|
|
113
143
|
/>
|
|
114
144
|
) : null}
|
|
115
|
-
{
|
|
116
|
-
<InputRulePlugin rules={[createBlockquoteRule({blockquoteStyle})]} />
|
|
117
|
-
) : null}
|
|
118
|
-
{headingStyle ? (
|
|
119
|
-
<InputRulePlugin rules={[createHeadingRule({headingStyle})]} />
|
|
120
|
-
) : null}
|
|
121
|
-
{horizontalRuleObject ? (
|
|
122
|
-
<InputRulePlugin
|
|
123
|
-
rules={[createHorizontalRuleRule({horizontalRuleObject})]}
|
|
124
|
-
/>
|
|
125
|
-
) : null}
|
|
126
|
-
{linkObject ? (
|
|
127
|
-
<InputRulePlugin rules={[createMarkdownLinkRule({linkObject})]} />
|
|
128
|
-
) : null}
|
|
129
|
-
{orderedList ? (
|
|
130
|
-
<InputRulePlugin rules={[createOrderedListRule({orderedList})]} />
|
|
131
|
-
) : null}
|
|
132
|
-
{unorderedList ? (
|
|
133
|
-
<InputRulePlugin rules={[createUnorderedListRule({unorderedList})]} />
|
|
134
|
-
) : null}
|
|
145
|
+
{inputRules ? <InputRulePlugin rules={inputRules} /> : null}
|
|
135
146
|
</>
|
|
136
147
|
)
|
|
137
148
|
}
|