mirror of
https://github.com/linsa-io/linsa.git
synced 2026-01-12 12:20:23 +01:00
* wip * wip page * chore: style * wip pages * wip pages * chore: toggle * chore: link * feat: topic search * chore: page section * refactor: apply tailwind class ordering * fix: handle loggedIn user for guest route * feat: folder & image schema * chore: move utils to shared * refactor: tailwind class ordering * feat: img ext for editor * refactor: remove qa * fix: tanstack start * fix: wrong import * chore: use toast * chore: schema
34 lines
841 B
TypeScript
34 lines
841 B
TypeScript
/*
|
|
* Add heading level validation. decimal (0-9)
|
|
* Add heading class to heading element
|
|
*/
|
|
import { mergeAttributes } from "@tiptap/core"
|
|
import TiptapHeading from "@tiptap/extension-heading"
|
|
import type { Level } from "@tiptap/extension-heading"
|
|
|
|
export const Heading = TiptapHeading.extend({
|
|
addOptions() {
|
|
return {
|
|
...this.parent?.(),
|
|
levels: [1, 2, 3] as Level[],
|
|
HTMLAttributes: {
|
|
class: "heading-node",
|
|
},
|
|
}
|
|
},
|
|
|
|
renderHTML({ node, HTMLAttributes }) {
|
|
const nodeLevel = parseInt(node.attrs.level, 10) as Level
|
|
const hasLevel = this.options.levels.includes(nodeLevel)
|
|
const level = hasLevel ? nodeLevel : this.options.levels[0]
|
|
|
|
return [
|
|
`h${level}`,
|
|
mergeAttributes(this.options.HTMLAttributes, HTMLAttributes),
|
|
0,
|
|
]
|
|
},
|
|
})
|
|
|
|
export default Heading
|