@portabletext/plugin-markdown-shortcuts 1.1.0 → 1.1.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 CHANGED
@@ -351,57 +351,75 @@ function createMarkdownBehaviors(config) {
351
351
  });
352
352
  return [automaticBlockquoteOnSpace, automaticHeadingOnSpace, automaticHr, automaticHrOnPaste, clearStyleOnBackspace, automaticListOnSpace];
353
353
  }
354
- function MarkdownShortcutsPlugin(props) {
355
- const $ = compilerRuntime.c(17), editor$1 = editor.useEditor();
356
- let t0, t1;
357
- $[0] !== editor$1 || $[1] !== props ? (t0 = () => {
358
- const unregisterBehaviors = createMarkdownBehaviors(props).map((behavior) => editor$1.registerBehavior({
354
+ function MarkdownShortcutsPlugin(t0) {
355
+ const $ = compilerRuntime.c(22), {
356
+ blockquoteStyle,
357
+ boldDecorator,
358
+ codeDecorator,
359
+ defaultStyle,
360
+ headingStyle,
361
+ horizontalRuleObject,
362
+ italicDecorator,
363
+ orderedList,
364
+ strikeThroughDecorator,
365
+ unorderedList
366
+ } = t0, editor$1 = editor.useEditor();
367
+ let t1, t2;
368
+ $[0] !== blockquoteStyle || $[1] !== defaultStyle || $[2] !== editor$1 || $[3] !== headingStyle || $[4] !== horizontalRuleObject || $[5] !== orderedList || $[6] !== unorderedList ? (t1 = () => {
369
+ const unregisterBehaviors = createMarkdownBehaviors({
370
+ blockquoteStyle,
371
+ defaultStyle,
372
+ headingStyle,
373
+ horizontalRuleObject,
374
+ orderedList,
375
+ unorderedList
376
+ }).map((behavior) => editor$1.registerBehavior({
359
377
  behavior
360
378
  }));
361
379
  return () => {
362
380
  for (const unregisterBehavior of unregisterBehaviors)
363
381
  unregisterBehavior();
364
382
  };
365
- }, t1 = [editor$1, props], $[0] = editor$1, $[1] = props, $[2] = t0, $[3] = t1) : (t0 = $[2], t1 = $[3]), react.useEffect(t0, t1);
366
- let t2;
367
- $[4] !== props.boldDecorator ? (t2 = props.boldDecorator ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
368
- /* @__PURE__ */ jsxRuntime.jsx(pluginCharacterPairDecorator.CharacterPairDecoratorPlugin, { decorator: props.boldDecorator, pair: {
383
+ }, t2 = [blockquoteStyle, defaultStyle, editor$1, headingStyle, horizontalRuleObject, orderedList, unorderedList], $[0] = blockquoteStyle, $[1] = defaultStyle, $[2] = editor$1, $[3] = headingStyle, $[4] = horizontalRuleObject, $[5] = orderedList, $[6] = unorderedList, $[7] = t1, $[8] = t2) : (t1 = $[7], t2 = $[8]), react.useEffect(t1, t2);
384
+ let t3;
385
+ $[9] !== boldDecorator ? (t3 = boldDecorator ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
386
+ /* @__PURE__ */ jsxRuntime.jsx(pluginCharacterPairDecorator.CharacterPairDecoratorPlugin, { decorator: boldDecorator, pair: {
369
387
  char: "*",
370
388
  amount: 2
371
389
  } }),
372
- /* @__PURE__ */ jsxRuntime.jsx(pluginCharacterPairDecorator.CharacterPairDecoratorPlugin, { decorator: props.boldDecorator, pair: {
390
+ /* @__PURE__ */ jsxRuntime.jsx(pluginCharacterPairDecorator.CharacterPairDecoratorPlugin, { decorator: boldDecorator, pair: {
373
391
  char: "_",
374
392
  amount: 2
375
393
  } })
376
- ] }) : null, $[4] = props.boldDecorator, $[5] = t2) : t2 = $[5];
377
- let t3;
378
- $[6] !== props.codeDecorator ? (t3 = props.codeDecorator ? /* @__PURE__ */ jsxRuntime.jsx(pluginCharacterPairDecorator.CharacterPairDecoratorPlugin, { decorator: props.codeDecorator, pair: {
394
+ ] }) : null, $[9] = boldDecorator, $[10] = t3) : t3 = $[10];
395
+ let t4;
396
+ $[11] !== codeDecorator ? (t4 = codeDecorator ? /* @__PURE__ */ jsxRuntime.jsx(pluginCharacterPairDecorator.CharacterPairDecoratorPlugin, { decorator: codeDecorator, pair: {
379
397
  char: "`",
380
398
  amount: 1
381
- } }) : null, $[6] = props.codeDecorator, $[7] = t3) : t3 = $[7];
382
- let t4;
383
- $[8] !== props.italicDecorator ? (t4 = props.italicDecorator ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
384
- /* @__PURE__ */ jsxRuntime.jsx(pluginCharacterPairDecorator.CharacterPairDecoratorPlugin, { decorator: props.italicDecorator, pair: {
399
+ } }) : null, $[11] = codeDecorator, $[12] = t4) : t4 = $[12];
400
+ let t5;
401
+ $[13] !== italicDecorator ? (t5 = italicDecorator ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
402
+ /* @__PURE__ */ jsxRuntime.jsx(pluginCharacterPairDecorator.CharacterPairDecoratorPlugin, { decorator: italicDecorator, pair: {
385
403
  char: "*",
386
404
  amount: 1
387
405
  } }),
388
- /* @__PURE__ */ jsxRuntime.jsx(pluginCharacterPairDecorator.CharacterPairDecoratorPlugin, { decorator: props.italicDecorator, pair: {
406
+ /* @__PURE__ */ jsxRuntime.jsx(pluginCharacterPairDecorator.CharacterPairDecoratorPlugin, { decorator: italicDecorator, pair: {
389
407
  char: "_",
390
408
  amount: 1
391
409
  } })
392
- ] }) : null, $[8] = props.italicDecorator, $[9] = t4) : t4 = $[9];
393
- let t5;
394
- $[10] !== props.strikeThroughDecorator ? (t5 = props.strikeThroughDecorator ? /* @__PURE__ */ jsxRuntime.jsx(pluginCharacterPairDecorator.CharacterPairDecoratorPlugin, { decorator: props.strikeThroughDecorator, pair: {
410
+ ] }) : null, $[13] = italicDecorator, $[14] = t5) : t5 = $[14];
411
+ let t6;
412
+ $[15] !== strikeThroughDecorator ? (t6 = strikeThroughDecorator ? /* @__PURE__ */ jsxRuntime.jsx(pluginCharacterPairDecorator.CharacterPairDecoratorPlugin, { decorator: strikeThroughDecorator, pair: {
395
413
  char: "~",
396
414
  amount: 2
397
- } }) : null, $[10] = props.strikeThroughDecorator, $[11] = t5) : t5 = $[11];
398
- let t6;
399
- return $[12] !== t2 || $[13] !== t3 || $[14] !== t4 || $[15] !== t5 ? (t6 = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
400
- t2,
415
+ } }) : null, $[15] = strikeThroughDecorator, $[16] = t6) : t6 = $[16];
416
+ let t7;
417
+ return $[17] !== t3 || $[18] !== t4 || $[19] !== t5 || $[20] !== t6 ? (t7 = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
401
418
  t3,
402
419
  t4,
403
- t5
404
- ] }), $[12] = t2, $[13] = t3, $[14] = t4, $[15] = t5, $[16] = t6) : t6 = $[16], t6;
420
+ t5,
421
+ t6
422
+ ] }), $[17] = t3, $[18] = t4, $[19] = t5, $[20] = t6, $[21] = t7) : t7 = $[21], t7;
405
423
  }
406
424
  exports.MarkdownShortcutsPlugin = MarkdownShortcutsPlugin;
