📝 Sign Up | 🔐 Log In

← Root | ↑ Up

┌───────────────────────────────────────────────────────────────────────────────┐ │ 📄 shadcn/directory/udecode/plate/(plugins)/(functionality)/cursor-overlay.cn │ └───────────────────────────────────────────────────────────────────────────────┘

╔══════════════════════════════════════════════════════════════════════════════════════════════╗
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║

title: 光标芆盖层 description: 圓猖蟑噚倱去焊点时䞺选䞭区域和光标䜍眮提䟛视觉反銈。 docs:

  • route: /docs/components/cursor-overlay title: 光标芆盖层

<ComponentPreview name="cursor-overlay-demo" /> <PackageInfo>

功胜特性

  • 圓其他元玠获埗焊点时保持选䞭高亮
  • 劚态星瀺选䞭区域䟋劂AI流匏蟓出时
  • 拖拜操䜜时星瀺光标䜍眮
  • 可自定义光标和选䞭区域的样匏
  • 倖郚UI亀互必倇功胜劂铟接工具栏、AI组合框
</PackageInfo>

套件䜿甚

<Steps>

安装

最快捷的添加光标芆盖功胜的方匏是䜿甚CursorOverlayKit它包含预配眮的CursorOverlayPlugin和CursorOverlay UI组件。

<ComponentSource name="cursor-overlay-kit" />
  • CursorOverlay: 枲染光标和选䞭区域芆盖层

添加套件

import { createPlateEditor } from 'platejs/react';
import { CursorOverlayKit } from '@/components/editor/plugins/cursor-overlay-kit';

const editor = createPlateEditor({
  plugins: [
    // ...其他插件
    ...CursorOverlayKit,
  ],
});
</Steps>

手劚配眮

<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接口

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>
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
║
╚══════════════════════════════════════════════════════════════════════════════════════════════╝

← Root | ↑ Up