UNPKG

@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
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;