jodit
Version:
Jodit is an awesome and useful wysiwyg editor with filebrowser
138 lines (137 loc) • 4.45 kB
TypeScript
/*!
* Jodit Editor (https://xdsoft.net/jodit/)
* Released under MIT see LICENSE.txt in the project root for license information.
* Copyright (c) 2013-2025 Valeriy Chupurnov. All rights reserved. https://xdsoft.net
*/
/**
* @module types
*/
import type { IFocusable } from "./form";
import type { CanUndef, IContainer, IDestructible, IDictionary, IViewComponent, Nullable } from "./types";
import type { IViewBased } from "./view";
import type { ButtonsOption } from "./toolbar";
import type { IElms, IMods } from "./traits";
export interface IUIElement extends IViewComponent, IContainer, IDestructible, IMods, IElms {
parentElement: Nullable<IUIElement>;
container: HTMLElement;
name: string;
/**
* Apply callback for all parents
*/
bubble(callback: (parent: IUIElement) => void): this;
closest<T extends IUIElement>(type: Function): Nullable<T>;
closest<T extends IUIElement>(type: Function | T): Nullable<T>;
update(): void;
updateParentElement(target: IUIElement): this;
appendTo(element: HTMLElement): this;
}
export interface IUIIconState {
name: string;
iconURL: string;
fill: string;
}
export type ButtonVariant = 'initial' | 'outline' | 'default' | 'primary' | 'secondary' | 'success' | 'danger';
export interface IUIButtonState {
size: 'tiny' | 'xsmall' | 'small' | 'middle' | 'large';
name: string;
value: string | number | boolean;
variant: ButtonVariant;
type: 'button' | 'submit';
role: 'button' | 'tab';
disabled: boolean;
activated: boolean;
icon: IUIIconState;
text: string;
tooltip: string;
tabIndex: CanUndef<number>;
}
export type IUIButtonStatePartial = Omit<Partial<IUIButtonState>, 'icon'> & {
icon?: Partial<IUIButtonState['icon']>;
};
export interface IUIButton extends IViewComponent, IUIElement, IFocusable {
readonly state: IUIButtonState;
setState(state: IUIButtonStatePartial): this;
readonly text: HTMLElement;
readonly icon: HTMLElement;
readonly isButton: true;
onAction(callback: (event: MouseEvent) => void): this;
}
export interface IUIGroup extends IUIElement {
readonly elements: IUIElement[];
readonly allChildren: IUIElement[];
append(elm: IUIElement | IUIElement[], distElement?: string): this;
remove(elm: IUIElement): this;
clear(): this;
}
export interface IUIList extends IUIGroup {
jodit: IViewBased;
mode: 'vertical' | 'horizontal';
buttonSize: IUIButtonState['size'];
buttons: IUIButton[];
getButtonsNames(): string[];
setRemoveButtons(removeButtons?: string[]): this;
build(items: ButtonsOption, target?: Nullable<HTMLElement>): IUIList;
}
export interface IUIForm extends IUIGroup {
container: HTMLFormElement;
submit(): void;
validate(): boolean;
onSubmit(handler: (data: IDictionary) => false | void): void;
}
export interface IUIInput extends IUIElement {
readonly nativeInput: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;
readonly state: {
className: string;
autocomplete: boolean;
name: string;
value: string | number;
icon: string;
label: string;
ref: string;
type: 'text' | 'number' | 'checkbox' | 'url' | 'file' | 'hidden';
placeholder: string;
required: boolean;
validators: string[];
clearButton?: boolean;
onChange?: (value: string) => void;
};
value: string;
error: string;
validate(): boolean;
focus(): void;
readonly isFocused: boolean;
}
export interface IUIInputValidator<T extends IUIInput = IUIInput> {
(input: T): boolean;
}
export interface IUIOption {
value: string | boolean | number;
text: string;
}
export interface IUISelect extends IUIInput {
readonly nativeInput: HTMLSelectElement;
readonly state: IUIInput['state'] & {
options: IUIOption[];
size?: number;
multiple?: boolean;
};
}
export interface IUITextArea extends IUIInput {
readonly nativeInput: HTMLTextAreaElement;
readonly state: IUIInput['state'] & {
size?: number;
resizable?: boolean;
};
}
export interface IUIRange extends IUIInput {
readonly state: IUIInput['state'] & {
min: number;
max: number;
};
}
export interface IUICheckBox extends IUIInput {
readonly state: IUIInput['state'] & {
checked: boolean;
switch: boolean;
};
}