@textbus/core
Version:
Textbus is a rich text editor and framework that is highly customizable and extensible to achieve rich wysiwyg effects.
291 lines (290 loc) • 11 kB
TypeScript
import { Formats } from './format';
import { Slot } from './slot';
import { Attribute, Formatter } from './attribute';
import { Component } from './component';
export declare class EventCache<T, K extends keyof T = keyof T> {
private listeners;
add(eventType: K, callback: T[K]): void;
get(eventType: K): Array<T[K]>;
clean(eventType: K): void;
}
export declare const eventCacheMap: WeakMap<Component<import("./types").State>, EventCache<EventTypes, keyof EventTypes>>;
/**
* 插入内容事件对象
*/
export interface InsertEventData {
/** 插槽插入的位置 */
index: number;
/** 当前插入的内容 */
content: string | Component;
/** 当前插入的附加的格式 */
formats: Formats;
}
/**
* 换行事件对象
*/
export interface BreakEventData {
/** 换行事件插槽的第几位触发的换行操作 */
index: number;
}
/**
* 删除数据事件对象
*/
export interface DeleteEventData {
/** 删除数据的位置 */
index: number;
/** 删除数据的长度 */
count: number;
/** 是否是向结束位置删除 */
toEnd: boolean;
/** 删除内容还是移动内容 */
actionType: 'delete' | 'move';
}
/**
* 粘贴事件对象
*/
export interface PasteEventData {
/** 标识粘贴发生在插槽的第几位 */
index: number;
/** 粘贴的内容 */
data: Slot;
/** 粘贴内容的纯文本 */
text: string;
}
/**
* 组合输入开始事件对象
*/
export interface CompositionStartEventData {
/** 标识在插槽的第几位触发 */
index: number;
}
/**
* 组合输入更新事件对象
*/
export interface CompositionUpdateEventData {
/** 标识在插槽的第几位触发 */
index: number;
/** 组件数据输入的数据 */
data: string;
}
/**
* 组件插槽设置属性事件对象
*/
export interface SlotSetAttributeEventData<T = any> {
attribute: Attribute<T>;
value: T;
}
/**
* 组件插槽应用格式事件对象
*/
export interface SlotApplyFormatEventData<T = any> {
formatter: Formatter<T>;
value: T;
}
/**
* 上下文本菜单配置项
*/
export interface ContextMenuItem {
type: string;
disabled?: boolean;
onClick(): void;
}
/**
* 自定义上下文本菜单配置项
*/
export interface ContextMenuCustomItem<T = unknown> {
type: string;
value?: T;
disabled?: boolean;
validate?(value: T): true | string;
onComplete(value: T): void;
}
/**
* 上下文多级菜单配置项
*/
export interface ContextMenuGroup {
type: string;
disabled?: boolean;
submenu: Array<ContextMenuItem | ContextMenuCustomItem>;
}
export type ContextMenuConfig = ContextMenuGroup | ContextMenuItem;
export interface SlotRange {
slot: Slot;
startIndex: number;
endIndex: number;
}
export interface EventTypes {
onUnselect: () => void;
onSelected: () => void;
onFocus: () => void;
onBlur: () => void;
onFocusIn: () => void;
onFocusOut: () => void;
onDetach: () => void;
onParentSlotUpdated: () => void;
onSelectionFromFront: (event: Event<Component>) => void;
onSelectionFromEnd: (event: Event<Component>) => void;
onBreak: (event: Event<Slot, BreakEventData>) => void;
onPaste: (event: Event<Slot, PasteEventData>) => void;
onContextMenu: (event: ContextMenuEvent<Component>) => void;
onContentInserted: (event: Event<Slot, InsertEventData>) => void;
onContentInsert: (event: Event<Slot, InsertEventData>) => void;
onContentDelete: (event: Event<Slot, DeleteEventData>) => void;
onContentDeleted: (event: Event<Slot>) => void;
onGetRanges: (event: GetRangesEvent<Component>) => void;
onCompositionStart: (event: Event<Slot, CompositionStartEventData>) => void;
onCompositionUpdate: (event: Event<Slot, CompositionUpdateEventData>) => void;
onCompositionEnd: (event: Event<Slot>) => void;
onSlotSetAttribute: (event: Event<Slot, SlotSetAttributeEventData>) => void;
onSlotApplyFormat: (event: Event<Slot, SlotApplyFormatEventData>) => void;
}
/**
* Textbus 事件对象
*/
export declare class Event<S, T = null> {
target: S;
data: T;
get isPrevented(): boolean;
private _isPrevented;
constructor(target: S, data: T);
preventDefault(): void;
}
export declare class ContextMenuEvent<T> extends Event<T> {
private getMenus;
constructor(target: T, getMenus: (menus: ContextMenuConfig[]) => void);
get stopped(): boolean;
private isStopped;
stopPropagation(): void;
useMenus(menus: ContextMenuConfig[]): void;
}
export declare class GetRangesEvent<T> extends Event<T> {
private getRanges;
constructor(target: T, getRanges: (ranges: SlotRange[]) => void);
useRanges(ranges: SlotRange[]): void;
}
/**
* 触发组件事件的方法
* @param target 目标组件
* @param eventType 事件名
* @param event 事件对象
*/
export declare function invokeListener(target: Component, eventType: 'onSelectionFromFront', event: Event<Component>): void;
export declare function invokeListener(target: Component, eventType: 'onSelectionFromEnd', event: Event<Component>): void;
export declare function invokeListener(target: Component, eventType: 'onContentInsert', event: Event<Slot, InsertEventData>): void;
export declare function invokeListener(target: Component, eventType: 'onContentInserted', event: Event<Slot, InsertEventData>): void;
export declare function invokeListener(target: Component, eventType: 'onContentDelete', event: Event<Slot, DeleteEventData>): void;
export declare function invokeListener(target: Component, eventType: 'onContentDeleted', event: Event<Slot>): void;
export declare function invokeListener(target: Component, eventType: 'onBreak', event: Event<Slot, BreakEventData>): void;
export declare function invokeListener(target: Component, eventType: 'onContextMenu', event: ContextMenuEvent<Component>): void;
export declare function invokeListener(target: Component, eventType: 'onPaste', event: Event<Slot, PasteEventData>): void;
export declare function invokeListener(target: Component, eventType: 'onGetRanges', event: GetRangesEvent<Component>): void;
export declare function invokeListener(target: Component, eventType: 'onCompositionStart', event: Event<Slot, CompositionStartEventData>): void;
export declare function invokeListener(target: Component, eventType: 'onCompositionUpdate', event: Event<Slot, CompositionUpdateEventData>): void;
export declare function invokeListener(target: Component, eventType: 'onSlotSetAttribute', event: Event<Slot, SlotSetAttributeEventData>): void;
export declare function invokeListener(target: Component, eventType: 'onSlotApplyFormat', event: Event<Slot, SlotApplyFormatEventData>): void;
export declare function invokeListener(target: Component, eventType: 'onCompositionEnd', event: Event<Slot>): void;
export declare function invokeListener(target: Component, eventType: 'onSelected'): void;
export declare function invokeListener(target: Component, eventType: 'onUnselect'): void;
export declare function invokeListener(target: Component, eventType: 'onFocus'): void;
export declare function invokeListener(target: Component, eventType: 'onBlur'): void;
export declare function invokeListener(target: Component, eventType: 'onFocusIn'): void;
export declare function invokeListener(target: Component, eventType: 'onFocusOut'): void;
export declare function invokeListener(target: Component, eventType: 'onDetach'): void;
export declare function invokeListener(target: Component, eventType: 'onParentSlotUpdated'): void;
/**
* 根据组件触发上下文菜单
* @param component
*/
export declare function triggerContextMenu(component: Component): ContextMenuConfig[][];
/**
* 当已选中组件未选中或选区不只选中已选中组件时触发
*/
export declare const onUnselect: (listener: () => void) => void;
/**
* 当选区刚好选中一个组件
*/
export declare const onSelected: (listener: () => void) => void;
/**
* 当光标从前面进入组件
*/
export declare const onSelectionFromFront: (listener: (event: Event<Component>) => void) => void;
/**
* 当光标从后面进入组件
*/
export declare const onSelectionFromEnd: (listener: (event: Event<Component>) => void) => void;
/**
* 组件获取焦点事件的勾子
*/
export declare const onFocus: (listener: () => void) => void;
/**
* 组件失去焦点事件的勾子
*/
export declare const onBlur: (listener: () => void) => void;
/**
* 组件或子组件获取焦点事件的勾子
*/
export declare const onFocusIn: (listener: () => void) => void;
/**
* 组件或子组件失去焦点事件的勾子
*/
export declare const onFocusOut: (listener: () => void) => void;
/**
* 组件内粘贴事件勾子
*/
export declare const onPaste: (listener: (event: Event<Slot, PasteEventData>) => void) => void;
/**
* 组件右键菜单事件勾子
*/
export declare const onContextMenu: (listener: (event: ContextMenuEvent<Component>) => void) => void;
/**
* 组件子插槽内容删除时的勾子
*/
export declare const onContentDelete: (listener: (event: Event<Slot, DeleteEventData>) => void) => void;
/**
* 组件子插槽内容删除完成时的勾子
*/
export declare const onContentDeleted: (listener: (event: Event<Slot>) => void) => void;
/**
* 组件子插槽换行时的勾子
*/
export declare const onBreak: (listener: (event: Event<Slot, BreakEventData>) => void) => void;
/**
* 组件子插槽插入内容时的勾子
*/
export declare const onContentInsert: (listener: (event: Event<Slot, InsertEventData>) => void) => void;
/**
* 组件子插槽插入内容后时的勾子
*/
export declare const onContentInserted: (listener: (event: Event<Slot, InsertEventData>) => void) => void;
/**
* 当组件为选区公共父组件时的勾子
*/
export declare const onGetRanges: (listener: (event: GetRangesEvent<Component>) => void) => void;
/**
* 当插槽组合输入前触发
*/
export declare const onCompositionStart: (listener: (event: Event<Slot, CompositionStartEventData>) => void) => void;
/**
* 当插槽组合输入时触发
*/
export declare const onCompositionUpdate: (listener: (event: Event<Slot, CompositionUpdateEventData>) => void) => void;
/**
* 当插槽组合输入结束触发
*/
export declare const onCompositionEnd: (listener: (event: Event<Slot>) => void) => void;
/**
* 当组件的父插槽数据发生更新后触发
*/
export declare const onParentSlotUpdated: (listener: () => void) => void;
/**
* 当组件插槽设置属性时触发
*/
export declare const onSlotSetAttribute: (listener: (event: Event<Slot, SlotSetAttributeEventData>) => void) => void;
/**
* 当组件插槽应用格式时触发
*/
export declare const onSlotApplyFormat: (listener: (event: Event<Slot, SlotApplyFormatEventData>) => void) => void;
/**
* 当组件从数据模型上剥离时触发
*/
export declare const onDetach: (listener: () => void) => void;