UNPKG

@wordpress/block-editor

Version:
107 lines (103 loc) 3.1 kB
"use strict"; 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