@udecode/plate-heading
Version:
Headings plugin for Plate
1 lines • 4.47 kB
Source Map (JSON)
{"version":3,"sources":["../src/lib/BaseHeadingPlugin.ts","../src/lib/constants.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} from '@udecode/plate-common';\n\nimport { HEADING_LEVELS } from './constants';\n\nexport type HeadingLevel = 1 | 2 | 3 | 4 | 5 | 6;\n\nexport type HeadingConfig = PluginConfig<\n 'heading',\n {\n /** Heading levels supported from 1 to `levels` */\n levels?: HeadingLevel | HeadingLevel[];\n }\n>;\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: HEADING_LEVELS[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 });\n\n plugins.push(plugin);\n });\n\n return {\n plugins,\n };\n});\n","export const HEADING_KEYS = {\n h1: 'h1',\n h2: 'h2',\n h3: 'h3',\n h4: 'h4',\n h5: 'h5',\n h6: 'h6',\n} as const;\n\nexport const HEADING_LEVELS = [\n HEADING_KEYS.h1,\n HEADING_KEYS.h2,\n HEADING_KEYS.h3,\n HEADING_KEYS.h4,\n HEADING_KEYS.h5,\n HEADING_KEYS.h6,\n];\n","import {\n type PluginConfig,\n type SlateEditor,\n createTSlatePlugin,\n} from '@udecode/plate-common';\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: 'toc',\n node: { isElement: true, isVoid: true },\n options: {\n isScroll: true,\n topOffset: 80,\n },\n});\n","import {\n type InsertNodesOptions,\n type SlateEditor,\n type TElement,\n insertNodes,\n} from '@udecode/plate-common';\n\nimport { BaseTocPlugin } from '../BaseTocPlugin';\n\nexport const insertToc = <E extends SlateEditor>(\n editor: E,\n options?: InsertNodesOptions<E>\n) => {\n insertNodes<TElement>(\n editor,\n {\n children: [{ text: '' }],\n type: editor.getType(BaseTocPlugin),\n },\n options as any\n );\n};\n","import type { TNode } from '@udecode/plate-common';\n\nimport { HEADING_LEVELS } from '../constants';\n\nexport const isHeading = (node: TNode) => {\n return node.type && HEADING_LEVELS.includes(node.type as any);\n};\n"],"mappings":";AAAA;AAAA,EAGE;AAAA,EACA;AAAA,OACK;;;ACLA,IAAM,eAAe;AAAA,EAC1B,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;AAEO,IAAM,iBAAiB;AAAA,EAC5B,aAAa;AAAA,EACb,aAAa;AAAA,EACb,aAAa;AAAA,EACb,aAAa;AAAA,EACb,aAAa;AAAA,EACb,aAAa;AACf;;;ADIO,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,eAAe,QAAQ,CAAC;AAAA,MAC7B,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,IACF,CAAC;AAED,YAAQ,KAAKA,OAAM;AAAA,EACrB,CAAC;AAED,SAAO;AAAA,IACL;AAAA,EACF;AACF,CAAC;;;AE3DD;AAAA,EAGE,sBAAAC;AAAA,OACK;AAaA,IAAM,gBAAgBA,oBAA8B;AAAA,EACzD,KAAK;AAAA,EACL,MAAM,EAAE,WAAW,MAAM,QAAQ,KAAK;AAAA,EACtC,SAAS;AAAA,IACP,UAAU;AAAA,IACV,WAAW;AAAA,EACb;AACF,CAAC;;;ACxBD;AAAA,EAIE;AAAA,OACK;AAIA,IAAM,YAAY,CACvB,QACA,YACG;AACH;AAAA,IACE;AAAA,IACA;AAAA,MACE,UAAU,CAAC,EAAE,MAAM,GAAG,CAAC;AAAA,MACvB,MAAM,OAAO,QAAQ,aAAa;AAAA,IACpC;AAAA,IACA;AAAA,EACF;AACF;;;ACjBO,IAAM,YAAY,CAAC,SAAgB;AACxC,SAAO,KAAK,QAAQ,eAAe,SAAS,KAAK,IAAW;AAC9D;","names":["plugin","createTSlatePlugin"]}