UNPKG

@wordpress/block-editor

Version:
86 lines (79 loc) 2.17 kB
import _extends from "@babel/runtime/helpers/esm/extends"; import { createElement } from "@wordpress/element"; /** * WordPress dependencies */ import { __ } from '@wordpress/i18n'; import { DropdownMenu, ToolbarGroup } from '@wordpress/components'; import { positionCenter, positionLeft, positionRight, stretchFullWidth, stretchWide } from '@wordpress/icons'; /** * Internal dependencies */ import useAvailableAlignments from './use-available-alignments'; const BLOCK_ALIGNMENTS_CONTROLS = { left: { icon: positionLeft, title: __('Align left') }, center: { icon: positionCenter, title: __('Align center') }, right: { icon: positionRight, title: __('Align right') }, wide: { icon: stretchWide, title: __('Wide width') }, full: { icon: stretchFullWidth, title: __('Full width') } }; const DEFAULT_CONTROL = 'center'; const POPOVER_PROPS = { isAlternate: true }; function BlockAlignmentUI({ value, onChange, controls, isToolbar, isCollapsed = true, isToolbarButton = true }) { const enabledControls = useAvailableAlignments(controls); if (enabledControls.length === 0) { return null; } function applyOrUnset(align) { return () => onChange(value === align ? undefined : align); } const activeAlignmentControl = BLOCK_ALIGNMENTS_CONTROLS[value]; const defaultAlignmentControl = BLOCK_ALIGNMENTS_CONTROLS[DEFAULT_CONTROL]; const UIComponent = isToolbar ? ToolbarGroup : DropdownMenu; const extraProps = isToolbar ? { isCollapsed } : { isToolbarButton }; return createElement(UIComponent, _extends({ popoverProps: POPOVER_PROPS, icon: activeAlignmentControl ? activeAlignmentControl.icon : defaultAlignmentControl.icon, label: __('Align'), toggleProps: { describedBy: __('Change alignment') }, controls: enabledControls.map(control => { return { ...BLOCK_ALIGNMENTS_CONTROLS[control], isActive: value === control, role: isCollapsed ? 'menuitemradio' : undefined, onClick: applyOrUnset(control) }; }) }, extraProps)); } export default BlockAlignmentUI; //# sourceMappingURL=ui.js.map