@portabletext/plugin-markdown-shortcuts 1.4.15 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -207,7 +207,7 @@ function createHorizontalRuleRule(config) {
207
207
  }
208
208
  function createMarkdownLinkRule(config) {
209
209
  return defineInputRule({
210
- on: /\[([^\[\]]+)]\((.+)\)/,
210
+ on: /\[([^[\]]+)]\((.+)\)/,
211
211
  actions: [({
212
212
  snapshot,
213
213
  event
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, 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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"}
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.15",
3
+ "version": "2.0.0",
4
4
  "description": "Adds helpful Markdown shortcuts to the editor",
5
5
  "keywords": [
6
6
  "portabletext",
@@ -25,22 +25,19 @@
25
25
  "exports": {
26
26
  ".": {
27
27
  "source": "./src/index.ts",
28
- "import": "./dist/index.js",
29
- "require": "./dist/index.cjs",
30
28
  "default": "./dist/index.js"
31
29
  },
32
30
  "./package.json": "./package.json"
33
31
  },
34
- "main": "./dist/index.cjs",
35
- "module": "./dist/index.js",
32
+ "main": "./dist/index.js",
36
33
  "types": "./dist/index.d.ts",
37
34
  "files": [
38
35
  "src",
39
36
  "dist"
40
37
  ],
41
38
  "dependencies": {
42
- "@portabletext/plugin-character-pair-decorator": "^1.1.18",
43
- "@portabletext/plugin-input-rule": "~0.4.4"
39
+ "@portabletext/plugin-character-pair-decorator": "^2.0.0",
40
+ "@portabletext/plugin-input-rule": "~0.5.0"
44
41
  },
45
42
  "devDependencies": {
46
43
  "@types/react": "^19.1.12",
@@ -54,12 +51,15 @@
54
51
  "typescript": "5.9.3",
55
52
  "typescript-eslint": "^8.46.1",
56
53
  "vitest": "^4.0.5",
57
- "@portabletext/editor": "^2.17.2",
58
- "racejar": "1.3.2"
54
+ "@portabletext/editor": "^2.18.0",
55
+ "racejar": "2.0.0"
59
56
  },
60
57
  "peerDependencies": {
61
58
  "react": "^19",
62
- "@portabletext/editor": "^2.17.2"
59
+ "@portabletext/editor": "^2.18.0"
60
+ },
61
+ "engines": {
62
+ "node": ">=20.19 <22 || >=22.12"
63
63
  },
64
64
  "scripts": {
65
65
  "build": "pkg-utils build --strict --check --clean",
@@ -9,7 +9,7 @@ export function createMarkdownLinkRule(config: {
9
9
  }) => {name: string; value?: {[prop: string]: unknown}} | undefined
10
10
  }) {
11
11
  return defineInputRule({
12
- on: /\[([^\[\]]+)]\((.+)\)/,
12
+ on: /\[([^[\]]+)]\((.+)\)/,
13
13
  actions: [
14
14
  ({snapshot, event}) => {
15
15
  const newText = event.textBefore + event.textInserted
package/dist/index.cjs DELETED
@@ -1,469 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: !0 });
3
- var jsxRuntime = require("react/jsx-runtime"), compilerRuntime = require("react/compiler-runtime"), editor = require("@portabletext/editor"), pluginCharacterPairDecorator = require("@portabletext/plugin-character-pair-decorator"), pluginInputRule = require("@portabletext/plugin-input-rule"), react = require("react"), behaviors = require("@portabletext/editor/behaviors"), selectors = require("@portabletext/editor/selectors");
4
- function _interopNamespaceCompat(e) {
5
- if (e && typeof e == "object" && "default" in e) return e;
6
- var n = /* @__PURE__ */ Object.create(null);
7
- return e && Object.keys(e).forEach(function(k) {
8
- if (k !== "default") {
9
- var d = Object.getOwnPropertyDescriptor(e, k);
10
- Object.defineProperty(n, k, d.get ? d : {
11
- enumerable: !0,
12
- get: function() {
13
- return e[k];
14
- }
15
- });
16
- }
17
- }), n.default = e, Object.freeze(n);
18
- }
19
- var selectors__namespace = /* @__PURE__ */ _interopNamespaceCompat(selectors);
20
- function createMarkdownBehaviors(config) {
21
- const automaticHrOnPaste = behaviors.defineBehavior({
22
- on: "clipboard.paste",
23
- guard: ({
24
- snapshot,
25
- event
26
- }) => {
27
- const text = event.originEvent.dataTransfer.getData("text/plain"), hrRegExp = /^(---)$|^(—-)$|^(___)$|^(\*\*\*)$/, hrCharacters = text.match(hrRegExp)?.[0], hrObject = config.horizontalRuleObject?.({
28
- schema: snapshot.context.schema
29
- }), focusBlock = selectors__namespace.getFocusBlock(snapshot), focusTextBlock = selectors__namespace.getFocusTextBlock(snapshot);
30
- return !hrCharacters || !hrObject || !focusBlock ? !1 : {
31
- hrCharacters,
32
- hrObject,
33
- focusBlock,
34
- focusTextBlock
35
- };
36
- },
37
- actions: [(_, {
38
- hrCharacters
39
- }) => [behaviors.execute({
40
- type: "insert.text",
41
- text: hrCharacters
42
- })], ({
43
- snapshot
44
- }, {
45
- hrObject,
46
- focusBlock,
47
- focusTextBlock
48
- }) => focusTextBlock ? [behaviors.execute({
49
- type: "insert.block",
50
- block: {
51
- _type: snapshot.context.schema.block.name,
52
- children: focusTextBlock.node.children
53
- },
54
- placement: "after"
55
- }), behaviors.execute({
56
- type: "insert.block",
57
- block: {
58
- _type: hrObject.name,
59
- ...hrObject.value ?? {}
60
- },
61
- placement: "after"
62
- }), behaviors.execute({
63
- type: "delete.block",
64
- at: focusBlock.path
65
- })] : [behaviors.execute({
66
- type: "insert.block",
67
- block: {
68
- _type: hrObject.name,
69
- ...hrObject.value ?? {}
70
- },
71
- placement: "after"
72
- })]]
73
- }), clearStyleOnBackspace = behaviors.defineBehavior({
74
- on: "delete.backward",
75
- guard: ({
76
- snapshot
77
- }) => {
78
- const selectionCollapsed = selectors__namespace.isSelectionCollapsed(snapshot), focusTextBlock = selectors__namespace.getFocusTextBlock(snapshot), focusSpan = selectors__namespace.getFocusSpan(snapshot);
79
- if (!selectionCollapsed || !focusTextBlock || !focusSpan)
80
- return !1;
81
- const atTheBeginningOfBLock = focusTextBlock.node.children[0]._key === focusSpan.node._key && snapshot.context.selection?.focus.offset === 0, defaultStyle = config.defaultStyle?.({
82
- schema: snapshot.context.schema
83
- });
84
- return atTheBeginningOfBLock && defaultStyle && focusTextBlock.node.style !== defaultStyle ? {
85
- defaultStyle,
86
- focusTextBlock
87
- } : !1;
88
- },
89
- actions: [(_, {
90
- defaultStyle,
91
- focusTextBlock
92
- }) => [behaviors.execute({
93
- type: "block.set",
94
- props: {
95
- style: defaultStyle
96
- },
97
- at: focusTextBlock.path
98
- })]]
99
- });
100
- return [automaticHrOnPaste, clearStyleOnBackspace];
101
- }
102
- function createBlockquoteRule(config) {
103
- return pluginInputRule.defineInputRule({
104
- on: /^> /,
105
- guard: ({
106
- snapshot,
107
- event
108
- }) => {
109
- const style = config.blockquoteStyle({
110
- schema: snapshot.context.schema
111
- });
112
- if (!style || selectors.getPreviousInlineObject(snapshot))
113
- return !1;
114
- const match = event.matches.at(0);
115
- return match ? {
116
- style,
117
- match
118
- } : !1;
119
- },
120
- actions: [({
121
- event
122
- }, {
123
- style,
124
- match
125
- }) => [behaviors.raise({
126
- type: "block.unset",
127
- props: ["listItem", "level"],
128
- at: event.focusTextBlock.path
129
- }), behaviors.raise({
130
- type: "block.set",
131
- props: {
132
- style
133
- },
134
- at: event.focusTextBlock.path
135
- }), behaviors.raise({
136
- type: "delete",
137
- at: match.targetOffsets
138
- })]]
139
- });
140
- }
141
- function createHeadingRule(config) {
142
- return pluginInputRule.defineInputRule({
143
- on: /^#+ /,
144
- guard: ({
145
- snapshot,
146
- event
147
- }) => {
148
- if (selectors.getPreviousInlineObject(snapshot))
149
- return !1;
150
- const match = event.matches.at(0);
151
- if (!match)
152
- return !1;
153
- const level = match.text.length - 1, style = config.headingStyle({
154
- schema: snapshot.context.schema,
155
- level
156
- });
157
- return style ? {
158
- match,
159
- style
160
- } : !1;
161
- },
162
- actions: [({
163
- event
164
- }, {
165
- match,
166
- style
167
- }) => [behaviors.raise({
168
- type: "block.unset",
169
- props: ["listItem", "level"],
170
- at: event.focusTextBlock.path
171
- }), behaviors.raise({
172
- type: "block.set",
173
- props: {
174
- style
175
- },
176
- at: event.focusTextBlock.path
177
- }), behaviors.raise({
178
- type: "delete",
179
- at: match.targetOffsets
180
- })]]
181
- });
182
- }
183
- function createHorizontalRuleRule(config) {
184
- return pluginInputRule.defineInputRule({
185
- on: /^(---)|^(—-)|^(___)|^(\*\*\*)/,
186
- guard: ({
187
- snapshot,
188
- event
189
- }) => {
190
- const hrObject = config.horizontalRuleObject({
191
- schema: snapshot.context.schema
192
- });
193
- if (!hrObject || selectors.getPreviousInlineObject(snapshot))
194
- return !1;
195
- const match = event.matches.at(0);
196
- return match ? {
197
- hrObject,
198
- match
199
- } : !1;
200
- },
201
- actions: [(_, {
202
- hrObject,
203
- match
204
- }) => [behaviors.raise({
205
- type: "insert.block",
206
- block: {
207
- _type: hrObject.name,
208
- ...hrObject.value ?? {}
209
- },
210
- placement: "before",
211
- select: "none"
212
- }), behaviors.raise({
213
- type: "delete",
214
- at: match.targetOffsets
215
- })]]
216
- });
217
- }
218
- function createMarkdownLinkRule(config) {
219
- return pluginInputRule.defineInputRule({
220
- on: /\[([^\[\]]+)]\((.+)\)/,
221
- actions: [({
222
- snapshot,
223
- event
224
- }) => {
225
- const newText = event.textBefore + event.textInserted;
226
- let textLengthDelta = 0;
227
- const actions = [];
228
- for (const match of event.matches.reverse()) {
229
- const textMatch = match.groupMatches.at(0), hrefMatch = match.groupMatches.at(1);
230
- if (textMatch === void 0 || hrefMatch === void 0)
231
- continue;
232
- textLengthDelta = textLengthDelta - (match.targetOffsets.focus.offset - match.targetOffsets.anchor.offset - textMatch.text.length);
233
- const linkObject = config.linkObject({
234
- schema: snapshot.context.schema,
235
- href: hrefMatch.text
236
- });
237
- if (!linkObject)
238
- continue;
239
- const leftSideOffsets = {
240
- anchor: match.targetOffsets.anchor,
241
- focus: textMatch.targetOffsets.anchor
242
- }, rightSideOffsets = {
243
- anchor: textMatch.targetOffsets.focus,
244
- focus: match.targetOffsets.focus
245
- };
246
- actions.push(behaviors.raise({
247
- type: "select",
248
- at: textMatch.targetOffsets
249
- })), actions.push(behaviors.raise({
250
- type: "annotation.add",
251
- annotation: {
252
- name: linkObject.name,
253
- value: linkObject.value ?? {}
254
- }
255
- })), actions.push(behaviors.raise({
256
- type: "delete",
257
- at: rightSideOffsets
258
- })), actions.push(behaviors.raise({
259
- type: "delete",
260
- at: leftSideOffsets
261
- }));
262
- }
263
- const endCaretPosition = {
264
- path: event.focusTextBlock.path,
265
- offset: newText.length - textLengthDelta * -1
266
- };
267
- return [...actions, behaviors.raise({
268
- type: "select",
269
- at: {
270
- anchor: endCaretPosition,
271
- focus: endCaretPosition
272
- }
273
- })];
274
- }]
275
- });
276
- }
277
- function createOrderedListRule(config) {
278
- return pluginInputRule.defineInputRule({
279
- on: /^1\. /,
280
- guard: ({
281
- snapshot,
282
- event
283
- }) => {
284
- const orderedList = config.orderedList({
285
- schema: snapshot.context.schema
286
- });
287
- if (!orderedList || selectors.getPreviousInlineObject(snapshot))
288
- return !1;
289
- const match = event.matches.at(0);
290
- return match ? {
291
- match,
292
- orderedList
293
- } : !1;
294
- },
295
- actions: [({
296
- event
297
- }, {
298
- match,
299
- orderedList
300
- }) => [behaviors.raise({
301
- type: "block.unset",
302
- props: ["style"],
303
- at: event.focusTextBlock.path
304
- }), behaviors.raise({
305
- type: "block.set",
306
- props: {
307
- listItem: orderedList,
308
- level: event.focusTextBlock.node.level ?? 1
309
- },
310
- at: event.focusTextBlock.path
311
- }), behaviors.raise({
312
- type: "delete",
313
- at: match.targetOffsets
314
- })]]
315
- });
316
- }
317
- function createUnorderedListRule(config) {
318
- return pluginInputRule.defineInputRule({
319
- on: /^(-|\*) /,
320
- guard: ({
321
- snapshot,
322
- event
323
- }) => {
324
- const unorderedList = config.unorderedList({
325
- schema: snapshot.context.schema
326
- });
327
- if (!unorderedList || selectors.getPreviousInlineObject(snapshot))
328
- return !1;
329
- const match = event.matches.at(0);
330
- return match ? {
331
- match,
332
- unorderedList
333
- } : !1;
334
- },
335
- actions: [({
336
- event
337
- }, {
338
- match,
339
- unorderedList
340
- }) => [behaviors.raise({
341
- type: "block.unset",
342
- props: ["style"],
343
- at: event.focusTextBlock.path
344
- }), behaviors.raise({
345
- type: "block.set",
346
- props: {
347
- listItem: unorderedList,
348
- level: event.focusTextBlock.node.level ?? 1
349
- },
350
- at: event.focusTextBlock.path
351
- }), behaviors.raise({
352
- type: "delete",
353
- at: match.targetOffsets
354
- })]]
355
- });
356
- }
357
- function MarkdownShortcutsPlugin(t0) {
358
- const $ = compilerRuntime.c(39), {
359
- blockquoteStyle,
360
- boldDecorator,
361
- codeDecorator,
362
- defaultStyle,
363
- headingStyle,
364
- horizontalRuleObject,
365
- linkObject,
366
- italicDecorator,
367
- orderedList,
368
- strikeThroughDecorator,
369
- unorderedList
370
- } = t0, editor$1 = editor.useEditor();
371
- let t1, t2;
372
- $[0] !== defaultStyle || $[1] !== editor$1 ? (t1 = () => {
373
- const unregisterBehaviors = createMarkdownBehaviors({
374
- defaultStyle
375
- }).map((behavior) => editor$1.registerBehavior({
376
- behavior
377
- }));
378
- return () => {
379
- for (const unregisterBehavior of unregisterBehaviors)
380
- unregisterBehavior();
381
- };
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;
425
- let t3;
426
- $[23] !== boldDecorator ? (t3 = boldDecorator ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
427
- /* @__PURE__ */ jsxRuntime.jsx(pluginCharacterPairDecorator.CharacterPairDecoratorPlugin, { decorator: boldDecorator, pair: {
428
- char: "*",
429
- amount: 2
430
- } }),
431
- /* @__PURE__ */ jsxRuntime.jsx(pluginCharacterPairDecorator.CharacterPairDecoratorPlugin, { decorator: boldDecorator, pair: {
432
- char: "_",
433
- amount: 2
434
- } })
435
- ] }) : null, $[23] = boldDecorator, $[24] = t3) : t3 = $[24];
436
- let t4;
437
- $[25] !== codeDecorator ? (t4 = codeDecorator ? /* @__PURE__ */ jsxRuntime.jsx(pluginCharacterPairDecorator.CharacterPairDecoratorPlugin, { decorator: codeDecorator, pair: {
438
- char: "`",
439
- amount: 1
440
- } }) : null, $[25] = codeDecorator, $[26] = t4) : t4 = $[26];
441
- let t5;
442
- $[27] !== italicDecorator ? (t5 = italicDecorator ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
443
- /* @__PURE__ */ jsxRuntime.jsx(pluginCharacterPairDecorator.CharacterPairDecoratorPlugin, { decorator: italicDecorator, pair: {
444
- char: "*",
445
- amount: 1
446
- } }),
447
- /* @__PURE__ */ jsxRuntime.jsx(pluginCharacterPairDecorator.CharacterPairDecoratorPlugin, { decorator: italicDecorator, pair: {
448
- char: "_",
449
- amount: 1
450
- } })
451
- ] }) : null, $[27] = italicDecorator, $[28] = t5) : t5 = $[28];
452
- let t6;
453
- $[29] !== strikeThroughDecorator ? (t6 = strikeThroughDecorator ? /* @__PURE__ */ jsxRuntime.jsx(pluginCharacterPairDecorator.CharacterPairDecoratorPlugin, { decorator: strikeThroughDecorator, pair: {
454
- char: "~",
455
- amount: 2
456
- } }) : null, $[29] = strikeThroughDecorator, $[30] = t6) : t6 = $[30];
457
- let t7;
458
- $[31] !== inputRules ? (t7 = inputRules ? /* @__PURE__ */ jsxRuntime.jsx(pluginInputRule.InputRulePlugin, { rules: inputRules }) : null, $[31] = inputRules, $[32] = t7) : t7 = $[32];
459
- let t8;
460
- return $[33] !== t3 || $[34] !== t4 || $[35] !== t5 || $[36] !== t6 || $[37] !== t7 ? (t8 = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
461
- t3,
462
- t4,
463
- t5,
464
- t6,
465
- t7
466
- ] }), $[33] = t3, $[34] = t4, $[35] = t5, $[36] = t6, $[37] = t7, $[38] = t8) : t8 = $[38], t8;
467
- }
468
- exports.MarkdownShortcutsPlugin = MarkdownShortcutsPlugin;
469
- //# sourceMappingURL=index.cjs.map
@@ -1 +0,0 @@
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.d.cts DELETED
@@ -1,63 +0,0 @@
1
- import type {EditorSchema} from '@portabletext/editor'
2
- import {JSX} from 'react'
3
-
4
- declare type MarkdownBehaviorsConfig = {
5
- horizontalRuleObject?: (context: {schema: EditorSchema}) =>
6
- | {
7
- name: string
8
- value?: {
9
- [prop: string]: unknown
10
- }
11
- }
12
- | undefined
13
- defaultStyle?: (context: {schema: EditorSchema}) => string | undefined
14
- }
15
-
16
- /**
17
- * @beta
18
- */
19
- export declare function MarkdownShortcutsPlugin({
20
- blockquoteStyle,
21
- boldDecorator,
22
- codeDecorator,
23
- defaultStyle,
24
- headingStyle,
25
- horizontalRuleObject,
26
- linkObject,
27
- italicDecorator,
28
- orderedList,
29
- strikeThroughDecorator,
30
- unorderedList,
31
- }: MarkdownShortcutsPluginProps): JSX.Element
32
-
33
- /**
34
- * @beta
35
- */
36
- export declare type MarkdownShortcutsPluginProps = MarkdownBehaviorsConfig & {
37
- blockquoteStyle?: (context: {schema: EditorSchema}) => string | undefined
38
- defaultStyle?: (context: {schema: EditorSchema}) => string | undefined
39
- headingStyle?: (context: {
40
- schema: EditorSchema
41
- level: number
42
- }) => string | undefined
43
- linkObject?: (context: {schema: EditorSchema; href: string}) =>
44
- | {
45
- name: string
46
- value?: {
47
- [prop: string]: unknown
48
- }
49
- }
50
- | undefined
51
- unorderedList?: (context: {schema: EditorSchema}) => string | undefined
52
- orderedList?: (context: {schema: EditorSchema}) => string | undefined
53
- boldDecorator?: ({schema}: {schema: EditorSchema}) => string | undefined
54
- codeDecorator?: ({schema}: {schema: EditorSchema}) => string | undefined
55
- italicDecorator?: ({schema}: {schema: EditorSchema}) => string | undefined
56
- strikeThroughDecorator?: ({
57
- schema,
58
- }: {
59
- schema: EditorSchema
60
- }) => string | undefined
61
- }
62
-
63
- export {}