# code-block-pro/1.27.4/src/hooks/useDefaults.ts

Code Block Pro – Beautiful Syntax Highlighting, version 1.27.4. 202 lines.

- Page: https://pluginprobe.com/plugins/code-block-pro/1.27.4/code/src/hooks/useDefaults.ts
- Raw: https://pluginprobe.com/plugins/code-block-pro/1.27.4/raw/src/hooks/useDefaults.ts
- Modified: 2025-05-18T11:57:06+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/code-block-pro/1.27.4/code/src/hooks/useDefaults.ts#L10-L20`.

```typescript
import { useEffect, useRef } from '@wordpress/element';
import { Theme } from 'shiki';
import { useThemeStore, useThemeStoreReady } from '../state/theme';
import { AttributesPropsAndSetter } from '../types';

export const useDefaults = ({
    attributes,
    setAttributes,
}: AttributesPropsAndSetter) => {
    const {
        theme,
        fontSize,
        fontFamily,
        lineHeight,
        copyButton,
        copyButtonType,
        copyButtonString,
        copyButtonStringCopied,
        headerType,
        footerType,
        clampFonts,
        disablePadding,
        lineNumbers,
        highlightingHover,
        tabSize,
        useTabs,
        seeMoreType,
        seeMoreString,
        seeMoreTransition,
        seeMoreCollapse,
        seeMoreCollapseString,
    } = attributes;
    const {
        previousTheme,
        previousFontSize,
        previousFontFamily,
        previousLineHeight,
        previousHeaderType,
        previousFooterType,
        previousClampFonts,
        previousDisablePadding,
        previousLineNumbers,
        previousHighlightingHover,
        previousCopyButton,
        previousCopyButtonType,
        previousCopyButtonString,
        previousCopyButtonStringCopied,
        previousCopyButtonUseTextarea,
        previousTabSize,
        previousUseTabs,
        previousSeeMoreType,
        previousSeeMoreString,
        previousSeeMoreTransition,
        previousSeeMoreCollapse,
        previousSeeMoreCollapseString,
    } = useThemeStore();
    const ready = useThemeStoreReady();
    const once = useRef(false);

    useEffect(() => {
        if (once.current) return;
        if (copyButton !== undefined || !previousCopyButton) return;
        setAttributes({ copyButton: previousCopyButton });
    }, [previousCopyButton, copyButton, setAttributes]);

    useEffect(() => {
        if (once.current) return;
        if (copyButtonType) return;
        setAttributes({ copyButtonType: previousCopyButtonType });
    }, [previousCopyButtonType, copyButtonType, setAttributes]);

    useEffect(() => {
        if (once.current) return;
        // Checks undefined to avoid invalidating old blocks
        if (copyButtonString || copyButtonString === undefined) return;
        setAttributes({ copyButtonString: previousCopyButtonString });
    }, [previousCopyButtonString, copyButtonString, setAttributes]);

    useEffect(() => {
        if (once.current) return;
        // Checks undefined to avoid invalidating old blocks
        if (copyButtonStringCopied || copyButtonStringCopied === undefined) {
            return;
        }
        const cpyP = previousCopyButtonStringCopied;
        setAttributes({ copyButtonStringCopied: cpyP });
    }, [previousCopyButtonStringCopied, copyButtonStringCopied, setAttributes]);

    useEffect(() => {
        if (once.current) return;
        setAttributes({ copyButtonUseTextarea: previousCopyButtonUseTextarea });
    }, [previousCopyButtonUseTextarea, setAttributes]);

    useEffect(() => {
        if (once.current) return;
        if (theme) return;
        setAttributes({ theme: previousTheme as Theme });
    }, [previousTheme, theme, setAttributes]);

    useEffect(() => {
        if (once.current) return;
        if (fontSize) return;
        setAttributes({ fontSize: previousFontSize });
    }, [previousFontSize, fontSize, setAttributes]);

    useEffect(() => {
        if (once.current) return;
        if (fontFamily || fontFamily === '') return;
        setAttributes({ fontFamily: previousFontFamily });
    }, [previousFontFamily, fontFamily, setAttributes]);

    useEffect(() => {
        if (once.current) return;
        if (lineHeight) return;
        setAttributes({ lineHeight: previousLineHeight });
    }, [previousLineHeight, lineHeight, setAttributes]);

    useEffect(() => {
        if (once.current) return;
        if (headerType) return;
        setAttributes({ headerType: previousHeaderType });
    }, [previousHeaderType, headerType, setAttributes]);

    useEffect(() => {
        if (once.current) return;
        if (footerType !== undefined) return;
        setAttributes({ footerType: previousFooterType });
    }, [previousFooterType, footerType, setAttributes]);

    useEffect(() => {
        if (once.current) return;
        if (clampFonts !== undefined) return;
        setAttributes({ clampFonts: previousClampFonts });
    }, [previousClampFonts, clampFonts, setAttributes]);

    useEffect(() => {
        if (once.current) return;
        if (disablePadding !== undefined) return;
        setAttributes({ disablePadding: previousDisablePadding });
    }, [previousDisablePadding, disablePadding, setAttributes]);

    useEffect(() => {
        if (once.current) return;
        if (lineNumbers !== undefined) return;
        setAttributes({ lineNumbers: previousLineNumbers });
    }, [previousLineNumbers, lineNumbers, setAttributes]);

    useEffect(() => {
        if (once.current) return;
        if (tabSize !== undefined) return;
        setAttributes({ tabSize: previousTabSize });
    }, [previousTabSize, tabSize, setAttributes]);

    useEffect(() => {
        if (once.current) return;
        if (useTabs !== undefined) return;
        setAttributes({ useTabs: previousUseTabs });
    }, [previousUseTabs, useTabs, setAttributes]);

    useEffect(() => {
        if (once.current) return;
        if (seeMoreType !== undefined) return;
        setAttributes({ seeMoreType: previousSeeMoreType });
    }, [previousSeeMoreType, seeMoreType, setAttributes]);

    useEffect(() => {
        if (once.current) return;
        if (seeMoreString !== undefined) return;
        setAttributes({ seeMoreString: previousSeeMoreString });
    }, [previousSeeMoreString, seeMoreString, setAttributes]);

    useEffect(() => {
        if (once.current) return;
        if (seeMoreTransition !== undefined) return;
        setAttributes({ seeMoreTransition: previousSeeMoreTransition });
    }, [previousSeeMoreTransition, seeMoreTransition, setAttributes]);

    useEffect(() => {
        if (once.current) return;
        if (seeMoreCollapse !== undefined) return;
        setAttributes({ seeMoreCollapse: previousSeeMoreCollapse });
    }, [previousSeeMoreCollapse, seeMoreCollapse, setAttributes]);

    useEffect(() => {
        if (once.current) return;
        if (seeMoreCollapseString !== undefined) return;
        setAttributes({ seeMoreCollapseString: previousSeeMoreCollapseString });
    }, [previousSeeMoreCollapseString, seeMoreCollapseString, setAttributes]);

    useEffect(() => {
        if (once.current) return;
        if (highlightingHover !== undefined) return;
        setAttributes({ highlightingHover: previousHighlightingHover });
    }, [previousHighlightingHover, highlightingHover, setAttributes]);

    useEffect(() => {
        requestAnimationFrame(() => {
            once.current = true;
        });
    }, [ready]);
};

```