407
425
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/behavior.markdown-shortcuts.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'\nimport * as utils from '@portabletext/editor/utils'\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 headingStyle?: (context: {\n schema: EditorSchema\n level: number\n }) => string | undefined\n blockquoteStyle?: (context: {schema: EditorSchema}) => string | undefined\n unorderedList?: (context: {schema: EditorSchema}) => string | undefined\n orderedList?: (context: {schema: EditorSchema}) => string | undefined\n}\n\nexport function createMarkdownBehaviors(config: MarkdownBehaviorsConfig) {\n const automaticBlockquoteOnSpace = defineBehavior({\n on: 'insert.text',\n guard: ({snapshot, event}) => {\n const isSpace = event.text === ' '\n\n if (!isSpace) {\n return false\n }\n\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 previousInlineObject = selectors.getPreviousInlineObject(snapshot)\n const blockOffset = utils.spanSelectionPointToBlockOffset({\n context: snapshot.context,\n selectionPoint: {\n path: [\n {_key: focusTextBlock.node._key},\n 'children',\n {_key: focusSpan.node._key},\n ],\n offset: snapshot.context.selection?.focus.offset ?? 0,\n },\n })\n\n if (previousInlineObject || !blockOffset) {\n return false\n }\n\n const blockText = utils.getTextBlockText(focusTextBlock.node)\n const caretAtTheEndOfQuote = blockOffset.offset === 1\n const looksLikeMarkdownQuote = /^>/.test(blockText)\n const blockquoteStyle = config.blockquoteStyle?.({\n schema: snapshot.context.schema,\n })\n\n if (\n caretAtTheEndOfQuote &&\n looksLikeMarkdownQuote &&\n blockquoteStyle !== undefined\n ) {\n return {focusTextBlock, style: blockquoteStyle}\n }\n\n return false\n },\n actions: [\n () => [\n execute({\n type: 'insert.text',\n text: ' ',\n }),\n ],\n (_, {focusTextBlock, style}) => [\n execute({\n type: 'block.unset',\n props: ['listItem', 'level'],\n at: focusTextBlock.path,\n }),\n execute({\n type: 'block.set',\n props: {style},\n at: focusTextBlock.path,\n }),\n execute({\n type: 'delete.text',\n at: {\n anchor: {\n path: focusTextBlock.path,\n offset: 0,\n },\n focus: {\n path: focusTextBlock.path,\n offset: 2,\n },\n },\n }),\n ],\n ],\n })\n const automaticHr = defineBehavior({\n on: 'insert.text',\n guard: ({snapshot, event}) => {\n const hrCharacter =\n event.text === '-'\n ? '-'\n : event.text === '*'\n ? '*'\n : event.text === '_'\n ? '_'\n : undefined\n\n if (hrCharacter === undefined) {\n return false\n }\n\n const hrObject = config.horizontalRuleObject?.({\n schema: snapshot.context.schema,\n })\n const focusBlock = selectors.getFocusTextBlock(snapshot)\n const selectionCollapsed = selectors.isSelectionCollapsed(snapshot)\n\n if (!hrObject || !focusBlock || !selectionCollapsed) {\n return false\n }\n\n const previousInlineObject = selectors.getPreviousInlineObject(snapshot)\n const textBefore = selectors.getBlockTextBefore(snapshot)\n const hrBlockOffsets = {\n anchor: {\n path: focusBlock.path,\n offset: 0,\n },\n focus: {\n path: focusBlock.path,\n offset: 3,\n },\n }\n\n if (\n !previousInlineObject &&\n textBefore === `${hrCharacter}${hrCharacter}`\n ) {\n return {hrObject, focusBlock, hrCharacter, hrBlockOffsets}\n }\n\n return false\n },\n actions: [\n (_, {hrCharacter}) => [\n execute({\n type: 'insert.text',\n text: hrCharacter,\n }),\n ],\n (_, {hrObject, hrBlockOffsets}) => [\n execute({\n type: 'insert.block',\n block: {\n _type: hrObject.name,\n ...(hrObject.value ?? {}),\n },\n placement: 'before',\n select: 'none',\n }),\n execute({\n type: 'delete.text',\n at: hrBlockOffsets,\n }),\n ],\n ],\n })\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 const automaticHeadingOnSpace = defineBehavior({\n on: 'insert.text',\n guard: ({snapshot, event}) => {\n const isSpace = event.text === ' '\n\n if (!isSpace) {\n return false\n }\n\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 blockOffset = utils.spanSelectionPointToBlockOffset({\n context: snapshot.context,\n selectionPoint: {\n path: [\n {_key: focusTextBlock.node._key},\n 'children',\n {_key: focusSpan.node._key},\n ],\n offset: snapshot.context.selection?.focus.offset ?? 0,\n },\n })\n\n if (!blockOffset) {\n return false\n }\n\n const previousInlineObject = selectors.getPreviousInlineObject(snapshot)\n const blockText = utils.getTextBlockText(focusTextBlock.node)\n const markdownHeadingSearch = /^#+/.exec(blockText)\n const level = markdownHeadingSearch\n ? markdownHeadingSearch[0].length\n : undefined\n const caretAtTheEndOfHeading = blockOffset.offset === level\n\n if (previousInlineObject || !caretAtTheEndOfHeading) {\n return false\n }\n\n const style =\n level !== undefined\n ? config.headingStyle?.({schema: snapshot.context.schema, level})\n : undefined\n\n if (level !== undefined && style !== undefined) {\n return {\n focusTextBlock,\n style: style,\n level,\n }\n }\n\n return false\n },\n actions: [\n ({event}) => [execute(event)],\n (_, {focusTextBlock, style, level}) => [\n execute({\n type: 'block.unset',\n props: ['listItem', 'level'],\n at: focusTextBlock.path,\n }),\n execute({\n type: 'block.set',\n props: {style},\n at: focusTextBlock.path,\n }),\n execute({\n type: 'delete.text',\n at: {\n anchor: {\n path: focusTextBlock.path,\n offset: 0,\n },\n focus: {\n path: focusTextBlock.path,\n offset: level + 1,\n },\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 const automaticListOnSpace = defineBehavior({\n on: 'insert.text',\n guard: ({snapshot, event}) => {\n const isSpace = event.text === ' '\n\n if (!isSpace) {\n return false\n }\n\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 previousInlineObject = selectors.getPreviousInlineObject(snapshot)\n const blockOffset = utils.spanSelectionPointToBlockOffset({\n context: snapshot.context,\n selectionPoint: {\n path: [\n {_key: focusTextBlock.node._key},\n 'children',\n {_key: focusSpan.node._key},\n ],\n offset: snapshot.context.selection?.focus.offset ?? 0,\n },\n })\n\n if (previousInlineObject || !blockOffset) {\n return false\n }\n\n const blockText = utils.getTextBlockText(focusTextBlock.node)\n const defaultStyle = config.defaultStyle?.({\n schema: snapshot.context.schema,\n })\n const looksLikeUnorderedList = /^(-|\\*)/.test(blockText)\n const unorderedList = config.unorderedList?.({\n schema: snapshot.context.schema,\n })\n const caretAtTheEndOfUnorderedList = blockOffset.offset === 1\n\n if (\n defaultStyle &&\n caretAtTheEndOfUnorderedList &&\n looksLikeUnorderedList &&\n unorderedList !== undefined\n ) {\n return {\n focusTextBlock,\n listItem: unorderedList,\n listItemLength: 1,\n style: defaultStyle,\n }\n }\n\n const looksLikeOrderedList = /^1\\./.test(blockText)\n const orderedList = config.orderedList?.({\n schema: snapshot.context.schema,\n })\n const caretAtTheEndOfOrderedList = blockOffset.offset === 2\n\n if (\n defaultStyle &&\n caretAtTheEndOfOrderedList &&\n looksLikeOrderedList &&\n orderedList !== undefined\n ) {\n return {\n focusTextBlock,\n listItem: orderedList,\n listItemLength: 2,\n style: defaultStyle,\n }\n }\n\n return false\n },\n actions: [\n ({event}) => [execute(event)],\n (_, {focusTextBlock, style, listItem, listItemLength}) => [\n execute({\n type: 'block.set',\n props: {\n listItem,\n level: 1,\n style,\n },\n at: focusTextBlock.path,\n }),\n execute({\n type: 'delete.text',\n at: {\n anchor: {\n path: focusTextBlock.path,\n offset: 0,\n },\n focus: {\n path: focusTextBlock.path,\n offset: listItemLength + 1,\n },\n },\n }),\n ],\n ],\n })\n\n const markdownBehaviors = [\n automaticBlockquoteOnSpace,\n automaticHeadingOnSpace,\n automaticHr,\n automaticHrOnPaste,\n clearStyleOnBackspace,\n automaticListOnSpace,\n ]\n\n return markdownBehaviors\n}\n","import {useEditor} from '@portabletext/editor'\nimport type {EditorSchema} from '@portabletext/editor'\nimport {CharacterPairDecoratorPlugin} from '@portabletext/plugin-character-pair-decorator'\nimport {useEffect} from 'react'\nimport {\n createMarkdownBehaviors,\n type MarkdownBehaviorsConfig,\n} from './behavior.markdown-shortcuts'\n\n/**\n * @beta\n */\nexport type MarkdownShortcutsPluginProps = MarkdownBehaviorsConfig & {\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(props: MarkdownShortcutsPluginProps) {\n const editor = useEditor()\n\n useEffect(() => {\n const behaviors = createMarkdownBehaviors(props)\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 }, [editor, props])\n\n return (\n <>\n {props.boldDecorator ? (\n <>\n <CharacterPairDecoratorPlugin\n decorator={props.boldDecorator}\n pair={{char: '*', amount: 2}}\n />\n <CharacterPairDecoratorPlugin\n decorator={props.boldDecorator}\n pair={{char: '_', amount: 2}}\n />\n </>\n ) : null}\n {props.codeDecorator ? (\n <CharacterPairDecoratorPlugin\n decorator={props.codeDecorator}\n pair={{char: '`', amount: 1}}\n />\n ) : null}\n {props.italicDecorator ? (\n <>\n <CharacterPairDecoratorPlugin\n decorator={props.italicDecorator}\n pair={{char: '*', amount: 1}}\n />\n <CharacterPairDecoratorPlugin\n decorator={props.italicDecorator}\n pair={{char: '_', amount: 1}}\n />\n </>\n ) : null}\n {props.strikeThroughDecorator ? (\n <CharacterPairDecoratorPlugin\n decorator={props.strikeThroughDecorator}\n pair={{char: '~', amount: 2}}\n />\n ) : null}\n </>\n )\n}\n"],"names":["createMarkdownBehaviors","config","automaticBlockquoteOnSpace","defineBehavior","on","guard","snapshot","event","text","selectionCollapsed","selectors","isSelectionCollapsed","focusTextBlock","getFocusTextBlock","focusSpan","getFocusSpan","previousInlineObject","getPreviousInlineObject","blockOffset","utils","spanSelectionPointToBlockOffset","context","selectionPoint","path","_key","node","offset","selection","focus","blockText","getTextBlockText","caretAtTheEndOfQuote","looksLikeMarkdownQuote","test","blockquoteStyle","schema","undefined","style","actions","execute","type","_","props","at","anchor","automaticHr","hrCharacter","hrObject","horizontalRuleObject","focusBlock","textBefore","getBlockTextBefore","hrBlockOffsets","block","_type","name","value","placement","select","automaticHrOnPaste","originEvent","dataTransfer","getData","hrRegExp","hrCharacters","match","getFocusBlock","children","automaticHeadingOnSpace","markdownHeadingSearch","exec","level","length","caretAtTheEndOfHeading","headingStyle","clearStyleOnBackspace","atTheBeginningOfBLock","defaultStyle","automaticListOnSpace","looksLikeUnorderedList","unorderedList","caretAtTheEndOfUnorderedList","listItem","listItemLength","looksLikeOrderedList","orderedList","caretAtTheEndOfOrderedList","MarkdownShortcutsPlugin","$","_c","editor","useEditor","t0","t1","unregisterBehaviors","map","behavior","registerBehavior","unregisterBehavior","useEffect","t2","boldDecorator","jsxs","Fragment","jsx","CharacterPairDecoratorPlugin","char","amount","t3","codeDecorator","t4","italicDecorator","t5","strikeThroughDecorator","t6"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../src/behavior.markdown-shortcuts.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'\nimport * as utils from '@portabletext/editor/utils'\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 headingStyle?: (context: {\n schema: EditorSchema\n level: number\n }) => string | undefined\n blockquoteStyle?: (context: {schema: EditorSchema}) => string | undefined\n unorderedList?: (context: {schema: EditorSchema}) => string | undefined\n orderedList?: (context: {schema: EditorSchema}) => string | undefined\n}\n\nexport function createMarkdownBehaviors(config: MarkdownBehaviorsConfig) {\n const automaticBlockquoteOnSpace = defineBehavior({\n on: 'insert.text',\n guard: ({snapshot, event}) => {\n const isSpace = event.text === ' '\n\n if (!isSpace) {\n return false\n }\n\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 previousInlineObject = selectors.getPreviousInlineObject(snapshot)\n const blockOffset = utils.spanSelectionPointToBlockOffset({\n context: snapshot.context,\n selectionPoint: {\n path: [\n {_key: focusTextBlock.node._key},\n 'children',\n {_key: focusSpan.node._key},\n ],\n offset: snapshot.context.selection?.focus.offset ?? 0,\n },\n })\n\n if (previousInlineObject || !blockOffset) {\n return false\n }\n\n const blockText = utils.getTextBlockText(focusTextBlock.node)\n const caretAtTheEndOfQuote = blockOffset.offset === 1\n const looksLikeMarkdownQuote = /^>/.test(blockText)\n const blockquoteStyle = config.blockquoteStyle?.({\n schema: snapshot.context.schema,\n })\n\n if (\n caretAtTheEndOfQuote &&\n looksLikeMarkdownQuote &&\n blockquoteStyle !== undefined\n ) {\n return {focusTextBlock, style: blockquoteStyle}\n }\n\n return false\n },\n actions: [\n () => [\n execute({\n type: 'insert.text',\n text: ' ',\n }),\n ],\n (_, {focusTextBlock, style}) => [\n execute({\n type: 'block.unset',\n props: ['listItem', 'level'],\n at: focusTextBlock.path,\n }),\n execute({\n type: 'block.set',\n props: {style},\n at: focusTextBlock.path,\n }),\n execute({\n type: 'delete.text',\n at: {\n anchor: {\n path: focusTextBlock.path,\n offset: 0,\n },\n focus: {\n path: focusTextBlock.path,\n offset: 2,\n },\n },\n }),\n ],\n ],\n })\n const automaticHr = defineBehavior({\n on: 'insert.text',\n guard: ({snapshot, event}) => {\n const hrCharacter =\n event.text === '-'\n ? '-'\n : event.text === '*'\n ? '*'\n : event.text === '_'\n ? '_'\n : undefined\n\n if (hrCharacter === undefined) {\n return false\n }\n\n const hrObject = config.horizontalRuleObject?.({\n schema: snapshot.context.schema,\n })\n const focusBlock = selectors.getFocusTextBlock(snapshot)\n const selectionCollapsed = selectors.isSelectionCollapsed(snapshot)\n\n if (!hrObject || !focusBlock || !selectionCollapsed) {\n return false\n }\n\n const previousInlineObject = selectors.getPreviousInlineObject(snapshot)\n const textBefore = selectors.getBlockTextBefore(snapshot)\n const hrBlockOffsets = {\n anchor: {\n path: focusBlock.path,\n offset: 0,\n },\n focus: {\n path: focusBlock.path,\n offset: 3,\n },\n }\n\n if (\n !previousInlineObject &&\n textBefore === `${hrCharacter}${hrCharacter}`\n ) {\n return {hrObject, focusBlock, hrCharacter, hrBlockOffsets}\n }\n\n return false\n },\n actions: [\n (_, {hrCharacter}) => [\n execute({\n type: 'insert.text',\n text: hrCharacter,\n }),\n ],\n (_, {hrObject, hrBlockOffsets}) => [\n execute({\n type: 'insert.block',\n block: {\n _type: hrObject.name,\n ...(hrObject.value ?? {}),\n },\n placement: 'before',\n select: 'none',\n }),\n execute({\n type: 'delete.text',\n at: hrBlockOffsets,\n }),\n ],\n ],\n })\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 const automaticHeadingOnSpace = defineBehavior({\n on: 'insert.text',\n guard: ({snapshot, event}) => {\n const isSpace = event.text === ' '\n\n if (!isSpace) {\n return false\n }\n\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 blockOffset = utils.spanSelectionPointToBlockOffset({\n context: snapshot.context,\n selectionPoint: {\n path: [\n {_key: focusTextBlock.node._key},\n 'children',\n {_key: focusSpan.node._key},\n ],\n offset: snapshot.context.selection?.focus.offset ?? 0,\n },\n })\n\n if (!blockOffset) {\n return false\n }\n\n const previousInlineObject = selectors.getPreviousInlineObject(snapshot)\n const blockText = utils.getTextBlockText(focusTextBlock.node)\n const markdownHeadingSearch = /^#+/.exec(blockText)\n const level = markdownHeadingSearch\n ? markdownHeadingSearch[0].length\n : undefined\n const caretAtTheEndOfHeading = blockOffset.offset === level\n\n if (previousInlineObject || !caretAtTheEndOfHeading) {\n return false\n }\n\n const style =\n level !== undefined\n ? config.headingStyle?.({schema: snapshot.context.schema, level})\n : undefined\n\n if (level !== undefined && style !== undefined) {\n return {\n focusTextBlock,\n style: style,\n level,\n }\n }\n\n return false\n },\n actions: [\n ({event}) => [execute(event)],\n (_, {focusTextBlock, style, level}) => [\n execute({\n type: 'block.unset',\n props: ['listItem', 'level'],\n at: focusTextBlock.path,\n }),\n execute({\n type: 'block.set',\n props: {style},\n at: focusTextBlock.path,\n }),\n execute({\n type: 'delete.text',\n at: {\n anchor: {\n path: focusTextBlock.path,\n offset: 0,\n },\n focus: {\n path: focusTextBlock.path,\n offset: level + 1,\n },\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 const automaticListOnSpace = defineBehavior({\n on: 'insert.text',\n guard: ({snapshot, event}) => {\n const isSpace = event.text === ' '\n\n if (!isSpace) {\n return false\n }\n\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 previousInlineObject = selectors.getPreviousInlineObject(snapshot)\n const blockOffset = utils.spanSelectionPointToBlockOffset({\n context: snapshot.context,\n selectionPoint: {\n path: [\n {_key: focusTextBlock.node._key},\n 'children',\n {_key: focusSpan.node._key},\n ],\n offset: snapshot.context.selection?.focus.offset ?? 0,\n },\n })\n\n if (previousInlineObject || !blockOffset) {\n return false\n }\n\n const blockText = utils.getTextBlockText(focusTextBlock.node)\n const defaultStyle = config.defaultStyle?.({\n schema: snapshot.context.schema,\n })\n const looksLikeUnorderedList = /^(-|\\*)/.test(blockText)\n const unorderedList = config.unorderedList?.({\n schema: snapshot.context.schema,\n })\n const caretAtTheEndOfUnorderedList = blockOffset.offset === 1\n\n if (\n defaultStyle &&\n caretAtTheEndOfUnorderedList &&\n looksLikeUnorderedList &&\n unorderedList !== undefined\n ) {\n return {\n focusTextBlock,\n listItem: unorderedList,\n listItemLength: 1,\n style: defaultStyle,\n }\n }\n\n const looksLikeOrderedList = /^1\\./.test(blockText)\n const orderedList = config.orderedList?.({\n schema: snapshot.context.schema,\n })\n const caretAtTheEndOfOrderedList = blockOffset.offset === 2\n\n if (\n defaultStyle &&\n caretAtTheEndOfOrderedList &&\n looksLikeOrderedList &&\n orderedList !== undefined\n ) {\n return {\n focusTextBlock,\n listItem: orderedList,\n listItemLength: 2,\n style: defaultStyle,\n }\n }\n\n return false\n },\n actions: [\n ({event}) => [execute(event)],\n (_, {focusTextBlock, style, listItem, listItemLength}) => [\n execute({\n type: 'block.set',\n props: {\n listItem,\n level: 1,\n style,\n },\n at: focusTextBlock.path,\n }),\n execute({\n type: 'delete.text',\n at: {\n anchor: {\n path: focusTextBlock.path,\n offset: 0,\n },\n focus: {\n path: focusTextBlock.path,\n offset: listItemLength + 1,\n },\n },\n }),\n ],\n ],\n })\n\n const markdownBehaviors = [\n automaticBlockquoteOnSpace,\n automaticHeadingOnSpace,\n automaticHr,\n automaticHrOnPaste,\n clearStyleOnBackspace,\n automaticListOnSpace,\n ]\n\n return markdownBehaviors\n}\n","import {useEditor} from '@portabletext/editor'\nimport type {EditorSchema} from '@portabletext/editor'\nimport {CharacterPairDecoratorPlugin} from '@portabletext/plugin-character-pair-decorator'\nimport {useEffect} from 'react'\nimport {\n createMarkdownBehaviors,\n type MarkdownBehaviorsConfig,\n} from './behavior.markdown-shortcuts'\n\n/**\n * @beta\n */\nexport type MarkdownShortcutsPluginProps = MarkdownBehaviorsConfig & {\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 italicDecorator,\n orderedList,\n strikeThroughDecorator,\n unorderedList,\n}: MarkdownShortcutsPluginProps) {\n const editor = useEditor()\n\n useEffect(() => {\n const behaviors = createMarkdownBehaviors({\n blockquoteStyle,\n defaultStyle,\n headingStyle,\n horizontalRuleObject,\n orderedList,\n unorderedList,\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 }, [\n blockquoteStyle,\n defaultStyle,\n editor,\n headingStyle,\n horizontalRuleObject,\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 </>\n )\n}\n"],"names":["createMarkdownBehaviors","config","automaticBlockquoteOnSpace","defineBehavior","on","guard","snapshot","event","text","selectionCollapsed","selectors","isSelectionCollapsed","focusTextBlock","getFocusTextBlock","focusSpan","getFocusSpan","previousInlineObject","getPreviousInlineObject","blockOffset","utils","spanSelectionPointToBlockOffset","context","selectionPoint","path","_key","node","offset","selection","focus","blockText","getTextBlockText","caretAtTheEndOfQuote","looksLikeMarkdownQuote","test","blockquoteStyle","schema","undefined","style","actions","execute","type","_","props","at","anchor","automaticHr","hrCharacter","hrObject","horizontalRuleObject","focusBlock","textBefore","getBlockTextBefore","hrBlockOffsets","block","_type","name","value","placement","select","automaticHrOnPaste","originEvent","dataTransfer","getData","hrRegExp","hrCharacters","match","getFocusBlock","children","automaticHeadingOnSpace","markdownHeadingSearch","exec","level","length","caretAtTheEndOfHeading","headingStyle","clearStyleOnBackspace","atTheBeginningOfBLock","defaultStyle","automaticListOnSpace","looksLikeUnorderedList","unorderedList","caretAtTheEndOfUnorderedList","listItem","listItemLength","looksLikeOrderedList","orderedList","caretAtTheEndOfOrderedList","MarkdownShortcutsPlugin","t0","$","_c","boldDecorator","codeDecorator","italicDecorator","strikeThroughDecorator","editor","useEditor","t1","t2","unregisterBehaviors","map","behavior","registerBehavior","unregisterBehavior","useEffect","t3","jsxs","Fragment","jsx","CharacterPairDecoratorPlugin","char","amount","t4","t5","t6","t7"],"mappings":"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"}
package/dist/index.d.cts CHANGED
@@ -23,9 +23,18 @@ declare type MarkdownBehaviorsConfig = {
23
23
  /**
24
24
  * @beta
25
25
  */
26
- export declare function MarkdownShortcutsPlugin(
27
- props: MarkdownShortcutsPluginProps,
28
- ): JSX.Element
26
+ export declare function MarkdownShortcutsPlugin({
27
+ blockquoteStyle,
28
+ boldDecorator,
29
+ codeDecorator,
30
+ defaultStyle,
31
+ headingStyle,
32
+ horizontalRuleObject,
33
+ italicDecorator,
34
+ orderedList,
35
+ strikeThroughDecorator,
36
+ unorderedList,
37
+ }: MarkdownShortcutsPluginProps): JSX.Element
29
38
 
30
39
  /**
31
40
  * @beta
package/dist/index.d.ts CHANGED
@@ -23,9 +23,18 @@ declare type MarkdownBehaviorsConfig = {
23
23
  /**
24
24
  * @beta
25
25
  */
26
- export declare function MarkdownShortcutsPlugin(
27
- props: MarkdownShortcutsPluginProps,
28
- ): JSX.Element
26
+ export declare function MarkdownShortcutsPlugin({
27
+ blockquoteStyle,
28
+ boldDecorator,
29
+ codeDecorator,
30
+ defaultStyle,
31
+ headingStyle,
32
+ horizontalRuleObject,
33
+ italicDecorator,
34
+ orderedList,
35
+ strikeThroughDecorator,
36
+ unorderedList,
37
+ }: MarkdownShortcutsPluginProps): JSX.Element
29
38
 
30
39
  /**
31
40
  * @beta
package/dist/index.js CHANGED
@@ -340,57 +340,75 @@ function createMarkdownBehaviors(config) {
340
340
  });
341
341
  return [automaticBlockquoteOnSpace, automaticHeadingOnSpace, automaticHr, automaticHrOnPaste, clearStyleOnBackspace, automaticListOnSpace];
342
342
  }
343
- function MarkdownShortcutsPlugin(props) {
344
- const $ = c(17), editor = useEditor();
345
- let t0, t1;
346
- $[0] !== editor || $[1] !== props ? (t0 = () => {
347
- const unregisterBehaviors = createMarkdownBehaviors(props).map((behavior) => editor.registerBehavior({
343
+ function MarkdownShortcutsPlugin(t0) {
344
+ const $ = c(22), {
345
+ blockquoteStyle,
346
+ boldDecorator,
347
+ codeDecorator,
348
+ defaultStyle,
349
+ headingStyle,
350
+ horizontalRuleObject,
351
+ italicDecorator,
352
+ orderedList,
353
+ strikeThroughDecorator,
354
+ unorderedList
355
+ } = t0, editor = useEditor();
356
+ let t1, t2;
357
+ $[0] !== blockquoteStyle || $[1] !== defaultStyle || $[2] !== editor || $[3] !== headingStyle || $[4] !== horizontalRuleObject || $[5] !== orderedList || $[6] !== unorderedList ? (t1 = () => {
358
+ const unregisterBehaviors = createMarkdownBehaviors({
359
+ blockquoteStyle,
360
+ defaultStyle,
361
+ headingStyle,
362
+ horizontalRuleObject,
363
+ orderedList,
364
+ unorderedList
365
+ }).map((behavior) => editor.registerBehavior({
348
366
  behavior
349
367
  }));
350
368
  return () => {
351
369
  for (const unregisterBehavior of unregisterBehaviors)
352
370
  unregisterBehavior();
353
371
  };
354
- }, t1 = [editor, props], $[0] = editor, $[1] = props, $[2] = t0, $[3] = t1) : (t0 = $[2], t1 = $[3]), useEffect(t0, t1);
355
- let t2;
356
- $[4] !== props.boldDecorator ? (t2 = props.boldDecorator ? /* @__PURE__ */ jsxs(Fragment, { children: [
357
- /* @__PURE__ */ jsx(CharacterPairDecoratorPlugin, { decorator: props.boldDecorator, pair: {
372
+ }, t2 = [blockquoteStyle, defaultStyle, editor, headingStyle, horizontalRuleObject, orderedList, unorderedList], $[0] = blockquoteStyle, $[1] = defaultStyle, $[2] = editor, $[3] = headingStyle, $[4] = horizontalRuleObject, $[5] = orderedList, $[6] = unorderedList, $[7] = t1, $[8] = t2) : (t1 = $[7], t2 = $[8]), useEffect(t1, t2);
373
+ let t3;
374
+ $[9] !== boldDecorator ? (t3 = boldDecorator ? /* @__PURE__ */ jsxs(Fragment, { children: [
375
+ /* @__PURE__ */ jsx(CharacterPairDecoratorPlugin, { decorator: boldDecorator, pair: {
358
376
  char: "*",
359
377
  amount: 2
360
378
  } }),
361
- /* @__PURE__ */ jsx(CharacterPairDecoratorPlugin, { decorator: props.boldDecorator, pair: {
379
+ /* @__PURE__ */ jsx(CharacterPairDecoratorPlugin, { decorator: boldDecorator, pair: {
362
380
  char: "_",
363
381
  amount: 2
364
382
  } })
365
- ] }) : null, $[4] = props.boldDecorator, $[5] = t2) : t2 = $[5];
366
- let t3;
367
- $[6] !== props.codeDecorator ? (t3 = props.codeDecorator ? /* @__PURE__ */ jsx(CharacterPairDecoratorPlugin, { decorator: props.codeDecorator, pair: {
383
+ ] }) : null, $[9] = boldDecorator, $[10] = t3) : t3 = $[10];
384
+ let t4;
385
+ $[11] !== codeDecorator ? (t4 = codeDecorator ? /* @__PURE__ */ jsx(CharacterPairDecoratorPlugin, { decorator: codeDecorator, pair: {
368
386
  char: "`",
