UNPKG

@wordpress/block-editor

Version:
69 lines (66 loc) 2.41 kB
/** * External dependencies */ import clsx from 'clsx'; /** * WordPress dependencies */ import { useSelect } from '@wordpress/data'; import { __ } from '@wordpress/i18n'; import { useMergeRefs, useRefEffect } from '@wordpress/compose'; import { forwardRef } from '@wordpress/element'; /** * Internal dependencies */ import useMultiSelection from './use-multi-selection'; import useTabNav from './use-tab-nav'; import useArrowNav from './use-arrow-nav'; import useSelectAll from './use-select-all'; import useDragSelection from './use-drag-selection'; import useSelectionObserver from './use-selection-observer'; import useClickSelection from './use-click-selection'; import useInput from './use-input'; import useClipboardHandler from './use-clipboard-handler'; import { store as blockEditorStore } from '../../store'; import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime"; export function useWritingFlow() { const [before, ref, after] = useTabNav(); const hasMultiSelection = useSelect(select => select(blockEditorStore).hasMultiSelection(), []); return [before, useMergeRefs([ref, useClipboardHandler(), useInput(), useDragSelection(), useSelectionObserver(), useClickSelection(), useMultiSelection(), useSelectAll(), useArrowNav(), useRefEffect(node => { node.tabIndex = 0; node.dataset.hasMultiSelection = hasMultiSelection; if (!hasMultiSelection) { return () => { delete node.dataset.hasMultiSelection; }; } node.setAttribute('aria-label', __('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__*/_jsxs(_Fragment, { children: [before, /*#__PURE__*/_jsx("div", { ...props, ref: useMergeRefs([ref, forwardedRef]), className: clsx(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. */ export default forwardRef(WritingFlow); //# sourceMappingURL=index.js.map