@udecode/plate-heading
Version:
Headings plugin for Plate
79 lines (76 loc) • 1.7 kB
JavaScript
// src/lib/BaseHeadingPlugin.ts
import {
createSlatePlugin,
createTSlatePlugin,
KEYS
} from "@udecode/plate";
var BaseHeadingPlugin = createTSlatePlugin({
key: "heading",
options: {
levels: [1, 2, 3, 4, 5, 6]
}
}).extend(({ plugin }) => {
const {
options: { levels }
} = plugin;
const plugins = [];
const headingLevels = Array.isArray(levels) ? levels : Array.from({ length: levels || 6 }, (_, i) => i + 1);
headingLevels.forEach((level) => {
const plugin2 = createSlatePlugin({
key: KEYS.heading[level - 1],
node: { isElement: true },
parsers: {
html: {
deserializer: {
rules: [
{
validNodeName: `H${level}`
}
]
}
}
},
render: { as: `h${level}` }
});
plugins.push(plugin2);
});
return {
plugins
};
});
// src/lib/BaseTocPlugin.ts
import {
createTSlatePlugin as createTSlatePlugin2,
KEYS as KEYS2
} from "@udecode/plate";
var BaseTocPlugin = createTSlatePlugin2({
key: KEYS2.toc,
node: { isElement: true, isVoid: true },
options: {
isScroll: true,
topOffset: 80
}
});
// src/lib/transforms/insertToc.ts
import { KEYS as KEYS3 } from "@udecode/plate";
var insertToc = (editor, options) => {
editor.tf.insertNodes(
{
children: [{ text: "" }],
type: editor.getType(KEYS3.toc)
},
options
);
};
// src/lib/utils/isHeading.ts
import { KEYS as KEYS4 } from "@udecode/plate";
var isHeading = (node) => {
return node.type && KEYS4.heading.includes(node.type);
};
export {
BaseHeadingPlugin,
BaseTocPlugin,
insertToc,
isHeading
};
//# sourceMappingURL=index.mjs.map