{"version":3,"sources":["../src/lib/BaseHeadingPlugin.ts","../src/lib/BaseTocPlugin.ts","../src/lib/transforms/insertToc.ts","../src/lib/utils/isHeading.ts"],"sourcesContent":["import {\n  type PluginConfig,\n  type SlatePlugin,\n  createSlatePlugin,\n  createTSlatePlugin,\n  KEYS,\n} from '@udecode/plate';\n\nexport type HeadingConfig = PluginConfig<\n  'heading',\n  {\n    /** Heading levels supported from 1 to `levels` */\n    levels?: HeadingLevel | HeadingLevel[];\n  }\n>;\n\nexport type HeadingLevel = 1 | 2 | 3 | 4 | 5 | 6;\n\n/** Enables support for headings with configurable levels (from 1 to 6). */\nexport const BaseHeadingPlugin = createTSlatePlugin<HeadingConfig>({\n  key: 'heading',\n  options: {\n    levels: [1, 2, 3, 4, 5, 6],\n  },\n}).extend(({ plugin }) => {\n  const {\n    options: { levels },\n  } = plugin;\n\n  const plugins: SlatePlugin[] = [];\n\n  const headingLevels = Array.isArray(levels)\n    ? levels\n    : Array.from({ length: levels || 6 }, (_, i) => i + 1);\n\n  headingLevels.forEach((level) => {\n    const plugin: SlatePlugin = createSlatePlugin({\n      key: KEYS.heading[level - 1],\n      node: { isElement: true },\n      parsers: {\n        html: {\n          deserializer: {\n            rules: [\n              {\n                validNodeName: `H${level}`,\n              },\n            ],\n          },\n        },\n      },\n      render: { as: `h${level}` as any },\n    });\n\n    plugins.push(plugin);\n  });\n\n  return {\n    plugins,\n  };\n});\n","import {\n  type PluginConfig,\n  type SlateEditor,\n  createTSlatePlugin,\n  KEYS,\n} from '@udecode/plate';\n\nimport type { Heading } from './types';\n\nexport type TocConfig = PluginConfig<\n  'toc',\n  {\n    isScroll: boolean;\n    topOffset: number;\n    queryHeading?: (editor: SlateEditor) => Heading[];\n  }\n>;\n\nexport const BaseTocPlugin = createTSlatePlugin<TocConfig>({\n  key: KEYS.toc,\n  node: { isElement: true, isVoid: true },\n  options: {\n    isScroll: true,\n    topOffset: 80,\n  },\n});\n","import type { InsertNodesOptions, SlateEditor, TElement } from '@udecode/plate';\n\nimport { KEYS } from '@udecode/plate';\n\nexport const insertToc = (\n  editor: SlateEditor,\n  options?: InsertNodesOptions\n) => {\n  editor.tf.insertNodes<TElement>(\n    {\n      children: [{ text: '' }],\n      type: editor.getType(KEYS.toc),\n    },\n    options as any\n  );\n};\n","import { type TNode, KEYS } from '@udecode/plate';\n\nexport const isHeading = (node: TNode) => {\n  return node.type && KEYS.heading.includes(node.type as any);\n};\n"],"mappings":";AAAA;AAAA,EAGE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAaA,IAAM,oBAAoB,mBAAkC;AAAA,EACjE,KAAK;AAAA,EACL,SAAS;AAAA,IACP,QAAQ,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA,EAC3B;AACF,CAAC,EAAE,OAAO,CAAC,EAAE,OAAO,MAAM;AACxB,QAAM;AAAA,IACJ,SAAS,EAAE,OAAO;AAAA,EACpB,IAAI;AAEJ,QAAM,UAAyB,CAAC;AAEhC,QAAM,gBAAgB,MAAM,QAAQ,MAAM,IACtC,SACA,MAAM,KAAK,EAAE,QAAQ,UAAU,EAAE,GAAG,CAAC,GAAG,MAAM,IAAI,CAAC;AAEvD,gBAAc,QAAQ,CAAC,UAAU;AAC/B,UAAMA,UAAsB,kBAAkB;AAAA,MAC5C,KAAK,KAAK,QAAQ,QAAQ,CAAC;AAAA,MAC3B,MAAM,EAAE,WAAW,KAAK;AAAA,MACxB,SAAS;AAAA,QACP,MAAM;AAAA,UACJ,cAAc;AAAA,YACZ,OAAO;AAAA,cACL;AAAA,gBACE,eAAe,IAAI,KAAK;AAAA,cAC1B;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,MACA,QAAQ,EAAE,IAAI,IAAI,KAAK,GAAU;AAAA,IACnC,CAAC;AAED,YAAQ,KAAKA,OAAM;AAAA,EACrB,CAAC;AAED,SAAO;AAAA,IACL;AAAA,EACF;AACF,CAAC;;;AC3DD;AAAA,EAGE,sBAAAC;AAAA,EACA,QAAAC;AAAA,OACK;AAaA,IAAM,gBAAgBD,oBAA8B;AAAA,EACzD,KAAKC,MAAK;AAAA,EACV,MAAM,EAAE,WAAW,MAAM,QAAQ,KAAK;AAAA,EACtC,SAAS;AAAA,IACP,UAAU;AAAA,IACV,WAAW;AAAA,EACb;AACF,CAAC;;;ACvBD,SAAS,QAAAC,aAAY;AAEd,IAAM,YAAY,CACvB,QACA,YACG;AACH,SAAO,GAAG;AAAA,IACR;AAAA,MACE,UAAU,CAAC,EAAE,MAAM,GAAG,CAAC;AAAA,MACvB,MAAM,OAAO,QAAQA,MAAK,GAAG;AAAA,IAC/B;AAAA,IACA;AAAA,EACF;AACF;;;ACfA,SAAqB,QAAAC,aAAY;AAE1B,IAAM,YAAY,CAAC,SAAgB;AACxC,SAAO,KAAK,QAAQA,MAAK,QAAQ,SAAS,KAAK,IAAW;AAC5D;","names":["plugin","createTSlatePlugin","KEYS","KEYS","KEYS"]}