Search code examples
reactjsfont-sizetiptap

tiptap font size react


I'm using tiptap as an editor in my react application, the problem is that I haven't found how to modify the font size inside my editor, I have searched for an external package but I have not found any. could someone tell me is there is a package for font-size for tiptap with react ?


Solution

  • To handle font size in tiptap, you can create custom extension eg:

    <script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.4.0/umd/react.production.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.4.0/umd/react-dom.production.min.js"></script>

    import { Extension } from '@tiptap/react';
    
    /**
     * FontSize - Custom Extension
     * editor.commands.setFontSize(e.target.value) :set the font-size.
     */
    
    
     export const FontSize = Extension.create({
        name: 'fontSize',
        addOptions() {
            return {
                types: ['textStyle'],
            };
        },
        addGlobalAttributes() {
            return [
                {
                    types: this.options.types,
                    attributes: {
                        fontSize: {
                            default: null,
                            parseHTML: element => element.style.fontSize.replace(/['"]+/g, ''),
                            renderHTML: attributes => {
                                if (!attributes.fontSize) {
                                    return {};
                                }
                                return {
                                    style: `font-size: ${attributes.fontSize}`,
                                };
                            },
                        },
                    },
                },
            ];
        },
        addCommands() {
            return {
                setFontSize: fontSize => ({ chain }) => {
                    return chain()
                        .setMark('textStyle', { fontSize: fontSize + "px" })
                        .run();
                },
                unsetFontSize: () => ({ chain }) => {
                    return chain()
                        .setMark('textStyle', { fontSize: null })
                        .removeEmptyTextStyle()
                        .run();
                },
            };
        },
    });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>