/**
* WordPress dependencies
*/
import { __, sprintf, isRTL } from '@wordpress/i18n';
import {
privateApis as componentsPrivateApis,
__experimentalSpacer as Spacer,
__experimentalView as View,
__experimentalItemGroup as ItemGroup,
__experimentalVStack as VStack,
__experimentalHStack as HStack,
FlexItem,
Button,
} from '@wordpress/components';
import {
Icon,
plus,
moreVertical,
chevronLeft,
chevronRight,
} from '@wordpress/icons';
import { useState } from '@wordpress/element';
import type { FontSize } from '@wordpress/global-styles-engine';
/**
* Internal dependencies
*/
import { Subtitle } from '../subtitle';
import { NavigationButtonAsItem } from '../navigation-button';
import { getNewIndexFromPresets } from '../utils';
import { ScreenHeader } from '../screen-header';
import ConfirmResetFontSizesDialog from './confirm-reset-font-sizes-dialog';
import { useSetting } from '../hooks';
import { unlock } from '../lock-unlock';
const { Menu } = unlock( componentsPrivateApis );
interface FontSizeGroupProps {
label: string;
origin: string;
sizes: FontSize[];
handleAddFontSize: () => void;
handleResetFontSizes?: () => void;
}
function FontSizeGroup( {
label,
origin,
sizes,
handleAddFontSize,
handleResetFontSizes,
}: FontSizeGroupProps ) {
const [ isResetDialogOpen, setIsResetDialogOpen ] = useState( false );
const toggleResetDialog = () => setIsResetDialogOpen( ! isResetDialogOpen );
const resetDialogText =
origin === 'custom'
? __(
'Are you sure you want to remove all custom font size presets?'
)
: __(
'Are you sure you want to reset all font size presets to their default values?'
);
return (
<>
{ handleResetFontSizes && isResetDialogOpen && (
) }
{ label }
{ origin === 'custom' && (
) }
{ !! handleResetFontSizes && (
) }
{ !! sizes.length && (
{ sizes.map( ( size ) => (
{ size.name }
) ) }
) }
>
);
}
function FontSizes() {
const [ themeFontSizes, setThemeFontSizes ] = useSetting(
'typography.fontSizes.theme'
);
const [ baseThemeFontSizes ] = useSetting(
'typography.fontSizes.theme',
'base'
);
const [ defaultFontSizes, setDefaultFontSizes ] = useSetting(
'typography.fontSizes.default'
);
const [ baseDefaultFontSizes ] = useSetting(
'typography.fontSizes.default',
'base'
);
const [ customFontSizes = [], setCustomFontSizes ] = useSetting(
'typography.fontSizes.custom'
);
const [ defaultFontSizesEnabled ] = useSetting(
'typography.defaultFontSizes'
);
const handleAddFontSize = () => {
const index = getNewIndexFromPresets( customFontSizes, 'custom-' );
const newFontSize = {
/* translators: %d: font size index */
name: sprintf( __( 'New Font Size %d' ), index ),
size: '16px',
slug: `custom-${ index }`,
};
setCustomFontSizes( [ ...customFontSizes, newFontSize ] );
};
const hasSameSizeValues = ( arr1: FontSize[], arr2: FontSize[] ): boolean =>
arr1.map( ( item ) => item.size ).join( '' ) ===
arr2.map( ( item ) => item.size ).join( '' );
return (
{ !! themeFontSizes?.length && (
setThemeFontSizes(
baseThemeFontSizes
)
}
/>
) }
{ defaultFontSizesEnabled &&
!! defaultFontSizes?.length && (
setDefaultFontSizes(
baseDefaultFontSizes
)
}
/>
) }
0
? () => setCustomFontSizes( [] )
: undefined
}
/>
);
}
export default FontSizes;