{"version":3,"sources":["../../src/react/ResetNodePlugin.tsx","../../src/lib/BaseResetNodePlugin.ts","../../src/react/onKeyDownResetNode.ts"],"sourcesContent":["import { toTPlatePlugin } from '@udecode/plate/react';\n\nimport {\n  type ResetNodeConfig,\n  BaseResetNodePlugin,\n} from '../lib/BaseResetNodePlugin';\nimport { onKeyDownResetNode } from './onKeyDownResetNode';\n\n/**\n * Enables support for resetting block type from rules with React-specific\n * features.\n */\nexport const ResetNodePlugin = toTPlatePlugin<ResetNodeConfig>(\n  BaseResetNodePlugin,\n  {\n    handlers: {\n      onKeyDown: onKeyDownResetNode,\n    },\n  }\n);\n","import {\n  type PluginConfig,\n  type TElement,\n  createTSlatePlugin,\n  NodeApi,\n  PointApi,\n  RangeApi,\n} from '@udecode/plate';\n\nimport type { ResetNodePluginRule } from './types';\n\nexport type ResetNodeConfig = PluginConfig<\n  'resetNode',\n  {\n    disableEditorReset?: boolean;\n    disableFirstBlockReset?: boolean;\n    rules?: ResetNodePluginRule[];\n  }\n>;\n\n/** Enables support for resetting block type from rules. */\nexport const BaseResetNodePlugin = createTSlatePlugin<ResetNodeConfig>({\n  key: 'resetNode',\n  editOnly: true,\n  options: {\n    rules: [],\n  },\n}).overrideEditor(\n  ({ editor, getOptions, tf: { deleteBackward, deleteFragment } }) => ({\n    transforms: {\n      deleteBackward(unit) {\n        if (!getOptions().disableFirstBlockReset) {\n          const { selection } = editor;\n\n          if (selection && editor.api.isCollapsed()) {\n            const start = editor.api.start([])!;\n\n            if (PointApi.equals(selection.anchor, start)) {\n              const node = NodeApi.get<TElement>(editor, [0])!;\n\n              const { children, ...props } = editor.api.create.block({}, [0]);\n\n              // replace props\n              editor.tf.withoutNormalizing(() => {\n                // missing id will cause block selection not working and other issues\n                const { id, ...nodeProps } = NodeApi.extractProps(node);\n\n                editor.tf.unsetNodes(Object.keys(nodeProps), { at: [0] });\n                editor.tf.setNodes(props, { at: [0] });\n              });\n\n              return;\n            }\n          }\n        }\n\n        deleteBackward(unit);\n      },\n\n      deleteFragment(direction) {\n        const deleteFragmentPlugin = () => {\n          const { selection } = editor;\n\n          if (!selection) return;\n          if (RangeApi.equals(selection, editor.api.range([])!)) {\n            editor.tf.reset({\n              children: true,\n              select: true,\n            });\n\n            return true;\n          }\n        };\n\n        if (!getOptions().disableEditorReset && deleteFragmentPlugin()) return;\n\n        deleteFragment(direction);\n      },\n    },\n  })\n);\n","import type { KeyboardHandler } from '@udecode/plate/react';\n\nimport { isHotkey } from '@udecode/plate';\n\nimport type { ResetNodeConfig } from '../lib/BaseResetNodePlugin';\n\nexport const SIMULATE_BACKSPACE: any = {\n  key: '',\n  which: 8,\n};\n\nexport const onKeyDownResetNode: KeyboardHandler<ResetNodeConfig> = ({\n  editor,\n  event,\n  getOptions,\n}) => {\n  const { rules = [] } = getOptions();\n\n  if (event.defaultPrevented) return;\n\n  let reset;\n\n  if (!editor.selection) return;\n  if (editor.api.isCollapsed()) {\n    rules.forEach(({ defaultType, hotkey, predicate, types, onReset }) => {\n      if (\n        hotkey &&\n        isHotkey(hotkey, event as any) &&\n        predicate(editor as any) &&\n        editor.api.some({ match: { type: types } })\n      ) {\n        event.preventDefault?.();\n\n        editor.tf.setNodes({ type: defaultType });\n\n        if (onReset) {\n          onReset(editor as any);\n        }\n\n        reset = true;\n      }\n    });\n  }\n\n  return reset;\n};\n"],"mappings":";AAAA,SAAS,sBAAsB;;;ACA/B;AAAA,EAGE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAcA,IAAM,sBAAsB,mBAAoC;AAAA,EACrE,KAAK;AAAA,EACL,UAAU;AAAA,EACV,SAAS;AAAA,IACP,OAAO,CAAC;AAAA,EACV;AACF,CAAC,EAAE;AAAA,EACD,CAAC,EAAE,QAAQ,YAAY,IAAI,EAAE,gBAAgB,eAAe,EAAE,OAAO;AAAA,IACnE,YAAY;AAAA,MACV,eAAe,MAAM;AACnB,YAAI,CAAC,WAAW,EAAE,wBAAwB;AACxC,gBAAM,EAAE,UAAU,IAAI;AAEtB,cAAI,aAAa,OAAO,IAAI,YAAY,GAAG;AACzC,kBAAM,QAAQ,OAAO,IAAI,MAAM,CAAC,CAAC;AAEjC,gBAAI,SAAS,OAAO,UAAU,QAAQ,KAAK,GAAG;AAC5C,oBAAM,OAAO,QAAQ,IAAc,QAAQ,CAAC,CAAC,CAAC;AAE9C,oBAAM,EAAE,UAAU,GAAG,MAAM,IAAI,OAAO,IAAI,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;AAG9D,qBAAO,GAAG,mBAAmB,MAAM;AAEjC,sBAAM,EAAE,IAAI,GAAG,UAAU,IAAI,QAAQ,aAAa,IAAI;AAEtD,uBAAO,GAAG,WAAW,OAAO,KAAK,SAAS,GAAG,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;AACxD,uBAAO,GAAG,SAAS,OAAO,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;AAAA,cACvC,CAAC;AAED;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAEA,uBAAe,IAAI;AAAA,MACrB;AAAA,MAEA,eAAe,WAAW;AACxB,cAAM,uBAAuB,MAAM;AACjC,gBAAM,EAAE,UAAU,IAAI;AAEtB,cAAI,CAAC,UAAW;AAChB,cAAI,SAAS,OAAO,WAAW,OAAO,IAAI,MAAM,CAAC,CAAC,CAAE,GAAG;AACrD,mBAAO,GAAG,MAAM;AAAA,cACd,UAAU;AAAA,cACV,QAAQ;AAAA,YACV,CAAC;AAED,mBAAO;AAAA,UACT;AAAA,QACF;AAEA,YAAI,CAAC,WAAW,EAAE,sBAAsB,qBAAqB,EAAG;AAEhE,uBAAe,SAAS;AAAA,MAC1B;AAAA,IACF;AAAA,EACF;AACF;;;AC9EA,SAAS,gBAAgB;AAIlB,IAAM,qBAA0B;AAAA,EACrC,KAAK;AAAA,EACL,OAAO;AACT;AAEO,IAAM,qBAAuD,CAAC;AAAA,EACnE;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,EAAE,QAAQ,CAAC,EAAE,IAAI,WAAW;AAElC,MAAI,MAAM,iBAAkB;AAE5B,MAAI;AAEJ,MAAI,CAAC,OAAO,UAAW;AACvB,MAAI,OAAO,IAAI,YAAY,GAAG;AAC5B,UAAM,QAAQ,CAAC,EAAE,aAAa,QAAQ,WAAW,OAAO,QAAQ,MAAM;AACpE,UACE,UACA,SAAS,QAAQ,KAAY,KAC7B,UAAU,MAAa,KACvB,OAAO,IAAI,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,EAAE,CAAC,GAC1C;AACA,cAAM,iBAAiB;AAEvB,eAAO,GAAG,SAAS,EAAE,MAAM,YAAY,CAAC;AAExC,YAAI,SAAS;AACX,kBAAQ,MAAa;AAAA,QACvB;AAEA,gBAAQ;AAAA,MACV;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AACT;;;AFjCO,IAAM,kBAAkB;AAAA,EAC7B;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,WAAW;AAAA,IACb;AAAA,EACF;AACF;","names":[]}