Launch Week Day 3: Introducing Organization Notifications in Socket.Learn More
Socket
Book a DemoSign in
Socket

@udecode/plate-autoformat

Package Overview
Dependencies
Maintainers
2
Versions
159
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@udecode/plate-autoformat - npm Package Compare versions

Comparing version
38.0.0
to
38.0.1
+125
dist/BaseAutoformatPlugin-C_XqNIwr.d.mts
import * as _udecode_plate_core from '@udecode/plate-core';
import { TEditor, SlateEditor, PluginConfig } from '@udecode/plate-common';
import * as slate from 'slate';
import { Point } from 'slate';
type GetMatchPointsReturnType = {
afterStartMatchPoint: Point | undefined;
beforeEndMatchPoint: Point;
beforeStartMatchPoint: Point | undefined;
} | undefined;
declare const getMatchPoints: (editor: TEditor, { end, start }: MatchRange) => {
afterStartMatchPoint: slate.BasePoint | undefined;
beforeEndMatchPoint: slate.BasePoint;
beforeStartMatchPoint: slate.BasePoint | undefined;
} | undefined;
interface MatchRange {
end: string;
start: string;
}
interface AutoformatQueryOptions extends Omit<AutoformatCommonRule, 'query'> {
/** `insertText` text. */
text: string;
}
interface AutoformatCommonRule {
/**
* The rule applies when the trigger and the text just before the cursor
* matches. For `mode: 'block'`: lookup for the end match(es) before the
* cursor. For `mode: 'text'`: lookup for the end match(es) before the cursor.
* If `format` is an array, also lookup for the start match(es). For `mode:
* 'mark'`: lookup for the start and end matches. Note: `'_*'`, `['_*']` and
* `{ start: '_*', end: '*_' }` are equivalent.
*/
match: MatchRange | MatchRange[] | string[] | string;
/**
* If true, insert the triggering character after autoformatting.
*
* @default: false
*/
insertTrigger?: boolean;
/** Query to allow autoformat. */
query?: (editor: SlateEditor, options: AutoformatQueryOptions) => boolean;
/**
* Triggering character to autoformat.
*
* @default the last character of `match` or `match.end`
*/
trigger?: string[] | string;
}
interface AutoformatBlockRule extends AutoformatCommonRule {
match: string[] | string;
/**
* - Text: insert text.
* - Block: set block type or custom format.
* - Mark: insert mark(s) between matches.
*
* @default 'text'
*/
mode: 'block';
/**
* If true, allow to autoformat even if there is a block of the same type
* above the selected block.
*
* @default false
*/
allowSameTypeAbove?: boolean;
/**
* Custom formatting function.
*
* @default setNodes(editor, { type }, { match: (n) => isBlock(editor, n) })
*/
format?: (editor: SlateEditor) => void;
/**
* If true, `match` will be interpreted as regex expression(s). Otherwise, it
* will be compared by string equality.
*
* @default false
*/
matchByRegex?: boolean;
/**
* Function called just before `format`. Generally used to reset the selected
* block.
*/
preFormat?: (editor: SlateEditor) => void;
/**
* If true, the trigger should be at block start to allow autoformatting.
*
* @default true
*/
triggerAtBlockStart?: boolean;
/**
* For `mode: 'block'`: set block type. If `format` is defined, this field is
* ignored. For `mode: 'mark'`: Mark(s) to add.
*/
type?: string;
}
interface AutoformatMarkRule extends AutoformatCommonRule {
mode: 'mark';
/** Mark(s) to add. */
type: string[] | string;
/** If false, do not format when the string can be trimmed. */
ignoreTrim?: boolean;
}
interface AutoformatTextRule extends AutoformatCommonRule {
/**
* String: the matched text is replaced by that string. string[]: the matched
* texts are replaced by these strings. function: called when there is a
* match.
*/
format: ((editor: SlateEditor, options: GetMatchPointsReturnType) => void) | string[] | string;
match: string[] | string;
mode: 'text';
}
type AutoformatRule = AutoformatBlockRule | AutoformatMarkRule | AutoformatTextRule;
interface AutoformatPluginOptions {
enableUndoOnDelete?: boolean;
/** A list of triggering rules. */
rules?: AutoformatRule[];
}
type AutoformatConfig = PluginConfig<'autoformat', AutoformatPluginOptions>;
/** @see {@link withAutoformat} */
declare const BaseAutoformatPlugin: _udecode_plate_core.SlatePlugin<AutoformatConfig>;
export { type AutoformatConfig as A, BaseAutoformatPlugin as B, type GetMatchPointsReturnType as G, type MatchRange as M, type AutoformatRule as a, type AutoformatBlockRule as b, type AutoformatMarkRule as c, type AutoformatTextRule as d, type AutoformatQueryOptions as e, type AutoformatCommonRule as f, type AutoformatPluginOptions as g, getMatchPoints as h };
import * as _udecode_plate_core from '@udecode/plate-core';
import { TEditor, SlateEditor, PluginConfig } from '@udecode/plate-common';
import * as slate from 'slate';
import { Point } from 'slate';
type GetMatchPointsReturnType = {
afterStartMatchPoint: Point | undefined;
beforeEndMatchPoint: Point;
beforeStartMatchPoint: Point | undefined;
} | undefined;
declare const getMatchPoints: (editor: TEditor, { end, start }: MatchRange) => {
afterStartMatchPoint: slate.BasePoint | undefined;
beforeEndMatchPoint: slate.BasePoint;
beforeStartMatchPoint: slate.BasePoint | undefined;
} | undefined;
interface MatchRange {
end: string;
start: string;
}
interface AutoformatQueryOptions extends Omit<AutoformatCommonRule, 'query'> {
/** `insertText` text. */
text: string;
}
interface AutoformatCommonRule {
/**
* The rule applies when the trigger and the text just before the cursor
* matches. For `mode: 'block'`: lookup for the end match(es) before the
* cursor. For `mode: 'text'`: lookup for the end match(es) before the cursor.
* If `format` is an array, also lookup for the start match(es). For `mode:
* 'mark'`: lookup for the start and end matches. Note: `'_*'`, `['_*']` and
* `{ start: '_*', end: '*_' }` are equivalent.
*/
match: MatchRange | MatchRange[] | string[] | string;
/**
* If true, insert the triggering character after autoformatting.
*
* @default: false
*/
insertTrigger?: boolean;
/** Query to allow autoformat. */
query?: (editor: SlateEditor, options: AutoformatQueryOptions) => boolean;
/**
* Triggering character to autoformat.
*
* @default the last character of `match` or `match.end`
*/
trigger?: string[] | string;
}
interface AutoformatBlockRule extends AutoformatCommonRule {
match: string[] | string;
/**
* - Text: insert text.
* - Block: set block type or custom format.
* - Mark: insert mark(s) between matches.
*
* @default 'text'
*/
mode: 'block';
/**
* If true, allow to autoformat even if there is a block of the same type
* above the selected block.
*
* @default false
*/
allowSameTypeAbove?: boolean;
/**
* Custom formatting function.
*
* @default setNodes(editor, { type }, { match: (n) => isBlock(editor, n) })
*/
format?: (editor: SlateEditor) => void;
/**
* If true, `match` will be interpreted as regex expression(s). Otherwise, it
* will be compared by string equality.
*
* @default false
*/
matchByRegex?: boolean;
/**
* Function called just before `format`. Generally used to reset the selected
* block.
*/
preFormat?: (editor: SlateEditor) => void;
/**
* If true, the trigger should be at block start to allow autoformatting.
*
* @default true
*/
triggerAtBlockStart?: boolean;
/**
* For `mode: 'block'`: set block type. If `format` is defined, this field is
* ignored. For `mode: 'mark'`: Mark(s) to add.
*/
type?: string;
}
interface AutoformatMarkRule extends AutoformatCommonRule {
mode: 'mark';
/** Mark(s) to add. */
type: string[] | string;
/** If false, do not format when the string can be trimmed. */
ignoreTrim?: boolean;
}
interface AutoformatTextRule extends AutoformatCommonRule {
/**
* String: the matched text is replaced by that string. string[]: the matched
* texts are replaced by these strings. function: called when there is a
* match.
*/
format: ((editor: SlateEditor, options: GetMatchPointsReturnType) => void) | string[] | string;
match: string[] | string;
mode: 'text';
}
type AutoformatRule = AutoformatBlockRule | AutoformatMarkRule | AutoformatTextRule;
interface AutoformatPluginOptions {
enableUndoOnDelete?: boolean;
/** A list of triggering rules. */
rules?: AutoformatRule[];
}
type AutoformatConfig = PluginConfig<'autoformat', AutoformatPluginOptions>;
/** @see {@link withAutoformat} */
declare const BaseAutoformatPlugin: _udecode_plate_core.SlatePlugin<AutoformatConfig>;
export { type AutoformatConfig as A, BaseAutoformatPlugin as B, type GetMatchPointsReturnType as G, type MatchRange as M, type AutoformatRule as a, type AutoformatBlockRule as b, type AutoformatMarkRule as c, type AutoformatTextRule as d, type AutoformatQueryOptions as e, type AutoformatCommonRule as f, type AutoformatPluginOptions as g, getMatchPoints as h };
+4
-3

@@ -1,5 +0,6 @@

import { A as AutoformatConfig, a as AutoformatRule, b as AutoformatBlockRule, c as AutoformatMarkRule, d as AutoformatTextRule, M as MatchRange } from './AutoformatPlugin-C3RmMfmF.mjs';
export { g as AutoformatCommonRule, e as AutoformatPlugin, h as AutoformatPluginOptions, f as AutoformatQueryOptions, G as GetMatchPointsReturnType, i as getMatchPoints } from './AutoformatPlugin-C3RmMfmF.mjs';
import { A as AutoformatConfig, a as AutoformatRule, b as AutoformatBlockRule, c as AutoformatMarkRule, d as AutoformatTextRule, M as MatchRange } from './BaseAutoformatPlugin-C_XqNIwr.mjs';
export { f as AutoformatCommonRule, g as AutoformatPluginOptions, e as AutoformatQueryOptions, B as BaseAutoformatPlugin, G as GetMatchPointsReturnType, h as getMatchPoints } from './BaseAutoformatPlugin-C_XqNIwr.mjs';
import { ExtendEditor, SlateEditor, TEditor } from '@udecode/plate-common';
import { Location } from 'slate';
import '@udecode/plate-core';

