import { InspectorControls } from '@wordpress/block-editor'; import { PanelBody, TextControl, BaseControl, SelectControl, Button, CheckboxControl, } from '@wordpress/components'; import { useDispatch } from '@wordpress/data'; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore-next-line - store is not typed import { store as editPostStore } from '@wordpress/edit-post'; import { useEffect, useState } from '@wordpress/element'; import { __ } from '@wordpress/i18n'; import { useCanEditHTML } from '../../hooks/useCanEditHTML'; import { useLanguage } from '../../hooks/useLanguage'; import { useGlobalStore } from '../../state/global'; import { useLanguageStore } from '../../state/language'; import { useThemeStore } from '../../state/theme'; import { AttributesPropsAndSetter, Lang } from '../../types'; import { languages } from '../../util/languages'; import { ButtonsPanel } from '../components/ButtonsPanel'; import { FontSizeSelect, FontLineHeightSelect, FontFamilySelect, } from '../components/FontSelect'; import { FooterSelect } from '../components/FooterSelect'; import { HeaderSelect } from '../components/HeaderSelect'; import { HeightPanel } from '../components/HeightPanel'; import { SlotFactory } from '../components/SlotFactory'; import { ThemesPanel } from '../components/ThemesPanel'; import { MissingPermissionsTip } from '../components/misc/MissingPermissions'; import { BlurControl } from './BlurControl'; import { HighlightingControl } from './HighlightingControl'; export const SidebarControls = ({ attributes, setAttributes, }: AttributesPropsAndSetter) => { const [language, setLanguage] = useLanguage({ attributes, setAttributes }); const { recentLanguages } = useLanguageStore(); const { updateThemeHistory } = useThemeStore(); const { bringAttentionToPanel } = useGlobalStore(); const { headerType, footerType } = attributes; const languagesSorted = new Map( Object.entries(languages).sort((a, b) => a[1].localeCompare(b[1])), ); const canEdit = useCanEditHTML(); const footersNeedingLinks = ['simpleStringEnd', 'simpleStringStart']; const showHeaderTextEdit = [ 'simpleString', 'pillString', 'stringSmall', ].includes(headerType); const showFooterTextEdit = footersNeedingLinks.includes(footerType ?? ''); const showFooterLinkEdit = footersNeedingLinks.includes(footerType ?? ''); const showFooterLinkTargetEdit = footersNeedingLinks.includes( footerType ?? '', ); const [bringAttention, setBringAttention] = useState(false); const { openGeneralSidebar, closeGeneralSidebar } = useDispatch(editPostStore); useEffect(() => { if (!bringAttentionToPanel) return; closeGeneralSidebar('edit-post/block').then(() => { setBringAttention(bringAttentionToPanel); openGeneralSidebar('edit-post/block'); }); }, [bringAttentionToPanel, closeGeneralSidebar, openGeneralSidebar]); if (!canEdit) return ( {canEdit ? null : } ); return (
{ setAttributes({ lineNumbers }); updateThemeHistory({ lineNumbers }); }} /> {attributes.lineNumbers && ( { setAttributes({ startingLineNumber }); }} value={attributes.startingLineNumber} /> )}
setLanguage(v as Lang)} help={ language === 'ansi' ? __( 'Some code themes may not render ANSI correctly. Control sequences render only on the front.', 'code-block-pro', ) : null } options={[...languagesSorted.entries()].map( ([value, label]) => ({ label: label.replace( 'ANSI', 'ANSI (experimental)', ), value, }), )} /> {recentLanguages?.length > 0 ? ( <> {__('Recently Used', 'code-block-pro')}
{recentLanguages?.map((lang) => ( ))}
) : null}
{showHeaderTextEdit && ( { setAttributes({ headerString }); }} value={attributes.headerString ?? ''} /> )} { setAttributes({ headerType }); updateThemeHistory({ headerType }); }} /> {showFooterTextEdit && ( { setAttributes({ footerString }); }} value={attributes.footerString ?? ''} /> )} {showFooterLinkEdit && ( { setAttributes({ footerLink }); }} value={attributes.footerLink ?? ''} /> )} {showFooterLinkTargetEdit && ( { setAttributes({ footerLinkTarget }); updateThemeHistory({ footerLinkTarget }); }} /> )} { setAttributes({ footerType }); updateThemeHistory({ footerType }); }} />

{__('Font Size', 'code-block-pro')}

{ setAttributes({ fontSize }); updateThemeHistory({ fontSize }); }} />

{__('Line Height', 'code-block-pro')}

{ setAttributes({ lineHeight }); updateThemeHistory({ lineHeight }); }} />
{ setAttributes({ fontFamily }); updateThemeHistory({ fontFamily }); }} />
{ setAttributes({ clampFonts }); updateThemeHistory({ clampFonts }); }} />
{ setAttributes({ disablePadding }); updateThemeHistory({ disablePadding }); }} /> { setAttributes({ useDecodeURI }); updateThemeHistory({ useDecodeURI }); }} /> { setAttributes({ useEscapeShortCodes }); updateThemeHistory({ useEscapeShortCodes }); }} /> { const tabSize = size ? Number(size) : undefined; setAttributes({ tabSize }); updateThemeHistory({ tabSize }); }} /> { setAttributes({ useTabs }); updateThemeHistory({ useTabs }); }} />
); };