369
387
  amount: 1
370
- } }) : null, $[6] = props.codeDecorator, $[7] = t3) : t3 = $[7];
371
- let t4;
372
- $[8] !== props.italicDecorator ? (t4 = props.italicDecorator ? /* @__PURE__ */ jsxs(Fragment, { children: [
373
- /* @__PURE__ */ jsx(CharacterPairDecoratorPlugin, { decorator: props.italicDecorator, pair: {
388
+ } }) : null, $[11] = codeDecorator, $[12] = t4) : t4 = $[12];
389
+ let t5;
390
+ $[13] !== italicDecorator ? (t5 = italicDecorator ? /* @__PURE__ */ jsxs(Fragment, { children: [
391
+ /* @__PURE__ */ jsx(CharacterPairDecoratorPlugin, { decorator: italicDecorator, pair: {
374
392
  char: "*",
375
393
  amount: 1
376
394
  } }),
377
- /* @__PURE__ */ jsx(CharacterPairDecoratorPlugin, { decorator: props.italicDecorator, pair: {
395
+ /* @__PURE__ */ jsx(CharacterPairDecoratorPlugin, { decorator: italicDecorator, pair: {
378
396
  char: "_",
379
397
  amount: 1
380
398
  } })
381
- ] }) : null, $[8] = props.italicDecorator, $[9] = t4) : t4 = $[9];
382
- let t5;
383
- $[10] !== props.strikeThroughDecorator ? (t5 = props.strikeThroughDecorator ? /* @__PURE__ */ jsx(CharacterPairDecoratorPlugin, { decorator: props.strikeThroughDecorator, pair: {
399
+ ] }) : null, $[13] = italicDecorator, $[14] = t5) : t5 = $[14];
400
+ let t6;
401
+ $[15] !== strikeThroughDecorator ? (t6 = strikeThroughDecorator ? /* @__PURE__ */ jsx(CharacterPairDecoratorPlugin, { decorator: strikeThroughDecorator, pair: {
384
402
  char: "~",
385
403
  amount: 2
386
- } }) : null, $[10] = props.strikeThroughDecorator, $[11] = t5) : t5 = $[11];
387
- let t6;
388
- return $[12] !== t2 || $[13] !== t3 || $[14] !== t4 || $[15] !== t5 ? (t6 = /* @__PURE__ */ jsxs(Fragment, { children: [
389
- t2,
404
+ } }) : null, $[15] = strikeThroughDecorator, $[16] = t6) : t6 = $[16];
405
+ let t7;
406
+ return $[17] !== t3 || $[18] !== t4 || $[19] !== t5 || $[20] !== t6 ? (t7 = /* @__PURE__ */ jsxs(Fragment, { children: [
390
407
  t3,
391
408
  t4,
392
- t5
393
- ] }), $[12] = t2, $[13] = t3, $[14] = t4, $[15] = t5, $[16] = t6) : t6 = $[16], t6;
409
+ t5,
410
+ t6
411
+ ] }), $[17] = t3, $[18] = t4, $[19] = t5, $[20] = t6, $[21] = t7) : t7 = $[21], t7;
394
412
  }
395
413
  export {
396
414
  MarkdownShortcutsPlugin
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/behavior.markdown-shortcuts.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'\nimport * as utils from '@portabletext/editor/utils'\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 headingStyle?: (context: {\n schema: EditorSchema\n level: number\n }) => string | undefined\n blockquoteStyle?: (context: {schema: EditorSchema}) => string | undefined\n unorderedList?: (context: {schema: EditorSchema}) => string | undefined\n orderedList?: (context: {schema: EditorSchema}) => string | undefined\n}\n\nexport function createMarkdownBehaviors(config: MarkdownBehaviorsConfig) {\n const automaticBlockquoteOnSpace = defineBehavior({\n on: 'insert.text',\n guard: ({snapshot, event}) => {\n const isSpace = event.text === ' '\n\n if (!isSpace) {\n return false\n }\n\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 previousInlineObject = selectors.getPreviousInlineObject(snapshot)\n const blockOffset = utils.spanSelectionPointToBlockOffset({\n context: snapshot.context,\n selectionPoint: {\n path: [\n {_key: focusTextBlock.node._key},\n 'children',\n {_key: focusSpan.node._key},\n ],\n offset: snapshot.context.selection?.focus.offset ?? 0,\n },\n })\n\n if (previousInlineObject || !blockOffset) {\n return false\n }\n\n const blockText = utils.getTextBlockText(focusTextBlock.node)\n const caretAtTheEndOfQuote = blockOffset.offset === 1\n const looksLikeMarkdownQuote = /^>/.test(blockText)\n const blockquoteStyle = config.blockquoteStyle?.({\n schema: snapshot.context.schema,\n })\n\n if (\n caretAtTheEndOfQuote &&\n looksLikeMarkdownQuote &&\n blockquoteStyle !== undefined\n ) {\n return {focusTextBlock, style: blockquoteStyle}\n }\n\n return false\n },\n actions: [\n () => [\n execute({\n type: 'insert.text',\n text: ' ',\n }),\n ],\n (_, {focusTextBlock, style}) => [\n execute({\n type: 'block.unset',\n props: ['listItem', 'level'],\n at: focusTextBlock.path,\n }),\n execute({\n type: 'block.set',\n props: {style},\n at: focusTextBlock.path,\n }),\n execute({\n type: 'delete.text',\n at: {\n anchor: {\n path: focusTextBlock.path,\n offset: 0,\n },\n focus: {\n path: focusTextBlock.path,\n offset: 2,\n },\n },\n }),\n ],\n ],\n })\n const automaticHr = defineBehavior({\n on: 'insert.text',\n guard: ({snapshot, event}) => {\n const hrCharacter =\n event.text === '-'\n ? '-'\n : event.text === '*'\n ? '*'\n : event.text === '_'\n ? '_'\n : undefined\n\n if (hrCharacter === undefined) {\n return false\n }\n\n const hrObject = config.horizontalRuleObject?.({\n schema: snapshot.context.schema,\n })\n const focusBlock = selectors.getFocusTextBlock(snapshot)\n const selectionCollapsed = selectors.isSelectionCollapsed(snapshot)\n\n if (!hrObject || !focusBlock || !selectionCollapsed) {\n return false\n }\n\n const previousInlineObject = selectors.getPreviousInlineObject(snapshot)\n const textBefore = selectors.getBlockTextBefore(snapshot)\n const hrBlockOffsets = {\n anchor: {\n path: focusBlock.path,\n offset: 0,\n },\n focus: {\n path: focusBlock.path,\n offset: 3,\n },\n }\n\n if (\n !previousInlineObject &&\n textBefore === `${hrCharacter}${hrCharacter}`\n ) {\n return {hrObject, focusBlock, hrCharacter, hrBlockOffsets}\n }\n\n return false\n },\n actions: [\n (_, {hrCharacter}) => [\n execute({\n type: 'insert.text',\n text: hrCharacter,\n }),\n ],\n (_, {hrObject, hrBlockOffsets}) => [\n execute({\n type: 'insert.block',\n block: {\n _type: hrObject.name,\n ...(hrObject.value ?? {}),\n },\n placement: 'before',\n select: 'none',\n }),\n execute({\n type: 'delete.text',\n at: hrBlockOffsets,\n }),\n ],\n ],\n })\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 const automaticHeadingOnSpace = defineBehavior({\n on: 'insert.text',\n guard: ({snapshot, event}) => {\n const isSpace = event.text === ' '\n\n if (!isSpace) {\n return false\n }\n\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 blockOffset = utils.spanSelectionPointToBlockOffset({\n context: snapshot.context,\n selectionPoint: {\n path: [\n {_key: focusTextBlock.node._key},\n 'children',\n {_key: focusSpan.node._key},\n ],\n offset: snapshot.context.selection?.focus.offset ?? 0,\n },\n })\n\n if (!blockOffset) {\n return false\n }\n\n const previousInlineObject = selectors.getPreviousInlineObject(snapshot)\n const blockText = utils.getTextBlockText(focusTextBlock.node)\n const markdownHeadingSearch = /^#+/.exec(blockText)\n const level = markdownHeadingSearch\n ? markdownHeadingSearch[0].length\n : undefined\n const caretAtTheEndOfHeading = blockOffset.offset === level\n\n if (previousInlineObject || !caretAtTheEndOfHeading) {\n return false\n }\n\n const style =\n level !== undefined\n ? config.headingStyle?.({schema: snapshot.context.schema, level})\n : undefined\n\n if (level !== undefined && style !== undefined) {\n return {\n focusTextBlock,\n style: style,\n level,\n }\n }\n\n return false\n },\n actions: [\n ({event}) => [execute(event)],\n (_, {focusTextBlock, style, level}) => [\n execute({\n type: 'block.unset',\n props: ['listItem', 'level'],\n at: focusTextBlock.path,\n }),\n execute({\n type: 'block.set',\n props: {style},\n at: focusTextBlock.path,\n }),\n execute({\n type: 'delete.text',\n at: {\n anchor: {\n path: focusTextBlock.path,\n offset: 0,\n },\n focus: {\n path: focusTextBlock.path,\n offset: level + 1,\n },\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 const automaticListOnSpace = defineBehavior({\n on: 'insert.text',\n guard: ({snapshot, event}) => {\n const isSpace = event.text === ' '\n\n if (!isSpace) {\n return false\n }\n\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 previousInlineObject = selectors.getPreviousInlineObject(snapshot)\n const blockOffset = utils.spanSelectionPointToBlockOffset({\n context: snapshot.context,\n selectionPoint: {\n path: [\n {_key: focusTextBlock.node._key},\n 'children',\n {_key: focusSpan.node._key},\n ],\n offset: snapshot.context.selection?.focus.offset ?? 0,\n },\n })\n\n if (previousInlineObject || !blockOffset) {\n return false\n }\n\n const blockText = utils.getTextBlockText(focusTextBlock.node)\n const defaultStyle = config.defaultStyle?.({\n schema: snapshot.context.schema,\n })\n const looksLikeUnorderedList = /^(-|\\*)/.test(blockText)\n const unorderedList = config.unorderedList?.({\n schema: snapshot.context.schema,\n })\n const caretAtTheEndOfUnorderedList = blockOffset.offset === 1\n\n if (\n defaultStyle &&\n caretAtTheEndOfUnorderedList &&\n looksLikeUnorderedList &&\n unorderedList !== undefined\n ) {\n return {\n focusTextBlock,\n listItem: unorderedList,\n listItemLength: 1,\n style: defaultStyle,\n }\n }\n\n const looksLikeOrderedList = /^1\\./.test(blockText)\n const orderedList = config.orderedList?.({\n schema: snapshot.context.schema,\n })\n const caretAtTheEndOfOrderedList = blockOffset.offset === 2\n\n if (\n defaultStyle &&\n caretAtTheEndOfOrderedList &&\n looksLikeOrderedList &&\n orderedList !== undefined\n ) {\n return {\n focusTextBlock,\n listItem: orderedList,\n listItemLength: 2,\n style: defaultStyle,\n }\n }\n\n return false\n },\n actions: [\n ({event}) => [execute(event)],\n (_, {focusTextBlock, style, listItem, listItemLength}) => [\n execute({\n type: 'block.set',\n props: {\n listItem,\n level: 1,\n style,\n },\n at: focusTextBlock.path,\n }),\n execute({\n type: 'delete.text',\n at: {\n anchor: {\n path: focusTextBlock.path,\n offset: 0,\n },\n focus: {\n path: focusTextBlock.path,\n offset: listItemLength + 1,\n },\n },\n }),\n ],\n ],\n })\n\n const markdownBehaviors = [\n automaticBlockquoteOnSpace,\n automaticHeadingOnSpace,\n automaticHr,\n automaticHrOnPaste,\n clearStyleOnBackspace,\n automaticListOnSpace,\n ]\n\n return markdownBehaviors\n}\n","import {useEditor} from '@portabletext/editor'\nimport type {EditorSchema} from '@portabletext/editor'\nimport {CharacterPairDecoratorPlugin} from '@portabletext/plugin-character-pair-decorator'\nimport {useEffect} from 'react'\nimport {\n createMarkdownBehaviors,\n type MarkdownBehaviorsConfig,\n} from './behavior.markdown-shortcuts'\n\n/**\n * @beta\n */\nexport type MarkdownShortcutsPluginProps = MarkdownBehaviorsConfig & {\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(props: MarkdownShortcutsPluginProps) {\n const editor = useEditor()\n\n useEffect(() => {\n const behaviors = createMarkdownBehaviors(props)\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 }, [editor, props])\n\n return (\n <>\n {props.boldDecorator ? (\n <>\n <CharacterPairDecoratorPlugin\n decorator={props.boldDecorator}\n pair={{char: '*', amount: 2}}\n />\n <CharacterPairDecoratorPlugin\n decorator={props.boldDecorator}\n pair={{char: '_', amount: 2}}\n />\n </>\n ) : null}\n {props.codeDecorator ? (\n <CharacterPairDecoratorPlugin\n decorator={props.codeDecorator}\n pair={{char: '`', amount: 1}}\n />\n ) : null}\n {props.italicDecorator ? (\n <>\n <CharacterPairDecoratorPlugin\n decorator={props.italicDecorator}\n pair={{char: '*', amount: 1}}\n />\n <CharacterPairDecoratorPlugin\n decorator={props.italicDecorator}\n pair={{char: '_', amount: 1}}\n />\n </>\n ) : null}\n {props.strikeThroughDecorator ? (\n <CharacterPairDecoratorPlugin\n decorator={props.strikeThroughDecorator}\n pair={{char: '~', amount: 2}}\n />\n ) : null}\n </>\n )\n}\n"],"names":["createMarkdownBehaviors","config","automaticBlockquoteOnSpace","defineBehavior","on","guard","snapshot","event","text","selectionCollapsed","selectors","isSelectionCollapsed","focusTextBlock","getFocusTextBlock","focusSpan","getFocusSpan","previousInlineObject","getPreviousInlineObject","blockOffset","utils","spanSelectionPointToBlockOffset","context","selectionPoint","path","_key","node","offset","selection","focus","blockText","getTextBlockText","caretAtTheEndOfQuote","looksLikeMarkdownQuote","test","blockquoteStyle","schema","undefined","style","actions","execute","type","_","props","at","anchor","automaticHr","hrCharacter","hrObject","horizontalRuleObject","focusBlock","textBefore","getBlockTextBefore","hrBlockOffsets","block","_type","name","value","placement","select","automaticHrOnPaste","originEvent","dataTransfer","getData","hrRegExp","hrCharacters","match","getFocusBlock","children","automaticHeadingOnSpace","markdownHeadingSearch","exec","level","length","caretAtTheEndOfHeading","headingStyle","clearStyleOnBackspace","atTheBeginningOfBLock","defaultStyle","automaticListOnSpace","looksLikeUnorderedList","unorderedList","caretAtTheEndOfUnorderedList","listItem","listItemLength","looksLikeOrderedList","orderedList","caretAtTheEndOfOrderedList","MarkdownShortcutsPlugin","$","_c","editor","useEditor","t0","t1","unregisterBehaviors","map","behavior","registerBehavior","unregisterBehavior","useEffect","t2","boldDecorator","char","amount","t3","codeDecorator","t4","italicDecorator","t5","strikeThroughDecorator","t6"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/behavior.markdown-shortcuts.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'\nimport * as utils from '@portabletext/editor/utils'\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 headingStyle?: (context: {\n schema: EditorSchema\n level: number\n }) => string | undefined\n blockquoteStyle?: (context: {schema: EditorSchema}) => string | undefined\n unorderedList?: (context: {schema: EditorSchema}) => string | undefined\n orderedList?: (context: {schema: EditorSchema}) => string | undefined\n}\n\nexport function createMarkdownBehaviors(config: MarkdownBehaviorsConfig) {\n const automaticBlockquoteOnSpace = defineBehavior({\n on: 'insert.text',\n guard: ({snapshot, event}) => {\n const isSpace = event.text === ' '\n\n if (!isSpace) {\n return false\n }\n\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 previousInlineObject = selectors.getPreviousInlineObject(snapshot)\n const blockOffset = utils.spanSelectionPointToBlockOffset({\n context: snapshot.context,\n selectionPoint: {\n path: [\n {_key: focusTextBlock.node._key},\n 'children',\n {_key: focusSpan.node._key},\n ],\n offset: snapshot.context.selection?.focus.offset ?? 0,\n },\n })\n\n if (previousInlineObject || !blockOffset) {\n return false\n }\n\n const blockText = utils.getTextBlockText(focusTextBlock.node)\n const caretAtTheEndOfQuote = blockOffset.offset === 1\n const looksLikeMarkdownQuote = /^>/.test(blockText)\n const blockquoteStyle = config.blockquoteStyle?.({\n schema: snapshot.context.schema,\n })\n\n if (\n caretAtTheEndOfQuote &&\n looksLikeMarkdownQuote &&\n blockquoteStyle !== undefined\n ) {\n return {focusTextBlock, style: blockquoteStyle}\n }\n\n return false\n },\n actions: [\n () => [\n execute({\n type: 'insert.text',\n text: ' ',\n }),\n ],\n (_, {focusTextBlock, style}) => [\n execute({\n type: 'block.unset',\n props: ['listItem', 'level'],\n at: focusTextBlock.path,\n }),\n execute({\n type: 'block.set',\n props: {style},\n at: focusTextBlock.path,\n }),\n execute({\n type: 'delete.text',\n at: {\n anchor: {\n path: focusTextBlock.path,\n offset: 0,\n },\n focus: {\n path: focusTextBlock.path,\n offset: 2,\n },\n },\n }),\n ],\n ],\n })\n const automaticHr = defineBehavior({\n on: 'insert.text',\n guard: ({snapshot, event}) => {\n const hrCharacter =\n event.text === '-'\n ? '-'\n : event.text === '*'\n ? '*'\n : event.text === '_'\n ? '_'\n : undefined\n\n if (hrCharacter === undefined) {\n return false\n }\n\n const hrObject = config.horizontalRuleObject?.({\n schema: snapshot.context.schema,\n })\n const focusBlock = selectors.getFocusTextBlock(snapshot)\n const selectionCollapsed = selectors.isSelectionCollapsed(snapshot)\n\n if (!hrObject || !focusBlock || !selectionCollapsed) {\n return false\n }\n\n const previousInlineObject = selectors.getPreviousInlineObject(snapshot)\n const textBefore = selectors.getBlockTextBefore(snapshot)\n const hrBlockOffsets = {\n anchor: {\n path: focusBlock.path,\n offset: 0,\n },\n focus: {\n path: focusBlock.path,\n offset: 3,\n },\n }\n\n if (\n !previousInlineObject &&\n textBefore === `${hrCharacter}${hrCharacter}`\n ) {\n return {hrObject, focusBlock, hrCharacter, hrBlockOffsets}\n }\n\n return false\n },\n actions: [\n (_, {hrCharacter}) => [\n execute({\n type: 'insert.text',\n text: hrCharacter,\n }),\n ],\n (_, {hrObject, hrBlockOffsets}) => [\n execute({\n type: 'insert.block',\n block: {\n _type: hrObject.name,\n ...(hrObject.value ?? {}),\n },\n placement: 'before',\n select: 'none',\n }),\n execute({\n type: 'delete.text',\n at: hrBlockOffsets,\n }),\n ],\n ],\n })\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 const automaticHeadingOnSpace = defineBehavior({\n on: 'insert.text',\n guard: ({snapshot, event}) => {\n const isSpace = event.text === ' '\n\n if (!isSpace) {\n return false\n }\n\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 blockOffset = utils.spanSelectionPointToBlockOffset({\n context: snapshot.context,\n selectionPoint: {\n path: [\n {_key: focusTextBlock.node._key},\n 'children',\n {_key: focusSpan.node._key},\n ],\n offset: snapshot.context.selection?.focus.offset ?? 0,\n },\n })\n\n if (!blockOffset) {\n return false\n }\n\n const previousInlineObject = selectors.getPreviousInlineObject(snapshot)\n const blockText = utils.getTextBlockText(focusTextBlock.node)\n const markdownHeadingSearch = /^#+/.exec(blockText)\n const level = markdownHeadingSearch\n ? markdownHeadingSearch[0].length\n : undefined\n const caretAtTheEndOfHeading = blockOffset.offset === level\n\n if (previousInlineObject || !caretAtTheEndOfHeading) {\n return false\n }\n\n const style =\n level !== undefined\n ? config.headingStyle?.({schema: snapshot.context.schema, level})\n : undefined\n\n if (level !== undefined && style !== undefined) {\n return {\n focusTextBlock,\n style: style,\n level,\n }\n }\n\n return false\n },\n actions: [\n ({event}) => [execute(event)],\n (_, {focusTextBlock, style, level}) => [\n execute({\n type: 'block.unset',\n props: ['listItem', 'level'],\n at: focusTextBlock.path,\n }),\n execute({\n type: 'block.set',\n props: {style},\n at: focusTextBlock.path,\n }),\n execute({\n type: 'delete.text',\n at: {\n anchor: {\n path: focusTextBlock.path,\n offset: 0,\n },\n focus: {\n path: focusTextBlock.path,\n offset: level + 1,\n },\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 const automaticListOnSpace = defineBehavior({\n on: 'insert.text',\n guard: ({snapshot, event}) => {\n const isSpace = event.text === ' '\n\n if (!isSpace) {\n return false\n }\n\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 previousInlineObject = selectors.getPreviousInlineObject(snapshot)\n const blockOffset = utils.spanSelectionPointToBlockOffset({\n context: snapshot.context,\n selectionPoint: {\n path: [\n {_key: focusTextBlock.node._key},\n 'children',\n {_key: focusSpan.node._key},\n ],\n offset: snapshot.context.selection?.focus.offset ?? 0,\n },\n })\n\n if (previousInlineObject || !blockOffset) {\n return false\n }\n\n const blockText = utils.getTextBlockText(focusTextBlock.node)\n const defaultStyle = config.defaultStyle?.({\n schema: snapshot.context.schema,\n })\n const looksLikeUnorderedList = /^(-|\\*)/.test(blockText)\n const unorderedList = config.unorderedList?.({\n schema: snapshot.context.schema,\n })\n const caretAtTheEndOfUnorderedList = blockOffset.offset === 1\n\n if (\n defaultStyle &&\n caretAtTheEndOfUnorderedList &&\n looksLikeUnorderedList &&\n unorderedList !== undefined\n ) {\n return {\n focusTextBlock,\n listItem: unorderedList,\n listItemLength: 1,\n style: defaultStyle,\n }\n }\n\n const looksLikeOrderedList = /^1\\./.test(blockText)\n const orderedList = config.orderedList?.({\n schema: snapshot.context.schema,\n })\n const caretAtTheEndOfOrderedList = blockOffset.offset === 2\n\n if (\n defaultStyle &&\n caretAtTheEndOfOrderedList &&\n looksLikeOrderedList &&\n orderedList !== undefined\n ) {\n return {\n focusTextBlock,\n listItem: orderedList,\n listItemLength: 2,\n style: defaultStyle,\n }\n }\n\n return false\n },\n actions: [\n ({event}) => [execute(event)],\n (_, {focusTextBlock, style, listItem, listItemLength}) => [\n execute({\n type: 'block.set',\n props: {\n listItem,\n level: 1,\n style,\n },\n at: focusTextBlock.path,\n }),\n execute({\n type: 'delete.text',\n at: {\n anchor: {\n path: focusTextBlock.path,\n offset: 0,\n },\n focus: {\n path: focusTextBlock.path,\n offset: listItemLength + 1,\n },\n },\n }),\n ],\n ],\n })\n\n const markdownBehaviors = [\n automaticBlockquoteOnSpace,\n automaticHeadingOnSpace,\n automaticHr,\n automaticHrOnPaste,\n clearStyleOnBackspace,\n automaticListOnSpace,\n ]\n\n return markdownBehaviors\n}\n","import {useEditor} from '@portabletext/editor'\nimport type {EditorSchema} from '@portabletext/editor'\nimport {CharacterPairDecoratorPlugin} from '@portabletext/plugin-character-pair-decorator'\nimport {useEffect} from 'react'\nimport {\n createMarkdownBehaviors,\n type MarkdownBehaviorsConfig,\n} from './behavior.markdown-shortcuts'\n\n/**\n * @beta\n */\nexport type MarkdownShortcutsPluginProps = MarkdownBehaviorsConfig & {\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 italicDecorator,\n orderedList,\n strikeThroughDecorator,\n unorderedList,\n}: MarkdownShortcutsPluginProps) {\n const editor = useEditor()\n\n useEffect(() => {\n const behaviors = createMarkdownBehaviors({\n blockquoteStyle,\n defaultStyle,\n headingStyle,\n horizontalRuleObject,\n orderedList,\n unorderedList,\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 }, [\n blockquoteStyle,\n defaultStyle,\n editor,\n headingStyle,\n horizontalRuleObject,\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 </>\n )\n}\n"],"names":["createMarkdownBehaviors","config","automaticBlockquoteOnSpace","defineBehavior","on","guard","snapshot","event","text","selectionCollapsed","selectors","isSelectionCollapsed","focusTextBlock","getFocusTextBlock","focusSpan","getFocusSpan","previousInlineObject","getPreviousInlineObject","blockOffset","utils","spanSelectionPointToBlockOffset","context","selectionPoint","path","_key","node","offset","selection","focus","blockText","getTextBlockText","caretAtTheEndOfQuote","looksLikeMarkdownQuote","test","blockquoteStyle","schema","undefined","style","actions","execute","type","_","props","at","anchor","automaticHr","hrCharacter","hrObject","horizontalRuleObject","focusBlock","textBefore","getBlockTextBefore","hrBlockOffsets","block","_type","name","value","placement","select","automaticHrOnPaste","originEvent","dataTransfer","getData","hrRegExp","hrCharacters","match","getFocusBlock","children","automaticHeadingOnSpace","markdownHeadingSearch","exec","level","length","caretAtTheEndOfHeading","headingStyle","clearStyleOnBackspace","atTheBeginningOfBLock","defaultStyle","automaticListOnSpace","looksLikeUnorderedList","unorderedList","caretAtTheEndOfUnorderedList","listItem","listItemLength","looksLikeOrderedList","orderedList","caretAtTheEndOfOrderedList","MarkdownShortcutsPlugin","t0","$","_c","boldDecorator","codeDecorator","italicDecorator","strikeThroughDecorator","editor","useEditor","t1","t2","unregisterBehaviors","map","behavior","registerBehavior","unregisterBehavior","useEffect","t3","char","amount","t4","t5","t6","t7"],"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.1.0",
3
+ "version": "1.1.1",
4
4
  "description": "Adds helpful Markdown shortcuts to the editor",
5
5
  "keywords": [
6
6
  "portabletext",
@@ -39,17 +39,17 @@
39
39
  "dist"
40
40
  ],
41
41
  "devDependencies": {
42
- "@portabletext/editor": "^2.4.1",
42
+ "@portabletext/editor": "^2.6.9",
43
43
  "@types/react": "^19.1.2",
44
44
  "babel-plugin-react-compiler": "19.1.0-rc.3",
45
45
  "react": "^19.1.0"
46
46
  },
47
47
  "peerDependencies": {
48
- "@portabletext/editor": "^2.4.1",
48
+ "@portabletext/editor": "^2.6.9",
49
49
  "react": "^19"
50
50
  },
51
51
  "dependencies": {
52
- "@portabletext/plugin-character-pair-decorator": "^1.1.0"
52
+ "@portabletext/plugin-character-pair-decorator": "^1.1.1"
53
53
  },
54
54
  "scripts": {
55
55
  "build": "pkg-utils build --strict --check --clean",
@@ -24,11 +24,29 @@ export type MarkdownShortcutsPluginProps = MarkdownBehaviorsConfig & {
24
24
  /**
25
25
  * @beta
26
26
  */
27
- export function MarkdownShortcutsPlugin(props: MarkdownShortcutsPluginProps) {
27
+ export function MarkdownShortcutsPlugin({
28
+ blockquoteStyle,
29
+ boldDecorator,
30
+ codeDecorator,
31
+ defaultStyle,
32
+ headingStyle,
33
+ horizontalRuleObject,
34
+ italicDecorator,
35
+ orderedList,
36
+ strikeThroughDecorator,
37
+ unorderedList,
38
+ }: MarkdownShortcutsPluginProps) {
28
39
  const editor = useEditor()
29
40
 
30
41
  useEffect(() => {
31
- const behaviors = createMarkdownBehaviors(props)
42
+ const behaviors = createMarkdownBehaviors({
43
+ blockquoteStyle,
44
+ defaultStyle,
45
+ headingStyle,
46
+ horizontalRuleObject,
47
+ orderedList,
48
+ unorderedList,
49
+ })
32
50
 
33
51
  const unregisterBehaviors = behaviors.map((behavior) =>
34
52
  editor.registerBehavior({behavior}),
@@ -39,43 +57,51 @@ export function MarkdownShortcutsPlugin(props: MarkdownShortcutsPluginProps) {
39
57
  unregisterBehavior()
40
58
  }
41
59
  }
42
- }, [editor, props])
60
+ }, [
61
+ blockquoteStyle,
62
+ defaultStyle,
63
+ editor,
64
+ headingStyle,
65
+ horizontalRuleObject,
66
+ orderedList,
67
+ unorderedList,
68
+ ])
43
69
 
44
70
  return (
45
71
  <>
46
- {props.boldDecorator ? (
72
+ {boldDecorator ? (
47
73
  <>
48
74
  <CharacterPairDecoratorPlugin
49
- decorator={props.boldDecorator}
75
+ decorator={boldDecorator}
50
76
  pair={{char: '*', amount: 2}}
51
77
  />
52
78
  <CharacterPairDecoratorPlugin
53
- decorator={props.boldDecorator}
79
+ decorator={boldDecorator}
54
80
  pair={{char: '_', amount: 2}}
55
81
  />
56
82
  </>
57
83
  ) : null}
58
- {props.codeDecorator ? (
84
+ {codeDecorator ? (
59
85
  <CharacterPairDecoratorPlugin
60
- decorator={props.codeDecorator}
86
+ decorator={codeDecorator}
61
87
  pair={{char: '`', amount: 1}}
62
88
  />
63
89
  ) : null}
64
- {props.italicDecorator ? (
90
+ {italicDecorator ? (
65
91
  <>
66
92
  <CharacterPairDecoratorPlugin
67
- decorator={props.italicDecorator}
93
+ decorator={italicDecorator}
68
94
  pair={{char: '*', amount: 1}}
69
95
  />
70
96
  <CharacterPairDecoratorPlugin
71
- decorator={props.italicDecorator}
97
+ decorator={italicDecorator}
72
98
  pair={{char: '_', amount: 1}}
73
99
  />
74
100
  </>
75
101
  ) : null}
76
- {props.strikeThroughDecorator ? (
102
+ {strikeThroughDecorator ? (
77
103
  <CharacterPairDecoratorPlugin
78
- decorator={props.strikeThroughDecorator}
104
+ decorator={strikeThroughDecorator}
79
105
  pair={{char: '~', amount: 2}}
80
106
  />
81
107
  ) : null}