@@ -55,3 +56,3 @@ /**

match: MatchRange | string;
trigger: AutoformatRule['trigger'];
trigger: AutoformatRule["trigger"];
}) => {

@@ -58,0 +59,0 @@ end: string;

@@ -1,5 +0,6 @@

import { A as AutoformatConfig, a as AutoformatRule, b as AutoformatBlockRule, c as AutoformatMarkRule, d as AutoformatTextRule, M as MatchRange } from './AutoformatPlugin-C3RmMfmF.js';
export { g as AutoformatCommonRule, e as AutoformatPlugin, h as AutoformatPluginOptions, f as AutoformatQueryOptions, G as GetMatchPointsReturnType, i as getMatchPoints } from './AutoformatPlugin-C3RmMfmF.js';
import { A as AutoformatConfig, a as AutoformatRule, b as AutoformatBlockRule, c as AutoformatMarkRule, d as AutoformatTextRule, M as MatchRange } from './BaseAutoformatPlugin-C_XqNIwr.js';
export { f as AutoformatCommonRule, g as AutoformatPluginOptions, e as AutoformatQueryOptions, B as BaseAutoformatPlugin, G as GetMatchPointsReturnType, h as getMatchPoints } from './BaseAutoformatPlugin-C_XqNIwr.js';
import { ExtendEditor, SlateEditor, TEditor } from '@udecode/plate-common';
import { Location } from 'slate';
import '@udecode/plate-core';

@@ -55,3 +56,3 @@ /**

match: MatchRange | string;
trigger: AutoformatRule['trigger'];
trigger: AutoformatRule["trigger"];
}) => {

@@ -58,0 +59,0 @@ end: string;

@@ -50,3 +50,3 @@ "use strict";

__export(src_exports, {
AutoformatPlugin: () => AutoformatPlugin,
BaseAutoformatPlugin: () => BaseAutoformatPlugin,
autoformatArrow: () => autoformatArrow,

@@ -77,3 +77,3 @@ autoformatBlock: () => autoformatBlock,

// src/lib/AutoformatPlugin.ts
// src/lib/BaseAutoformatPlugin.ts
var import_plate_common7 = require("@udecode/plate-common");

@@ -122,3 +122,3 @@

triggerAtBlockStart = true,
type = import_plate_common.ParagraphPlugin.key
type = import_plate_common.BaseParagraphPlugin.key
}) => {

@@ -131,4 +131,3 @@ const matches = (0, import_castArray2.default)(_match);

});
if (!triggers.includes(text))
continue;
if (!triggers.includes(text)) continue;
let matchRange;

@@ -141,8 +140,6 @@ if (triggerAtBlockStart) {

});
if (hasVoidNode)
continue;
if (hasVoidNode) continue;
const textFromBlockStart = (0, import_plate_common.getEditorString)(editor, matchRange);
const isMatched = matchByRegex ? !!textFromBlockStart.match(end) : end === textFromBlockStart;
if (!isMatched)
continue;
if (!isMatched) continue;
} else {

@@ -153,9 +150,7 @@ matchRange = (0, import_plate_common.getRangeBefore)(editor, editor.selection, {

});
if (!matchRange)
continue;
if (!matchRange) continue;
}
if (!allowSameTypeAbove) {
const isBelowSameBlockType = (0, import_plate_common.someNode)(editor, { match: { type } });
if (isBelowSameBlockType)
continue;
if (isBelowSameBlockType) continue;
}

@@ -201,3 +196,3 @@ if (match.length > 1) {

const noWhiteSpaceRegex = new RegExp(`\\S+`);
return !text.match(noWhiteSpaceRegex);
return !noWhiteSpaceRegex.exec(text);
}

@@ -216,4 +211,3 @@ }

});
if (!beforeEndMatchPoint)
return;
if (!beforeEndMatchPoint) return;
}

@@ -228,4 +222,3 @@ let afterStartMatchPoint;

});
if (!afterStartMatchPoint)
return;
if (!afterStartMatchPoint) return;
beforeStartMatchPoint = (0, import_plate_common3.getPointBeforeLocation)(

@@ -251,4 +244,3 @@ editor,

var autoformatMark = (editor, { ignoreTrim, match: _match, text, trigger, type }) => {
if (!type)
return false;
if (!type) return false;
const selection = editor.selection;

@@ -261,7 +253,5 @@ const matches = (0, import_castArray3.default)(_match);

});
if (!triggers.includes(text))
continue;
if (!triggers.includes(text)) continue;
const matched = getMatchPoints(editor, { end, start });
if (!matched)
continue;
if (!matched) continue;
const { afterStartMatchPoint, beforeEndMatchPoint, beforeStartMatchPoint } = matched;

@@ -274,4 +264,3 @@ const matchRange = {

const matchText = (0, import_plate_common4.getEditorString)(editor, matchRange);
if (matchText.trim() !== matchText)
continue;
if (matchText.trim() !== matchText) continue;
}

@@ -318,7 +307,5 @@ if (end) {

});
if (!triggers.includes(text))
continue;
if (!triggers.includes(text)) continue;
const matched = getMatchPoints(editor, { end, start });
if (!matched)
continue;
if (!matched) continue;
const { afterStartMatchPoint, beforeEndMatchPoint, beforeStartMatchPoint } = matched;

@@ -364,8 +351,6 @@ if (end) {

var _a;
if (!(0, import_plate_common6.isCollapsed)(editor.selection))
return insertText2(text);
if (!(0, import_plate_common6.isCollapsed)(editor.selection)) return insertText2(text);
for (const rule of getOptions().rules) {
const { insertTrigger, mode = "text", query } = rule;
if (query && !query(editor, __spreadProps(__spreadValues({}, rule), { text })))
continue;
if (query && !query(editor, __spreadProps(__spreadValues({}, rule), { text }))) continue;
const autoformatter = {

@@ -387,6 +372,6 @@ block: autoformatBlock,

// src/lib/AutoformatPlugin.ts
var AutoformatPlugin = (0, import_plate_common7.createTSlatePlugin)({
// src/lib/BaseAutoformatPlugin.ts
var BaseAutoformatPlugin = (0, import_plate_common7.createTSlatePlugin)({
key: "autoformat",
extendEditor: withAutoformat,
key: "autoformat",
options: {

@@ -834,3 +819,3 @@ rules: []

0 && (module.exports = {
AutoformatPlugin,
BaseAutoformatPlugin,
autoformatArrow,

@@ -837,0 +822,0 @@ autoformatBlock,

@@ -1,1 +0,1 @@

{"version":3,"sources":["../src/index.ts","../src/lib/AutoformatPlugin.ts","../src/lib/withAutoformat.ts","../src/lib/transforms/autoformatBlock.ts","../src/lib/utils/getMatchRange.ts","../src/lib/transforms/autoformatMark.ts","../src/lib/utils/getMatchPoints.ts","../src/lib/utils/isPreviousCharacterEmpty.ts","../src/lib/transforms/autoformatText.ts","../src/lib/rules/autoformatArrow.ts","../src/lib/rules/autoformatLegal.ts","../src/lib/rules/autoformatPunctuation.ts","../src/lib/rules/autoformatSmartQuotes.ts","../src/lib/rules/math/autoformatComparison.ts","../src/lib/rules/math/autoformatEquality.ts","../src/lib/rules/math/autoformatFraction.ts","../src/lib/rules/math/autoformatOperation.ts","../src/lib/rules/math/autoformatSubscript.ts","../src/lib/rules/math/autoformatSuperscript.ts","../src/lib/rules/math/autoformatMath.ts"],"sourcesContent":["/**\n * @file Automatically generated by barrelsby.\n */\n\nexport * from './lib/index';\n","import { type PluginConfig, createTSlatePlugin } from '@udecode/plate-common';\n\nimport type { AutoformatPluginOptions } from './types';\n\nimport { withAutoformat } from './withAutoformat';\n\nexport type AutoformatConfig = PluginConfig<\n 'autoformat',\n AutoformatPluginOptions\n>;\n\n/** @see {@link withAutoformat} */\nexport const AutoformatPlugin = createTSlatePlugin<AutoformatConfig>({\n extendEditor: withAutoformat,\n key: 'autoformat',\n options: {\n rules: [],\n },\n});\n","import { type ExtendEditor, isCollapsed } from '@udecode/plate-common';\n\nimport type { AutoformatConfig } from './AutoformatPlugin';\n\nimport { autoformatBlock } from './transforms/autoformatBlock';\nimport { autoformatMark } from './transforms/autoformatMark';\nimport { autoformatText } from './transforms/autoformatText';\n\n/**\n * Enables support for autoformatting actions. Once a match rule is validated,\n * it does not check the following rules.\n */\nexport const withAutoformat: ExtendEditor<AutoformatConfig> = ({\n editor,\n getOptions,\n}) => {\n const { insertText } = editor;\n\n editor.insertText = (text) => {\n if (!isCollapsed(editor.selection)) return insertText(text);\n\n for (const rule of getOptions().rules!) {\n const { insertTrigger, mode = 'text', query } = rule;\n\n if (query && !query(editor as any, { ...rule, text })) continue;\n\n const autoformatter: Record<typeof mode, Function> = {\n block: autoformatBlock,\n mark: autoformatMark,\n text: autoformatText,\n };\n\n if (\n autoformatter[mode]?.(editor, {\n ...(rule as any),\n text,\n })\n ) {\n return insertTrigger && insertText(text);\n }\n }\n\n insertText(text);\n };\n\n return editor;\n};\n","import type { Range } from 'slate';\n\nimport {\n ParagraphPlugin,\n type SlateEditor,\n deleteText,\n getEditorString,\n getRangeBefore,\n getRangeFromBlockStart,\n isBlock,\n isVoid,\n setElements,\n someNode,\n} from '@udecode/plate-common';\nimport castArray from 'lodash/castArray.js';\n\nimport type { AutoformatBlockRule } from '../types';\n\nimport { getMatchRange } from '../utils/getMatchRange';\n\nexport interface AutoformatBlockOptions extends AutoformatBlockRule {\n text: string;\n}\n\nexport const autoformatBlock = (\n editor: SlateEditor,\n {\n allowSameTypeAbove = false,\n format,\n match: _match,\n matchByRegex = false,\n preFormat,\n text,\n trigger,\n triggerAtBlockStart = true,\n type = ParagraphPlugin.key,\n }: AutoformatBlockOptions\n) => {\n const matches = castArray(_match as string | string[]);\n\n for (const match of matches) {\n const { end, triggers } = getMatchRange({\n match: { end: match, start: '' },\n trigger,\n });\n\n if (!triggers.includes(text)) continue;\n\n let matchRange: Range | undefined;\n\n if (triggerAtBlockStart) {\n matchRange = getRangeFromBlockStart(editor) as Range;\n\n // Don't autoformat if there is void nodes.\n const hasVoidNode = someNode(editor, {\n at: matchRange,\n match: (n) => isVoid(editor, n),\n });\n\n if (hasVoidNode) continue;\n\n const textFromBlockStart = getEditorString(editor, matchRange);\n\n const isMatched = matchByRegex\n ? !!textFromBlockStart.match(end)\n : end === textFromBlockStart;\n\n if (!isMatched) continue;\n } else {\n matchRange = getRangeBefore(editor, editor.selection as Range, {\n matchByRegex,\n matchString: end,\n });\n\n if (!matchRange) continue;\n }\n if (!allowSameTypeAbove) {\n // Don't autoformat if already in a block of the same type.\n const isBelowSameBlockType = someNode(editor, { match: { type } });\n\n if (isBelowSameBlockType) continue;\n }\n // if the trigger is only 1 char there is nothing to delete, so we'd delete unrelated text\n if (match.length > 1) {\n deleteText(editor, {\n at: matchRange,\n });\n }\n if (preFormat) {\n preFormat(editor);\n }\n if (format) {\n format(editor);\n } else {\n setElements(\n editor,\n { type },\n {\n match: (n) => isBlock(editor, n),\n }\n );\n }\n\n return true;\n }\n\n return false;\n};\n","import castArray from 'lodash/castArray.js';\n\nimport type { AutoformatRule, MatchRange } from '../types';\n\nexport const getMatchRange = ({\n match,\n trigger,\n}: {\n match: MatchRange | string;\n trigger: AutoformatRule['trigger'];\n}) => {\n let start: string;\n let end: string;\n\n if (typeof match === 'object') {\n start = match.start;\n end = match.end;\n } else {\n start = match;\n end = start.split('').reverse().join('');\n }\n\n const triggers: string[] = trigger ? castArray(trigger) : [end.slice(-1)];\n\n end = trigger ? end : end.slice(0, -1);\n\n return {\n end,\n start,\n triggers,\n };\n};\n","import type { Point, Range } from 'slate';\n\nimport {\n type TEditor,\n collapseSelection,\n deleteText,\n getEditorString,\n removeMark,\n select,\n} from '@udecode/plate-common';\nimport castArray from 'lodash/castArray.js';\n\nimport type { AutoformatMarkRule } from '../types';\n\nimport { getMatchPoints } from '../utils/getMatchPoints';\nimport { getMatchRange } from '../utils/getMatchRange';\n\nexport interface AutoformatMarkOptions extends AutoformatMarkRule {\n text: string;\n}\n\nexport const autoformatMark = (\n editor: TEditor,\n { ignoreTrim, match: _match, text, trigger, type }: AutoformatMarkOptions\n) => {\n if (!type) return false;\n\n const selection = editor.selection as Range;\n const matches = castArray(_match);\n\n for (const match of matches) {\n const { end, start, triggers } = getMatchRange({\n match,\n trigger,\n });\n\n if (!triggers.includes(text)) continue;\n\n const matched = getMatchPoints(editor, { end, start });\n\n if (!matched) continue;\n\n const { afterStartMatchPoint, beforeEndMatchPoint, beforeStartMatchPoint } =\n matched;\n\n const matchRange = {\n anchor: afterStartMatchPoint,\n focus: beforeEndMatchPoint,\n } as Range;\n\n if (!ignoreTrim) {\n const matchText = getEditorString(editor, matchRange);\n\n if (matchText.trim() !== matchText) continue;\n }\n // delete end match\n if (end) {\n deleteText(editor, {\n at: {\n anchor: beforeEndMatchPoint,\n focus: selection.anchor,\n },\n });\n }\n\n const marks = castArray(type);\n\n // add mark to the text between the matches\n select(editor, matchRange as Range);\n marks.forEach((mark) => {\n editor.addMark(mark, true);\n });\n collapseSelection(editor, { edge: 'end' });\n removeMark(editor, { key: marks as any, shouldChange: false });\n\n deleteText(editor, {\n at: {\n anchor: beforeStartMatchPoint as Point,\n focus: afterStartMatchPoint as Point,\n },\n });\n\n return true;\n }\n\n return false;\n};\n","import type { Point, Range } from 'slate';\n\nimport { type TEditor, getPointBeforeLocation } from '@udecode/plate-common';\n\nimport type { MatchRange } from '../types';\n\nimport { isPreviousCharacterEmpty } from './isPreviousCharacterEmpty';\n\nexport type GetMatchPointsReturnType =\n | {\n afterStartMatchPoint: Point | undefined;\n beforeEndMatchPoint: Point;\n beforeStartMatchPoint: Point | undefined;\n }\n | undefined;\n\nexport const getMatchPoints = (editor: TEditor, { end, start }: MatchRange) => {\n const selection = editor.selection as Range;\n\n let beforeEndMatchPoint = selection.anchor;\n\n if (end) {\n beforeEndMatchPoint = getPointBeforeLocation(editor, selection, {\n matchString: end,\n });\n\n if (!beforeEndMatchPoint) return;\n }\n\n let afterStartMatchPoint: Point | undefined;\n let beforeStartMatchPoint: Point | undefined;\n\n if (start) {\n afterStartMatchPoint = getPointBeforeLocation(editor, beforeEndMatchPoint, {\n afterMatch: true,\n matchString: start,\n skipInvalid: true,\n });\n\n if (!afterStartMatchPoint) return;\n\n beforeStartMatchPoint = getPointBeforeLocation(\n editor,\n beforeEndMatchPoint,\n {\n matchString: start,\n skipInvalid: true,\n }\n );\n\n if (!isPreviousCharacterEmpty(editor, beforeStartMatchPoint as Point))\n return;\n }\n\n return {\n afterStartMatchPoint,\n beforeEndMatchPoint,\n beforeStartMatchPoint,\n };\n};\n","import type { Location } from 'slate';\n\nimport {\n type TEditor,\n getEditorString,\n getRangeBefore,\n} from '@udecode/plate-common';\n\nexport const isPreviousCharacterEmpty = (editor: TEditor, at: Location) => {\n const range = getRangeBefore(editor, at);\n\n if (range) {\n const text = getEditorString(editor, range);\n\n if (text) {\n const noWhiteSpaceRegex = new RegExp(`\\\\S+`);\n\n return !text.match(noWhiteSpaceRegex);\n }\n }\n\n return true;\n};\n","import type { Point, Range } from 'slate';\n\nimport {\n type SlateEditor,\n deleteText,\n insertText,\n} from '@udecode/plate-common';\nimport castArray from 'lodash/castArray.js';\n\nimport type { AutoformatTextRule } from '../types';\n\nimport { getMatchPoints } from '../utils/getMatchPoints';\nimport { getMatchRange } from '../utils/getMatchRange';\n\nexport interface AutoformatTextOptions extends AutoformatTextRule {\n text: string;\n}\n\nexport const autoformatText = (\n editor: SlateEditor,\n { format, match: _match, text, trigger }: AutoformatTextOptions\n) => {\n const selection = editor.selection as Range;\n const matches = castArray(_match);\n\n // dup\n for (const match of matches) {\n const { end, start, triggers } = getMatchRange({\n match: Array.isArray(format)\n ? match\n : {\n end: match,\n start: '',\n },\n trigger,\n });\n\n if (!triggers.includes(text)) continue;\n\n const matched = getMatchPoints(editor, { end, start });\n\n if (!matched) continue;\n\n const { afterStartMatchPoint, beforeEndMatchPoint, beforeStartMatchPoint } =\n matched;\n\n if (end) {\n deleteText(editor, {\n at: {\n anchor: beforeEndMatchPoint,\n focus: selection.anchor,\n },\n });\n }\n if (typeof format === 'function') {\n format(editor, matched);\n } else {\n const formatEnd = Array.isArray(format) ? format[1] : format;\n editor.insertText(formatEnd);\n\n if (beforeStartMatchPoint) {\n const formatStart = Array.isArray(format) ? format[0] : format;\n\n deleteText(editor, {\n at: {\n anchor: beforeStartMatchPoint as Point,\n focus: afterStartMatchPoint as Point,\n },\n });\n\n insertText(editor, formatStart, {\n at: beforeStartMatchPoint,\n });\n }\n }\n\n return true;\n }\n\n return false;\n};\n","import type { AutoformatRule } from '../types';\n\nexport const autoformatArrow: AutoformatRule[] = [\n {\n format: '→',\n match: '->',\n mode: 'text',\n },\n {\n format: '←',\n match: '<-',\n mode: 'text',\n },\n {\n format: '⇒',\n match: '=>',\n mode: 'text',\n },\n {\n format: '⇐',\n match: ['<=', '≤='],\n mode: 'text',\n },\n];\n","import type { AutoformatRule } from '../types';\n\nexport const autoformatLegal: AutoformatRule[] = [\n {\n format: '™',\n match: ['(tm)', '(TM)'],\n mode: 'text',\n },\n {\n format: '®',\n match: ['(r)', '(R)'],\n mode: 'text',\n },\n\n {\n format: '©',\n match: ['(c)', '(C)'],\n mode: 'text',\n },\n];\n\nexport const autoformatLegalHtml: AutoformatRule[] = [\n {\n format: '™',\n match: '&trade;',\n mode: 'text',\n },\n {\n format: '®',\n match: '&reg;',\n mode: 'text',\n },\n {\n format: '©',\n match: '&copy;',\n mode: 'text',\n },\n {\n format: '§',\n match: '&sect;',\n mode: 'text',\n },\n];\n","import type { AutoformatRule } from '../types';\n\nexport const autoformatPunctuation: AutoformatRule[] = [\n {\n format: '\\u2014',\n match: '--',\n mode: 'text',\n },\n {\n format: '…',\n match: '...',\n mode: 'text',\n },\n {\n format: '»',\n match: '>>',\n mode: 'text',\n },\n {\n format: '«',\n match: '<<',\n mode: 'text',\n },\n];\n","import type { AutoformatRule } from '../types';\n\nexport const autoformatSmartQuotes: AutoformatRule[] = [\n {\n format: ['“', '”'],\n match: '\"',\n mode: 'text',\n },\n {\n format: ['‘', '’'],\n match: \"'\",\n mode: 'text',\n },\n];\n","import type { AutoformatRule } from '../../types';\n\nexport const autoformatComparison: AutoformatRule[] = [\n {\n format: '≯',\n match: '!>',\n mode: 'text',\n },\n {\n format: '≮',\n match: '!<',\n mode: 'text',\n },\n {\n format: '≥',\n match: '>=',\n mode: 'text',\n },\n {\n format: '≤',\n match: '<=',\n mode: 'text',\n },\n {\n format: '≱',\n match: '!>=',\n mode: 'text',\n },\n {\n format: '≰',\n match: '!<=',\n mode: 'text',\n },\n];\n","import type { AutoformatRule } from '../../types';\n\nexport const autoformatEquality: AutoformatRule[] = [\n {\n format: '≠',\n match: '!=',\n mode: 'text',\n },\n {\n format: '≡',\n match: '==',\n mode: 'text',\n },\n {\n format: '≢',\n match: ['!==', '≠='],\n mode: 'text',\n },\n {\n format: '≈',\n match: '~=',\n mode: 'text',\n },\n {\n format: '≉',\n match: '!~=',\n mode: 'text',\n },\n];\n","import type { AutoformatRule } from '../../types';\n\nexport const autoformatFraction: AutoformatRule[] = [\n {\n format: '½',\n match: '1/2',\n mode: 'text',\n },\n {\n format: '⅓',\n match: '1/3',\n mode: 'text',\n },\n {\n format: '¼',\n match: '1/4',\n mode: 'text',\n },\n {\n format: '⅕',\n match: '1/5',\n mode: 'text',\n },\n {\n format: '⅙',\n match: '1/6',\n mode: 'text',\n },\n {\n format: '⅐',\n match: '1/7',\n mode: 'text',\n },\n {\n format: '⅛',\n match: '1/8',\n mode: 'text',\n },\n {\n format: '⅑',\n match: '1/9',\n mode: 'text',\n },\n {\n format: '⅒',\n match: '1/10',\n mode: 'text',\n },\n {\n format: '⅔',\n match: '2/3',\n mode: 'text',\n },\n {\n format: '⅖',\n match: '2/5',\n mode: 'text',\n },\n {\n format: '¾',\n match: '3/4',\n mode: 'text',\n },\n {\n format: '⅗',\n match: '3/5',\n mode: 'text',\n },\n {\n format: '⅜',\n match: '3/8',\n mode: 'text',\n },\n {\n format: '⅘',\n match: '4/5',\n mode: 'text',\n },\n {\n format: '⅚',\n match: '5/6',\n mode: 'text',\n },\n {\n format: '⅝',\n match: '5/8',\n mode: 'text',\n },\n {\n format: '⅞',\n match: '7/8',\n mode: 'text',\n },\n];\n","import type { AutoformatRule } from '../../types';\n\nexport const autoformatDivision: AutoformatRule[] = [\n {\n format: '÷',\n match: '//',\n mode: 'text',\n },\n];\n\nexport const autoformatOperation: AutoformatRule[] = [\n {\n format: '±',\n match: '+-',\n mode: 'text',\n },\n {\n format: '‰',\n match: '%%',\n mode: 'text',\n },\n {\n format: '‱',\n match: ['%%%', '‰%'],\n mode: 'text',\n },\n ...autoformatDivision,\n];\n","import type { AutoformatRule } from '../../types';\n\nexport const autoformatSubscriptNumbers: AutoformatRule[] = [\n {\n format: '₀',\n match: '~0',\n mode: 'text',\n },\n {\n format: '₁',\n match: '~1',\n mode: 'text',\n },\n {\n format: '₂',\n match: '~2',\n mode: 'text',\n },\n {\n format: '₃',\n match: '~3',\n mode: 'text',\n },\n {\n format: '₄',\n match: '~4',\n mode: 'text',\n },\n {\n format: '₅',\n match: '~5',\n mode: 'text',\n },\n {\n format: '₆',\n match: '~6',\n mode: 'text',\n },\n {\n format: '₇',\n match: '~7',\n mode: 'text',\n },\n {\n format: '₈',\n match: '~8',\n mode: 'text',\n },\n {\n format: '₉',\n match: '~9',\n mode: 'text',\n },\n];\n\nexport const autoformatSubscriptSymbols: AutoformatRule[] = [\n {\n format: '₊',\n match: '~+',\n mode: 'text',\n },\n {\n format: '₋',\n match: '~-',\n mode: 'text',\n },\n];\n","import type { AutoformatRule } from '../../types';\n\nexport const autoformatSuperscriptNumbers: AutoformatRule[] = [\n {\n format: '⁰',\n match: '^0',\n mode: 'text',\n },\n {\n format: '¹',\n match: '^1',\n mode: 'text',\n },\n {\n format: '²',\n match: '^2',\n mode: 'text',\n },\n {\n format: '³',\n match: '^3',\n mode: 'text',\n },\n {\n format: '⁴',\n match: '^4',\n mode: 'text',\n },\n {\n format: '⁵',\n match: '^5',\n mode: 'text',\n },\n {\n format: '⁶',\n match: '^6',\n mode: 'text',\n },\n {\n format: '⁷',\n match: '^7',\n mode: 'text',\n },\n {\n format: '⁸',\n match: '^8',\n mode: 'text',\n },\n {\n format: '⁹',\n match: '^9',\n mode: 'text',\n },\n];\n\nexport const autoformatSuperscriptSymbols: AutoformatRule[] = [\n {\n format: '°',\n match: '^o',\n mode: 'text',\n },\n {\n format: '⁺',\n match: '^+',\n mode: 'text',\n },\n {\n format: '⁻',\n match: '^-',\n mode: 'text',\n },\n];\n","import { autoformatComparison } from './autoformatComparison';\nimport { autoformatEquality } from './autoformatEquality';\nimport { autoformatFraction } from './autoformatFraction';\nimport { autoformatOperation } from './autoformatOperation';\nimport {\n autoformatSubscriptNumbers,\n autoformatSubscriptSymbols,\n} from './autoformatSubscript';\nimport {\n autoformatSuperscriptNumbers,\n autoformatSuperscriptSymbols,\n} from './autoformatSuperscript';\n\nexport const autoformatMath = [\n ...autoformatComparison,\n ...autoformatEquality,\n ...autoformatOperation,\n ...autoformatFraction,\n ...autoformatSuperscriptSymbols,\n ...autoformatSubscriptSymbols,\n ...autoformatSuperscriptNumbers,\n ...autoformatSubscriptNumbers,\n];\n"],"mappings":"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","names":["import_plate_common","import_plate_common","import_castArray","castArray","castArray","import_plate_common","import_castArray","import_plate_common","import_plate_common","castArray","import_plate_common","import_castArray","castArray","insertText"]}
{"version":3,"sources":["../src/index.ts","../src/lib/BaseAutoformatPlugin.ts","../src/lib/withAutoformat.ts","../src/lib/transforms/autoformatBlock.ts","../src/lib/utils/getMatchRange.ts","../src/lib/transforms/autoformatMark.ts","../src/lib/utils/getMatchPoints.ts","../src/lib/utils/isPreviousCharacterEmpty.ts","../src/lib/transforms/autoformatText.ts","../src/lib/rules/autoformatArrow.ts","../src/lib/rules/autoformatLegal.ts","../src/lib/rules/autoformatPunctuation.ts","../src/lib/rules/autoformatSmartQuotes.ts","../src/lib/rules/math/autoformatComparison.ts","../src/lib/rules/math/autoformatEquality.ts","../src/lib/rules/math/autoformatFraction.ts","../src/lib/rules/math/autoformatOperation.ts","../src/lib/rules/math/autoformatSubscript.ts","../src/lib/rules/math/autoformatSuperscript.ts","../src/lib/rules/math/autoformatMath.ts"],"sourcesContent":["/**\n * @file Automatically generated by barrelsby.\n */\n\nexport * from './lib/index';\n","import { type PluginConfig, createTSlatePlugin } from '@udecode/plate-common';\n\nimport type { AutoformatPluginOptions } from './types';\n\nimport { withAutoformat } from './withAutoformat';\n\nexport type AutoformatConfig = PluginConfig<\n 'autoformat',\n AutoformatPluginOptions\n>;\n\n/** @see {@link withAutoformat} */\nexport const BaseAutoformatPlugin = createTSlatePlugin<AutoformatConfig>({\n key: 'autoformat',\n extendEditor: withAutoformat,\n options: {\n rules: [],\n },\n});\n","import { type ExtendEditor, isCollapsed } from '@udecode/plate-common';\n\nimport type { AutoformatConfig } from './BaseAutoformatPlugin';\n\nimport { autoformatBlock } from './transforms/autoformatBlock';\nimport { autoformatMark } from './transforms/autoformatMark';\nimport { autoformatText } from './transforms/autoformatText';\n\n/**\n * Enables support for autoformatting actions. Once a match rule is validated,\n * it does not check the following rules.\n */\nexport const withAutoformat: ExtendEditor<AutoformatConfig> = ({\n editor,\n getOptions,\n}) => {\n const { insertText } = editor;\n\n editor.insertText = (text) => {\n if (!isCollapsed(editor.selection)) return insertText(text);\n\n for (const rule of getOptions().rules!) {\n const { insertTrigger, mode = 'text', query } = rule;\n\n if (query && !query(editor as any, { ...rule, text })) continue;\n\n const autoformatter: Record<typeof mode, any> = {\n block: autoformatBlock,\n mark: autoformatMark,\n text: autoformatText,\n };\n\n if (\n autoformatter[mode]?.(editor, {\n ...(rule as any),\n text,\n })\n ) {\n return insertTrigger && insertText(text);\n }\n }\n\n insertText(text);\n };\n\n return editor;\n};\n","import type { Range } from 'slate';\n\nimport {\n type SlateEditor,\n BaseParagraphPlugin,\n deleteText,\n getEditorString,\n getRangeBefore,\n getRangeFromBlockStart,\n isBlock,\n isVoid,\n setElements,\n someNode,\n} from '@udecode/plate-common';\nimport castArray from 'lodash/castArray.js';\n\nimport type { AutoformatBlockRule } from '../types';\n\nimport { getMatchRange } from '../utils/getMatchRange';\n\nexport interface AutoformatBlockOptions extends AutoformatBlockRule {\n text: string;\n}\n\nexport const autoformatBlock = (\n editor: SlateEditor,\n {\n allowSameTypeAbove = false,\n format,\n match: _match,\n matchByRegex = false,\n preFormat,\n text,\n trigger,\n triggerAtBlockStart = true,\n type = BaseParagraphPlugin.key,\n }: AutoformatBlockOptions\n) => {\n const matches = castArray(_match as string[] | string);\n\n for (const match of matches) {\n const { end, triggers } = getMatchRange({\n match: { end: match, start: '' },\n trigger,\n });\n\n if (!triggers.includes(text)) continue;\n\n let matchRange: Range | undefined;\n\n if (triggerAtBlockStart) {\n matchRange = getRangeFromBlockStart(editor) as Range;\n\n // Don't autoformat if there is void nodes.\n const hasVoidNode = someNode(editor, {\n at: matchRange,\n match: (n) => isVoid(editor, n),\n });\n\n if (hasVoidNode) continue;\n\n const textFromBlockStart = getEditorString(editor, matchRange);\n\n const isMatched = matchByRegex\n ? !!textFromBlockStart.match(end)\n : end === textFromBlockStart;\n\n if (!isMatched) continue;\n } else {\n matchRange = getRangeBefore(editor, editor.selection as Range, {\n matchByRegex,\n matchString: end,\n });\n\n if (!matchRange) continue;\n }\n if (!allowSameTypeAbove) {\n // Don't autoformat if already in a block of the same type.\n const isBelowSameBlockType = someNode(editor, { match: { type } });\n\n if (isBelowSameBlockType) continue;\n }\n // if the trigger is only 1 char there is nothing to delete, so we'd delete unrelated text\n if (match.length > 1) {\n deleteText(editor, {\n at: matchRange,\n });\n }\n if (preFormat) {\n preFormat(editor);\n }\n if (format) {\n format(editor);\n } else {\n setElements(\n editor,\n { type },\n {\n match: (n) => isBlock(editor, n),\n }\n );\n }\n\n return true;\n }\n\n return false;\n};\n","import castArray from 'lodash/castArray.js';\n\nimport type { AutoformatRule, MatchRange } from '../types';\n\nexport const getMatchRange = ({\n match,\n trigger,\n}: {\n match: MatchRange | string;\n trigger: AutoformatRule['trigger'];\n}) => {\n let start: string;\n let end: string;\n\n if (typeof match === 'object') {\n start = match.start;\n end = match.end;\n } else {\n start = match;\n end = start.split('').reverse().join('');\n }\n\n const triggers: string[] = trigger ? castArray(trigger) : [end.slice(-1)];\n\n end = trigger ? end : end.slice(0, -1);\n\n return {\n end,\n start,\n triggers,\n };\n};\n","import type { Point, Range } from 'slate';\n\nimport {\n type TEditor,\n collapseSelection,\n deleteText,\n getEditorString,\n removeMark,\n select,\n} from '@udecode/plate-common';\nimport castArray from 'lodash/castArray.js';\n\nimport type { AutoformatMarkRule } from '../types';\n\nimport { getMatchPoints } from '../utils/getMatchPoints';\nimport { getMatchRange } from '../utils/getMatchRange';\n\nexport interface AutoformatMarkOptions extends AutoformatMarkRule {\n text: string;\n}\n\nexport const autoformatMark = (\n editor: TEditor,\n { ignoreTrim, match: _match, text, trigger, type }: AutoformatMarkOptions\n) => {\n if (!type) return false;\n\n const selection = editor.selection as Range;\n const matches = castArray(_match);\n\n for (const match of matches) {\n const { end, start, triggers } = getMatchRange({\n match,\n trigger,\n });\n\n if (!triggers.includes(text)) continue;\n\n const matched = getMatchPoints(editor, { end, start });\n\n if (!matched) continue;\n\n const { afterStartMatchPoint, beforeEndMatchPoint, beforeStartMatchPoint } =\n matched;\n\n const matchRange = {\n anchor: afterStartMatchPoint,\n focus: beforeEndMatchPoint,\n } as Range;\n\n if (!ignoreTrim) {\n const matchText = getEditorString(editor, matchRange);\n\n if (matchText.trim() !== matchText) continue;\n }\n // delete end match\n if (end) {\n deleteText(editor, {\n at: {\n anchor: beforeEndMatchPoint,\n focus: selection.anchor,\n },\n });\n }\n\n const marks = castArray(type);\n\n // add mark to the text between the matches\n select(editor, matchRange as Range);\n marks.forEach((mark) => {\n editor.addMark(mark, true);\n });\n collapseSelection(editor, { edge: 'end' });\n removeMark(editor, { key: marks as any, shouldChange: false });\n\n deleteText(editor, {\n at: {\n anchor: beforeStartMatchPoint as Point,\n focus: afterStartMatchPoint as Point,\n },\n });\n\n return true;\n }\n\n return false;\n};\n","import type { Point, Range } from 'slate';\n\nimport { type TEditor, getPointBeforeLocation } from '@udecode/plate-common';\n\nimport type { MatchRange } from '../types';\n\nimport { isPreviousCharacterEmpty } from './isPreviousCharacterEmpty';\n\nexport type GetMatchPointsReturnType =\n | {\n afterStartMatchPoint: Point | undefined;\n beforeEndMatchPoint: Point;\n beforeStartMatchPoint: Point | undefined;\n }\n | undefined;\n\nexport const getMatchPoints = (editor: TEditor, { end, start }: MatchRange) => {\n const selection = editor.selection as Range;\n\n let beforeEndMatchPoint = selection.anchor;\n\n if (end) {\n beforeEndMatchPoint = getPointBeforeLocation(editor, selection, {\n matchString: end,\n });\n\n if (!beforeEndMatchPoint) return;\n }\n\n let afterStartMatchPoint: Point | undefined;\n let beforeStartMatchPoint: Point | undefined;\n\n if (start) {\n afterStartMatchPoint = getPointBeforeLocation(editor, beforeEndMatchPoint, {\n afterMatch: true,\n matchString: start,\n skipInvalid: true,\n });\n\n if (!afterStartMatchPoint) return;\n\n beforeStartMatchPoint = getPointBeforeLocation(\n editor,\n beforeEndMatchPoint,\n {\n matchString: start,\n skipInvalid: true,\n }\n );\n\n if (!isPreviousCharacterEmpty(editor, beforeStartMatchPoint as Point))\n return;\n }\n\n return {\n afterStartMatchPoint,\n beforeEndMatchPoint,\n beforeStartMatchPoint,\n };\n};\n","import type { Location } from 'slate';\n\nimport {\n type TEditor,\n getEditorString,\n getRangeBefore,\n} from '@udecode/plate-common';\n\nexport const isPreviousCharacterEmpty = (editor: TEditor, at: Location) => {\n const range = getRangeBefore(editor, at);\n\n if (range) {\n const text = getEditorString(editor, range);\n\n if (text) {\n const noWhiteSpaceRegex = new RegExp(`\\\\S+`);\n\n return !noWhiteSpaceRegex.exec(text);\n }\n }\n\n return true;\n};\n","import type { Point, Range } from 'slate';\n\nimport {\n type SlateEditor,\n deleteText,\n insertText,\n} from '@udecode/plate-common';\nimport castArray from 'lodash/castArray.js';\n\nimport type { AutoformatTextRule } from '../types';\n\nimport { getMatchPoints } from '../utils/getMatchPoints';\nimport { getMatchRange } from '../utils/getMatchRange';\n\nexport interface AutoformatTextOptions extends AutoformatTextRule {\n text: string;\n}\n\nexport const autoformatText = (\n editor: SlateEditor,\n { format, match: _match, text, trigger }: AutoformatTextOptions\n) => {\n const selection = editor.selection as Range;\n const matches = castArray(_match);\n\n // dup\n for (const match of matches) {\n const { end, start, triggers } = getMatchRange({\n match: Array.isArray(format)\n ? match\n : {\n end: match,\n start: '',\n },\n trigger,\n });\n\n if (!triggers.includes(text)) continue;\n\n const matched = getMatchPoints(editor, { end, start });\n\n if (!matched) continue;\n\n const { afterStartMatchPoint, beforeEndMatchPoint, beforeStartMatchPoint } =\n matched;\n\n if (end) {\n deleteText(editor, {\n at: {\n anchor: beforeEndMatchPoint,\n focus: selection.anchor,\n },\n });\n }\n if (typeof format === 'function') {\n format(editor, matched);\n } else {\n const formatEnd = Array.isArray(format) ? format[1] : format;\n editor.insertText(formatEnd);\n\n if (beforeStartMatchPoint) {\n const formatStart = Array.isArray(format) ? format[0] : format;\n\n deleteText(editor, {\n at: {\n anchor: beforeStartMatchPoint as Point,\n focus: afterStartMatchPoint as Point,\n },\n });\n\n insertText(editor, formatStart, {\n at: beforeStartMatchPoint,\n });\n }\n }\n\n return true;\n }\n\n return false;\n};\n","import type { AutoformatRule } from '../types';\n\nexport const autoformatArrow: AutoformatRule[] = [\n {\n format: '→',\n match: '->',\n mode: 'text',\n },\n {\n format: '←',\n match: '<-',\n mode: 'text',\n },\n {\n format: '⇒',\n match: '=>',\n mode: 'text',\n },\n {\n format: '⇐',\n match: ['<=', '≤='],\n mode: 'text',\n },\n];\n","import type { AutoformatRule } from '../types';\n\nexport const autoformatLegal: AutoformatRule[] = [\n {\n format: '™',\n match: ['(tm)', '(TM)'],\n mode: 'text',\n },\n {\n format: '®',\n match: ['(r)', '(R)'],\n mode: 'text',\n },\n\n {\n format: '©',\n match: ['(c)', '(C)'],\n mode: 'text',\n },\n];\n\nexport const autoformatLegalHtml: AutoformatRule[] = [\n {\n format: '™',\n match: '&trade;',\n mode: 'text',\n },\n {\n format: '®',\n match: '&reg;',\n mode: 'text',\n },\n {\n format: '©',\n match: '&copy;',\n mode: 'text',\n },\n {\n format: '§',\n match: '&sect;',\n mode: 'text',\n },\n];\n","import type { AutoformatRule } from '../types';\n\nexport const autoformatPunctuation: AutoformatRule[] = [\n {\n format: '\\u2014',\n match: '--',\n mode: 'text',\n },\n {\n format: '…',\n match: '...',\n mode: 'text',\n },\n {\n format: '»',\n match: '>>',\n mode: 'text',\n },\n {\n format: '«',\n match: '<<',\n mode: 'text',\n },\n];\n","import type { AutoformatRule } from '../types';\n\nexport const autoformatSmartQuotes: AutoformatRule[] = [\n {\n format: ['“', '”'],\n match: '\"',\n mode: 'text',\n },\n {\n format: ['‘', '’'],\n match: \"'\",\n mode: 'text',\n },\n];\n","import type { AutoformatRule } from '../../types';\n\nexport const autoformatComparison: AutoformatRule[] = [\n {\n format: '≯',\n match: '!>',\n mode: 'text',\n },\n {\n format: '≮',\n match: '!<',\n mode: 'text',\n },\n {\n format: '≥',\n match: '>=',\n mode: 'text',\n },\n {\n format: '≤',\n match: '<=',\n mode: 'text',\n },\n {\n format: '≱',\n match: '!>=',\n mode: 'text',\n },\n {\n format: '≰',\n match: '!<=',\n mode: 'text',\n },\n];\n","import type { AutoformatRule } from '../../types';\n\nexport const autoformatEquality: AutoformatRule[] = [\n {\n format: '≠',\n match: '!=',\n mode: 'text',\n },\n {\n format: '≡',\n match: '==',\n mode: 'text',\n },\n {\n format: '≢',\n match: ['!==', '≠='],\n mode: 'text',\n },\n {\n format: '≈',\n match: '~=',\n mode: 'text',\n },\n {\n format: '≉',\n match: '!~=',\n mode: 'text',\n },\n];\n","import type { AutoformatRule } from '../../types';\n\nexport const autoformatFraction: AutoformatRule[] = [\n {\n format: '½',\n match: '1/2',\n mode: 'text',\n },\n {\n format: '⅓',\n match: '1/3',\n mode: 'text',\n },\n {\n format: '¼',\n match: '1/4',\n mode: 'text',\n },\n {\n format: '⅕',\n match: '1/5',\n mode: 'text',\n },\n {\n format: '⅙',\n match: '1/6',\n mode: 'text',\n },\n {\n format: '⅐',\n match: '1/7',\n mode: 'text',\n },\n {\n format: '⅛',\n match: '1/8',\n mode: 'text',\n },\n {\n format: '⅑',\n match: '1/9',\n mode: 'text',\n },\n {\n format: '⅒',\n match: '1/10',\n mode: 'text',\n },\n {\n format: '⅔',\n match: '2/3',\n mode: 'text',\n },\n {\n format: '⅖',\n match: '2/5',\n mode: 'text',\n },\n {\n format: '¾',\n match: '3/4',\n mode: 'text',\n },\n {\n format: '⅗',\n match: '3/5',\n mode: 'text',\n },\n {\n format: '⅜',\n match: '3/8',\n mode: 'text',\n },\n {\n format: '⅘',\n match: '4/5',\n mode: 'text',\n },\n {\n format: '⅚',\n match: '5/6',\n mode: 'text',\n },\n {\n format: '⅝',\n match: '5/8',\n mode: 'text',\n },\n {\n format: '⅞',\n match: '7/8',\n mode: 'text',\n },\n];\n","import type { AutoformatRule } from '../../types';\n\nexport const autoformatDivision: AutoformatRule[] = [\n {\n format: '÷',\n match: '//',\n mode: 'text',\n },\n];\n\nexport const autoformatOperation: AutoformatRule[] = [\n {\n format: '±',\n match: '+-',\n mode: 'text',\n },\n {\n format: '‰',\n match: '%%',\n mode: 'text',\n },\n {\n format: '‱',\n match: ['%%%', '‰%'],\n mode: 'text',\n },\n ...autoformatDivision,\n];\n","import type { AutoformatRule } from '../../types';\n\nexport const autoformatSubscriptNumbers: AutoformatRule[] = [\n {\n format: '₀',\n match: '~0',\n mode: 'text',\n },\n {\n format: '₁',\n match: '~1',\n mode: 'text',\n },\n {\n format: '₂',\n match: '~2',\n mode: 'text',\n },\n {\n format: '₃',\n match: '~3',\n mode: 'text',\n },\n {\n format: '₄',\n match: '~4',\n mode: 'text',\n },\n {\n format: '₅',\n match: '~5',\n mode: 'text',\n },\n {\n format: '₆',\n match: '~6',\n mode: 'text',\n },\n {\n format: '₇',\n match: '~7',\n mode: 'text',\n },\n {\n format: '₈',\n match: '~8',\n mode: 'text',\n },\n {\n format: '₉',\n match: '~9',\n mode: 'text',\n },\n];\n\nexport const autoformatSubscriptSymbols: AutoformatRule[] = [\n {\n format: '₊',\n match: '~+',\n mode: 'text',\n },\n {\n format: '₋',\n match: '~-',\n mode: 'text',\n },\n];\n","import type { AutoformatRule } from '../../types';\n\nexport const autoformatSuperscriptNumbers: AutoformatRule[] = [\n {\n format: '⁰',\n match: '^0',\n mode: 'text',\n },\n {\n format: '¹',\n match: '^1',\n mode: 'text',\n },\n {\n format: '²',\n match: '^2',\n mode: 'text',\n },\n {\n format: '³',\n match: '^3',\n mode: 'text',\n },\n {\n format: '⁴',\n match: '^4',\n mode: 'text',\n },\n {\n format: '⁵',\n match: '^5',\n mode: 'text',\n },\n {\n format: '⁶',\n match: '^6',\n mode: 'text',\n },\n {\n format: '⁷',\n match: '^7',\n mode: 'text',\n },\n {\n format: '⁸',\n match: '^8',\n mode: 'text',\n },\n {\n format: '⁹',\n match: '^9',\n mode: 'text',\n },\n];\n\nexport const autoformatSuperscriptSymbols: AutoformatRule[] = [\n {\n format: '°',\n match: '^o',\n mode: 'text',\n },\n {\n format: '⁺',\n match: '^+',\n mode: 'text',\n },\n {\n format: '⁻',\n match: '^-',\n mode: 'text',\n },\n];\n","import { autoformatComparison } from './autoformatComparison';\nimport { autoformatEquality } from './autoformatEquality';\nimport { autoformatFraction } from './autoformatFraction';\nimport { autoformatOperation } from './autoformatOperation';\nimport {\n autoformatSubscriptNumbers,\n autoformatSubscriptSymbols,\n} from './autoformatSubscript';\nimport {\n autoformatSuperscriptNumbers,\n autoformatSuperscriptSymbols,\n} from './autoformatSuperscript';\n\nexport const autoformatMath = [\n ...autoformatComparison,\n ...autoformatEquality,\n ...autoformatOperation,\n ...autoformatFraction,\n ...autoformatSuperscriptSymbols,\n ...autoformatSubscriptSymbols,\n ...autoformatSuperscriptNumbers,\n ...autoformatSubscriptNumbers,\n];\n"],"mappings":"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","names":["import_plate_common","import_plate_common","import_castArray","castArray","castArray","import_plate_common","import_castArray","import_plate_common","import_plate_common","castArray","import_plate_common","import_castArray","castArray","insertText"]}

@@ -21,3 +21,3 @@ var __defProp = Object.defineProperty;

// src/lib/AutoformatPlugin.ts
// src/lib/BaseAutoformatPlugin.ts
import { createTSlatePlugin } from "@udecode/plate-common";

@@ -30,3 +30,3 @@

import {
ParagraphPlugin,
BaseParagraphPlugin,
deleteText,

@@ -77,3 +77,3 @@ getEditorString,

triggerAtBlockStart = true,
type = ParagraphPlugin.key
type = BaseParagraphPlugin.key
}) => {

@@ -86,4 +86,3 @@ const matches = castArray2(_match);

});
if (!triggers.includes(text))
continue;
if (!triggers.includes(text)) continue;
let matchRange;

@@ -96,8 +95,6 @@ if (triggerAtBlockStart) {

});
if (hasVoidNode)
continue;
if (hasVoidNode) continue;
const textFromBlockStart = getEditorString(editor, matchRange);
const isMatched = matchByRegex ? !!textFromBlockStart.match(end) : end === textFromBlockStart;
if (!isMatched)
continue;
if (!isMatched) continue;
} else {

@@ -108,9 +105,7 @@ matchRange = getRangeBefore(editor, editor.selection, {

});
if (!matchRange)
continue;
if (!matchRange) continue;
}
if (!allowSameTypeAbove) {
const isBelowSameBlockType = someNode(editor, { match: { type } });
if (isBelowSameBlockType)
continue;
if (isBelowSameBlockType) continue;
}

