Cursor Overlay
A visual overlay for cursors and selections.
components/demo.tsx
'use client';
import React from 'react';
import { Plate } from '@udecode/plate-common/react';
import { editorPlugins } from '@/components/editor/plugins/editor-plugins';
import { useCreateEditor } from '@/components/editor/use-create-editor';
import { Editor, EditorContainer } from '@/components/plate-ui/editor';
import { DEMO_VALUES } from './values/demo-values';
export default function Demo({ id }: { id: string }) {
const editor = useCreateEditor({
plugins: [...editorPlugins],
value: DEMO_VALUES[id],
});
return (
<Plate editor={editor}>
<EditorContainer variant="demo">
<Editor />
</EditorContainer>
</Plate>
);
}
Installation
npm install @udecode/plate-selection
Usage
import { CursorOverlayPlugin } from '@udecode/plate-selection/react';
import { CursorOverlay } from '@/components/plate-ui/cursor-overlay';
const plugins = [
// ...otherPlugins,
CursorOverlayPlugin.configure({
render: { afterEditable: () => <CursorOverlay /> },
}),
];
Editor Container
编辑器需要一个容器组件,以确保光标覆盖的正确位置:
export const EditorContainer = (props: React.HTMLAttributes<HTMLDivElement>) => {
const editor = useEditorRef();
const containerRef = useEditorContainerRef();
return <div id={editor.uid} ref={containerRef} {...props} />;
};
This component is available in Editor.
保持选择焦点
为了在聚焦 UI 元素时保持编辑器的选择状态,请为这些元素添加 data-plate-focus="true"
属性:
<ToolbarButton data-plate-focus="true">
{/* toolbar content */}
</ToolbarButton>
插件
CursorOverlayPlugin
管理光标和选择覆盖的插件。
Options
Collapse all
包含光标状态的对象。默认:{}
API
editor.api.cursorOverlay.addCursor
添加一个带有指定键和状态的光标覆盖。
Parameters
Collapse all
光标的唯一标识符(例如,'blur', 'drag', 'custom')。
包含选择和可选样式的光标状态。
editor.api.cursorOverlay.removeCursor
通过其键移除光标覆盖。
Parameters
Collapse all
要移除的光标的键。
Hooks
useCursorOverlay
一个管理光标和选择覆盖状态的钩子,提供实时光标位置和选择矩形。
Parameters
Collapse all
Returns
Collapse all
包含光标状态的数组,每个光标状态都包含其对应的选择矩形和样式数据。
手动触发光标位置重新计算的函数。