diff --git a/src/extensions/base/BaseSchema/BaseSchemaSpecs/index.ts b/src/extensions/base/BaseSchema/BaseSchemaSpecs/index.ts index d42fbb7e..69c3fe59 100644 --- a/src/extensions/base/BaseSchema/BaseSchemaSpecs/index.ts +++ b/src/extensions/base/BaseSchema/BaseSchemaSpecs/index.ts @@ -1,9 +1,7 @@ -import type {NodeSpec} from 'prosemirror-model'; - -import {isEmptyString} from 'src/utils'; - -import type {ExtensionAuto} from '../../../../core'; -import {nodeTypeFactory} from '../../../../utils/schema'; +import type {ExtensionAuto} from '#core'; +import type {NodeSpec} from '#pm/model'; +import {isEmptyString} from 'src/utils/nodes'; +import {nodeTypeFactory} from 'src/utils/schema'; export enum BaseNode { Doc = 'doc', diff --git a/src/utils/inputrules.ts b/src/utils/inputrules.ts index 5300547b..1e43c49e 100644 --- a/src/utils/inputrules.ts +++ b/src/utils/inputrules.ts @@ -2,10 +2,11 @@ import {InputRule} from 'prosemirror-inputrules'; import {Fragment, type Mark, type MarkType, type Node} from 'prosemirror-model'; import {type EditorState, TextSelection} from 'prosemirror-state'; -import {codeType} from '../extensions/markdown/specs'; -import {isFunction} from '../lodash'; -import {isMarkActive} from '../utils/marks'; -// TODO: remove explicit import from code extension +// TODO: remove explicit import from base and code extensions +import {pType} from 'src/extensions/base/specs'; +import {codeType} from 'src/extensions/markdown/specs'; +import {isFunction} from 'src/lodash'; +import {isMarkActive} from 'src/utils/marks'; export function hasCodeMark( state: EditorState, @@ -20,6 +21,15 @@ export function hasCodeMark( return false; } +export function inDefaultTextblock( + state: EditorState, + _match: RegExpMatchArray, + start: number, + _end: number, +): boolean { + return state.doc.resolve(start).parent.type === pType(state.schema); +} + export {textblockTypeInputRule, wrappingInputRule} from './rulebuilders'; function getMarksBetween(start: number, end: number, state: EditorState) { diff --git a/src/utils/rulebuilders.ts b/src/utils/rulebuilders.ts index b2cc2c0d..9feca65e 100644 --- a/src/utils/rulebuilders.ts +++ b/src/utils/rulebuilders.ts @@ -7,7 +7,7 @@ import {InputRule} from 'prosemirror-inputrules'; import type {Attrs, Node, NodeType} from 'prosemirror-model'; import {canJoin, findWrapping} from 'prosemirror-transform'; -import {hasCodeMark} from './inputrules'; +import {hasCodeMark, inDefaultTextblock} from './inputrules'; /// Build an input rule for automatically wrapping a textblock when a /// given string is typed. The `regexp` argument is @@ -32,6 +32,7 @@ export function wrappingInputRule( ) { return new InputRule(regexp, (state, match, start, end) => { if (hasCodeMark(state, match, start, end)) return null; + if (!inDefaultTextblock(state, match, start, end)) return null; const attrs = getAttrs instanceof Function ? getAttrs(match) : getAttrs; const tr = state.tr.delete(start, end);