@@ -165,3 +160,3 @@ if (match.length > 1) {

const noWhiteSpaceRegex = new RegExp(`\\S+`);
return !text.match(noWhiteSpaceRegex);
return !noWhiteSpaceRegex.exec(text);
}

@@ -180,4 +175,3 @@ }

});
if (!beforeEndMatchPoint)
return;
if (!beforeEndMatchPoint) return;
}

@@ -192,4 +186,3 @@ let afterStartMatchPoint;

});
if (!afterStartMatchPoint)
return;
if (!afterStartMatchPoint) return;
beforeStartMatchPoint = getPointBeforeLocation(

@@ -215,4 +208,3 @@ editor,

var autoformatMark = (editor, { ignoreTrim, match: _match, text, trigger, type }) => {
if (!type)
return false;
if (!type) return false;
const selection = editor.selection;

@@ -225,7 +217,5 @@ const matches = castArray3(_match);

});
if (!triggers.includes(text))
continue;
if (!triggers.includes(text)) continue;
const matched = getMatchPoints(editor, { end, start });
if (!matched)
continue;
if (!matched) continue;
const { afterStartMatchPoint, beforeEndMatchPoint, beforeStartMatchPoint } = matched;

@@ -238,4 +228,3 @@ const matchRange = {

const matchText = getEditorString3(editor, matchRange);
if (matchText.trim() !== matchText)
continue;
if (matchText.trim() !== matchText) continue;
}

@@ -285,7 +274,5 @@ if (end) {

});
if (!triggers.includes(text))
continue;
if (!triggers.includes(text)) continue;
const matched = getMatchPoints(editor, { end, start });
if (!matched)
continue;
if (!matched) continue;
const { afterStartMatchPoint, beforeEndMatchPoint, beforeStartMatchPoint } = matched;

