@wordpress/block-editor
Version:
78 lines (73 loc) • 3.11 kB
JavaScript
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
exports.useWritingFlow = useWritingFlow;
var _clsx = _interopRequireDefault(require("clsx"));
var _data = require("@wordpress/data");
var _i18n = require("@wordpress/i18n");
var _compose = require("@wordpress/compose");
var _element = require("@wordpress/element");
var _useMultiSelection = _interopRequireDefault(require("./use-multi-selection"));
var _useTabNav = _interopRequireDefault(require("./use-tab-nav"));
var _useArrowNav = _interopRequireDefault(require("./use-arrow-nav"));
var _useSelectAll = _interopRequireDefault(require("./use-select-all"));
var _useDragSelection = _interopRequireDefault(require("./use-drag-selection"));
var _useSelectionObserver = _interopRequireDefault(require("./use-selection-observer"));
var _useClickSelection = _interopRequireDefault(require("./use-click-selection"));
var _useInput = _interopRequireDefault(require("./use-input"));
var _useClipboardHandler = _interopRequireDefault(require("./use-clipboard-handler"));
var _store = require("../../store");
var _jsxRuntime = require("react/jsx-runtime");
/**
* External dependencies
*/
/**
* WordPress dependencies
*/
/**
* Internal dependencies
*/
function useWritingFlow() {
const [before, ref, after] = (0, _useTabNav.default)();
const hasMultiSelection = (0, _data.useSelect)(select => select(_store.store).hasMultiSelection(), []);
return [before, (0, _compose.useMergeRefs)([ref, (0, _useClipboardHandler.default)(), (0, _useInput.default)(), (0, _useDragSelection.default)(), (0, _useSelectionObserver.default)(), (0, _useClickSelection.default)(), (0, _useMultiSelection.default)(), (0, _useSelectAll.default)(), (0, _useArrowNav.default)(), (0, _compose.useRefEffect)(node => {
node.tabIndex = 0;
node.dataset.hasMultiSelection = hasMultiSelection;
if (!hasMultiSelection) {
return () => {
delete node.dataset.hasMultiSelection;
};
}
node.setAttribute('aria-label', (0, _i18n.__)('Multiple selected blocks'));
return () => {
delete node.dataset.hasMultiSelection;
node.removeAttribute('aria-label');
};
}, [hasMultiSelection])]), after];
}
function WritingFlow({
children,
...props
}, forwardedRef) {
const [before, ref, after] = useWritingFlow();
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
children: [before, /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
...props,
ref: (0, _compose.useMergeRefs)([ref, forwardedRef]),
className: (0, _clsx.default)(props.className, 'block-editor-writing-flow'),
children: children
}), after]
});
}
/**
* Handles selection and navigation across blocks. This component should be
* wrapped around BlockList.
*
* @param {Object} props Component properties.
* @param {Element} props.children Children to be rendered.
*/
var _default = exports.default = (0, _element.forwardRef)(WritingFlow);
//# sourceMappingURL=index.js.map
;