âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â ð shadcn/directory/udecode/plate/(plugins)/(functionality)/cursor-overlay.cn â âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â
title: å æ èŠçå± description: åœçŒèŸåšå€±å»çŠç¹æ¶ïŒäžºéäžåºååå æ äœçœ®æäŸè§è§åéŠã docs:
æå¿«æ·çæ·»å å
æ èŠçåèœçæ¹åŒæ¯äœ¿çšCursorOverlayKitïŒå®å
å«é¢é
眮çCursorOverlayPluginåCursorOverlay UIç»ä»¶ã
CursorOverlay: æž²æå
æ åéäžåºåèŠçå±import { createPlateEditor } from 'platejs/react';
import { CursorOverlayKit } from '@/components/editor/plugins/cursor-overlay-kit';
const editor = createPlateEditor({
plugins: [
// ...å
¶ä»æä»¶
...CursorOverlayKit,
],
});
</Steps>
npm install @platejs/selection
import { CursorOverlayPlugin } from '@platejs/selection/react';
import { createPlateEditor } from 'platejs/react';
const editor = createPlateEditor({
plugins: [
// ...å
¶ä»æä»¶
CursorOverlayPlugin,
],
});
éè¿ç»ä»¶é çœ®å æ èŠçå±çæž²ææ¹åŒïŒ
import { CursorOverlayPlugin } from '@platejs/selection/react';
import { CursorOverlay } from '@/components/ui/cursor-overlay';
CursorOverlayPlugin.configure({
render: {
afterEditable: () => <CursorOverlay />,
},
});
render.afterEditable: æå®CursorOverlayåšå¯çŒèŸå
容ä¹åæž²æå
æ èŠçå±éèŠå®¹åšç»ä»¶æ¥ç¡®ä¿æ£ç¡®å®äœãåŠæäœ¿çšEditorç»ä»¶ïŒäŒéè¿EditorContainerèªåšå€çã
èªå®ä¹é 眮æ¶ïŒç¡®ä¿çŒèŸåšè¢«åžŠæå¯äžIDç容åšå 裹ïŒ
import { PlateContainer } from 'platejs/react';
export function EditorContainer(props: React.HTMLAttributes<HTMLDivElement>) {
return <PlateContainer {...props} />;
}
åœèçŠUIå
çŽ æ¶ïŒèŠç»ŽæçŒèŸåšçéäžç¶æïŒé䞺è¿äºå
çŽ æ·»å data-plate-focus="true"屿§ïŒ
<ToolbarButton data-plate-focus="true">
{/* å·¥å
·æ å
容 */}
</ToolbarButton>
è¿å¯ä»¥é²æ¢äžå·¥å ·æ æé®æå ¶ä»UIå çŽ äº€äºæ¶å æ èŠç屿¶å€±ã
</Steps>CursorOverlayPlugin管çå æ åéäžåºåèŠçå±ä»¥æäŸè§è§åéŠçæä»¶ã
<API name="CursorOverlayPlugin"> <APIOptions> <APIItem name="cursors" type="Record<string, CursorState<CursorData>>"> å å«å æ ç¶æåå ¶å¯äžæ è¯ç¬Šç对象 - **é»è®€åŒ:** `{}` </APIItem> </APIOptions> </API>api.cursorOverlay.addCursoræ·»å æå®é®åç¶æçå æ èŠçå±
<API name="addCursor"> <APIParameters> <APIItem name="key" type="string"> å æ çå¯äžæ è¯ç¬ŠïŒåŠ'blur'ã'drag'ã'custom'ïŒ </APIItem> <APIItem name="cursor" type="CursorState<CursorData>"> å å«éäžåºååå¯éæ ·åŒæ°æ®çå æ ç¶æ </APIItem> </APIParameters> </API>api.cursorOverlay.removeCursoréè¿é®ç§»é€å æ èŠçå±
<API name="removeCursor"> <APIParameters> <APIItem name="key" type="string"> èŠç§»é€çå æ é®å </APIItem> </APIParameters> </API>useCursorOverlay管çå æ åéäžåºåèŠçå±ç¶æçé©åïŒæäŸå®æ¶å æ äœçœ®åéäžåºåç©åœ¢ã
<API name="useCursorOverlay"> <APIOptions type="object"> <APIItem name="minSelectionWidth" type="number" optional> éäžåºåç©åœ¢çæå°å®œåºŠïŒåçŽ ïŒãå¯çšäºäœ¿å æ æå ¥ç¬ŠæŽææŸ - **é»è®€åŒ:** `1` </APIItem> <APIItem name="refreshOnResize" type="boolean" optional> 容åšè°æŽå€§å°æ¶æ¯åŠéæ°è®¡ç®å æ äœçœ® - **é»è®€åŒ:** `true` </APIItem> </APIOptions> <APIReturns type="object"> <APIItem name="cursors" type="CursorOverlayState<TCursorData>[]"> å å«å¯¹åºéäžåºåç©åœ¢åæ ·åŒæ°æ®çå æ ç¶ææ°ç» </APIItem> <APIItem name="refresh" type="() => void"> æåšè§Šåéæ°è®¡ç®å æ äœçœ®çåœæ° </APIItem> </APIReturns> </API>â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