@@ -331,8 +318,6 @@ if (end) {

var _a;
if (!isCollapsed(editor.selection))
return insertText2(text);
if (!isCollapsed(editor.selection)) return insertText2(text);
for (const rule of getOptions().rules) {
const { insertTrigger, mode = "text", query } = rule;
if (query && !query(editor, __spreadProps(__spreadValues({}, rule), { text })))
continue;
if (query && !query(editor, __spreadProps(__spreadValues({}, rule), { text }))) continue;
const autoformatter = {

@@ -354,6 +339,6 @@ block: autoformatBlock,

// src/lib/AutoformatPlugin.ts
var AutoformatPlugin = createTSlatePlugin({
// src/lib/BaseAutoformatPlugin.ts
var BaseAutoformatPlugin = createTSlatePlugin({
key: "autoformat",
extendEditor: withAutoformat,
key: "autoformat",
options: {

@@ -800,3 +785,3 @@ rules: []

export {
AutoformatPlugin,
BaseAutoformatPlugin,
autoformatArrow,

@@ -803,0 +788,0 @@ autoformatBlock,

@@ -1,1 +0,1 @@

{"version":3,"sources":["../src/lib/AutoformatPlugin.ts","../src/lib/withAutoformat.ts","../src/lib/transforms/autoformatBlock.ts","../src/lib/utils/getMatchRange.ts","../src/lib/transforms/autoformatMark.ts","../src/lib/utils/getMatchPoints.ts","../src/lib/utils/isPreviousCharacterEmpty.ts","../src/lib/transforms/autoformatText.ts","../src/lib/rules/autoformatArrow.ts","../src/lib/rules/autoformatLegal.ts","../src/lib/rules/autoformatPunctuation.ts","../src/lib/rules/autoformatSmartQuotes.ts","../src/lib/rules/math/autoformatComparison.ts","../src/lib/rules/math/autoformatEquality.ts","../src/lib/rules/math/autoformatFraction.ts","../src/lib/rules/math/autoformatOperation.ts","../src/lib/rules/math/autoformatSubscript.ts","../src/lib/rules/math/autoformatSuperscript.ts","../src/lib/rules/math/autoformatMath.ts"],"sourcesContent":["import { type PluginConfig, createTSlatePlugin } from '@udecode/plate-common';\n\nimport type { AutoformatPluginOptions } from './types';\n\nimport { withAutoformat } from './withAutoformat';\n\nexport type AutoformatConfig = PluginConfig<\n 'autoformat',\n AutoformatPluginOptions\n>;\n\n/** @see {@link withAutoformat} */\nexport const AutoformatPlugin = createTSlatePlugin<AutoformatConfig>({\n extendEditor: withAutoformat,\n key: 'autoformat',\n options: {\n rules: [],\n },\n});\n","import { type ExtendEditor, isCollapsed } from '@udecode/plate-common';\n\nimport type { AutoformatConfig } from './AutoformatPlugin';\n\nimport { autoformatBlock } from './transforms/autoformatBlock';\nimport { autoformatMark } from './transforms/autoformatMark';\nimport { autoformatText } from './transforms/autoformatText';\n\n/**\n * Enables support for autoformatting actions. Once a match rule is validated,\n * it does not check the following rules.\n */\nexport const withAutoformat: ExtendEditor<AutoformatConfig> = ({\n editor,\n getOptions,\n}) => {\n const { insertText } = editor;\n\n editor.insertText = (text) => {\n if (!isCollapsed(editor.selection)) return insertText(text);\n\n for (const rule of getOptions().rules!) {\n const { insertTrigger, mode = 'text', query } = rule;\n\n if (query && !query(editor as any, { ...rule, text })) continue;\n\n const autoformatter: Record<typeof mode, Function> = {\n block: autoformatBlock,\n mark: autoformatMark,\n text: autoformatText,\n };\n\n if (\n autoformatter[mode]?.(editor, {\n ...(rule as any),\n text,\n })\n ) {\n return insertTrigger && insertText(text);\n }\n }\n\n insertText(text);\n };\n\n return editor;\n};\n","import type { Range } from 'slate';\n\nimport {\n ParagraphPlugin,\n type SlateEditor,\n deleteText,\n getEditorString,\n getRangeBefore,\n getRangeFromBlockStart,\n isBlock,\n isVoid,\n setElements,\n someNode,\n} from '@udecode/plate-common';\nimport castArray from 'lodash/castArray.js';\n\nimport type { AutoformatBlockRule } from '../types';\n\nimport { getMatchRange } from '../utils/getMatchRange';\n\nexport interface AutoformatBlockOptions extends AutoformatBlockRule {\n text: string;\n}\n\nexport const autoformatBlock = (\n editor: SlateEditor,\n {\n allowSameTypeAbove = false,\n format,\n match: _match,\n matchByRegex = false,\n preFormat,\n text,\n trigger,\n triggerAtBlockStart = true,\n type = ParagraphPlugin.key,\n }: AutoformatBlockOptions\n) => {\n const matches = castArray(_match as string | string[]);\n\n for (const match of matches) {\n const { end, triggers } = getMatchRange({\n match: { end: match, start: '' },\n trigger,\n });\n\n if (!triggers.includes(text)) continue;\n\n let matchRange: Range | undefined;\n\n if (triggerAtBlockStart) {\n matchRange = getRangeFromBlockStart(editor) as Range;\n\n // Don't autoformat if there is void nodes.\n const hasVoidNode = someNode(editor, {\n at: matchRange,\n match: (n) => isVoid(editor, n),\n });\n\n if (hasVoidNode) continue;\n\n const textFromBlockStart = getEditorString(editor, matchRange);\n\n const isMatched = matchByRegex\n ? !!textFromBlockStart.match(end)\n : end === textFromBlockStart;\n\n if (!isMatched) continue;\n } else {\n matchRange = getRangeBefore(editor, editor.selection as Range, {\n matchByRegex,\n matchString: end,\n });\n\n if (!matchRange) continue;\n }\n if (!allowSameTypeAbove) {\n // Don't autoformat if already in a block of the same type.\n const isBelowSameBlockType = someNode(editor, { match: { type } });\n\n if (isBelowSameBlockType) continue;\n }\n // if the trigger is only 1 char there is nothing to delete, so we'd delete unrelated text\n if (match.length > 1) {\n deleteText(editor, {\n at: matchRange,\n });\n }\n if (preFormat) {\n preFormat(editor);\n }\n if (format) {\n format(editor);\n } else {\n setElements(\n editor,\n { type },\n {\n match: (n) => isBlock(editor, n),\n }\n );\n }\n\n return true;\n }\n\n return false;\n};\n","import castArray from 'lodash/castArray.js';\n\nimport type { AutoformatRule, MatchRange } from '../types';\n\nexport const getMatchRange = ({\n match,\n trigger,\n}: {\n match: MatchRange | string;\n trigger: AutoformatRule['trigger'];\n}) => {\n let start: string;\n let end: string;\n\n if (typeof match === 'object') {\n start = match.start;\n end = match.end;\n } else {\n start = match;\n end = start.split('').reverse().join('');\n }\n\n const triggers: string[] = trigger ? castArray(trigger) : [end.slice(-1)];\n\n end = trigger ? end : end.slice(0, -1);\n\n return {\n end,\n start,\n triggers,\n };\n};\n","import type { Point, Range } from 'slate';\n\nimport {\n type TEditor,\n collapseSelection,\n deleteText,\n getEditorString,\n removeMark,\n select,\n} from '@udecode/plate-common';\nimport castArray from 'lodash/castArray.js';\n\nimport type { AutoformatMarkRule } from '../types';\n\nimport { getMatchPoints } from '../utils/getMatchPoints';\nimport { getMatchRange } from '../utils/getMatchRange';\n\nexport interface AutoformatMarkOptions extends AutoformatMarkRule {\n text: string;\n}\n\nexport const autoformatMark = (\n editor: TEditor,\n { ignoreTrim, match: _match, text, trigger, type }: AutoformatMarkOptions\n) => {\n if (!type) return false;\n\n const selection = editor.selection as Range;\n const matches = castArray(_match);\n\n for (const match of matches) {\n const { end, start, triggers } = getMatchRange({\n match,\n trigger,\n });\n\n if (!triggers.includes(text)) continue;\n\n const matched = getMatchPoints(editor, { end, start });\n\n if (!matched) continue;\n\n const { afterStartMatchPoint, beforeEndMatchPoint, beforeStartMatchPoint } =\n matched;\n\n const matchRange = {\n anchor: afterStartMatchPoint,\n focus: beforeEndMatchPoint,\n } as Range;\n\n if (!ignoreTrim) {\n const matchText = getEditorString(editor, matchRange);\n\n if (matchText.trim() !== matchText) continue;\n }\n // delete end match\n if (end) {\n deleteText(editor, {\n at: {\n anchor: beforeEndMatchPoint,\n focus: selection.anchor,\n },\n });\n }\n\n const marks = castArray(type);\n\n // add mark to the text between the matches\n select(editor, matchRange as Range);\n marks.forEach((mark) => {\n editor.addMark(mark, true);\n });\n collapseSelection(editor, { edge: 'end' });\n removeMark(editor, { key: marks as any, shouldChange: false });\n\n deleteText(editor, {\n at: {\n anchor: beforeStartMatchPoint as Point,\n focus: afterStartMatchPoint as Point,\n },\n });\n\n return true;\n }\n\n return false;\n};\n","import type { Point, Range } from 'slate';\n\nimport { type TEditor, getPointBeforeLocation } from '@udecode/plate-common';\n\nimport type { MatchRange } from '../types';\n\nimport { isPreviousCharacterEmpty } from './isPreviousCharacterEmpty';\n\nexport type GetMatchPointsReturnType =\n | {\n afterStartMatchPoint: Point | undefined;\n beforeEndMatchPoint: Point;\n beforeStartMatchPoint: Point | undefined;\n }\n | undefined;\n\nexport const getMatchPoints = (editor: TEditor, { end, start }: MatchRange) => {\n const selection = editor.selection as Range;\n\n let beforeEndMatchPoint = selection.anchor;\n\n if (end) {\n beforeEndMatchPoint = getPointBeforeLocation(editor, selection, {\n matchString: end,\n });\n\n if (!beforeEndMatchPoint) return;\n }\n\n let afterStartMatchPoint: Point | undefined;\n let beforeStartMatchPoint: Point | undefined;\n\n if (start) {\n afterStartMatchPoint = getPointBeforeLocation(editor, beforeEndMatchPoint, {\n afterMatch: true,\n matchString: start,\n skipInvalid: true,\n });\n\n if (!afterStartMatchPoint) return;\n\n beforeStartMatchPoint = getPointBeforeLocation(\n editor,\n beforeEndMatchPoint,\n {\n matchString: start,\n skipInvalid: true,\n }\n );\n\n if (!isPreviousCharacterEmpty(editor, beforeStartMatchPoint as Point))\n return;\n }\n\n return {\n afterStartMatchPoint,\n beforeEndMatchPoint,\n beforeStartMatchPoint,\n };\n};\n","import type { Location } from 'slate';\n\nimport {\n type TEditor,\n getEditorString,\n getRangeBefore,\n} from '@udecode/plate-common';\n\nexport const isPreviousCharacterEmpty = (editor: TEditor, at: Location) => {\n const range = getRangeBefore(editor, at);\n\n if (range) {\n const text = getEditorString(editor, range);\n\n if (text) {\n const noWhiteSpaceRegex = new RegExp(`\\\\S+`);\n\n return !text.match(noWhiteSpaceRegex);\n }\n }\n\n return true;\n};\n","import type { Point, Range } from 'slate';\n\nimport {\n type SlateEditor,\n deleteText,\n insertText,\n} from '@udecode/plate-common';\nimport castArray from 'lodash/castArray.js';\n\nimport type { AutoformatTextRule } from '../types';\n\nimport { getMatchPoints } from '../utils/getMatchPoints';\nimport { getMatchRange } from '../utils/getMatchRange';\n\nexport interface AutoformatTextOptions extends AutoformatTextRule {\n text: string;\n}\n\nexport const autoformatText = (\n editor: SlateEditor,\n { format, match: _match, text, trigger }: AutoformatTextOptions\n) => {\n const selection = editor.selection as Range;\n const matches = castArray(_match);\n\n // dup\n for (const match of matches) {\n const { end, start, triggers } = getMatchRange({\n match: Array.isArray(format)\n ? match\n : {\n end: match,\n start: '',\n },\n trigger,\n });\n\n if (!triggers.includes(text)) continue;\n\n const matched = getMatchPoints(editor, { end, start });\n\n if (!matched) continue;\n\n const { afterStartMatchPoint, beforeEndMatchPoint, beforeStartMatchPoint } =\n matched;\n\n if (end) {\n deleteText(editor, {\n at: {\n anchor: beforeEndMatchPoint,\n focus: selection.anchor,\n },\n });\n }\n if (typeof format === 'function') {\n format(editor, matched);\n } else {\n const formatEnd = Array.isArray(format) ? format[1] : format;\n editor.insertText(formatEnd);\n\n if (beforeStartMatchPoint) {\n const formatStart = Array.isArray(format) ? format[0] : format;\n\n deleteText(editor, {\n at: {\n anchor: beforeStartMatchPoint as Point,\n focus: afterStartMatchPoint as Point,\n },\n });\n\n insertText(editor, formatStart, {\n at: beforeStartMatchPoint,\n });\n }\n }\n\n return true;\n }\n\n return false;\n};\n","import type { AutoformatRule } from '../types';\n\nexport const autoformatArrow: AutoformatRule[] = [\n {\n format: '→',\n match: '->',\n mode: 'text',\n },\n {\n format: '←',\n match: '<-',\n mode: 'text',\n },\n {\n format: '⇒',\n match: '=>',\n mode: 'text',\n },\n {\n format: '⇐',\n match: ['<=', '≤='],\n mode: 'text',\n },\n];\n","import type { AutoformatRule } from '../types';\n\nexport const autoformatLegal: AutoformatRule[] = [\n {\n format: '™',\n match: ['(tm)', '(TM)'],\n mode: 'text',\n },\n {\n format: '®',\n match: ['(r)', '(R)'],\n mode: 'text',\n },\n\n {\n format: '©',\n match: ['(c)', '(C)'],\n mode: 'text',\n },\n];\n\nexport const autoformatLegalHtml: AutoformatRule[] = [\n {\n format: '™',\n match: '&trade;',\n mode: 'text',\n },\n {\n format: '®',\n match: '&reg;',\n mode: 'text',\n },\n {\n format: '©',\n match: '&copy;',\n mode: 'text',\n },\n {\n format: '§',\n match: '&sect;',\n mode: 'text',\n },\n];\n","import type { AutoformatRule } from '../types';\n\nexport const autoformatPunctuation: AutoformatRule[] = [\n {\n format: '\\u2014',\n match: '--',\n mode: 'text',\n },\n {\n format: '…',\n match: '...',\n mode: 'text',\n },\n {\n format: '»',\n match: '>>',\n mode: 'text',\n },\n {\n format: '«',\n match: '<<',\n mode: 'text',\n },\n];\n","import type { AutoformatRule } from '../types';\n\nexport const autoformatSmartQuotes: AutoformatRule[] = [\n {\n format: ['“', '”'],\n match: '\"',\n mode: 'text',\n },\n {\n format: ['‘', '’'],\n match: \"'\",\n mode: 'text',\n },\n];\n","import type { AutoformatRule } from '../../types';\n\nexport const autoformatComparison: AutoformatRule[] = [\n {\n format: '≯',\n match: '!>',\n mode: 'text',\n },\n {\n format: '≮',\n match: '!<',\n mode: 'text',\n },\n {\n format: '≥',\n match: '>=',\n mode: 'text',\n },\n {\n format: '≤',\n match: '<=',\n mode: 'text',\n },\n {\n format: '≱',\n match: '!>=',\n mode: 'text',\n },\n {\n format: '≰',\n match: '!<=',\n mode: 'text',\n },\n];\n","import type { AutoformatRule } from '../../types';\n\nexport const autoformatEquality: AutoformatRule[] = [\n {\n format: '≠',\n match: '!=',\n mode: 'text',\n },\n {\n format: '≡',\n match: '==',\n mode: 'text',\n },\n {\n format: '≢',\n match: ['!==', '≠='],\n mode: 'text',\n },\n {\n format: '≈',\n match: '~=',\n mode: 'text',\n },\n {\n format: '≉',\n match: '!~=',\n mode: 'text',\n },\n];\n","import type { AutoformatRule } from '../../types';\n\nexport const autoformatFraction: AutoformatRule[] = [\n {\n format: '½',\n match: '1/2',\n mode: 'text',\n },\n {\n format: '⅓',\n match: '1/3',\n mode: 'text',\n },\n {\n format: '¼',\n match: '1/4',\n mode: 'text',\n },\n {\n format: '⅕',\n match: '1/5',\n mode: 'text',\n },\n {\n format: '⅙',\n match: '1/6',\n mode: 'text',\n },\n {\n format: '⅐',\n match: '1/7',\n mode: 'text',\n },\n {\n format: '⅛',\n match: '1/8',\n mode: 'text',\n },\n {\n format: '⅑',\n match: '1/9',\n mode: 'text',\n },\n {\n format: '⅒',\n match: '1/10',\n mode: 'text',\n },\n {\n format: '⅔',\n match: '2/3',\n mode: 'text',\n },\n {\n format: '⅖',\n match: '2/5',\n mode: 'text',\n },\n {\n format: '¾',\n match: '3/4',\n mode: 'text',\n },\n {\n format: '⅗',\n match: '3/5',\n mode: 'text',\n },\n {\n format: '⅜',\n match: '3/8',\n mode: 'text',\n },\n {\n format: '⅘',\n match: '4/5',\n mode: 'text',\n },\n {\n format: '⅚',\n match: '5/6',\n mode: 'text',\n },\n {\n format: '⅝',\n match: '5/8',\n mode: 'text',\n },\n {\n format: '⅞',\n match: '7/8',\n mode: 'text',\n },\n];\n","import type { AutoformatRule } from '../../types';\n\nexport const autoformatDivision: AutoformatRule[] = [\n {\n format: '÷',\n match: '//',\n mode: 'text',\n },\n];\n\nexport const autoformatOperation: AutoformatRule[] = [\n {\n format: '±',\n match: '+-',\n mode: 'text',\n },\n {\n format: '‰',\n match: '%%',\n mode: 'text',\n },\n {\n format: '‱',\n match: ['%%%', '‰%'],\n mode: 'text',\n },\n ...autoformatDivision,\n];\n","import type { AutoformatRule } from '../../types';\n\nexport const autoformatSubscriptNumbers: AutoformatRule[] = [\n {\n format: '₀',\n match: '~0',\n mode: 'text',\n },\n {\n format: '₁',\n match: '~1',\n mode: 'text',\n },\n {\n format: '₂',\n match: '~2',\n mode: 'text',\n },\n {\n format: '₃',\n match: '~3',\n mode: 'text',\n },\n {\n format: '₄',\n match: '~4',\n mode: 'text',\n },\n {\n format: '₅',\n match: '~5',\n mode: 'text',\n },\n {\n format: '₆',\n match: '~6',\n mode: 'text',\n },\n {\n format: '₇',\n match: '~7',\n mode: 'text',\n },\n {\n format: '₈',\n match: '~8',\n mode: 'text',\n },\n {\n format: '₉',\n match: '~9',\n mode: 'text',\n },\n];\n\nexport const autoformatSubscriptSymbols: AutoformatRule[] = [\n {\n format: '₊',\n match: '~+',\n mode: 'text',\n },\n {\n format: '₋',\n match: '~-',\n mode: 'text',\n },\n];\n","import type { AutoformatRule } from '../../types';\n\nexport const autoformatSuperscriptNumbers: AutoformatRule[] = [\n {\n format: '⁰',\n match: '^0',\n mode: 'text',\n },\n {\n format: '¹',\n match: '^1',\n mode: 'text',\n },\n {\n format: '²',\n match: '^2',\n mode: 'text',\n },\n {\n format: '³',\n match: '^3',\n mode: 'text',\n },\n {\n format: '⁴',\n match: '^4',\n mode: 'text',\n },\n {\n format: '⁵',\n match: '^5',\n mode: 'text',\n },\n {\n format: '⁶',\n match: '^6',\n mode: 'text',\n },\n {\n format: '⁷',\n match: '^7',\n mode: 'text',\n },\n {\n format: '⁸',\n match: '^8',\n mode: 'text',\n },\n {\n format: '⁹',\n match: '^9',\n mode: 'text',\n },\n];\n\nexport const autoformatSuperscriptSymbols: AutoformatRule[] = [\n {\n format: '°',\n match: '^o',\n mode: 'text',\n },\n {\n format: '⁺',\n match: '^+',\n mode: 'text',\n },\n {\n format: '⁻',\n match: '^-',\n mode: 'text',\n },\n];\n","import { autoformatComparison } from './autoformatComparison';\nimport { autoformatEquality } from './autoformatEquality';\nimport { autoformatFraction } from './autoformatFraction';\nimport { autoformatOperation } from './autoformatOperation';\nimport {\n autoformatSubscriptNumbers,\n autoformatSubscriptSymbols,\n} from './autoformatSubscript';\nimport {\n autoformatSuperscriptNumbers,\n autoformatSuperscriptSymbols,\n} from './autoformatSuperscript';\n\nexport const autoformatMath = [\n ...autoformatComparison,\n ...autoformatEquality,\n ...autoformatOperation,\n ...autoformatFraction,\n ...autoformatSuperscriptSymbols,\n ...autoformatSubscriptSymbols,\n ...autoformatSuperscriptNumbers,\n ...autoformatSubscriptNumbers,\n];\n"],"mappings":"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","names":["castArray","castArray","deleteText","getEditorString","castArray","getEditorString","getRangeBefore","castArray","getEditorString","deleteText","deleteText","castArray","castArray","deleteText","insertText"]}
{"version":3,"sources":["../src/lib/BaseAutoformatPlugin.ts","../src/lib/withAutoformat.ts","../src/lib/transforms/autoformatBlock.ts","../src/lib/utils/getMatchRange.ts","../src/lib/transforms/autoformatMark.ts","../src/lib/utils/getMatchPoints.ts","../src/lib/utils/isPreviousCharacterEmpty.ts","../src/lib/transforms/autoformatText.ts","../src/lib/rules/autoformatArrow.ts","../src/lib/rules/autoformatLegal.ts","../src/lib/rules/autoformatPunctuation.ts","../src/lib/rules/autoformatSmartQuotes.ts","../src/lib/rules/math/autoformatComparison.ts","../src/lib/rules/math/autoformatEquality.ts","../src/lib/rules/math/autoformatFraction.ts","../src/lib/rules/math/autoformatOperation.ts","../src/lib/rules/math/autoformatSubscript.ts","../src/lib/rules/math/autoformatSuperscript.ts","../src/lib/rules/math/autoformatMath.ts"],"sourcesContent":["import { type PluginConfig, createTSlatePlugin } from '@udecode/plate-common';\n\nimport type { AutoformatPluginOptions } from './types';\n\nimport { withAutoformat } from './withAutoformat';\n\nexport type AutoformatConfig = PluginConfig<\n 'autoformat',\n AutoformatPluginOptions\n>;\n\n/** @see {@link withAutoformat} */\nexport const BaseAutoformatPlugin = createTSlatePlugin<AutoformatConfig>({\n key: 'autoformat',\n extendEditor: withAutoformat,\n options: {\n rules: [],\n },\n});\n","import { type ExtendEditor, isCollapsed } from '@udecode/plate-common';\n\nimport type { AutoformatConfig } from './BaseAutoformatPlugin';\n\nimport { autoformatBlock } from './transforms/autoformatBlock';\nimport { autoformatMark } from './transforms/autoformatMark';\nimport { autoformatText } from './transforms/autoformatText';\n\n/**\n * Enables support for autoformatting actions. Once a match rule is validated,\n * it does not check the following rules.\n */\nexport const withAutoformat: ExtendEditor<AutoformatConfig> = ({\n editor,\n getOptions,\n}) => {\n const { insertText } = editor;\n\n editor.insertText = (text) => {\n if (!isCollapsed(editor.selection)) return insertText(text);\n\n for (const rule of getOptions().rules!) {\n const { insertTrigger, mode = 'text', query } = rule;\n\n if (query && !query(editor as any, { ...rule, text })) continue;\n\n const autoformatter: Record<typeof mode, any> = {\n block: autoformatBlock,\n mark: autoformatMark,\n text: autoformatText,\n };\n\n if (\n autoformatter[mode]?.(editor, {\n ...(rule as any),\n text,\n })\n ) {\n return insertTrigger && insertText(text);\n }\n }\n\n insertText(text);\n };\n\n return editor;\n};\n","import type { Range } from 'slate';\n\nimport {\n type SlateEditor,\n BaseParagraphPlugin,\n deleteText,\n getEditorString,\n getRangeBefore,\n getRangeFromBlockStart,\n isBlock,\n isVoid,\n setElements,\n someNode,\n} from '@udecode/plate-common';\nimport castArray from 'lodash/castArray.js';\n\nimport type { AutoformatBlockRule } from '../types';\n\nimport { getMatchRange } from '../utils/getMatchRange';\n\nexport interface AutoformatBlockOptions extends AutoformatBlockRule {\n text: string;\n}\n\nexport const autoformatBlock = (\n editor: SlateEditor,\n {\n allowSameTypeAbove = false,\n format,\n match: _match,\n matchByRegex = false,\n preFormat,\n text,\n trigger,\n triggerAtBlockStart = true,\n type = BaseParagraphPlugin.key,\n }: AutoformatBlockOptions\n) => {\n const matches = castArray(_match as string[] | string);\n\n for (const match of matches) {\n const { end, triggers } = getMatchRange({\n match: { end: match, start: '' },\n trigger,\n });\n\n if (!triggers.includes(text)) continue;\n\n let matchRange: Range | undefined;\n\n if (triggerAtBlockStart) {\n matchRange = getRangeFromBlockStart(editor) as Range;\n\n // Don't autoformat if there is void nodes.\n const hasVoidNode = someNode(editor, {\n at: matchRange,\n match: (n) => isVoid(editor, n),\n });\n\n if (hasVoidNode) continue;\n\n const textFromBlockStart = getEditorString(editor, matchRange);\n\n const isMatched = matchByRegex\n ? !!textFromBlockStart.match(end)\n : end === textFromBlockStart;\n\n if (!isMatched) continue;\n } else {\n matchRange = getRangeBefore(editor, editor.selection as Range, {\n matchByRegex,\n matchString: end,\n });\n\n if (!matchRange) continue;\n }\n if (!allowSameTypeAbove) {\n // Don't autoformat if already in a block of the same type.\n const isBelowSameBlockType = someNode(editor, { match: { type } });\n\n if (isBelowSameBlockType) continue;\n }\n // if the trigger is only 1 char there is nothing to delete, so we'd delete unrelated text\n if (match.length > 1) {\n deleteText(editor, {\n at: matchRange,\n });\n }\n if (preFormat) {\n preFormat(editor);\n }\n if (format) {\n format(editor);\n } else {\n setElements(\n editor,\n { type },\n {\n match: (n) => isBlock(editor, n),\n }\n );\n }\n\n return true;\n }\n\n return false;\n};\n","import castArray from 'lodash/castArray.js';\n\nimport type { AutoformatRule, MatchRange } from '../types';\n\nexport const getMatchRange = ({\n match,\n trigger,\n}: {\n match: MatchRange | string;\n trigger: AutoformatRule['trigger'];\n}) => {\n let start: string;\n let end: string;\n\n if (typeof match === 'object') {\n start = match.start;\n end = match.end;\n } else {\n start = match;\n end = start.split('').reverse().join('');\n }\n\n const triggers: string[] = trigger ? castArray(trigger) : [end.slice(-1)];\n\n end = trigger ? end : end.slice(0, -1);\n\n return {\n end,\n start,\n triggers,\n };\n};\n","import type { Point, Range } from 'slate';\n\nimport {\n type TEditor,\n collapseSelection,\n deleteText,\n getEditorString,\n removeMark,\n select,\n} from '@udecode/plate-common';\nimport castArray from 'lodash/castArray.js';\n\nimport type { AutoformatMarkRule } from '../types';\n\nimport { getMatchPoints } from '../utils/getMatchPoints';\nimport { getMatchRange } from '../utils/getMatchRange';\n\nexport interface AutoformatMarkOptions extends AutoformatMarkRule {\n text: string;\n}\n\nexport const autoformatMark = (\n editor: TEditor,\n { ignoreTrim, match: _match, text, trigger, type }: AutoformatMarkOptions\n) => {\n if (!type) return false;\n\n const selection = editor.selection as Range;\n const matches = castArray(_match);\n\n for (const match of matches) {\n const { end, start, triggers } = getMatchRange({\n match,\n trigger,\n });\n\n if (!triggers.includes(text)) continue;\n\n const matched = getMatchPoints(editor, { end, start });\n\n if (!matched) continue;\n\n const { afterStartMatchPoint, beforeEndMatchPoint, beforeStartMatchPoint } =\n matched;\n\n const matchRange = {\n anchor: afterStartMatchPoint,\n focus: beforeEndMatchPoint,\n } as Range;\n\n if (!ignoreTrim) {\n const matchText = getEditorString(editor, matchRange);\n\n if (matchText.trim() !== matchText) continue;\n }\n // delete end match\n if (end) {\n deleteText(editor, {\n at: {\n anchor: beforeEndMatchPoint,\n focus: selection.anchor,\n },\n });\n }\n\n const marks = castArray(type);\n\n // add mark to the text between the matches\n select(editor, matchRange as Range);\n marks.forEach((mark) => {\n editor.addMark(mark, true);\n });\n collapseSelection(editor, { edge: 'end' });\n removeMark(editor, { key: marks as any, shouldChange: false });\n\n deleteText(editor, {\n at: {\n anchor: beforeStartMatchPoint as Point,\n focus: afterStartMatchPoint as Point,\n },\n });\n\n return true;\n }\n\n return false;\n};\n","import type { Point, Range } from 'slate';\n\nimport { type TEditor, getPointBeforeLocation } from '@udecode/plate-common';\n\nimport type { MatchRange } from '../types';\n\nimport { isPreviousCharacterEmpty } from './isPreviousCharacterEmpty';\n\nexport type GetMatchPointsReturnType =\n | {\n afterStartMatchPoint: Point | undefined;\n beforeEndMatchPoint: Point;\n beforeStartMatchPoint: Point | undefined;\n }\n | undefined;\n\nexport const getMatchPoints = (editor: TEditor, { end, start }: MatchRange) => {\n const selection = editor.selection as Range;\n\n let beforeEndMatchPoint = selection.anchor;\n\n if (end) {\n beforeEndMatchPoint = getPointBeforeLocation(editor, selection, {\n matchString: end,\n });\n\n if (!beforeEndMatchPoint) return;\n }\n\n let afterStartMatchPoint: Point | undefined;\n let beforeStartMatchPoint: Point | undefined;\n\n if (start) {\n afterStartMatchPoint = getPointBeforeLocation(editor, beforeEndMatchPoint, {\n afterMatch: true,\n matchString: start,\n skipInvalid: true,\n });\n\n if (!afterStartMatchPoint) return;\n\n beforeStartMatchPoint = getPointBeforeLocation(\n editor,\n beforeEndMatchPoint,\n {\n matchString: start,\n skipInvalid: true,\n }\n );\n\n if (!isPreviousCharacterEmpty(editor, beforeStartMatchPoint as Point))\n return;\n }\n\n return {\n afterStartMatchPoint,\n beforeEndMatchPoint,\n beforeStartMatchPoint,\n };\n};\n","import type { Location } from 'slate';\n\nimport {\n type TEditor,\n getEditorString,\n getRangeBefore,\n} from '@udecode/plate-common';\n\nexport const isPreviousCharacterEmpty = (editor: TEditor, at: Location) => {\n const range = getRangeBefore(editor, at);\n\n if (range) {\n const text = getEditorString(editor, range);\n\n if (text) {\n const noWhiteSpaceRegex = new RegExp(`\\\\S+`);\n\n return !noWhiteSpaceRegex.exec(text);\n }\n }\n\n return true;\n};\n","import type { Point, Range } from 'slate';\n\nimport {\n type SlateEditor,\n deleteText,\n insertText,\n} from '@udecode/plate-common';\nimport castArray from 'lodash/castArray.js';\n\nimport type { AutoformatTextRule } from '../types';\n\nimport { getMatchPoints } from '../utils/getMatchPoints';\nimport { getMatchRange } from '../utils/getMatchRange';\n\nexport interface AutoformatTextOptions extends AutoformatTextRule {\n text: string;\n}\n\nexport const autoformatText = (\n editor: SlateEditor,\n { format, match: _match, text, trigger }: AutoformatTextOptions\n) => {\n const selection = editor.selection as Range;\n const matches = castArray(_match);\n\n // dup\n for (const match of matches) {\n const { end, start, triggers } = getMatchRange({\n match: Array.isArray(format)\n ? match\n : {\n end: match,\n start: '',\n },\n trigger,\n });\n\n if (!triggers.includes(text)) continue;\n\n const matched = getMatchPoints(editor, { end, start });\n\n if (!matched) continue;\n\n const { afterStartMatchPoint, beforeEndMatchPoint, beforeStartMatchPoint } =\n matched;\n\n if (end) {\n deleteText(editor, {\n at: {\n anchor: beforeEndMatchPoint,\n focus: selection.anchor,\n },\n });\n }\n if (typeof format === 'function') {\n format(editor, matched);\n } else {\n const formatEnd = Array.isArray(format) ? format[1] : format;\n editor.insertText(formatEnd);\n\n if (beforeStartMatchPoint) {\n const formatStart = Array.isArray(format) ? format[0] : format;\n\n deleteText(editor, {\n at: {\n anchor: beforeStartMatchPoint as Point,\n focus: afterStartMatchPoint as Point,\n },\n });\n\n insertText(editor, formatStart, {\n at: beforeStartMatchPoint,\n });\n }\n }\n\n return true;\n }\n\n return false;\n};\n","import type { AutoformatRule } from '../types';\n\nexport const autoformatArrow: AutoformatRule[] = [\n {\n format: '→',\n match: '->',\n mode: 'text',\n },\n {\n format: '←',\n match: '<-',\n mode: 'text',\n },\n {\n format: '⇒',\n match: '=>',\n mode: 'text',\n },\n {\n format: '⇐',\n match: ['<=', '≤='],\n mode: 'text',\n },\n];\n","import type { AutoformatRule } from '../types';\n\nexport const autoformatLegal: AutoformatRule[] = [\n {\n format: '™',\n match: ['(tm)', '(TM)'],\n mode: 'text',\n },\n {\n format: '®',\n match: ['(r)', '(R)'],\n mode: 'text',\n },\n\n {\n format: '©',\n match: ['(c)', '(C)'],\n mode: 'text',\n },\n];\n\nexport const autoformatLegalHtml: AutoformatRule[] = [\n {\n format: '™',\n match: '&trade;',\n mode: 'text',\n },\n {\n format: '®',\n match: '&reg;',\n mode: 'text',\n },\n {\n format: '©',\n match: '&copy;',\n mode: 'text',\n },\n {\n format: '§',\n match: '&sect;',\n mode: 'text',\n },\n];\n","import type { AutoformatRule } from '../types';\n\nexport const autoformatPunctuation: AutoformatRule[] = [\n {\n format: '\\u2014',\n match: '--',\n mode: 'text',\n },\n {\n format: '…',\n match: '...',\n mode: 'text',\n },\n {\n format: '»',\n match: '>>',\n mode: 'text',\n },\n {\n format: '«',\n match: '<<',\n mode: 'text',\n },\n];\n","import type { AutoformatRule } from '../types';\n\nexport const autoformatSmartQuotes: AutoformatRule[] = [\n {\n format: ['“', '”'],\n match: '\"',\n mode: 'text',\n },\n {\n format: ['‘', '’'],\n match: \"'\",\n mode: 'text',\n },\n];\n","import type { AutoformatRule } from '../../types';\n\nexport const autoformatComparison: AutoformatRule[] = [\n {\n format: '≯',\n match: '!>',\n mode: 'text',\n },\n {\n format: '≮',\n match: '!<',\n mode: 'text',\n },\n {\n format: '≥',\n match: '>=',\n mode: 'text',\n },\n {\n format: '≤',\n match: '<=',\n mode: 'text',\n },\n {\n format: '≱',\n match: '!>=',\n mode: 'text',\n },\n {\n format: '≰',\n match: '!<=',\n mode: 'text',\n },\n];\n","import type { AutoformatRule } from '../../types';\n\nexport const autoformatEquality: AutoformatRule[] = [\n {\n format: '≠',\n match: '!=',\n mode: 'text',\n },\n {\n format: '≡',\n match: '==',\n mode: 'text',\n },\n {\n format: '≢',\n match: ['!==', '≠='],\n mode: 'text',\n },\n {\n format: '≈',\n match: '~=',\n mode: 'text',\n },\n {\n format: '≉',\n match: '!~=',\n mode: 'text',\n },\n];\n","import type { AutoformatRule } from '../../types';\n\nexport const autoformatFraction: AutoformatRule[] = [\n {\n format: '½',\n match: '1/2',\n mode: 'text',\n },\n {\n format: '⅓',\n match: '1/3',\n mode: 'text',\n },\n {\n format: '¼',\n match: '1/4',\n mode: 'text',\n },\n {\n format: '⅕',\n match: '1/5',\n mode: 'text',\n },\n {\n format: '⅙',\n match: '1/6',\n mode: 'text',\n },\n {\n format: '⅐',\n match: '1/7',\n mode: 'text',\n },\n {\n format: '⅛',\n match: '1/8',\n mode: 'text',\n },\n {\n format: '⅑',\n match: '1/9',\n mode: 'text',\n },\n {\n format: '⅒',\n match: '1/10',\n mode: 'text',\n },\n {\n format: '⅔',\n match: '2/3',\n mode: 'text',\n },\n {\n format: '⅖',\n match: '2/5',\n mode: 'text',\n },\n {\n format: '¾',\n match: '3/4',\n mode: 'text',\n },\n {\n format: '⅗',\n match: '3/5',\n mode: 'text',\n },\n {\n format: '⅜',\n match: '3/8',\n mode: 'text',\n },\n {\n format: '⅘',\n match: '4/5',\n mode: 'text',\n },\n {\n format: '⅚',\n match: '5/6',\n mode: 'text',\n },\n {\n format: '⅝',\n match: '5/8',\n mode: 'text',\n },\n {\n format: '⅞',\n match: '7/8',\n mode: 'text',\n },\n];\n","import type { AutoformatRule } from '../../types';\n\nexport const autoformatDivision: AutoformatRule[] = [\n {\n format: '÷',\n match: '//',\n mode: 'text',\n },\n];\n\nexport const autoformatOperation: AutoformatRule[] = [\n {\n format: '±',\n match: '+-',\n mode: 'text',\n },\n {\n format: '‰',\n match: '%%',\n mode: 'text',\n },\n {\n format: '‱',\n match: ['%%%', '‰%'],\n mode: 'text',\n },\n ...autoformatDivision,\n];\n","import type { AutoformatRule } from '../../types';\n\nexport const autoformatSubscriptNumbers: AutoformatRule[] = [\n {\n format: '₀',\n match: '~0',\n mode: 'text',\n },\n {\n format: '₁',\n match: '~1',\n mode: 'text',\n },\n {\n format: '₂',\n match: '~2',\n mode: 'text',\n },\n {\n format: '₃',\n match: '~3',\n mode: 'text',\n },\n {\n format: '₄',\n match: '~4',\n mode: 'text',\n },\n {\n format: '₅',\n match: '~5',\n mode: 'text',\n },\n {\n format: '₆',\n match: '~6',\n mode: 'text',\n },\n {\n format: '₇',\n match: '~7',\n mode: 'text',\n },\n {\n format: '₈',\n match: '~8',\n mode: 'text',\n },\n {\n format: '₉',\n match: '~9',\n mode: 'text',\n },\n];\n\nexport const autoformatSubscriptSymbols: AutoformatRule[] = [\n {\n format: '₊',\n match: '~+',\n mode: 'text',\n },\n {\n format: '₋',\n match: '~-',\n mode: 'text',\n },\n];\n","import type { AutoformatRule } from '../../types';\n\nexport const autoformatSuperscriptNumbers: AutoformatRule[] = [\n {\n format: '⁰',\n match: '^0',\n mode: 'text',\n },\n {\n format: '¹',\n match: '^1',\n mode: 'text',\n },\n {\n format: '²',\n match: '^2',\n mode: 'text',\n },\n {\n format: '³',\n match: '^3',\n mode: 'text',\n },\n {\n format: '⁴',\n match: '^4',\n mode: 'text',\n },\n {\n format: '⁵',\n match: '^5',\n mode: 'text',\n },\n {\n format: '⁶',\n match: '^6',\n mode: 'text',\n },\n {\n format: '⁷',\n match: '^7',\n mode: 'text',\n },\n {\n format: '⁸',\n match: '^8',\n mode: 'text',\n },\n {\n format: '⁹',\n match: '^9',\n mode: 'text',\n },\n];\n\nexport const autoformatSuperscriptSymbols: AutoformatRule[] = [\n {\n format: '°',\n match: '^o',\n mode: 'text',\n },\n {\n format: '⁺',\n match: '^+',\n mode: 'text',\n },\n {\n format: '⁻',\n match: '^-',\n mode: 'text',\n },\n];\n","import { autoformatComparison } from './autoformatComparison';\nimport { autoformatEquality } from './autoformatEquality';\nimport { autoformatFraction } from './autoformatFraction';\nimport { autoformatOperation } from './autoformatOperation';\nimport {\n autoformatSubscriptNumbers,\n autoformatSubscriptSymbols,\n} from './autoformatSubscript';\nimport {\n autoformatSuperscriptNumbers,\n autoformatSuperscriptSymbols,\n} from './autoformatSuperscript';\n\nexport const autoformatMath = [\n ...autoformatComparison,\n ...autoformatEquality,\n ...autoformatOperation,\n ...autoformatFraction,\n ...autoformatSuperscriptSymbols,\n ...autoformatSubscriptSymbols,\n ...autoformatSuperscriptNumbers,\n ...autoformatSubscriptNumbers,\n];\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,SAA4B,0BAA0B;;;ACAtD,SAA4B,mBAAmB;;;ACE/C;AAAA,EAEE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,OAAOA,gBAAe;;;ACdtB,OAAO,eAAe;AAIf,IAAM,gBAAgB,CAAC;AAAA,EAC5B;AAAA,EACA;AACF,MAGM;AACJ,MAAI;AACJ,MAAI;AAEJ,MAAI,OAAO,UAAU,UAAU;AAC7B,YAAQ,MAAM;AACd,UAAM,MAAM;AAAA,EACd,OAAO;AACL,YAAQ;AACR,UAAM,MAAM,MAAM,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE;AAAA,EACzC;AAEA,QAAM,WAAqB,UAAU,UAAU,OAAO,IAAI,CAAC,IAAI,MAAM,EAAE,CAAC;AAExE,QAAM,UAAU,MAAM,IAAI,MAAM,GAAG,EAAE;AAErC,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;ADPO,IAAM,kBAAkB,CAC7B,QACA;AAAA,EACE,qBAAqB;AAAA,EACrB;AAAA,EACA,OAAO;AAAA,EACP,eAAe;AAAA,EACf;AAAA,EACA;AAAA,EACA;AAAA,EACA,sBAAsB;AAAA,EACtB,OAAO,oBAAoB;AAC7B,MACG;AACH,QAAM,UAAUC,WAAU,MAA2B;AAErD,aAAW,SAAS,SAAS;AAC3B,UAAM,EAAE,KAAK,SAAS,IAAI,cAAc;AAAA,MACtC,OAAO,EAAE,KAAK,OAAO,OAAO,GAAG;AAAA,MAC/B;AAAA,IACF,CAAC;AAED,QAAI,CAAC,SAAS,SAAS,IAAI,EAAG;AAE9B,QAAI;AAEJ,QAAI,qBAAqB;AACvB,mBAAa,uBAAuB,MAAM;AAG1C,YAAM,cAAc,SAAS,QAAQ;AAAA,QACnC,IAAI;AAAA,QACJ,OAAO,CAAC,MAAM,OAAO,QAAQ,CAAC;AAAA,MAChC,CAAC;AAED,UAAI,YAAa;AAEjB,YAAM,qBAAqB,gBAAgB,QAAQ,UAAU;AAE7D,YAAM,YAAY,eACd,CAAC,CAAC,mBAAmB,MAAM,GAAG,IAC9B,QAAQ;AAEZ,UAAI,CAAC,UAAW;AAAA,IAClB,OAAO;AACL,mBAAa,eAAe,QAAQ,OAAO,WAAoB;AAAA,QAC7D;AAAA,QACA,aAAa;AAAA,MACf,CAAC;AAED,UAAI,CAAC,WAAY;AAAA,IACnB;AACA,QAAI,CAAC,oBAAoB;AAEvB,YAAM,uBAAuB,SAAS,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAEjE,UAAI,qBAAsB;AAAA,IAC5B;AAEA,QAAI,MAAM,SAAS,GAAG;AACpB,iBAAW,QAAQ;AAAA,QACjB,IAAI;AAAA,MACN,CAAC;AAAA,IACH;AACA,QAAI,WAAW;AACb,gBAAU,MAAM;AAAA,IAClB;AACA,QAAI,QAAQ;AACV,aAAO,MAAM;AAAA,IACf,OAAO;AACL;AAAA,QACE;AAAA,QACA,EAAE,KAAK;AAAA,QACP;AAAA,UACE,OAAO,CAAC,MAAM,QAAQ,QAAQ,CAAC;AAAA,QACjC;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAEA,SAAO;AACT;;;AEzGA;AAAA,EAEE;AAAA,EACA,cAAAC;AAAA,EACA,mBAAAC;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,OAAOC,gBAAe;;;ACRtB,SAAuB,8BAA8B;;;ACArD;AAAA,EAEE,mBAAAC;AAAA,EACA,kBAAAC;AAAA,OACK;AAEA,IAAM,2BAA2B,CAAC,QAAiB,OAAiB;AACzE,QAAM,QAAQA,gBAAe,QAAQ,EAAE;AAEvC,MAAI,OAAO;AACT,UAAM,OAAOD,iBAAgB,QAAQ,KAAK;AAE1C,QAAI,MAAM;AACR,YAAM,oBAAoB,IAAI,OAAO,MAAM;AAE3C,aAAO,CAAC,kBAAkB,KAAK,IAAI;AAAA,IACrC;AAAA,EACF;AAEA,SAAO;AACT;;;ADNO,IAAM,iBAAiB,CAAC,QAAiB,EAAE,KAAK,MAAM,MAAkB;AAC7E,QAAM,YAAY,OAAO;AAEzB,MAAI,sBAAsB,UAAU;AAEpC,MAAI,KAAK;AACP,0BAAsB,uBAAuB,QAAQ,WAAW;AAAA,MAC9D,aAAa;AAAA,IACf,CAAC;AAED,QAAI,CAAC,oBAAqB;AAAA,EAC5B;AAEA,MAAI;AACJ,MAAI;AAEJ,MAAI,OAAO;AACT,2BAAuB,uBAAuB,QAAQ,qBAAqB;AAAA,MACzE,YAAY;AAAA,MACZ,aAAa;AAAA,MACb,aAAa;AAAA,IACf,CAAC;AAED,QAAI,CAAC,qBAAsB;AAE3B,4BAAwB;AAAA,MACtB;AAAA,MACA;AAAA,MACA;AAAA,QACE,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,IACF;AAEA,QAAI,CAAC,yBAAyB,QAAQ,qBAA8B;AAClE;AAAA,EACJ;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;ADtCO,IAAM,iBAAiB,CAC5B,QACA,EAAE,YAAY,OAAO,QAAQ,MAAM,SAAS,KAAK,MAC9C;AACH,MAAI,CAAC,KAAM,QAAO;AAElB,QAAM,YAAY,OAAO;AACzB,QAAM,UAAUE,WAAU,MAAM;AAEhC,aAAW,SAAS,SAAS;AAC3B,UAAM,EAAE,KAAK,OAAO,SAAS,IAAI,cAAc;AAAA,MAC7C;AAAA,MACA;AAAA,IACF,CAAC;AAED,QAAI,CAAC,SAAS,SAAS,IAAI,EAAG;AAE9B,UAAM,UAAU,eAAe,QAAQ,EAAE,KAAK,MAAM,CAAC;AAErD,QAAI,CAAC,QAAS;AAEd,UAAM,EAAE,sBAAsB,qBAAqB,sBAAsB,IACvE;AAEF,UAAM,aAAa;AAAA,MACjB,QAAQ;AAAA,MACR,OAAO;AAAA,IACT;AAEA,QAAI,CAAC,YAAY;AACf,YAAM,YAAYC,iBAAgB,QAAQ,UAAU;AAEpD,UAAI,UAAU,KAAK,MAAM,UAAW;AAAA,IACtC;AAEA,QAAI,KAAK;AACP,MAAAC,YAAW,QAAQ;AAAA,QACjB,IAAI;AAAA,UACF,QAAQ;AAAA,UACR,OAAO,UAAU;AAAA,QACnB;AAAA,MACF,CAAC;AAAA,IACH;AAEA,UAAM,QAAQF,WAAU,IAAI;AAG5B,WAAO,QAAQ,UAAmB;AAClC,UAAM,QAAQ,CAAC,SAAS;AACtB,aAAO,QAAQ,MAAM,IAAI;AAAA,IAC3B,CAAC;AACD,sBAAkB,QAAQ,EAAE,MAAM,MAAM,CAAC;AACzC,eAAW,QAAQ,EAAE,KAAK,OAAc,cAAc,MAAM,CAAC;AAE7D,IAAAE,YAAW,QAAQ;AAAA,MACjB,IAAI;AAAA,QACF,QAAQ;AAAA,QACR,OAAO;AAAA,MACT;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAEA,SAAO;AACT;;;AGpFA;AAAA,EAEE,cAAAC;AAAA,EACA;AAAA,OACK;AACP,OAAOC,gBAAe;AAWf,IAAM,iBAAiB,CAC5B,QACA,EAAE,QAAQ,OAAO,QAAQ,MAAM,QAAQ,MACpC;AACH,QAAM,YAAY,OAAO;AACzB,QAAM,UAAUC,WAAU,MAAM;AAGhC,aAAW,SAAS,SAAS;AAC3B,UAAM,EAAE,KAAK,OAAO,SAAS,IAAI,cAAc;AAAA,MAC7C,OAAO,MAAM,QAAQ,MAAM,IACvB,QACA;AAAA,QACE,KAAK;AAAA,QACL,OAAO;AAAA,MACT;AAAA,MACJ;AAAA,IACF,CAAC;AAED,QAAI,CAAC,SAAS,SAAS,IAAI,EAAG;AAE9B,UAAM,UAAU,eAAe,QAAQ,EAAE,KAAK,MAAM,CAAC;AAErD,QAAI,CAAC,QAAS;AAEd,UAAM,EAAE,sBAAsB,qBAAqB,sBAAsB,IACvE;AAEF,QAAI,KAAK;AACP,MAAAC,YAAW,QAAQ;AAAA,QACjB,IAAI;AAAA,UACF,QAAQ;AAAA,UACR,OAAO,UAAU;AAAA,QACnB;AAAA,MACF,CAAC;AAAA,IACH;AACA,QAAI,OAAO,WAAW,YAAY;AAChC,aAAO,QAAQ,OAAO;AAAA,IACxB,OAAO;AACL,YAAM,YAAY,MAAM,QAAQ,MAAM,IAAI,OAAO,CAAC,IAAI;AACtD,aAAO,WAAW,SAAS;AAE3B,UAAI,uBAAuB;AACzB,cAAM,cAAc,MAAM,QAAQ,MAAM,IAAI,OAAO,CAAC,IAAI;AAExD,QAAAA,YAAW,QAAQ;AAAA,UACjB,IAAI;AAAA,YACF,QAAQ;AAAA,YACR,OAAO;AAAA,UACT;AAAA,QACF,CAAC;AAED,mBAAW,QAAQ,aAAa;AAAA,UAC9B,IAAI;AAAA,QACN,CAAC;AAAA,MACH;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAEA,SAAO;AACT;;;ANpEO,IAAM,iBAAiD,CAAC;AAAA,EAC7D;AAAA,EACA;AACF,MAAM;AACJ,QAAM,EAAE,YAAAC,YAAW,IAAI;AAEvB,SAAO,aAAa,CAAC,SAAS;AAlBhC;AAmBI,QAAI,CAAC,YAAY,OAAO,SAAS,EAAG,QAAOA,YAAW,IAAI;AAE1D,eAAW,QAAQ,WAAW,EAAE,OAAQ;AACtC,YAAM,EAAE,eAAe,OAAO,QAAQ,MAAM,IAAI;AAEhD,UAAI,SAAS,CAAC,MAAM,QAAe,iCAAK,OAAL,EAAW,KAAK,EAAC,EAAG;AAEvD,YAAM,gBAA0C;AAAA,QAC9C,OAAO;AAAA,QACP,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAEA,WACE,mBAAc,UAAd,uCAAsB,QAAQ,iCACxB,OADwB;AAAA,QAE5B;AAAA,MACF,KACA;AACA,eAAO,iBAAiBA,YAAW,IAAI;AAAA,MACzC;AAAA,IACF;AAEA,IAAAA,YAAW,IAAI;AAAA,EACjB;AAEA,SAAO;AACT;;;ADlCO,IAAM,uBAAuB,mBAAqC;AAAA,EACvE,KAAK;AAAA,EACL,cAAc;AAAA,EACd,SAAS;AAAA,IACP,OAAO,CAAC;AAAA,EACV;AACF,CAAC;;;AQhBM,IAAM,kBAAoC;AAAA,EAC/C;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO,CAAC,MAAM,SAAI;AAAA,IAClB,MAAM;AAAA,EACR;AACF;;;ACrBO,IAAM,kBAAoC;AAAA,EAC/C;AAAA,IACE,QAAQ;AAAA,IACR,OAAO,CAAC,QAAQ,MAAM;AAAA,IACtB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO,CAAC,OAAO,KAAK;AAAA,IACpB,MAAM;AAAA,EACR;AAAA,EAEA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO,CAAC,OAAO,KAAK;AAAA,IACpB,MAAM;AAAA,EACR;AACF;AAEO,IAAM,sBAAwC;AAAA,EACnD;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AACF;;;ACxCO,IAAM,wBAA0C;AAAA,EACrD;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AACF;;;ACrBO,IAAM,wBAA0C;AAAA,EACrD;AAAA,IACE,QAAQ,CAAC,UAAK,QAAG;AAAA,IACjB,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,UAAK,QAAG;AAAA,IACjB,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AACF;;;ACXO,IAAM,uBAAyC;AAAA,EACpD;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AACF;;;AC/BO,IAAM,qBAAuC;AAAA,EAClD;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO,CAAC,OAAO,SAAI;AAAA,IACnB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AACF;;;AC1BO,IAAM,qBAAuC;AAAA,EAClD;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AACF;;;AC3FO,IAAM,qBAAuC;AAAA,EAClD;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AACF;AAEO,IAAM,sBAAwC;AAAA,EACnD;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO,CAAC,OAAO,SAAI;AAAA,IACnB,MAAM;AAAA,EACR;AAAA,EACA,GAAG;AACL;;;ACzBO,IAAM,6BAA+C;AAAA,EAC1D;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AACF;AAEO,IAAM,6BAA+C;AAAA,EAC1D;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AACF;;;AChEO,IAAM,+BAAiD;AAAA,EAC5D;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AACF;AAEO,IAAM,+BAAiD;AAAA,EAC5D;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AACF;;;AC1DO,IAAM,iBAAiB;AAAA,EAC5B,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AACL;","names":["castArray","castArray","deleteText","getEditorString","castArray","getEditorString","getRangeBefore","castArray","getEditorString","deleteText","deleteText","castArray","castArray","deleteText","insertText"]}
import * as _udecode_plate_core_react from '@udecode/plate-core/react';
import * as _udecode_plate_core from '@udecode/plate-core';
import { h as AutoformatPluginOptions, A as AutoformatConfig } from '../AutoformatPlugin-C3RmMfmF.mjs';
import { g as AutoformatPluginOptions, A as AutoformatConfig } from '../BaseAutoformatPlugin-C_XqNIwr.mjs';
import { KeyboardHandler } from '@udecode/plate-common/react';

@@ -5,0 +5,0 @@ import '@udecode/plate-common';

import * as _udecode_plate_core_react from '@udecode/plate-core/react';
import * as _udecode_plate_core from '@udecode/plate-core';
import { h as AutoformatPluginOptions, A as AutoformatConfig } from '../AutoformatPlugin-C3RmMfmF.js';
import { g as AutoformatPluginOptions, A as AutoformatConfig } from '../BaseAutoformatPlugin-C_XqNIwr.js';
import { KeyboardHandler } from '@udecode/plate-common/react';

@@ -5,0 +5,0 @@ import '@udecode/plate-common';

@@ -50,3 +50,3 @@ "use strict";

__export(react_exports, {
AutoformatPlugin: () => AutoformatPlugin2,
AutoformatPlugin: () => AutoformatPlugin,
onKeyDownAutoformat: () => onKeyDownAutoformat

@@ -59,3 +59,3 @@ });

// src/lib/AutoformatPlugin.ts
// src/lib/BaseAutoformatPlugin.ts
var import_plate_common7 = require("@udecode/plate-common");

@@ -104,3 +104,3 @@

triggerAtBlockStart = true,
type = import_plate_common.ParagraphPlugin.key
type = import_plate_common.BaseParagraphPlugin.key
}) => {

@@ -113,4 +113,3 @@ const matches = (0, import_castArray2.default)(_match);

});
if (!triggers.includes(text))
continue;
if (!triggers.includes(text)) continue;
let matchRange;

@@ -123,8 +122,6 @@ if (triggerAtBlockStart) {

});
if (hasVoidNode)
continue;
if (hasVoidNode) continue;
const textFromBlockStart = (0, import_plate_common.getEditorString)(editor, matchRange);
const isMatched = matchByRegex ? !!textFromBlockStart.match(end) : end === textFromBlockStart;
if (!isMatched)
continue;
if (!isMatched) continue;
} else {

@@ -135,9 +132,7 @@ matchRange = (0, import_plate_common.getRangeBefore)(editor, editor.selection, {

});
if (!matchRange)
continue;
if (!matchRange) continue;
}
if (!allowSameTypeAbove) {
const isBelowSameBlockType = (0, import_plate_common.someNode)(editor, { match: { type } });
if (isBelowSameBlockType)
continue;
if (isBelowSameBlockType) continue;
}

@@ -183,3 +178,3 @@ if (match.length > 1) {

const noWhiteSpaceRegex = new RegExp(`\\S+`);
return !text.match(noWhiteSpaceRegex);
return !noWhiteSpaceRegex.exec(text);
}

@@ -198,4 +193,3 @@ }

});
if (!beforeEndMatchPoint)
return;
if (!beforeEndMatchPoint) return;
}

@@ -210,4 +204,3 @@ let afterStartMatchPoint;

});
if (!afterStartMatchPoint)
return;
if (!afterStartMatchPoint) return;
beforeStartMatchPoint = (0, import_plate_common3.getPointBeforeLocation)(

@@ -233,4 +226,3 @@ editor,

var autoformatMark = (editor, { ignoreTrim, match: _match, text, trigger, type }) => {
if (!type)
return false;
if (!type) return false;
const selection = editor.selection;

@@ -243,7 +235,5 @@ const matches = (0, import_castArray3.default)(_match);

});
if (!triggers.includes(text))
continue;
if (!triggers.includes(text)) continue;
const matched = getMatchPoints(editor, { end, start });
if (!matched)
continue;
if (!matched) continue;
const { afterStartMatchPoint, beforeEndMatchPoint, beforeStartMatchPoint } = matched;

