@wordpress/block-editor
Version:
107 lines (103 loc) • 3.1 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.ZWNBSP = void 0;
exports.default = DefaultBlockAppender;
var _clsx = _interopRequireDefault(require("clsx"));
var _i18n = require("@wordpress/i18n");
var _htmlEntities = require("@wordpress/html-entities");
var _data = require("@wordpress/data");
var _keycodes = require("@wordpress/keycodes");
var _inserter = _interopRequireDefault(require("../inserter"));
var _store = require("../../store");
var _jsxRuntime = require("react/jsx-runtime");
/**
* External dependencies
*/
/**
* WordPress dependencies
*/
/**
* Internal dependencies
*/
/**
* Zero width non-breaking space, used as padding for the paragraph when it is
* empty.
*/
const ZWNBSP = exports.ZWNBSP = '\ufeff';
function DefaultBlockAppender({
rootClientId
}) {
const {
showPrompt,
isLocked,
placeholder,
isManualGrid
} = (0, _data.useSelect)(select => {
const {
getBlockCount,
getSettings,
getTemplateLock,
getBlockAttributes
} = select(_store.store);
const isEmpty = !getBlockCount(rootClientId);
const {
bodyPlaceholder
} = getSettings();
return {
showPrompt: isEmpty,
isLocked: !!getTemplateLock(rootClientId),
placeholder: bodyPlaceholder,
isManualGrid: getBlockAttributes(rootClientId)?.layout?.isManualPlacement
};
}, [rootClientId]);
const {
insertDefaultBlock,
startTyping
} = (0, _data.useDispatch)(_store.store);
if (isLocked || isManualGrid) {
return null;
}
const value = (0, _htmlEntities.decodeEntities)(placeholder) || (0, _i18n.__)('Type / to choose a block');
const onAppend = () => {
insertDefaultBlock(undefined, rootClientId);
startTyping();
};
return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
"data-root-client-id": rootClientId || '',
className: (0, _clsx.default)('block-editor-default-block-appender', {
'has-visible-prompt': showPrompt
}),
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("p", {
tabIndex: "0"
// We want this element to be styled as a paragraph by themes.
// eslint-disable-next-line jsx-a11y/no-noninteractive-element-to-interactive-role
,
role: "button",
"aria-label": (0, _i18n.__)('Add default block')
// A wrapping container for this one already has the wp-block className.
,
className: "block-editor-default-block-appender__content",
onKeyDown: event => {
if (_keycodes.ENTER === event.keyCode || _keycodes.SPACE === event.keyCode) {
onAppend();
}
},
onClick: () => onAppend(),
onFocus: () => {
if (showPrompt) {
onAppend();
}
},
children: showPrompt ? value : ZWNBSP
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_inserter.default, {
rootClientId: rootClientId,
position: "bottom right",
isAppender: true,
__experimentalIsQuick: true
})]
});
}
//# sourceMappingURL=index.js.map