AIO 編輯器
Bubble Menu
七種情境的浮動選單。
依游標位置浮現的操作選單。不走 extensionsConfig——由 config.bubbles 設定,key 為 AioEditorBubbleKind:false 停用該情境、物件覆寫預設;掛載預設跟隨 features 宣告,設 true 或物件可單獨啟用未宣告 feature 的情境。唯讀(editable: false)時一律不顯示。定位以 floating-ui 實作(自製 BubbleMenuView 子類,支援 arrow 與表格虛擬定位)。
- config key:
config.bubbles設定(預設全數啟用) - 來源:自製(基於
@tiptap/extension-bubble-menu)
七種情境
| kind | 觸發時機 | 內建按鈕 |
|---|---|---|
CodeBlock | 游標在程式碼區塊內 | 語言切換下拉(自動偵測+ 10 種語言)、刪除程式碼區塊 |
Image | 圖片被選取 | 更新圖片(走 toolbarOptions.requestUrl)、另開分頁開啟、刪除圖片 |
LinkTips | 游標在連結內 | 開啟連結、編輯連結、移除連結 |
List | 游標在清單項內 | 刪除清單項 |
Table | 游標在表格內 | 合併 / 拆分(僅可合併時顯示,合併中高亮)、標題儲存格(active 高亮)、垂直對齊(上 / 中 / 下,當前值高亮)、刪除表格 |
TableRow | 點擊列 grip 整列選取 | 上 / 下插入列、刪除列 |
TableColumn | 點擊欄 grip 整欄選取 | 左 / 右插入欄、刪除欄 |
共同選項(BubbleMenuConfigType)
| 欄位 | 型別 | 預設值 | 說明 |
|---|---|---|---|
pluginKey | string | 各情境固定值 | plugin 識別,覆寫時勿與其他 bubble 重複 |
updateDelay | number | 250 | 更新節流(ms) |
resizeDelay | number | 60 | resize 節流(ms) |
shouldShow | (props) => boolean | 各情境內建 | 顯示條件(如 editor.isActive('table')) |
targetElement | (props) => HTMLElement 或 null | 各情境內建 | 定位錨點;未提供時以選取範圍定位 |
isTableGrid | boolean | false | 表格列 / 欄選取之虛擬定位(CellSelection 之範圍矩形) |
options.placement | Placement | 各情境內建 | floating-ui 位置(top-end、right、bottom…) |
options.strategy | 'absolute' 或 'fixed' | 'absolute' | 定位策略 |
options.offset / flip / shift / size / autoPlacement / hide / inline | boolean 或 middleware 參數 | 各情境內建 | floating-ui middleware:false 停用、物件傳參數 |
options.arrow | (() => HTMLElement) 或 false | false | 箭頭元素 |
options.onShow / onHide / onUpdate / onDestroy | () => void | — | 生命週期 hooks |
覆寫範例
const config: AioEditorConfig = { bubbles: { List: false, // 停用清單 bubble Table: { options: { placement: 'top-end' } } }}element 欄位由 UI 層注入(Teleport 掛載),consumer 不需設定。