@@ -256,4 +246,3 @@ const matchRange = {

const matchText = (0, import_plate_common4.getEditorString)(editor, matchRange);
if (matchText.trim() !== matchText)
continue;
if (matchText.trim() !== matchText) continue;
}

@@ -300,7 +289,5 @@ if (end) {

});
if (!triggers.includes(text))
continue;
if (!triggers.includes(text)) continue;
const matched = getMatchPoints(editor, { end, start });
if (!matched)
continue;
if (!matched) continue;
const { afterStartMatchPoint, beforeEndMatchPoint, beforeStartMatchPoint } = matched;

@@ -346,8 +333,6 @@ if (end) {

var _a;
if (!(0, import_plate_common6.isCollapsed)(editor.selection))
return insertText3(text);
if (!(0, import_plate_common6.isCollapsed)(editor.selection)) return insertText3(text);
for (const rule of getOptions().rules) {
const { insertTrigger, mode = "text", query } = rule;
if (query && !query(editor, __spreadProps(__spreadValues({}, rule), { text })))
continue;
if (query && !query(editor, __spreadProps(__spreadValues({}, rule), { text }))) continue;
const autoformatter = {

@@ -369,6 +354,6 @@ block: autoformatBlock,

// src/lib/AutoformatPlugin.ts
var AutoformatPlugin = (0, import_plate_common7.createTSlatePlugin)({
// src/lib/BaseAutoformatPlugin.ts
var BaseAutoformatPlugin = (0, import_plate_common7.createTSlatePlugin)({
key: "autoformat",
extendEditor: withAutoformat,
key: "autoformat",
options: {

@@ -388,13 +373,8 @@ rules: []

const { enableUndoOnDelete, rules } = getOptions();
if (event.defaultPrevented)
return false;
if (!(0, import_plate_common8.isHotkey)("backspace", { byKey: true }, event))
return false;
if (!rules)
return false;
if (!enableUndoOnDelete)
return false;
if (event.defaultPrevented) return false;
if (!(0, import_plate_common8.isHotkey)("backspace", { byKey: true }, event)) return false;
if (!rules) return false;
if (!enableUndoOnDelete) return false;
const { selection } = editor;
if (!selection || !import_slate.Range.isCollapsed(selection))
return;
if (!selection || !import_slate.Range.isCollapsed(selection)) return;
const [start, end] = import_slate.Range.edges(selection);

@@ -405,12 +385,8 @@ const before = (0, import_plate_common8.getPointBefore)(editor, end, {

});
if (!start)
return false;
if (!before)
return false;
if (!start) return false;
if (!before) return false;
const charRange = { anchor: before, focus: start };
if (!charRange)
return false;
if (!charRange) return false;
const char = (0, import_plate_common8.getEditorString)(editor, charRange);
if (!char)
return false;
if (!char) return false;
const matchers = [...rules].filter((rule2) => {

@@ -423,4 +399,3 @@ const textRule = rule2;

});
if (!matchers || matchers.length === 0)
return false;
if (!matchers || matchers.length === 0) return false;
event.preventDefault();

@@ -441,3 +416,3 @@ (0, import_plate_common8.deleteBackward)(editor, { unit: "character" });

// src/react/AutoformatPlugin.tsx
var AutoformatPlugin2 = (0, import_react.toPlatePlugin)(AutoformatPlugin, {
var AutoformatPlugin = (0, import_react.toPlatePlugin)(BaseAutoformatPlugin, {
handlers: {

@@ -444,0 +419,0 @@ onKeyDown: onKeyDownAutoformat

@@ -1,1 +0,1 @@

{"version":3,"sources":["../../src/react/index.ts","../../src/react/AutoformatPlugin.tsx","../../src/lib/AutoformatPlugin.ts","../../src/lib/withAutoformat.ts","../../src/lib/transforms/autoformatBlock.ts","../../src/lib/utils/getMatchRange.ts","../../src/lib/transforms/autoformatMark.ts","../../src/lib/utils/getMatchPoints.ts","../../src/lib/utils/isPreviousCharacterEmpty.ts","../../src/lib/transforms/autoformatText.ts","../../src/react/onKeyDownAutoformat.ts"],"sourcesContent":["/**\n * @file Automatically generated by barrelsby.\n */\n\nexport * from './AutoformatPlugin';\nexport * from './onKeyDownAutoformat';\n","import { toPlatePlugin } from '@udecode/plate-common/react';\n\nimport { AutoformatPlugin as BaseAutoformatPlugin } from '../lib/AutoformatPlugin';\nimport { onKeyDownAutoformat } from './onKeyDownAutoformat';\n\nexport const AutoformatPlugin = toPlatePlugin(BaseAutoformatPlugin, {\n handlers: {\n onKeyDown: onKeyDownAutoformat,\n },\n});\n","import { type PluginConfig, createTSlatePlugin } from '@udecode/plate-common';\n\nimport type { AutoformatPluginOptions } from './types';\n\nimport { withAutoformat } from './withAutoformat';\n\nexport type AutoformatConfig = PluginConfig<\n 'autoformat',\n AutoformatPluginOptions\n>;\n\n/** @see {@link withAutoformat} */\nexport const AutoformatPlugin = createTSlatePlugin<AutoformatConfig>({\n extendEditor: withAutoformat,\n key: 'autoformat',\n options: {\n rules: [],\n },\n});\n","import { type ExtendEditor, isCollapsed } from '@udecode/plate-common';\n\nimport type { AutoformatConfig } from './AutoformatPlugin';\n\nimport { autoformatBlock } from './transforms/autoformatBlock';\nimport { autoformatMark } from './transforms/autoformatMark';\nimport { autoformatText } from './transforms/autoformatText';\n\n/**\n * Enables support for autoformatting actions. Once a match rule is validated,\n * it does not check the following rules.\n */\nexport const withAutoformat: ExtendEditor<AutoformatConfig> = ({\n editor,\n getOptions,\n}) => {\n const { insertText } = editor;\n\n editor.insertText = (text) => {\n if (!isCollapsed(editor.selection)) return insertText(text);\n\n for (const rule of getOptions().rules!) {\n const { insertTrigger, mode = 'text', query } = rule;\n\n if (query && !query(editor as any, { ...rule, text })) continue;\n\n const autoformatter: Record<typeof mode, Function> = {\n block: autoformatBlock,\n mark: autoformatMark,\n text: autoformatText,\n };\n\n if (\n autoformatter[mode]?.(editor, {\n ...(rule as any),\n text,\n })\n ) {\n return insertTrigger && insertText(text);\n }\n }\n\n insertText(text);\n };\n\n return editor;\n};\n","import type { Range } from 'slate';\n\nimport {\n ParagraphPlugin,\n type SlateEditor,\n deleteText,\n getEditorString,\n getRangeBefore,\n getRangeFromBlockStart,\n isBlock,\n isVoid,\n setElements,\n someNode,\n} from '@udecode/plate-common';\nimport castArray from 'lodash/castArray.js';\n\nimport type { AutoformatBlockRule } from '../types';\n\nimport { getMatchRange } from '../utils/getMatchRange';\n\nexport interface AutoformatBlockOptions extends AutoformatBlockRule {\n text: string;\n}\n\nexport const autoformatBlock = (\n editor: SlateEditor,\n {\n allowSameTypeAbove = false,\n format,\n match: _match,\n matchByRegex = false,\n preFormat,\n text,\n trigger,\n triggerAtBlockStart = true,\n type = ParagraphPlugin.key,\n }: AutoformatBlockOptions\n) => {\n const matches = castArray(_match as string | string[]);\n\n for (const match of matches) {\n const { end, triggers } = getMatchRange({\n match: { end: match, start: '' },\n trigger,\n });\n\n if (!triggers.includes(text)) continue;\n\n let matchRange: Range | undefined;\n\n if (triggerAtBlockStart) {\n matchRange = getRangeFromBlockStart(editor) as Range;\n\n // Don't autoformat if there is void nodes.\n const hasVoidNode = someNode(editor, {\n at: matchRange,\n match: (n) => isVoid(editor, n),\n });\n\n if (hasVoidNode) continue;\n\n const textFromBlockStart = getEditorString(editor, matchRange);\n\n const isMatched = matchByRegex\n ? !!textFromBlockStart.match(end)\n : end === textFromBlockStart;\n\n if (!isMatched) continue;\n } else {\n matchRange = getRangeBefore(editor, editor.selection as Range, {\n matchByRegex,\n matchString: end,\n });\n\n if (!matchRange) continue;\n }\n if (!allowSameTypeAbove) {\n // Don't autoformat if already in a block of the same type.\n const isBelowSameBlockType = someNode(editor, { match: { type } });\n\n if (isBelowSameBlockType) continue;\n }\n // if the trigger is only 1 char there is nothing to delete, so we'd delete unrelated text\n if (match.length > 1) {\n deleteText(editor, {\n at: matchRange,\n });\n }\n if (preFormat) {\n preFormat(editor);\n }\n if (format) {\n format(editor);\n } else {\n setElements(\n editor,\n { type },\n {\n match: (n) => isBlock(editor, n),\n }\n );\n }\n\n return true;\n }\n\n return false;\n};\n","import castArray from 'lodash/castArray.js';\n\nimport type { AutoformatRule, MatchRange } from '../types';\n\nexport const getMatchRange = ({\n match,\n trigger,\n}: {\n match: MatchRange | string;\n trigger: AutoformatRule['trigger'];\n}) => {\n let start: string;\n let end: string;\n\n if (typeof match === 'object') {\n start = match.start;\n end = match.end;\n } else {\n start = match;\n end = start.split('').reverse().join('');\n }\n\n const triggers: string[] = trigger ? castArray(trigger) : [end.slice(-1)];\n\n end = trigger ? end : end.slice(0, -1);\n\n return {\n end,\n start,\n triggers,\n };\n};\n","import type { Point, Range } from 'slate';\n\nimport {\n type TEditor,\n collapseSelection,\n deleteText,\n getEditorString,\n removeMark,\n select,\n} from '@udecode/plate-common';\nimport castArray from 'lodash/castArray.js';\n\nimport type { AutoformatMarkRule } from '../types';\n\nimport { getMatchPoints } from '../utils/getMatchPoints';\nimport { getMatchRange } from '../utils/getMatchRange';\n\nexport interface AutoformatMarkOptions extends AutoformatMarkRule {\n text: string;\n}\n\nexport const autoformatMark = (\n editor: TEditor,\n { ignoreTrim, match: _match, text, trigger, type }: AutoformatMarkOptions\n) => {\n if (!type) return false;\n\n const selection = editor.selection as Range;\n const matches = castArray(_match);\n\n for (const match of matches) {\n const { end, start, triggers } = getMatchRange({\n match,\n trigger,\n });\n\n if (!triggers.includes(text)) continue;\n\n const matched = getMatchPoints(editor, { end, start });\n\n if (!matched) continue;\n\n const { afterStartMatchPoint, beforeEndMatchPoint, beforeStartMatchPoint } =\n matched;\n\n const matchRange = {\n anchor: afterStartMatchPoint,\n focus: beforeEndMatchPoint,\n } as Range;\n\n if (!ignoreTrim) {\n const matchText = getEditorString(editor, matchRange);\n\n if (matchText.trim() !== matchText) continue;\n }\n // delete end match\n if (end) {\n deleteText(editor, {\n at: {\n anchor: beforeEndMatchPoint,\n focus: selection.anchor,\n },\n });\n }\n\n const marks = castArray(type);\n\n // add mark to the text between the matches\n select(editor, matchRange as Range);\n marks.forEach((mark) => {\n editor.addMark(mark, true);\n });\n collapseSelection(editor, { edge: 'end' });\n removeMark(editor, { key: marks as any, shouldChange: false });\n\n deleteText(editor, {\n at: {\n anchor: beforeStartMatchPoint as Point,\n focus: afterStartMatchPoint as Point,\n },\n });\n\n return true;\n }\n\n return false;\n};\n","import type { Point, Range } from 'slate';\n\nimport { type TEditor, getPointBeforeLocation } from '@udecode/plate-common';\n\nimport type { MatchRange } from '../types';\n\nimport { isPreviousCharacterEmpty } from './isPreviousCharacterEmpty';\n\nexport type GetMatchPointsReturnType =\n | {\n afterStartMatchPoint: Point | undefined;\n beforeEndMatchPoint: Point;\n beforeStartMatchPoint: Point | undefined;\n }\n | undefined;\n\nexport const getMatchPoints = (editor: TEditor, { end, start }: MatchRange) => {\n const selection = editor.selection as Range;\n\n let beforeEndMatchPoint = selection.anchor;\n\n if (end) {\n beforeEndMatchPoint = getPointBeforeLocation(editor, selection, {\n matchString: end,\n });\n\n if (!beforeEndMatchPoint) return;\n }\n\n let afterStartMatchPoint: Point | undefined;\n let beforeStartMatchPoint: Point | undefined;\n\n if (start) {\n afterStartMatchPoint = getPointBeforeLocation(editor, beforeEndMatchPoint, {\n afterMatch: true,\n matchString: start,\n skipInvalid: true,\n });\n\n if (!afterStartMatchPoint) return;\n\n beforeStartMatchPoint = getPointBeforeLocation(\n editor,\n beforeEndMatchPoint,\n {\n matchString: start,\n skipInvalid: true,\n }\n );\n\n if (!isPreviousCharacterEmpty(editor, beforeStartMatchPoint as Point))\n return;\n }\n\n return {\n afterStartMatchPoint,\n beforeEndMatchPoint,\n beforeStartMatchPoint,\n };\n};\n","import type { Location } from 'slate';\n\nimport {\n type TEditor,\n getEditorString,\n getRangeBefore,\n} from '@udecode/plate-common';\n\nexport const isPreviousCharacterEmpty = (editor: TEditor, at: Location) => {\n const range = getRangeBefore(editor, at);\n\n if (range) {\n const text = getEditorString(editor, range);\n\n if (text) {\n const noWhiteSpaceRegex = new RegExp(`\\\\S+`);\n\n return !text.match(noWhiteSpaceRegex);\n }\n }\n\n return true;\n};\n","import type { Point, Range } from 'slate';\n\nimport {\n type SlateEditor,\n deleteText,\n insertText,\n} from '@udecode/plate-common';\nimport castArray from 'lodash/castArray.js';\n\nimport type { AutoformatTextRule } from '../types';\n\nimport { getMatchPoints } from '../utils/getMatchPoints';\nimport { getMatchRange } from '../utils/getMatchRange';\n\nexport interface AutoformatTextOptions extends AutoformatTextRule {\n text: string;\n}\n\nexport const autoformatText = (\n editor: SlateEditor,\n { format, match: _match, text, trigger }: AutoformatTextOptions\n) => {\n const selection = editor.selection as Range;\n const matches = castArray(_match);\n\n // dup\n for (const match of matches) {\n const { end, start, triggers } = getMatchRange({\n match: Array.isArray(format)\n ? match\n : {\n end: match,\n start: '',\n },\n trigger,\n });\n\n if (!triggers.includes(text)) continue;\n\n const matched = getMatchPoints(editor, { end, start });\n\n if (!matched) continue;\n\n const { afterStartMatchPoint, beforeEndMatchPoint, beforeStartMatchPoint } =\n matched;\n\n if (end) {\n deleteText(editor, {\n at: {\n anchor: beforeEndMatchPoint,\n focus: selection.anchor,\n },\n });\n }\n if (typeof format === 'function') {\n format(editor, matched);\n } else {\n const formatEnd = Array.isArray(format) ? format[1] : format;\n editor.insertText(formatEnd);\n\n if (beforeStartMatchPoint) {\n const formatStart = Array.isArray(format) ? format[0] : format;\n\n deleteText(editor, {\n at: {\n anchor: beforeStartMatchPoint as Point,\n focus: afterStartMatchPoint as Point,\n },\n });\n\n insertText(editor, formatStart, {\n at: beforeStartMatchPoint,\n });\n }\n }\n\n return true;\n }\n\n return false;\n};\n","import type { KeyboardHandler } from '@udecode/plate-common/react';\n\nimport {\n deleteBackward,\n getEditorString,\n getPointBefore,\n insertText,\n isHotkey,\n} from '@udecode/plate-common';\nimport { Range } from 'slate';\n\nimport type { AutoformatConfig } from '../lib/AutoformatPlugin';\nimport type { AutoformatRule, AutoformatTextRule } from '../lib/types';\n\nexport const onKeyDownAutoformat: KeyboardHandler<AutoformatConfig> = ({\n editor,\n event,\n getOptions,\n}) => {\n const { enableUndoOnDelete, rules } = getOptions();\n\n if (event.defaultPrevented) return false;\n // Abort quicky if hotKey was not pressed.\n if (!isHotkey('backspace', { byKey: true }, event)) return false;\n if (!rules) return false;\n if (!enableUndoOnDelete) return false;\n\n // Abort if selection is not collapsed i.e. we're not deleting single character.\n const { selection } = editor;\n\n if (!selection || !Range.isCollapsed(selection)) return;\n\n // Get start and end point of selection.\n // For example: Text|\n // ^ cursor at the moment of pressing the hotkey\n // start, end will be equal to the location of the |\n const [start, end] = Range.edges(selection);\n\n // Get location before the cursor.\n // before will be a point one character before | so:\n // Text|\n // ^\n const before = getPointBefore(editor, end, {\n distance: 1,\n unit: 'character',\n });\n\n if (!start) return false;\n if (!before) return false;\n\n // Abort if there doesn't exist a valid character to replace.\n const charRange = { anchor: before, focus: start };\n\n if (!charRange) return false;\n\n // Text|\n // ^\n // Between ^ and | is t\n const char = getEditorString(editor, charRange);\n\n if (!char) return false;\n\n const matchers: AutoformatRule[] = [...rules].filter((rule) => {\n const textRule = rule as AutoformatTextRule;\n\n if (textRule) {\n return textRule.mode === 'text' && textRule.format === char;\n }\n\n return false;\n });\n\n // abort if no matching substitution is found.\n if (!matchers || matchers.length === 0) return false;\n\n event.preventDefault();\n\n // remove the shorthand character.\n deleteBackward(editor, { unit: 'character' });\n\n // put back the orignal characters. This could match to a single string or an array.\n const rule = matchers[0] as AutoformatTextRule;\n\n if (rule && typeof rule.match === 'string') {\n insertText(editor, rule.match);\n } else {\n const matchArray = rule.match as string[];\n\n if (matchArray && matchArray.length > 0) {\n insertText(editor, matchArray[0]);\n }\n }\n\n return true;\n};\n"],"mappings":"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","names":["AutoformatPlugin","import_plate_common","import_plate_common","import_castArray","castArray","castArray","import_plate_common","import_castArray","import_plate_common","import_plate_common","castArray","import_plate_common","import_castArray","castArray","insertText","import_plate_common","rule","AutoformatPlugin"]}
{"version":3,"sources":["../../src/react/index.ts","../../src/react/AutoformatPlugin.tsx","../../src/lib/BaseAutoformatPlugin.ts","../../src/lib/withAutoformat.ts","../../src/lib/transforms/autoformatBlock.ts","../../src/lib/utils/getMatchRange.ts","../../src/lib/transforms/autoformatMark.ts","../../src/lib/utils/getMatchPoints.ts","../../src/lib/utils/isPreviousCharacterEmpty.ts","../../src/lib/transforms/autoformatText.ts","../../src/react/onKeyDownAutoformat.ts"],"sourcesContent":["/**\n * @file Automatically generated by barrelsby.\n */\n\nexport * from './AutoformatPlugin';\nexport * from './onKeyDownAutoformat';\n","import { toPlatePlugin } from '@udecode/plate-common/react';\n\nimport { BaseAutoformatPlugin } from '../lib/BaseAutoformatPlugin';\nimport { onKeyDownAutoformat } from './onKeyDownAutoformat';\n\nexport const AutoformatPlugin = toPlatePlugin(BaseAutoformatPlugin, {\n handlers: {\n onKeyDown: onKeyDownAutoformat,\n },\n});\n","import { type PluginConfig, createTSlatePlugin } from '@udecode/plate-common';\n\nimport type { AutoformatPluginOptions } from './types';\n\nimport { withAutoformat } from './withAutoformat';\n\nexport type AutoformatConfig = PluginConfig<\n 'autoformat',\n AutoformatPluginOptions\n>;\n\n/** @see {@link withAutoformat} */\nexport const BaseAutoformatPlugin = createTSlatePlugin<AutoformatConfig>({\n key: 'autoformat',\n extendEditor: withAutoformat,\n options: {\n rules: [],\n },\n});\n","import { type ExtendEditor, isCollapsed } from '@udecode/plate-common';\n\nimport type { AutoformatConfig } from './BaseAutoformatPlugin';\n\nimport { autoformatBlock } from './transforms/autoformatBlock';\nimport { autoformatMark } from './transforms/autoformatMark';\nimport { autoformatText } from './transforms/autoformatText';\n\n/**\n * Enables support for autoformatting actions. Once a match rule is validated,\n * it does not check the following rules.\n */\nexport const withAutoformat: ExtendEditor<AutoformatConfig> = ({\n editor,\n getOptions,\n}) => {\n const { insertText } = editor;\n\n editor.insertText = (text) => {\n if (!isCollapsed(editor.selection)) return insertText(text);\n\n for (const rule of getOptions().rules!) {\n const { insertTrigger, mode = 'text', query } = rule;\n\n if (query && !query(editor as any, { ...rule, text })) continue;\n\n const autoformatter: Record<typeof mode, any> = {\n block: autoformatBlock,\n mark: autoformatMark,\n text: autoformatText,\n };\n\n if (\n autoformatter[mode]?.(editor, {\n ...(rule as any),\n text,\n })\n ) {\n return insertTrigger && insertText(text);\n }\n }\n\n insertText(text);\n };\n\n return editor;\n};\n","import type { Range } from 'slate';\n\nimport {\n type SlateEditor,\n BaseParagraphPlugin,\n deleteText,\n getEditorString,\n getRangeBefore,\n getRangeFromBlockStart,\n isBlock,\n isVoid,\n setElements,\n someNode,\n} from '@udecode/plate-common';\nimport castArray from 'lodash/castArray.js';\n\nimport type { AutoformatBlockRule } from '../types';\n\nimport { getMatchRange } from '../utils/getMatchRange';\n\nexport interface AutoformatBlockOptions extends AutoformatBlockRule {\n text: string;\n}\n\nexport const autoformatBlock = (\n editor: SlateEditor,\n {\n allowSameTypeAbove = false,\n format,\n match: _match,\n matchByRegex = false,\n preFormat,\n text,\n trigger,\n triggerAtBlockStart = true,\n type = BaseParagraphPlugin.key,\n }: AutoformatBlockOptions\n) => {\n const matches = castArray(_match as string[] | string);\n\n for (const match of matches) {\n const { end, triggers } = getMatchRange({\n match: { end: match, start: '' },\n trigger,\n });\n\n if (!triggers.includes(text)) continue;\n\n let matchRange: Range | undefined;\n\n if (triggerAtBlockStart) {\n matchRange = getRangeFromBlockStart(editor) as Range;\n\n // Don't autoformat if there is void nodes.\n const hasVoidNode = someNode(editor, {\n at: matchRange,\n match: (n) => isVoid(editor, n),\n });\n\n if (hasVoidNode) continue;\n\n const textFromBlockStart = getEditorString(editor, matchRange);\n\n const isMatched = matchByRegex\n ? !!textFromBlockStart.match(end)\n : end === textFromBlockStart;\n\n if (!isMatched) continue;\n } else {\n matchRange = getRangeBefore(editor, editor.selection as Range, {\n matchByRegex,\n matchString: end,\n });\n\n if (!matchRange) continue;\n }\n if (!allowSameTypeAbove) {\n // Don't autoformat if already in a block of the same type.\n const isBelowSameBlockType = someNode(editor, { match: { type } });\n\n if (isBelowSameBlockType) continue;\n }\n // if the trigger is only 1 char there is nothing to delete, so we'd delete unrelated text\n if (match.length > 1) {\n deleteText(editor, {\n at: matchRange,\n });\n }\n if (preFormat) {\n preFormat(editor);\n }\n if (format) {\n format(editor);\n } else {\n setElements(\n editor,\n { type },\n {\n match: (n) => isBlock(editor, n),\n }\n );\n }\n\n return true;\n }\n\n return false;\n};\n","import castArray from 'lodash/castArray.js';\n\nimport type { AutoformatRule, MatchRange } from '../types';\n\nexport const getMatchRange = ({\n match,\n trigger,\n}: {\n match: MatchRange | string;\n trigger: AutoformatRule['trigger'];\n}) => {\n let start: string;\n let end: string;\n\n if (typeof match === 'object') {\n start = match.start;\n end = match.end;\n } else {\n start = match;\n end = start.split('').reverse().join('');\n }\n\n const triggers: string[] = trigger ? castArray(trigger) : [end.slice(-1)];\n\n end = trigger ? end : end.slice(0, -1);\n\n return {\n end,\n start,\n triggers,\n };\n};\n","import type { Point, Range } from 'slate';\n\nimport {\n type TEditor,\n collapseSelection,\n deleteText,\n getEditorString,\n removeMark,\n select,\n} from '@udecode/plate-common';\nimport castArray from 'lodash/castArray.js';\n\nimport type { AutoformatMarkRule } from '../types';\n\nimport { getMatchPoints } from '../utils/getMatchPoints';\nimport { getMatchRange } from '../utils/getMatchRange';\n\nexport interface AutoformatMarkOptions extends AutoformatMarkRule {\n text: string;\n}\n\nexport const autoformatMark = (\n editor: TEditor,\n { ignoreTrim, match: _match, text, trigger, type }: AutoformatMarkOptions\n) => {\n if (!type) return false;\n\n const selection = editor.selection as Range;\n const matches = castArray(_match);\n\n for (const match of matches) {\n const { end, start, triggers } = getMatchRange({\n match,\n trigger,\n });\n\n if (!triggers.includes(text)) continue;\n\n const matched = getMatchPoints(editor, { end, start });\n\n if (!matched) continue;\n\n const { afterStartMatchPoint, beforeEndMatchPoint, beforeStartMatchPoint } =\n matched;\n\n const matchRange = {\n anchor: afterStartMatchPoint,\n focus: beforeEndMatchPoint,\n } as Range;\n\n if (!ignoreTrim) {\n const matchText = getEditorString(editor, matchRange);\n\n if (matchText.trim() !== matchText) continue;\n }\n // delete end match\n if (end) {\n deleteText(editor, {\n at: {\n anchor: beforeEndMatchPoint,\n focus: selection.anchor,\n },\n });\n }\n\n const marks = castArray(type);\n\n // add mark to the text between the matches\n select(editor, matchRange as Range);\n marks.forEach((mark) => {\n editor.addMark(mark, true);\n });\n collapseSelection(editor, { edge: 'end' });\n removeMark(editor, { key: marks as any, shouldChange: false });\n\n deleteText(editor, {\n at: {\n anchor: beforeStartMatchPoint as Point,\n focus: afterStartMatchPoint as Point,\n },\n });\n\n return true;\n }\n\n return false;\n};\n","import type { Point, Range } from 'slate';\n\nimport { type TEditor, getPointBeforeLocation } from '@udecode/plate-common';\n\nimport type { MatchRange } from '../types';\n\nimport { isPreviousCharacterEmpty } from './isPreviousCharacterEmpty';\n\nexport type GetMatchPointsReturnType =\n | {\n afterStartMatchPoint: Point | undefined;\n beforeEndMatchPoint: Point;\n beforeStartMatchPoint: Point | undefined;\n }\n | undefined;\n\nexport const getMatchPoints = (editor: TEditor, { end, start }: MatchRange) => {\n const selection = editor.selection as Range;\n\n let beforeEndMatchPoint = selection.anchor;\n\n if (end) {\n beforeEndMatchPoint = getPointBeforeLocation(editor, selection, {\n matchString: end,\n });\n\n if (!beforeEndMatchPoint) return;\n }\n\n let afterStartMatchPoint: Point | undefined;\n let beforeStartMatchPoint: Point | undefined;\n\n if (start) {\n afterStartMatchPoint = getPointBeforeLocation(editor, beforeEndMatchPoint, {\n afterMatch: true,\n matchString: start,\n skipInvalid: true,\n });\n\n if (!afterStartMatchPoint) return;\n\n beforeStartMatchPoint = getPointBeforeLocation(\n editor,\n beforeEndMatchPoint,\n {\n matchString: start,\n skipInvalid: true,\n }\n );\n\n if (!isPreviousCharacterEmpty(editor, beforeStartMatchPoint as Point))\n return;\n }\n\n return {\n afterStartMatchPoint,\n beforeEndMatchPoint,\n beforeStartMatchPoint,\n };\n};\n","import type { Location } from 'slate';\n\nimport {\n type TEditor,\n getEditorString,\n getRangeBefore,\n} from '@udecode/plate-common';\n\nexport const isPreviousCharacterEmpty = (editor: TEditor, at: Location) => {\n const range = getRangeBefore(editor, at);\n\n if (range) {\n const text = getEditorString(editor, range);\n\n if (text) {\n const noWhiteSpaceRegex = new RegExp(`\\\\S+`);\n\n return !noWhiteSpaceRegex.exec(text);\n }\n }\n\n return true;\n};\n","import type { Point, Range } from 'slate';\n\nimport {\n type SlateEditor,\n deleteText,\n insertText,\n} from '@udecode/plate-common';\nimport castArray from 'lodash/castArray.js';\n\nimport type { AutoformatTextRule } from '../types';\n\nimport { getMatchPoints } from '../utils/getMatchPoints';\nimport { getMatchRange } from '../utils/getMatchRange';\n\nexport interface AutoformatTextOptions extends AutoformatTextRule {\n text: string;\n}\n\nexport const autoformatText = (\n editor: SlateEditor,\n { format, match: _match, text, trigger }: AutoformatTextOptions\n) => {\n const selection = editor.selection as Range;\n const matches = castArray(_match);\n\n // dup\n for (const match of matches) {\n const { end, start, triggers } = getMatchRange({\n match: Array.isArray(format)\n ? match\n : {\n end: match,\n start: '',\n },\n trigger,\n });\n\n if (!triggers.includes(text)) continue;\n\n const matched = getMatchPoints(editor, { end, start });\n\n if (!matched) continue;\n\n const { afterStartMatchPoint, beforeEndMatchPoint, beforeStartMatchPoint } =\n matched;\n\n if (end) {\n deleteText(editor, {\n at: {\n anchor: beforeEndMatchPoint,\n focus: selection.anchor,\n },\n });\n }\n if (typeof format === 'function') {\n format(editor, matched);\n } else {\n const formatEnd = Array.isArray(format) ? format[1] : format;\n editor.insertText(formatEnd);\n\n if (beforeStartMatchPoint) {\n const formatStart = Array.isArray(format) ? format[0] : format;\n\n deleteText(editor, {\n at: {\n anchor: beforeStartMatchPoint as Point,\n focus: afterStartMatchPoint as Point,\n },\n });\n\n insertText(editor, formatStart, {\n at: beforeStartMatchPoint,\n });\n }\n }\n\n return true;\n }\n\n return false;\n};\n","import type { KeyboardHandler } from '@udecode/plate-common/react';\n\nimport {\n deleteBackward,\n getEditorString,\n getPointBefore,\n insertText,\n isHotkey,\n} from '@udecode/plate-common';\nimport { Range } from 'slate';\n\nimport type { AutoformatConfig } from '../lib/BaseAutoformatPlugin';\nimport type { AutoformatRule, AutoformatTextRule } from '../lib/types';\n\nexport const onKeyDownAutoformat: KeyboardHandler<AutoformatConfig> = ({\n editor,\n event,\n getOptions,\n}) => {\n const { enableUndoOnDelete, rules } = getOptions();\n\n if (event.defaultPrevented) return false;\n // Abort quicky if hotKey was not pressed.\n if (!isHotkey('backspace', { byKey: true }, event)) return false;\n if (!rules) return false;\n if (!enableUndoOnDelete) return false;\n\n // Abort if selection is not collapsed i.e. we're not deleting single character.\n const { selection } = editor;\n\n if (!selection || !Range.isCollapsed(selection)) return;\n\n // Get start and end point of selection.\n // For example: Text|\n // ^ cursor at the moment of pressing the hotkey\n // start, end will be equal to the location of the |\n const [start, end] = Range.edges(selection);\n\n // Get location before the cursor.\n // before will be a point one character before | so:\n // Text|\n // ^\n const before = getPointBefore(editor, end, {\n distance: 1,\n unit: 'character',\n });\n\n if (!start) return false;\n if (!before) return false;\n\n // Abort if there doesn't exist a valid character to replace.\n const charRange = { anchor: before, focus: start };\n\n if (!charRange) return false;\n\n // Text|\n // ^\n // Between ^ and | is t\n const char = getEditorString(editor, charRange);\n\n if (!char) return false;\n\n const matchers: AutoformatRule[] = [...rules].filter((rule) => {\n const textRule = rule as AutoformatTextRule;\n\n if (textRule) {\n return textRule.mode === 'text' && textRule.format === char;\n }\n\n return false;\n });\n\n // abort if no matching substitution is found.\n if (!matchers || matchers.length === 0) return false;\n\n event.preventDefault();\n\n // remove the shorthand character.\n deleteBackward(editor, { unit: 'character' });\n\n // put back the orignal characters. This could match to a single string or an array.\n const rule = matchers[0] as AutoformatTextRule;\n\n if (rule && typeof rule.match === 'string') {\n insertText(editor, rule.match);\n } else {\n const matchArray = rule.match as string[];\n\n if (matchArray && matchArray.length > 0) {\n insertText(editor, matchArray[0]);\n }\n }\n\n return true;\n};\n"],"mappings":"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","names":["import_plate_common","import_plate_common","import_castArray","castArray","castArray","import_plate_common","import_castArray","import_plate_common","import_plate_common","castArray","import_plate_common","import_castArray","castArray","insertText","import_plate_common","rule"]}

@@ -24,3 +24,3 @@ var __defProp = Object.defineProperty;

// src/lib/AutoformatPlugin.ts
// src/lib/BaseAutoformatPlugin.ts
import { createTSlatePlugin } from "@udecode/plate-common";

@@ -33,3 +33,3 @@

import {
ParagraphPlugin,
BaseParagraphPlugin,
deleteText,

@@ -80,3 +80,3 @@ getEditorString,

triggerAtBlockStart = true,
type = ParagraphPlugin.key
type = BaseParagraphPlugin.key
}) => {

@@ -89,4 +89,3 @@ const matches = castArray2(_match);

});
if (!triggers.includes(text))
continue;
if (!triggers.includes(text)) continue;
let matchRange;

@@ -99,8 +98,6 @@ if (triggerAtBlockStart) {

});
if (hasVoidNode)
continue;
if (hasVoidNode) continue;
const textFromBlockStart = getEditorString(editor, matchRange);
const isMatched = matchByRegex ? !!textFromBlockStart.match(end) : end === textFromBlockStart;
if (!isMatched)
continue;
if (!isMatched) continue;
} else {

@@ -111,9 +108,7 @@ matchRange = getRangeBefore(editor, editor.selection, {

});
if (!matchRange)
continue;
if (!matchRange) continue;
}
if (!allowSameTypeAbove) {
const isBelowSameBlockType = someNode(editor, { match: { type } });
if (isBelowSameBlockType)
continue;
if (isBelowSameBlockType) continue;
}

@@ -168,3 +163,3 @@ if (match.length > 1) {

const noWhiteSpaceRegex = new RegExp(`\\S+`);
return !text.match(noWhiteSpaceRegex);
return !noWhiteSpaceRegex.exec(text);
}

@@ -183,4 +178,3 @@ }

});
if (!beforeEndMatchPoint)
return;
if (!beforeEndMatchPoint) return;
}

@@ -195,4 +189,3 @@ let afterStartMatchPoint;

});
if (!afterStartMatchPoint)
return;
if (!afterStartMatchPoint) return;
beforeStartMatchPoint = getPointBeforeLocation(

@@ -218,4 +211,3 @@ editor,

var autoformatMark = (editor, { ignoreTrim, match: _match, text, trigger, type }) => {
if (!type)
return false;
if (!type) return false;
const selection = editor.selection;

@@ -228,7 +220,5 @@ const matches = castArray3(_match);

});
if (!triggers.includes(text))
continue;
if (!triggers.includes(text)) continue;
const matched = getMatchPoints(editor, { end, start });
if (!matched)
continue;
if (!matched) continue;
const { afterStartMatchPoint, beforeEndMatchPoint, beforeStartMatchPoint } = matched;

@@ -241,4 +231,3 @@ const matchRange = {

const matchText = getEditorString3(editor, matchRange);
if (matchText.trim() !== matchText)
continue;
if (matchText.trim() !== matchText) continue;
}

@@ -288,7 +277,5 @@ if (end) {

});
if (!triggers.includes(text))
continue;
if (!triggers.includes(text)) continue;
const matched = getMatchPoints(editor, { end, start });
if (!matched)
continue;
if (!matched) continue;
const { afterStartMatchPoint, beforeEndMatchPoint, beforeStartMatchPoint } = matched;

@@ -334,8 +321,6 @@ if (end) {

var _a;
if (!isCollapsed(editor.selection))
return insertText3(text);
if (!isCollapsed(editor.selection)) return insertText3(text);
for (const rule of getOptions().rules) {
const { insertTrigger, mode = "text", query } = rule;
if (query && !query(editor, __spreadProps(__spreadValues({}, rule), { text })))
continue;
if (query && !query(editor, __spreadProps(__spreadValues({}, rule), { text }))) continue;
const autoformatter = {

@@ -357,6 +342,6 @@ block: autoformatBlock,

// src/lib/AutoformatPlugin.ts
var AutoformatPlugin = createTSlatePlugin({
// src/lib/BaseAutoformatPlugin.ts
var BaseAutoformatPlugin = createTSlatePlugin({
key: "autoformat",
extendEditor: withAutoformat,
key: "autoformat",
options: {

@@ -382,13 +367,8 @@ rules: []

const { enableUndoOnDelete, rules } = getOptions();
if (event.defaultPrevented)
return false;
if (!isHotkey("backspace", { byKey: true }, event))
return false;
if (!rules)
return false;
if (!enableUndoOnDelete)
return false;
if (event.defaultPrevented) return false;
if (!isHotkey("backspace", { byKey: true }, event)) return false;
if (!rules) return false;
if (!enableUndoOnDelete) return false;
const { selection } = editor;
if (!selection || !Range.isCollapsed(selection))
return;
if (!selection || !Range.isCollapsed(selection)) return;
const [start, end] = Range.edges(selection);

@@ -399,12 +379,8 @@ const before = getPointBefore(editor, end, {

});
if (!start)
return false;
if (!before)
return false;
if (!start) return false;
if (!before) return false;
const charRange = { anchor: before, focus: start };
if (!charRange)
return false;
if (!charRange) return false;
const char = getEditorString4(editor, charRange);
if (!char)
return false;
if (!char) return false;
const matchers = [...rules].filter((rule2) => {

@@ -417,4 +393,3 @@ const textRule = rule2;

});
if (!matchers || matchers.length === 0)
return false;
if (!matchers || matchers.length === 0) return false;
event.preventDefault();

@@ -435,3 +410,3 @@ deleteBackward(editor, { unit: "character" });

// src/react/AutoformatPlugin.tsx
var AutoformatPlugin2 = toPlatePlugin(AutoformatPlugin, {
var AutoformatPlugin = toPlatePlugin(BaseAutoformatPlugin, {
handlers: {

@@ -442,5 +417,5 @@ onKeyDown: onKeyDownAutoformat

export {
AutoformatPlugin2 as AutoformatPlugin,
AutoformatPlugin,
onKeyDownAutoformat
};
//# sourceMappingURL=index.mjs.map

@@ -1,1 +0,1 @@

{"version":3,"sources":["../../src/react/AutoformatPlugin.tsx","../../src/lib/AutoformatPlugin.ts","../../src/lib/withAutoformat.ts","../../src/lib/transforms/autoformatBlock.ts","../../src/lib/utils/getMatchRange.ts","../../src/lib/transforms/autoformatMark.ts","../../src/lib/utils/getMatchPoints.ts","../../src/lib/utils/isPreviousCharacterEmpty.ts","../../src/lib/transforms/autoformatText.ts","../../src/react/onKeyDownAutoformat.ts"],"sourcesContent":["import { toPlatePlugin } from '@udecode/plate-common/react';\n\nimport { AutoformatPlugin as BaseAutoformatPlugin } from '../lib/AutoformatPlugin';\nimport { onKeyDownAutoformat } from './onKeyDownAutoformat';\n\nexport const AutoformatPlugin = toPlatePlugin(BaseAutoformatPlugin, {\n handlers: {\n onKeyDown: onKeyDownAutoformat,\n },\n});\n","import { type PluginConfig, createTSlatePlugin } from '@udecode/plate-common';\n\nimport type { AutoformatPluginOptions } from './types';\n\nimport { withAutoformat } from './withAutoformat';\n\nexport type AutoformatConfig = PluginConfig<\n 'autoformat',\n AutoformatPluginOptions\n>;\n\n/** @see {@link withAutoformat} */\nexport const AutoformatPlugin = createTSlatePlugin<AutoformatConfig>({\n extendEditor: withAutoformat,\n key: 'autoformat',\n options: {\n rules: [],\n },\n});\n","import { type ExtendEditor, isCollapsed } from '@udecode/plate-common';\n\nimport type { AutoformatConfig } from './AutoformatPlugin';\n\nimport { autoformatBlock } from './transforms/autoformatBlock';\nimport { autoformatMark } from './transforms/autoformatMark';\nimport { autoformatText } from './transforms/autoformatText';\n\n/**\n * Enables support for autoformatting actions. Once a match rule is validated,\n * it does not check the following rules.\n */\nexport const withAutoformat: ExtendEditor<AutoformatConfig> = ({\n editor,\n getOptions,\n}) => {\n const { insertText } = editor;\n\n editor.insertText = (text) => {\n if (!isCollapsed(editor.selection)) return insertText(text);\n\n for (const rule of getOptions().rules!) {\n const { insertTrigger, mode = 'text', query } = rule;\n\n if (query && !query(editor as any, { ...rule, text })) continue;\n\n const autoformatter: Record<typeof mode, Function> = {\n block: autoformatBlock,\n mark: autoformatMark,\n text: autoformatText,\n };\n\n if (\n autoformatter[mode]?.(editor, {\n ...(rule as any),\n text,\n })\n ) {\n return insertTrigger && insertText(text);\n }\n }\n\n insertText(text);\n };\n\n return editor;\n};\n","import type { Range } from 'slate';\n\nimport {\n ParagraphPlugin,\n type SlateEditor,\n deleteText,\n getEditorString,\n getRangeBefore,\n getRangeFromBlockStart,\n isBlock,\n isVoid,\n setElements,\n someNode,\n} from '@udecode/plate-common';\nimport castArray from 'lodash/castArray.js';\n\nimport type { AutoformatBlockRule } from '../types';\n\nimport { getMatchRange } from '../utils/getMatchRange';\n\nexport interface AutoformatBlockOptions extends AutoformatBlockRule {\n text: string;\n}\n\nexport const autoformatBlock = (\n editor: SlateEditor,\n {\n allowSameTypeAbove = false,\n format,\n match: _match,\n matchByRegex = false,\n preFormat,\n text,\n trigger,\n triggerAtBlockStart = true,\n type = ParagraphPlugin.key,\n }: AutoformatBlockOptions\n) => {\n const matches = castArray(_match as string | string[]);\n\n for (const match of matches) {\n const { end, triggers } = getMatchRange({\n match: { end: match, start: '' },\n trigger,\n });\n\n if (!triggers.includes(text)) continue;\n\n let matchRange: Range | undefined;\n\n if (triggerAtBlockStart) {\n matchRange = getRangeFromBlockStart(editor) as Range;\n\n // Don't autoformat if there is void nodes.\n const hasVoidNode = someNode(editor, {\n at: matchRange,\n match: (n) => isVoid(editor, n),\n });\n\n if (hasVoidNode) continue;\n\n const textFromBlockStart = getEditorString(editor, matchRange);\n\n const isMatched = matchByRegex\n ? !!textFromBlockStart.match(end)\n : end === textFromBlockStart;\n\n if (!isMatched) continue;\n } else {\n matchRange = getRangeBefore(editor, editor.selection as Range, {\n matchByRegex,\n matchString: end,\n });\n\n if (!matchRange) continue;\n }\n if (!allowSameTypeAbove) {\n // Don't autoformat if already in a block of the same type.\n const isBelowSameBlockType = someNode(editor, { match: { type } });\n\n if (isBelowSameBlockType) continue;\n }\n // if the trigger is only 1 char there is nothing to delete, so we'd delete unrelated text\n if (match.length > 1) {\n deleteText(editor, {\n at: matchRange,\n });\n }\n if (preFormat) {\n preFormat(editor);\n }\n if (format) {\n format(editor);\n } else {\n setElements(\n editor,\n { type },\n {\n match: (n) => isBlock(editor, n),\n }\n );\n }\n\n return true;\n }\n\n return false;\n};\n","import castArray from 'lodash/castArray.js';\n\nimport type { AutoformatRule, MatchRange } from '../types';\n\nexport const getMatchRange = ({\n match,\n trigger,\n}: {\n match: MatchRange | string;\n trigger: AutoformatRule['trigger'];\n}) => {\n let start: string;\n let end: string;\n\n if (typeof match === 'object') {\n start = match.start;\n end = match.end;\n } else {\n start = match;\n end = start.split('').reverse().join('');\n }\n\n const triggers: string[] = trigger ? castArray(trigger) : [end.slice(-1)];\n\n end = trigger ? end : end.slice(0, -1);\n\n return {\n end,\n start,\n triggers,\n };\n};\n","import type { Point, Range } from 'slate';\n\nimport {\n type TEditor,\n collapseSelection,\n deleteText,\n getEditorString,\n removeMark,\n select,\n} from '@udecode/plate-common';\nimport castArray from 'lodash/castArray.js';\n\nimport type { AutoformatMarkRule } from '../types';\n\nimport { getMatchPoints } from '../utils/getMatchPoints';\nimport { getMatchRange } from '../utils/getMatchRange';\n\nexport interface AutoformatMarkOptions extends AutoformatMarkRule {\n text: string;\n}\n\nexport const autoformatMark = (\n editor: TEditor,\n { ignoreTrim, match: _match, text, trigger, type }: AutoformatMarkOptions\n) => {\n if (!type) return false;\n\n const selection = editor.selection as Range;\n const matches = castArray(_match);\n\n for (const match of matches) {\n const { end, start, triggers } = getMatchRange({\n match,\n trigger,\n });\n\n if (!triggers.includes(text)) continue;\n\n const matched = getMatchPoints(editor, { end, start });\n\n if (!matched) continue;\n\n const { afterStartMatchPoint, beforeEndMatchPoint, beforeStartMatchPoint } =\n matched;\n\n const matchRange = {\n anchor: afterStartMatchPoint,\n focus: beforeEndMatchPoint,\n } as Range;\n\n if (!ignoreTrim) {\n const matchText = getEditorString(editor, matchRange);\n\n if (matchText.trim() !== matchText) continue;\n }\n // delete end match\n if (end) {\n deleteText(editor, {\n at: {\n anchor: beforeEndMatchPoint,\n focus: selection.anchor,\n },\n });\n }\n\n const marks = castArray(type);\n\n // add mark to the text between the matches\n select(editor, matchRange as Range);\n marks.forEach((mark) => {\n editor.addMark(mark, true);\n });\n collapseSelection(editor, { edge: 'end' });\n removeMark(editor, { key: marks as any, shouldChange: false });\n\n deleteText(editor, {\n at: {\n anchor: beforeStartMatchPoint as Point,\n focus: afterStartMatchPoint as Point,\n },\n });\n\n return true;\n }\n\n return false;\n};\n","import type { Point, Range } from 'slate';\n\nimport { type TEditor, getPointBeforeLocation } from '@udecode/plate-common';\n\nimport type { MatchRange } from '../types';\n\nimport { isPreviousCharacterEmpty } from './isPreviousCharacterEmpty';\n\nexport type GetMatchPointsReturnType =\n | {\n afterStartMatchPoint: Point | undefined;\n beforeEndMatchPoint: Point;\n beforeStartMatchPoint: Point | undefined;\n }\n | undefined;\n\nexport const getMatchPoints = (editor: TEditor, { end, start }: MatchRange) => {\n const selection = editor.selection as Range;\n\n let beforeEndMatchPoint = selection.anchor;\n\n if (end) {\n beforeEndMatchPoint = getPointBeforeLocation(editor, selection, {\n matchString: end,\n });\n\n if (!beforeEndMatchPoint) return;\n }\n\n let afterStartMatchPoint: Point | undefined;\n let beforeStartMatchPoint: Point | undefined;\n\n if (start) {\n afterStartMatchPoint = getPointBeforeLocation(editor, beforeEndMatchPoint, {\n afterMatch: true,\n matchString: start,\n skipInvalid: true,\n });\n\n if (!afterStartMatchPoint) return;\n\n beforeStartMatchPoint = getPointBeforeLocation(\n editor,\n beforeEndMatchPoint,\n {\n matchString: start,\n skipInvalid: true,\n }\n );\n\n if (!isPreviousCharacterEmpty(editor, beforeStartMatchPoint as Point))\n return;\n }\n\n return {\n afterStartMatchPoint,\n beforeEndMatchPoint,\n beforeStartMatchPoint,\n };\n};\n","import type { Location } from 'slate';\n\nimport {\n type TEditor,\n getEditorString,\n getRangeBefore,\n} from '@udecode/plate-common';\n\nexport const isPreviousCharacterEmpty = (editor: TEditor, at: Location) => {\n const range = getRangeBefore(editor, at);\n\n if (range) {\n const text = getEditorString(editor, range);\n\n if (text) {\n const noWhiteSpaceRegex = new RegExp(`\\\\S+`);\n\n return !text.match(noWhiteSpaceRegex);\n }\n }\n\n return true;\n};\n","import type { Point, Range } from 'slate';\n\nimport {\n type SlateEditor,\n deleteText,\n insertText,\n} from '@udecode/plate-common';\nimport castArray from 'lodash/castArray.js';\n\nimport type { AutoformatTextRule } from '../types';\n\nimport { getMatchPoints } from '../utils/getMatchPoints';\nimport { getMatchRange } from '../utils/getMatchRange';\n\nexport interface AutoformatTextOptions extends AutoformatTextRule {\n text: string;\n}\n\nexport const autoformatText = (\n editor: SlateEditor,\n { format, match: _match, text, trigger }: AutoformatTextOptions\n) => {\n const selection = editor.selection as Range;\n const matches = castArray(_match);\n\n // dup\n for (const match of matches) {\n const { end, start, triggers } = getMatchRange({\n match: Array.isArray(format)\n ? match\n : {\n end: match,\n start: '',\n },\n trigger,\n });\n\n if (!triggers.includes(text)) continue;\n\n const matched = getMatchPoints(editor, { end, start });\n\n if (!matched) continue;\n\n const { afterStartMatchPoint, beforeEndMatchPoint, beforeStartMatchPoint } =\n matched;\n\n if (end) {\n deleteText(editor, {\n at: {\n anchor: beforeEndMatchPoint,\n focus: selection.anchor,\n },\n });\n }\n if (typeof format === 'function') {\n format(editor, matched);\n } else {\n const formatEnd = Array.isArray(format) ? format[1] : format;\n editor.insertText(formatEnd);\n\n if (beforeStartMatchPoint) {\n const formatStart = Array.isArray(format) ? format[0] : format;\n\n deleteText(editor, {\n at: {\n anchor: beforeStartMatchPoint as Point,\n focus: afterStartMatchPoint as Point,\n },\n });\n\n insertText(editor, formatStart, {\n at: beforeStartMatchPoint,\n });\n }\n }\n\n return true;\n }\n\n return false;\n};\n","import type { KeyboardHandler } from '@udecode/plate-common/react';\n\nimport {\n deleteBackward,\n getEditorString,\n getPointBefore,\n insertText,\n isHotkey,\n} from '@udecode/plate-common';\nimport { Range } from 'slate';\n\nimport type { AutoformatConfig } from '../lib/AutoformatPlugin';\nimport type { AutoformatRule, AutoformatTextRule } from '../lib/types';\n\nexport const onKeyDownAutoformat: KeyboardHandler<AutoformatConfig> = ({\n editor,\n event,\n getOptions,\n}) => {\n const { enableUndoOnDelete, rules } = getOptions();\n\n if (event.defaultPrevented) return false;\n // Abort quicky if hotKey was not pressed.\n if (!isHotkey('backspace', { byKey: true }, event)) return false;\n if (!rules) return false;\n if (!enableUndoOnDelete) return false;\n\n // Abort if selection is not collapsed i.e. we're not deleting single character.\n const { selection } = editor;\n\n if (!selection || !Range.isCollapsed(selection)) return;\n\n // Get start and end point of selection.\n // For example: Text|\n // ^ cursor at the moment of pressing the hotkey\n // start, end will be equal to the location of the |\n const [start, end] = Range.edges(selection);\n\n // Get location before the cursor.\n // before will be a point one character before | so:\n // Text|\n // ^\n const before = getPointBefore(editor, end, {\n distance: 1,\n unit: 'character',\n });\n\n if (!start) return false;\n if (!before) return false;\n\n // Abort if there doesn't exist a valid character to replace.\n const charRange = { anchor: before, focus: start };\n\n if (!charRange) return false;\n\n // Text|\n // ^\n // Between ^ and | is t\n const char = getEditorString(editor, charRange);\n\n if (!char) return false;\n\n const matchers: AutoformatRule[] = [...rules].filter((rule) => {\n const textRule = rule as AutoformatTextRule;\n\n if (textRule) {\n return textRule.mode === 'text' && textRule.format === char;\n }\n\n return false;\n });\n\n // abort if no matching substitution is found.\n if (!matchers || matchers.length === 0) return false;\n\n event.preventDefault();\n\n // remove the shorthand character.\n deleteBackward(editor, { unit: 'character' });\n\n // put back the orignal characters. This could match to a single string or an array.\n const rule = matchers[0] as AutoformatTextRule;\n\n if (rule && typeof rule.match === 'string') {\n insertText(editor, rule.match);\n } else {\n const matchArray = rule.match as string[];\n\n if (matchArray && matchArray.length > 0) {\n insertText(editor, matchArray[0]);\n }\n }\n\n return true;\n};\n"],"mappings":"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","names":["castArray","castArray","deleteText","getEditorString","castArray","getEditorString","getRangeBefore","castArray","getEditorString","deleteText","deleteText","castArray","castArray","deleteText","insertText","getEditorString","insertText","rule","AutoformatPlugin"]}
{"version":3,"sources":["../../src/react/AutoformatPlugin.tsx","../../src/lib/BaseAutoformatPlugin.ts","../../src/lib/withAutoformat.ts","../../src/lib/transforms/autoformatBlock.ts","../../src/lib/utils/getMatchRange.ts","../../src/lib/transforms/autoformatMark.ts","../../src/lib/utils/getMatchPoints.ts","../../src/lib/utils/isPreviousCharacterEmpty.ts","../../src/lib/transforms/autoformatText.ts","../../src/react/onKeyDownAutoformat.ts"],"sourcesContent":["import { toPlatePlugin } from '@udecode/plate-common/react';\n\nimport { BaseAutoformatPlugin } from '../lib/BaseAutoformatPlugin';\nimport { onKeyDownAutoformat } from './onKeyDownAutoformat';\n\nexport const AutoformatPlugin = toPlatePlugin(BaseAutoformatPlugin, {\n handlers: {\n onKeyDown: onKeyDownAutoformat,\n },\n});\n","import { type PluginConfig, createTSlatePlugin } from '@udecode/plate-common';\n\nimport type { AutoformatPluginOptions } from './types';\n\nimport { withAutoformat } from './withAutoformat';\n\nexport type AutoformatConfig = PluginConfig<\n 'autoformat',\n AutoformatPluginOptions\n>;\n\n/** @see {@link withAutoformat} */\nexport const BaseAutoformatPlugin = createTSlatePlugin<AutoformatConfig>({\n key: 'autoformat',\n extendEditor: withAutoformat,\n options: {\n rules: [],\n },\n});\n","import { type ExtendEditor, isCollapsed } from '@udecode/plate-common';\n\nimport type { AutoformatConfig } from './BaseAutoformatPlugin';\n\nimport { autoformatBlock } from './transforms/autoformatBlock';\nimport { autoformatMark } from './transforms/autoformatMark';\nimport { autoformatText } from './transforms/autoformatText';\n\n/**\n * Enables support for autoformatting actions. Once a match rule is validated,\n * it does not check the following rules.\n */\nexport const withAutoformat: ExtendEditor<AutoformatConfig> = ({\n editor,\n getOptions,\n}) => {\n const { insertText } = editor;\n\n editor.insertText = (text) => {\n if (!isCollapsed(editor.selection)) return insertText(text);\n\n for (const rule of getOptions().rules!) {\n const { insertTrigger, mode = 'text', query } = rule;\n\n if (query && !query(editor as any, { ...rule, text })) continue;\n\n const autoformatter: Record<typeof mode, any> = {\n block: autoformatBlock,\n mark: autoformatMark,\n text: autoformatText,\n };\n\n if (\n autoformatter[mode]?.(editor, {\n ...(rule as any),\n text,\n })\n ) {\n return insertTrigger && insertText(text);\n }\n }\n\n insertText(text);\n };\n\n return editor;\n};\n","import type { Range } from 'slate';\n\nimport {\n type SlateEditor,\n BaseParagraphPlugin,\n deleteText,\n getEditorString,\n getRangeBefore,\n getRangeFromBlockStart,\n isBlock,\n isVoid,\n setElements,\n someNode,\n} from '@udecode/plate-common';\nimport castArray from 'lodash/castArray.js';\n\nimport type { AutoformatBlockRule } from '../types';\n\nimport { getMatchRange } from '../utils/getMatchRange';\n\nexport interface AutoformatBlockOptions extends AutoformatBlockRule {\n text: string;\n}\n\nexport const autoformatBlock = (\n editor: SlateEditor,\n {\n allowSameTypeAbove = false,\n format,\n match: _match,\n matchByRegex = false,\n preFormat,\n text,\n trigger,\n triggerAtBlockStart = true,\n type = BaseParagraphPlugin.key,\n }: AutoformatBlockOptions\n) => {\n const matches = castArray(_match as string[] | string);\n\n for (const match of matches) {\n const { end, triggers } = getMatchRange({\n match: { end: match, start: '' },\n trigger,\n });\n\n if (!triggers.includes(text)) continue;\n\n let matchRange: Range | undefined;\n\n if (triggerAtBlockStart) {\n matchRange = getRangeFromBlockStart(editor) as Range;\n\n // Don't autoformat if there is void nodes.\n const hasVoidNode = someNode(editor, {\n at: matchRange,\n match: (n) => isVoid(editor, n),\n });\n\n if (hasVoidNode) continue;\n\n const textFromBlockStart = getEditorString(editor, matchRange);\n\n const isMatched = matchByRegex\n ? !!textFromBlockStart.match(end)\n : end === textFromBlockStart;\n\n if (!isMatched) continue;\n } else {\n matchRange = getRangeBefore(editor, editor.selection as Range, {\n matchByRegex,\n matchString: end,\n });\n\n if (!matchRange) continue;\n }\n if (!allowSameTypeAbove) {\n // Don't autoformat if already in a block of the same type.\n const isBelowSameBlockType = someNode(editor, { match: { type } });\n\n if (isBelowSameBlockType) continue;\n }\n // if the trigger is only 1 char there is nothing to delete, so we'd delete unrelated text\n if (match.length > 1) {\n deleteText(editor, {\n at: matchRange,\n });\n }\n if (preFormat) {\n preFormat(editor);\n }\n if (format) {\n format(editor);\n } else {\n setElements(\n editor,\n { type },\n {\n match: (n) => isBlock(editor, n),\n }\n );\n }\n\n return true;\n }\n\n return false;\n};\n","import castArray from 'lodash/castArray.js';\n\nimport type { AutoformatRule, MatchRange } from '../types';\n\nexport const getMatchRange = ({\n match,\n trigger,\n}: {\n match: MatchRange | string;\n trigger: AutoformatRule['trigger'];\n}) => {\n let start: string;\n let end: string;\n\n if (typeof match === 'object') {\n start = match.start;\n end = match.end;\n } else {\n start = match;\n end = start.split('').reverse().join('');\n }\n\n const triggers: string[] = trigger ? castArray(trigger) : [end.slice(-1)];\n\n end = trigger ? end : end.slice(0, -1);\n\n return {\n end,\n start,\n triggers,\n };\n};\n","import type { Point, Range } from 'slate';\n\nimport {\n type TEditor,\n collapseSelection,\n deleteText,\n getEditorString,\n removeMark,\n select,\n} from '@udecode/plate-common';\nimport castArray from 'lodash/castArray.js';\n\nimport type { AutoformatMarkRule } from '../types';\n\nimport { getMatchPoints } from '../utils/getMatchPoints';\nimport { getMatchRange } from '../utils/getMatchRange';\n\nexport interface AutoformatMarkOptions extends AutoformatMarkRule {\n text: string;\n}\n\nexport const autoformatMark = (\n editor: TEditor,\n { ignoreTrim, match: _match, text, trigger, type }: AutoformatMarkOptions\n) => {\n if (!type) return false;\n\n const selection = editor.selection as Range;\n const matches = castArray(_match);\n\n for (const match of matches) {\n const { end, start, triggers } = getMatchRange({\n match,\n trigger,\n });\n\n if (!triggers.includes(text)) continue;\n\n const matched = getMatchPoints(editor, { end, start });\n\n if (!matched) continue;\n\n const { afterStartMatchPoint, beforeEndMatchPoint, beforeStartMatchPoint } =\n matched;\n\n const matchRange = {\n anchor: afterStartMatchPoint,\n focus: beforeEndMatchPoint,\n } as Range;\n\n if (!ignoreTrim) {\n const matchText = getEditorString(editor, matchRange);\n\n if (matchText.trim() !== matchText) continue;\n }\n // delete end match\n if (end) {\n deleteText(editor, {\n at: {\n anchor: beforeEndMatchPoint,\n focus: selection.anchor,\n },\n });\n }\n\n const marks = castArray(type);\n\n // add mark to the text between the matches\n select(editor, matchRange as Range);\n marks.forEach((mark) => {\n editor.addMark(mark, true);\n });\n collapseSelection(editor, { edge: 'end' });\n removeMark(editor, { key: marks as any, shouldChange: false });\n\n deleteText(editor, {\n at: {\n anchor: beforeStartMatchPoint as Point,\n focus: afterStartMatchPoint as Point,\n },\n });\n\n return true;\n }\n\n return false;\n};\n","import type { Point, Range } from 'slate';\n\nimport { type TEditor, getPointBeforeLocation } from '@udecode/plate-common';\n\nimport type { MatchRange } from '../types';\n\nimport { isPreviousCharacterEmpty } from './isPreviousCharacterEmpty';\n\nexport type GetMatchPointsReturnType =\n | {\n afterStartMatchPoint: Point | undefined;\n beforeEndMatchPoint: Point;\n beforeStartMatchPoint: Point | undefined;\n }\n | undefined;\n\nexport const getMatchPoints = (editor: TEditor, { end, start }: MatchRange) => {\n const selection = editor.selection as Range;\n\n let beforeEndMatchPoint = selection.anchor;\n\n if (end) {\n beforeEndMatchPoint = getPointBeforeLocation(editor, selection, {\n matchString: end,\n });\n\n if (!beforeEndMatchPoint) return;\n }\n\n let afterStartMatchPoint: Point | undefined;\n let beforeStartMatchPoint: Point | undefined;\n\n if (start) {\n afterStartMatchPoint = getPointBeforeLocation(editor, beforeEndMatchPoint, {\n afterMatch: true,\n matchString: start,\n skipInvalid: true,\n });\n\n if (!afterStartMatchPoint) return;\n\n beforeStartMatchPoint = getPointBeforeLocation(\n editor,\n beforeEndMatchPoint,\n {\n matchString: start,\n skipInvalid: true,\n }\n );\n\n if (!isPreviousCharacterEmpty(editor, beforeStartMatchPoint as Point))\n return;\n }\n\n return {\n afterStartMatchPoint,\n beforeEndMatchPoint,\n beforeStartMatchPoint,\n };\n};\n","import type { Location } from 'slate';\n\nimport {\n type TEditor,\n getEditorString,\n getRangeBefore,\n} from '@udecode/plate-common';\n\nexport const isPreviousCharacterEmpty = (editor: TEditor, at: Location) => {\n const range = getRangeBefore(editor, at);\n\n if (range) {\n const text = getEditorString(editor, range);\n\n if (text) {\n const noWhiteSpaceRegex = new RegExp(`\\\\S+`);\n\n return !noWhiteSpaceRegex.exec(text);\n }\n }\n\n return true;\n};\n","import type { Point, Range } from 'slate';\n\nimport {\n type SlateEditor,\n deleteText,\n insertText,\n} from '@udecode/plate-common';\nimport castArray from 'lodash/castArray.js';\n\nimport type { AutoformatTextRule } from '../types';\n\nimport { getMatchPoints } from '../utils/getMatchPoints';\nimport { getMatchRange } from '../utils/getMatchRange';\n\nexport interface AutoformatTextOptions extends AutoformatTextRule {\n text: string;\n}\n\nexport const autoformatText = (\n editor: SlateEditor,\n { format, match: _match, text, trigger }: AutoformatTextOptions\n) => {\n const selection = editor.selection as Range;\n const matches = castArray(_match);\n\n // dup\n for (const match of matches) {\n const { end, start, triggers } = getMatchRange({\n match: Array.isArray(format)\n ? match\n : {\n end: match,\n start: '',\n },\n trigger,\n });\n\n if (!triggers.includes(text)) continue;\n\n const matched = getMatchPoints(editor, { end, start });\n\n if (!matched) continue;\n\n const { afterStartMatchPoint, beforeEndMatchPoint, beforeStartMatchPoint } =\n matched;\n\n if (end) {\n deleteText(editor, {\n at: {\n anchor: beforeEndMatchPoint,\n focus: selection.anchor,\n },\n });\n }\n if (typeof format === 'function') {\n format(editor, matched);\n } else {\n const formatEnd = Array.isArray(format) ? format[1] : format;\n editor.insertText(formatEnd);\n\n if (beforeStartMatchPoint) {\n const formatStart = Array.isArray(format) ? format[0] : format;\n\n deleteText(editor, {\n at: {\n anchor: beforeStartMatchPoint as Point,\n focus: afterStartMatchPoint as Point,\n },\n });\n\n insertText(editor, formatStart, {\n at: beforeStartMatchPoint,\n });\n }\n }\n\n return true;\n }\n\n return false;\n};\n","import type { KeyboardHandler } from '@udecode/plate-common/react';\n\nimport {\n deleteBackward,\n getEditorString,\n getPointBefore,\n insertText,\n isHotkey,\n} from '@udecode/plate-common';\nimport { Range } from 'slate';\n\nimport type { AutoformatConfig } from '../lib/BaseAutoformatPlugin';\nimport type { AutoformatRule, AutoformatTextRule } from '../lib/types';\n\nexport const onKeyDownAutoformat: KeyboardHandler<AutoformatConfig> = ({\n editor,\n event,\n getOptions,\n}) => {\n const { enableUndoOnDelete, rules } = getOptions();\n\n if (event.defaultPrevented) return false;\n // Abort quicky if hotKey was not pressed.\n if (!isHotkey('backspace', { byKey: true }, event)) return false;\n if (!rules) return false;\n if (!enableUndoOnDelete) return false;\n\n // Abort if selection is not collapsed i.e. we're not deleting single character.\n const { selection } = editor;\n\n if (!selection || !Range.isCollapsed(selection)) return;\n\n // Get start and end point of selection.\n // For example: Text|\n // ^ cursor at the moment of pressing the hotkey\n // start, end will be equal to the location of the |\n const [start, end] = Range.edges(selection);\n\n // Get location before the cursor.\n // before will be a point one character before | so:\n // Text|\n // ^\n const before = getPointBefore(editor, end, {\n distance: 1,\n unit: 'character',\n });\n\n if (!start) return false;\n if (!before) return false;\n\n // Abort if there doesn't exist a valid character to replace.\n const charRange = { anchor: before, focus: start };\n\n if (!charRange) return false;\n\n // Text|\n // ^\n // Between ^ and | is t\n const char = getEditorString(editor, charRange);\n\n if (!char) return false;\n\n const matchers: AutoformatRule[] = [...rules].filter((rule) => {\n const textRule = rule as AutoformatTextRule;\n\n if (textRule) {\n return textRule.mode === 'text' && textRule.format === char;\n }\n\n return false;\n });\n\n // abort if no matching substitution is found.\n if (!matchers || matchers.length === 0) return false;\n\n event.preventDefault();\n\n // remove the shorthand character.\n deleteBackward(editor, { unit: 'character' });\n\n // put back the orignal characters. This could match to a single string or an array.\n const rule = matchers[0] as AutoformatTextRule;\n\n if (rule && typeof rule.match === 'string') {\n insertText(editor, rule.match);\n } else {\n const matchArray = rule.match as string[];\n\n if (matchArray && matchArray.length > 0) {\n insertText(editor, matchArray[0]);\n }\n }\n\n return true;\n};\n"],"mappings":"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","names":["castArray","castArray","deleteText","getEditorString","castArray","getEditorString","getRangeBefore","castArray","getEditorString","deleteText","deleteText","castArray","castArray","deleteText","insertText","getEditorString","insertText","rule"]}
{
"name": "@udecode/plate-autoformat",
"version": "38.0.0",
"version": "38.0.1",
"description": "Autoformatting plugin for Plate",

@@ -59,3 +59,3 @@ "keywords": [

"peerDependencies": {
"@udecode/plate-common": ">=38.0.0",
"@udecode/plate-common": ">=38.0.1",
"react": ">=16.8.0",

@@ -62,0 +62,0 @@ "react-dom": ">=16.8.0",

import * as _udecode_plate_common from '@udecode/plate-common';
import { TEditor, SlateEditor, PluginConfig } from '@udecode/plate-common';
import * as slate from 'slate';
import { Point } from 'slate';
type GetMatchPointsReturnType = {
afterStartMatchPoint: Point | undefined;
beforeEndMatchPoint: Point;
beforeStartMatchPoint: Point | undefined;
} | undefined;
declare const getMatchPoints: (editor: TEditor, { end, start }: MatchRange) => {
afterStartMatchPoint: slate.BasePoint | undefined;
beforeEndMatchPoint: slate.BasePoint;
beforeStartMatchPoint: slate.BasePoint | undefined;
} | undefined;
interface MatchRange {
end: string;
start: string;
}
interface AutoformatQueryOptions extends Omit<AutoformatCommonRule, 'query'> {
/** `insertText` text. */
text: string;
}
interface AutoformatCommonRule {
/**
* The rule applies when the trigger and the text just before the cursor
* matches. For `mode: 'block'`: lookup for the end match(es) before the
* cursor. For `mode: 'text'`: lookup for the end match(es) before the cursor.
* If `format` is an array, also lookup for the start match(es). For `mode:
* 'mark'`: lookup for the start and end matches. Note: `'_*'`, `['_*']` and
* `{ start: '_*', end: '*_' }` are equivalent.
*/
match: MatchRange | MatchRange[] | string | string[];
/**
* If true, insert the triggering character after autoformatting.
*
* @default: false
*/
insertTrigger?: boolean;
/** Query to allow autoformat. */
query?: (editor: SlateEditor, options: AutoformatQueryOptions) => boolean;
/**
* Triggering character to autoformat.
*
* @default the last character of `match` or `match.end`
*/
trigger?: string | string[];
}
interface AutoformatBlockRule extends AutoformatCommonRule {
match: string | string[];
/**
* - Text: insert text.
* - Block: set block type or custom format.
* - Mark: insert mark(s) between matches.
*
* @default 'text'
*/
mode: 'block';
/**
* If true, allow to autoformat even if there is a block of the same type
* above the selected block.
*
* @default false
*/
allowSameTypeAbove?: boolean;
/**
* Custom formatting function.
*
* @default setNodes(editor, { type }, { match: (n) => isBlock(editor, n) })
*/
format?: (editor: SlateEditor) => void;
/**
* If true, `match` will be interpreted as regex expression(s). Otherwise, it
* will be compared by string equality.
*
* @default false
*/
matchByRegex?: boolean;
/**
* Function called just before `format`. Generally used to reset the selected
* block.
*/
preFormat?: (editor: SlateEditor) => void;
/**
* If true, the trigger should be at block start to allow autoformatting.
*
* @default true
*/
triggerAtBlockStart?: boolean;
/**
* For `mode: 'block'`: set block type. If `format` is defined, this field is
* ignored. For `mode: 'mark'`: Mark(s) to add.
*/
type?: string;
}
interface AutoformatMarkRule extends AutoformatCommonRule {
mode: 'mark';
/** Mark(s) to add. */
type: string | string[];
/** If false, do not format when the string can be trimmed. */
ignoreTrim?: boolean;
}
interface AutoformatTextRule extends AutoformatCommonRule {
/**
* String: the matched text is replaced by that string. string[]: the matched
* texts are replaced by these strings. function: called when there is a
* match.
*/
format: ((editor: SlateEditor, options: GetMatchPointsReturnType) => void) | string | string[];
match: string | string[];
mode: 'text';
}
type AutoformatRule = AutoformatBlockRule | AutoformatMarkRule | AutoformatTextRule;
interface AutoformatPluginOptions {
enableUndoOnDelete?: boolean;
/** A list of triggering rules. */
rules?: AutoformatRule[];
}
type AutoformatConfig = PluginConfig<'autoformat', AutoformatPluginOptions>;
/** @see {@link withAutoformat} */
declare const AutoformatPlugin: _udecode_plate_common.SlatePlugin<AutoformatConfig>;
export { type AutoformatConfig as A, type GetMatchPointsReturnType as G, type MatchRange as M, type AutoformatRule as a, type AutoformatBlockRule as b, type AutoformatMarkRule as c, type AutoformatTextRule as d, AutoformatPlugin as e, type AutoformatQueryOptions as f, type AutoformatCommonRule as g, type AutoformatPluginOptions as h, getMatchPoints as i };
import * as _udecode_plate_common from '@udecode/plate-common';
import { TEditor, SlateEditor, PluginConfig } from '@udecode/plate-common';
import * as slate from 'slate';
import { Point } from 'slate';
type GetMatchPointsReturnType = {
afterStartMatchPoint: Point | undefined;
beforeEndMatchPoint: Point;
beforeStartMatchPoint: Point | undefined;
} | undefined;
declare const getMatchPoints: (editor: TEditor, { end, start }: MatchRange) => {
afterStartMatchPoint: slate.BasePoint | undefined;
beforeEndMatchPoint: slate.BasePoint;
beforeStartMatchPoint: slate.BasePoint | undefined;
} | undefined;
interface MatchRange {
end: string;
start: string;
}
interface AutoformatQueryOptions extends Omit<AutoformatCommonRule, 'query'> {
/** `insertText` text. */
text: string;
}
interface AutoformatCommonRule {
/**
* The rule applies when the trigger and the text just before the cursor
* matches. For `mode: 'block'`: lookup for the end match(es) before the
* cursor. For `mode: 'text'`: lookup for the end match(es) before the cursor.
* If `format` is an array, also lookup for the start match(es). For `mode:
* 'mark'`: lookup for the start and end matches. Note: `'_*'`, `['_*']` and
* `{ start: '_*', end: '*_' }` are equivalent.
*/
match: MatchRange | MatchRange[] | string | string[];
/**
* If true, insert the triggering character after autoformatting.
*
* @default: false
*/
insertTrigger?: boolean;
/** Query to allow autoformat. */
query?: (editor: SlateEditor, options: AutoformatQueryOptions) => boolean;
/**
* Triggering character to autoformat.
*
* @default the last character of `match` or `match.end`
*/
trigger?: string | string[];
}
interface AutoformatBlockRule extends AutoformatCommonRule {
match: string | string[];
/**
* - Text: insert text.
* - Block: set block type or custom format.
* - Mark: insert mark(s) between matches.
*
* @default 'text'
*/
mode: 'block';
/**
* If true, allow to autoformat even if there is a block of the same type
* above the selected block.
*
* @default false
*/
allowSameTypeAbove?: boolean;
/**
* Custom formatting function.
*
* @default setNodes(editor, { type }, { match: (n) => isBlock(editor, n) })
*/
format?: (editor: SlateEditor) => void;
/**
* If true, `match` will be interpreted as regex expression(s). Otherwise, it
* will be compared by string equality.
*
* @default false
*/
matchByRegex?: boolean;
/**
* Function called just before `format`. Generally used to reset the selected
* block.
*/
preFormat?: (editor: SlateEditor) => void;
/**
* If true, the trigger should be at block start to allow autoformatting.
*
* @default true
*/
triggerAtBlockStart?: boolean;
/**
* For `mode: 'block'`: set block type. If `format` is defined, this field is
* ignored. For `mode: 'mark'`: Mark(s) to add.
*/
type?: string;
}
interface AutoformatMarkRule extends AutoformatCommonRule {
mode: 'mark';
/** Mark(s) to add. */
type: string | string[];
/** If false, do not format when the string can be trimmed. */
ignoreTrim?: boolean;
}
interface AutoformatTextRule extends AutoformatCommonRule {
/**
* String: the matched text is replaced by that string. string[]: the matched
* texts are replaced by these strings. function: called when there is a
* match.
*/
format: ((editor: SlateEditor, options: GetMatchPointsReturnType) => void) | string | string[];
match: string | string[];
mode: 'text';
}
type AutoformatRule = AutoformatBlockRule | AutoformatMarkRule | AutoformatTextRule;
interface AutoformatPluginOptions {
enableUndoOnDelete?: boolean;
/** A list of triggering rules. */
rules?: AutoformatRule[];
}
type AutoformatConfig = PluginConfig<'autoformat', AutoformatPluginOptions>;
/** @see {@link withAutoformat} */
declare const AutoformatPlugin: _udecode_plate_common.SlatePlugin<AutoformatConfig>;
export { type AutoformatConfig as A, type GetMatchPointsReturnType as G, type MatchRange as M, type AutoformatRule as a, type AutoformatBlockRule as b, type AutoformatMarkRule as c, type AutoformatTextRule as d, AutoformatPlugin as e, type AutoformatQueryOptions as f, type AutoformatCommonRule as g, type AutoformatPluginOptions as h, getMatchPoints as i };