{"version":3,"sources":["../../src/react/exit-break/ExitBreakPlugin.tsx","../../src/lib/exit-break/BaseExitBreakPlugin.ts","../../src/react/exit-break/onKeyDownExitBreak.ts","../../src/lib/exit-break/transforms/exitBreak.ts","../../src/lib/exit-break/queries/exitBreakAtEdges.ts","../../src/react/single-line/SingleLinePlugin.tsx","../../src/lib/single-line/BaseSingleLinePlugin.ts","../../src/lib/single-line/withSingleLine.ts","../../src/react/single-line/onKeyDownSingleLine.ts","../../src/react/soft-break/SoftBreakPlugin.tsx","../../src/lib/soft-break/BaseSoftBreakPlugin.ts","../../src/react/soft-break/onKeyDownSoftBreak.ts"],"sourcesContent":["import { toPlatePlugin } from '@udecode/plate/react';\n\nimport { BaseExitBreakPlugin } from '../../lib/exit-break/BaseExitBreakPlugin';\nimport { onKeyDownExitBreak } from './onKeyDownExitBreak';\n\nexport const ExitBreakPlugin = toPlatePlugin(BaseExitBreakPlugin, {\n  handlers: {\n    onKeyDown: onKeyDownExitBreak,\n  },\n});\n","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 { KeyboardHandler } from '@udecode/plate/react';\n\nimport { isHotkey, queryNode } from '@udecode/plate';\n\nimport type { ExitBreakConfig } from '../../lib';\n\nimport { exitBreak } from '../../lib/exit-break/transforms/exitBreak';\n\nexport const onKeyDownExitBreak: KeyboardHandler<ExitBreakConfig> = ({\n  editor,\n  event,\n  getOptions,\n}) => {\n  const { rules = [] } = getOptions();\n\n  if (event.defaultPrevented) return;\n\n  const entry = editor.api.block();\n\n  if (!entry) return;\n\n  rules.forEach(({ hotkey, ...rule }) => {\n    if (\n      isHotkey(hotkey, event as any) &&\n      queryNode(entry, rule.query) &&\n      exitBreak(editor, rule)\n    ) {\n      event.preventDefault();\n      event.stopPropagation();\n    }\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 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 { toPlatePlugin } from '@udecode/plate/react';\n\nimport { BaseSingleLinePlugin } from '../../lib/single-line/BaseSingleLinePlugin';\nimport { onKeyDownSingleLine } from './onKeyDownSingleLine';\n\nexport const SingleLinePlugin = toPlatePlugin(BaseSingleLinePlugin, {\n  handlers: {\n    onKeyDown: onKeyDownSingleLine,\n  },\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 type { KeyboardHandler } from '@udecode/plate/react';\n\nimport { Hotkeys } from '@udecode/plate';\n\nexport const onKeyDownSingleLine: KeyboardHandler = ({ event }) => {\n  if (event.defaultPrevented) return;\n  if (Hotkeys.isSplitBlock(event)) {\n    event.preventDefault();\n  }\n};\n","import { toPlatePlugin } from '@udecode/plate/react';\n\nimport { BaseSoftBreakPlugin } from '../../lib/soft-break/BaseSoftBreakPlugin';\nimport { onKeyDownSoftBreak } from './onKeyDownSoftBreak';\n\nexport const SoftBreakPlugin = toPlatePlugin(BaseSoftBreakPlugin, {\n  handlers: {\n    onKeyDown: onKeyDownSoftBreak,\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","import type { KeyboardHandler } from '@udecode/plate/react';\n\nimport { isHotkey, queryNode } from '@udecode/plate';\n\nimport type { SoftBreakConfig } from '../../lib';\n\nexport const onKeyDownSoftBreak: KeyboardHandler<SoftBreakConfig> = ({\n  editor,\n  event,\n  getOptions,\n}) => {\n  const { rules = [] } = getOptions();\n\n  if (event.defaultPrevented) return;\n\n  const entry = editor.api.block();\n\n  if (!entry) return;\n\n  rules.forEach(({ hotkey, query }) => {\n    if (isHotkey(hotkey, event as any) && queryNode(entry, query)) {\n      event.preventDefault();\n      event.stopPropagation();\n\n      editor.tf.insertText('\\n');\n    }\n  });\n};\n"],"mappings":"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","names":["toPlatePlugin","toPlatePlugin","toPlatePlugin","createTSlatePlugin","isHotkey","queryNode","toPlatePlugin"]}