@wordpress/block-editor
Version:
101 lines (86 loc) • 2.54 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _element = require("@wordpress/element");
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _i18n = require("@wordpress/i18n");
var _components = require("@wordpress/components");
var _icons = require("@wordpress/icons");
var _useAvailableAlignments = _interopRequireDefault(require("./use-available-alignments"));
/**
* WordPress dependencies
*/
/**
* Internal dependencies
*/
const BLOCK_ALIGNMENTS_CONTROLS = {
left: {
icon: _icons.positionLeft,
title: (0, _i18n.__)('Align left')
},
center: {
icon: _icons.positionCenter,
title: (0, _i18n.__)('Align center')
},
right: {
icon: _icons.positionRight,
title: (0, _i18n.__)('Align right')
},
wide: {
icon: _icons.stretchWide,
title: (0, _i18n.__)('Wide width')
},
full: {
icon: _icons.stretchFullWidth,
title: (0, _i18n.__)('Full width')
}
};
const DEFAULT_CONTROL = 'center';
const POPOVER_PROPS = {
isAlternate: true
};
function BlockAlignmentUI({
value,
onChange,
controls,
isToolbar,
isCollapsed = true,
isToolbarButton = true
}) {
const enabledControls = (0, _useAvailableAlignments.default)(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 ? _components.ToolbarGroup : _components.DropdownMenu;
const extraProps = isToolbar ? {
isCollapsed
} : {
isToolbarButton
};
return (0, _element.createElement)(UIComponent, (0, _extends2.default)({
popoverProps: POPOVER_PROPS,
icon: activeAlignmentControl ? activeAlignmentControl.icon : defaultAlignmentControl.icon,
label: (0, _i18n.__)('Align'),
toggleProps: {
describedBy: (0, _i18n.__)('Change alignment')
},
controls: enabledControls.map(control => {
return { ...BLOCK_ALIGNMENTS_CONTROLS[control],
isActive: value === control,
role: isCollapsed ? 'menuitemradio' : undefined,
onClick: applyOrUnset(control)
};
})
}, extraProps));
}
var _default = BlockAlignmentUI;
exports.default = _default;
//# sourceMappingURL=ui.js.map