{"version":3,"sources":["../src/lib/exit-break/BaseExitBreakPlugin.ts","../src/lib/exit-break/queries/exitBreakAtEdges.ts","../src/lib/exit-break/transforms/exitBreak.ts","../src/lib/single-line/BaseSingleLinePlugin.ts","../src/lib/single-line/withSingleLine.ts","../src/lib/soft-break/BaseSoftBreakPlugin.ts"],"sourcesContent":["import { type PluginConfig, createTSlatePlugin } from '@udecode/plate';\n\nimport type { ExitBreakRule } from './types';\n\nexport type ExitBreakConfig = PluginConfig<\n  'exitBreak',\n  {\n    rules?: ExitBreakRule[];\n  }\n>;\n\n/**\n * Insert soft break following configurable rules. Each rule specifies a hotkey\n * and query options.\n */\nexport const BaseExitBreakPlugin = createTSlatePlugin<ExitBreakConfig>({\n  key: 'exitBreak',\n  editOnly: true,\n  options: {\n    rules: [\n      { hotkey: 'mod+enter' },\n      { before: true, hotkey: 'mod+shift+enter' },\n    ],\n  },\n});\n","import type { Editor } from '@udecode/plate';\n\n/**\n * Check if the selection is at the edge of its parent block. If it is and if\n * the selection is expanded, delete its content.\n */\nexport const exitBreakAtEdges = (\n  editor: Editor,\n  {\n    end,\n    start,\n  }: {\n    end?: boolean;\n    start?: boolean;\n  }\n) => {\n  let queryEdge = false;\n  let isEdge = false;\n  let isStart = false;\n\n  if (start || end) {\n    queryEdge = true;\n\n    if (start && editor.api.isAt({ start: true })) {\n      isEdge = true;\n      isStart = true;\n    }\n    if (end && editor.api.isAt({ end: true })) {\n      isEdge = true;\n    }\n    if (isEdge && editor.api.isExpanded()) {\n      editor.tf.deleteFragment();\n    }\n  }\n\n  return {\n    isEdge,\n    isStart,\n    queryEdge,\n  };\n};\n","import { type SlateEditor, KEYS, PathApi } from '@udecode/plate';\n\nimport type { ExitBreakRule } from '../types';\n\nimport { exitBreakAtEdges } from '../queries/exitBreakAtEdges';\n\nexport const exitBreak = (\n  editor: SlateEditor,\n  {\n    before,\n    defaultType = editor.getType(KEYS.p),\n    level = 0,\n    query = {},\n    relative = false,\n  }: Omit<ExitBreakRule, 'hotkey'>\n) => {\n  if (!editor.selection) return;\n\n  const { isEdge, isStart, queryEdge } = exitBreakAtEdges(editor, query);\n\n  if (isStart) before = true;\n  if (queryEdge && !isEdge) return;\n\n  const selectionPath = editor.api.path(editor.selection)!;\n\n  const slicedPath = relative\n    ? selectionPath.slice(0, -level)\n    : selectionPath.slice(0, level + 1);\n\n  const insertPath = before ? slicedPath : PathApi.next(slicedPath);\n\n  editor.tf.insertNodes(\n    editor.api.create.block({ children: [{ text: '' }], type: defaultType }),\n    {\n      at: insertPath,\n      select: !isStart,\n    }\n  );\n\n  return true;\n};\n","import { createSlatePlugin } from '@udecode/plate';\n\nimport { withSingleLine } from './withSingleLine';\n\n/** Forces editor to only have one line. */\nexport const BaseSingleLinePlugin = createSlatePlugin({\n  key: 'singleLine',\n}).overrideEditor(withSingleLine);\n","import type { OverrideEditor } from '@udecode/plate';\n\nexport const withSingleLine: OverrideEditor = ({\n  editor,\n  tf: { normalizeNode },\n}) => ({\n  transforms: {\n    insertBreak() {\n      return null;\n    },\n\n    normalizeNode(entry) {\n      if (entry[1].length === 0 && editor.children.length > 1) {\n        editor.tf.removeNodes({\n          at: [],\n          mode: 'highest',\n          match: (node, path) => path.length === 1 && path[0] > 0,\n        });\n\n        return;\n      }\n\n      normalizeNode(entry);\n    },\n  },\n});\n","import {\n  type PluginConfig,\n  type QueryNodeOptions,\n  createTSlatePlugin,\n} from '@udecode/plate';\n\nexport type SoftBreakConfig = PluginConfig<\n  'softBreak',\n  {\n    rules?: SoftBreakRule[];\n  }\n>;\n\nexport interface SoftBreakRule {\n  hotkey: string;\n\n  /** Filter the block types where the rule applies. */\n  query?: QueryNodeOptions;\n}\n\n/**\n * Insert soft break following configurable rules. Each rule specifies a hotkey\n * and query options.\n */\nexport const BaseSoftBreakPlugin = createTSlatePlugin<SoftBreakConfig>({\n  key: 'softBreak',\n  editOnly: true,\n  options: {\n    rules: [{ hotkey: 'shift+enter' }],\n  },\n});\n"],"mappings":";AAAA,SAA4B,0BAA0B;AAe/C,IAAM,sBAAsB,mBAAoC;AAAA,EACrE,KAAK;AAAA,EACL,UAAU;AAAA,EACV,SAAS;AAAA,IACP,OAAO;AAAA,MACL,EAAE,QAAQ,YAAY;AAAA,MACtB,EAAE,QAAQ,MAAM,QAAQ,kBAAkB;AAAA,IAC5C;AAAA,EACF;AACF,CAAC;;;AClBM,IAAM,mBAAmB,CAC9B,QACA;AAAA,EACE;AAAA,EACA;AACF,MAIG;AACH,MAAI,YAAY;AAChB,MAAI,SAAS;AACb,MAAI,UAAU;AAEd,MAAI,SAAS,KAAK;AAChB,gBAAY;AAEZ,QAAI,SAAS,OAAO,IAAI,KAAK,EAAE,OAAO,KAAK,CAAC,GAAG;AAC7C,eAAS;AACT,gBAAU;AAAA,IACZ;AACA,QAAI,OAAO,OAAO,IAAI,KAAK,EAAE,KAAK,KAAK,CAAC,GAAG;AACzC,eAAS;AAAA,IACX;AACA,QAAI,UAAU,OAAO,IAAI,WAAW,GAAG;AACrC,aAAO,GAAG,eAAe;AAAA,IAC3B;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;ACxCA,SAA2B,MAAM,eAAe;AAMzC,IAAM,YAAY,CACvB,QACA;AAAA,EACE;AAAA,EACA,cAAc,OAAO,QAAQ,KAAK,CAAC;AAAA,EACnC,QAAQ;AAAA,EACR,QAAQ,CAAC;AAAA,EACT,WAAW;AACb,MACG;AACH,MAAI,CAAC,OAAO,UAAW;AAEvB,QAAM,EAAE,QAAQ,SAAS,UAAU,IAAI,iBAAiB,QAAQ,KAAK;AAErE,MAAI,QAAS,UAAS;AACtB,MAAI,aAAa,CAAC,OAAQ;AAE1B,QAAM,gBAAgB,OAAO,IAAI,KAAK,OAAO,SAAS;AAEtD,QAAM,aAAa,WACf,cAAc,MAAM,GAAG,CAAC,KAAK,IAC7B,cAAc,MAAM,GAAG,QAAQ,CAAC;AAEpC,QAAM,aAAa,SAAS,aAAa,QAAQ,KAAK,UAAU;AAEhE,SAAO,GAAG;AAAA,IACR,OAAO,IAAI,OAAO,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,CAAC,GAAG,MAAM,YAAY,CAAC;AAAA,IACvE;AAAA,MACE,IAAI;AAAA,MACJ,QAAQ,CAAC;AAAA,IACX;AAAA,EACF;AAEA,SAAO;AACT;;;ACxCA,SAAS,yBAAyB;;;ACE3B,IAAM,iBAAiC,CAAC;AAAA,EAC7C;AAAA,EACA,IAAI,EAAE,cAAc;AACtB,OAAO;AAAA,EACL,YAAY;AAAA,IACV,cAAc;AACZ,aAAO;AAAA,IACT;AAAA,IAEA,cAAc,OAAO;AACnB,UAAI,MAAM,CAAC,EAAE,WAAW,KAAK,OAAO,SAAS,SAAS,GAAG;AACvD,eAAO,GAAG,YAAY;AAAA,UACpB,IAAI,CAAC;AAAA,UACL,MAAM;AAAA,UACN,OAAO,CAAC,MAAM,SAAS,KAAK,WAAW,KAAK,KAAK,CAAC,IAAI;AAAA,QACxD,CAAC;AAED;AAAA,MACF;AAEA,oBAAc,KAAK;AAAA,IACrB;AAAA,EACF;AACF;;;ADpBO,IAAM,uBAAuB,kBAAkB;AAAA,EACpD,KAAK;AACP,CAAC,EAAE,eAAe,cAAc;;;AEPhC;AAAA,EAGE,sBAAAA;AAAA,OACK;AAoBA,IAAM,sBAAsBA,oBAAoC;AAAA,EACrE,KAAK;AAAA,EACL,UAAU;AAAA,EACV,SAAS;AAAA,IACP,OAAO,CAAC,EAAE,QAAQ,cAAc,CAAC;AAAA,EACnC;AACF,CAAC;","names":["createTSlatePlugin"]}