@easylogic/editor
Version:
Fantastic Web Design Tool
1,321 lines (1,078 loc) • 32.7 kB
TypeScript
declare module "@easylogic/editor" {
// gl-matrix
// prettier-ignore
export type mat2 =
| [number, number,
number, number]
| Float32Array;
// prettier-ignore
export type mat2d =
| [number, number,
number, number,
number, number]
| Float32Array;
// prettier-ignore
export type mat3 =
| [number, number, number,
number, number, number,
number, number, number]
| Float32Array;
// prettier-ignore
export type mat4 =
| [number, number, number, number,
number, number, number, number,
number, number, number, number,
number, number, number, number]
| Float32Array;
export type quat = [number, number, number, number] | Float32Array;
// prettier-ignore
export type quat2 =
| [number, number, number, number,
number, number, number, number]
| Float32Array;
export type vec2 = [number, number] | Float32Array;
export type vec3 = [number, number, number] | Float32Array;
export type vec4 = [number, number, number, number] | Float32Array;
// prettier-ignore
export type ReadonlyMat2 =
| readonly [
number, number,
number, number
]
| Float32Array;
// prettier-ignore
export type ReadonlyMat2d =
| readonly [
number, number,
number, number,
number, number
]
| Float32Array;
// prettier-ignore
export type ReadonlyMat3 =
| readonly [
number, number, number,
number, number, number,
number, number, number
]
| Float32Array;
// prettier-ignore
export type ReadonlyMat4 =
| readonly [
number, number, number, number,
number, number, number, number,
number, number, number, number,
number, number, number, number
]
| Float32Array;
export type ReadonlyQuat =
| readonly [number, number, number, number]
| Float32Array;
export type ReadonlyQuat2 =
| readonly [number, number, number, number, number, number, number, number]
| Float32Array;
export type ReadonlyVec2 = readonly [number, number] | Float32Array;
export type ReadonlyVec3 = readonly [number, number, number] | Float32Array;
export type ReadonlyVec4 =
| readonly [number, number, number, number]
| Float32Array;
// gl-matrix
export function makeEventChecker(value: string, split: string): string;
// event name regular expression
export type EVENT = (...args: string[]) => string;
export const COMMAND: EVENT;
export const ON: EVENT;
// Predefined CHECKER
export type CHECKER = (value: string, split: string) => string;
export type AFTER = (value: string, split: string) => string;
export type BEFORE = (value: string, split: string) => string;
export const IF: CHECKER;
export const KEY: CHECKER;
export const ARROW_UP: string;
export const ARROW_DOWN: string;
export const ARROW_LEFT: string;
export const ARROW_RIGHT: string;
export const ENTER: string;
export const SPACE: string;
export const ESCAPE: string;
export const ALT: string;
export const SHIFT: string;
export const META: string;
export const CONTROL: string;
export const SELF: string;
export const LEFT_BUTTON: string;
export const FIT: string;
export const PASSIVE: string;
/**
* LOAD 함수에서 domdiff 를 수행하는 플래그를 설정한다.
*/
export const DOMDIFF: string;
// event config method
export type TimeFunction = (time: number) => string;
export const DEBOUNCE: TimeFunction;
export const DELAY: TimeFunction;
export const D1000: string;
export const THROTTLE: TimeFunction;
export const CAPTURE: string;
// event config method
// before method
// after method
type MoveMethod = (method: string) => string;
export const MOVE: MoveMethod;
type MoveEndMethod = (method: string) => string;
export const END: MoveEndMethod;
export const PREVENT: string;
export const STOP: string;
type CallbackFunction = (...args: string[]) => string;
type DOM_EVENT_MAKE = (...keys: string[]) => CallbackFunction;
export const SUBSCRIBE: CallbackFunction;
export const SUBSCRIBE_ALL: CallbackFunction;
export const CUSTOM: DOM_EVENT_MAKE;
export const CLICK: CallbackFunction;
export const DOUBLECLICK: CallbackFunction;
export const MOUSEDOWN: CallbackFunction;
export const MOUSEUP: CallbackFunction;
export const MOUSEMOVE: CallbackFunction;
export const MOUSEOVER: CallbackFunction;
export const MOUSEOUT: CallbackFunction;
export const MOUSEENTER: CallbackFunction;
export const MOUSELEAVE: CallbackFunction;
export const TOUCHSTART: CallbackFunction;
export const TOUCHMOVE: CallbackFunction;
export const TOUCHEND: CallbackFunction;
export const KEYDOWN: CallbackFunction;
export const KEYUP: CallbackFunction;
export const KEYPRESS: CallbackFunction;
export const DRAG: CallbackFunction;
export const DRAGSTART: CallbackFunction;
export const DROP: CallbackFunction;
export const DRAGOVER: CallbackFunction;
export const DRAGENTER: CallbackFunction;
export const DRAGLEAVE: CallbackFunction;
export const DRAGEXIT: CallbackFunction;
export const DRAGOUT: CallbackFunction;
export const DRAGEND: CallbackFunction;
export const CONTEXTMENU: CallbackFunction;
export const CHANGE: CallbackFunction;
export const INPUT: CallbackFunction;
export const FOCUS: CallbackFunction;
export const FOCUSIN: CallbackFunction;
export const FOCUSOUT: CallbackFunction;
export const BLUR: CallbackFunction;
export const PASTE: CallbackFunction;
export const RESIZE: CallbackFunction;
export const SCROLL: CallbackFunction;
export const SUBMIT: CallbackFunction;
// pointerstart 의 경우 drag 를 위한 시작점이기 때문에 left button 만 허용한다.
// context 메뉴나 wheel 은 허용하지 않는다.
export const POINTERSTART: CallbackFunction;
//
export const POINTEROVER: CallbackFunction;
export const POINTERENTER: CallbackFunction;
export const POINTEROUT: CallbackFunction;
export const POINTERMOVE: CallbackFunction;
export const POINTEREND: CallbackFunction;
export const CHANGEINPUT: CallbackFunction;
export const WHEEL: CallbackFunction;
export const ANIMATIONSTART: CallbackFunction;
export const ANIMATIONEND: CallbackFunction;
export const ANIMATIONITERATION: CallbackFunction;
export const TRANSITIONSTART: CallbackFunction;
export const TRANSITIONEND: CallbackFunction;
export const TRANSITIONRUN: CallbackFunction;
export const TRANSITIONCANCEL: CallbackFunction;
export const DOUBLETAB: CallbackFunction;
// Predefined LOADER
/**
* 특정 영역의 html 을 만들기 위한 함수
*
* @param [refName=$el] 업데이트 되기 위한 refName
* @returns {string}
*/
export function LOAD(refName: string): string;
export function createRef(value: any): string;
export function getRef(id: string): any;
export function BIND(
value: string,
checkFieldOrCallback: string
): string;
export interface KeyValue {
[key: string]: any;
}
export interface ElementValue<T> {
[key: string]: T;
}
interface IComponentParams extends KeyValue {}
export class Length {
unit: string;
value: number;
}
export class Dom {
el: HTMLElement;
static create(
tag: string | HTMLElement | Dom | DocumentFragment,
className: string,
attr: KeyValue
): Dom;
static createByHTML(htmlString: string): Dom | null;
static body(): Dom;
find(selector: string): HTMLElement;
$(selector: string): Dom | null;
findAll(selector: string): HTMLElement[];
$$(selector: string): Dom[];
replaceChild(
oldElement: Dom | HTMLElement,
newElement: Dom | HTMLElement
): Dom;
checked(isChecked: boolean): Dom | boolean;
click(): Dom;
focus(): Dom;
select(): Dom;
blur(): Dom;
/* utility */
fullscreen(): void;
toggleFullscreen(): void;
}
export class BaseStore {}
export class Item {
getDefaultTitle(): string;
getIcon(): string;
isAttribute(): boolean;
isChanged(timestamp: number): boolean;
changed():void;
/**
* title 속성
*/
get title(): string;
/**
*
* @returns 자신을 포함안 하위 모든 자식을 조회
*/
get allLayers(): Item[];
/**
* get id
*/
get id(): string;
/**
* 자식 객체 리스트
*
* @returns {Item[]}
*/
get layers(): Item[];
/**
* @returns {Item}
*/
get parent(): Item;
setParent: (otherParent: Item) => void;
/**
* 객체 깊이를 동적으로 계산
*
* @returns {number}
*/
get depth(): number;
/**
* 최상위 컴포넌트 찾기
*
* @returns {Item}
*/
get top(): Item;
/**
* 최상위 project 구하기
*
* @returns {Project}
*/
get project(): Item;
/**
* 최상위 artboard 구하기
*
* @returns {ArtBoard}
*/
get artboard(): Item;
/**
* 상속 구조 안에서 instance 리스트
*
* @returns {Item[]}
*/
get path(): Item[];
/**
* 부모의 자식들 중 나의 위치 찾기
*
* @returns {number} 나이 위치 index
*/
get positionInParent(): number;
/**
* id 기반 문자열 id 생성
*
* @param {string} postfix
*/
getInnerId: (postfix: string) => string;
// selection 이후에
// 위치나 , width, height 등의 geometry 가 변경되었을 때 호출 하는 함수
recover: () => void;
setCache: () => void;
is(checkItemType: string): boolean;
isNot(checkItemType: string): boolean;
isSVG(): boolean;
/***********************************
*
* action
*
**********************************/
// 내부 아이템 리스트 설정
generateListNumber(): void;
/**
* when json is loaded, json object is be a new instance
*
* @param {*} json
*/
convert(json: KeyValue): KeyValue;
/**
* defence to set invalid key-value
*/
checkField(key: string, value: any): boolean;
toCloneObject(isDeep: boolean): KeyValue;
/**
* clone Item
*/
clone(isDeep: boolean): Item;
/**
* set json content
*
* @param {object} obj
*/
reset(obj: KeyValue): void;
hasChangedField(...args: string[]): boolean;
/**
* define default object for item
*
* @param {object} obj
*/
getDefaultObject(obj: KeyValue): KeyValue;
/**
* 지정된 필드의 값을 object 형태로 리턴한다.
*
* @param {...string} args 필드 리스트
*/
attrs(...args: string[]): any[];
/**
* 자식을 가지고 있는지 체크
*
* @returns {boolean}
*/
hasChildren(): boolean;
/**
* 자식으로 추가한다.
*
* @param {Item} layer
*/
appendChildItem(layer: Item): Item;
/**
* 자식중에 맨앞에 추가한다.
*
* @param {Item} layer
*/
prependChildItem(layer: Item): Item;
resetMatrix(item: Item): void;
/**
* 특정 index 에 자식을 추가한다.
*
* @param {Item} layer
* @param {number} index
*/
insertChildItem(layer: Item, index: number): Item;
/**
* 현재 Item 의 그 다음 순서로 추가한다.
*
* @param {Item} layer
*/
insertAfter(layer: Item): Item;
/**
* 현재 Item 의 이전 순서로 추가한다.
*
* @param {Item} layer
*/
insertBefore(layer: Item): Item;
/**
* 특정한 위치에 자식 객체로 Item 을 추가 한다.
* set position in layers
*
* @param {Number} position
* @param {Item} item
*/
setPositionInPlace(position: number, item: Item): void;
/**
* toggle item's attribute
*
* @param {*} field
* @param {*} toggleValue
*/
toggle(field: string, toggleValue: boolean | undefined): void;
isTreeItemHide(): boolean;
expectJSON(key: string): boolean;
/**
* convert to json
*
*/
toJSON(): KeyValue;
resize(): void;
/**
* Item 복사하기
*
* @param {number} dist
*/
copy(dist: number): Item;
findIndex(item: Item): number;
copyItem(childItem: Item, dist: number): Item;
/**
* 부모 객체에서 나를 지운다.
* remove self in parent
*/
remove(): void;
/**
* remote child item
*
* @param {Item} childItem
*/
removeItem(childItem: Item): void;
/**
* 부모 아이디를 가지고 있는지 체크 한다.
*
* @param {string} parentId
*/
hasParent(parentId: string): boolean;
/**
* 하위 자식 객체 중에 id를 가진 Item 을 리턴한다.
*
* @param {string} id
* @returns {Item|null} 검색된 Item 객체
*/
searchById(id: string): Item | null;
}
interface IKeyMat4Value {
[key: string]: mat4;
}
interface ICachedMatrix {
id: string;
x: number;
y: number;
width: number;
height: number;
transform: string;
originalTransformOrigin: string;
/**
* 변환되는 모든 vertext 를 기록
*/
verties: vec3[];
/**
* 회전되는 vertext 를 제외한 모든 vertext
* 회전 방식이 바뀌면 삭제 될 수 있음.
*/
rectVerties: vec3[];
xList: number[];
yList: number[];
directionMatrix: IKeyMat4Value;
parentMatrix: mat4;
parentMatrixInverse: mat4;
localMatrix: mat4; // 자기 자신의 matrix with translate offset(x,y)
localMatrixInverse: mat4;
itemMatrix: mat4; // 자기 자신의 matrix without translate offset(x,y)
itemMatrixInverse: mat4;
absoluteMatrix: mat4; // parentMatrix * offset translate * localMatrix , 축적된 matrix
absoluteMatrixInverse: mat4;
}
interface PathParser {}
export class MovableItem extends Item {
get isAbsolute(): boolean;
toCloneObject(isDeep: boolean): KeyValue;
convert(json: KeyValue): KeyValue;
//////////////////////
//
// getters
//
///////////////////////
get screenX(): Length;
get screenY(): Length;
get offsetX(): Length;
get offsetY(): Length;
get screenWidth(): Length;
get screenHeight(): Length;
setScreenX(value: number): void;
setScreenY(value: number): void;
/**
* Item 이동하기
*
* @param {vec3} distVector
*/
move(distVector: vec3): void;
moveByCenter(newCenter: vec3): void;
/**
* 충돌 체크
*
* polygon : ploygon 형태로 충돌 체크를 한다.
*
* @param {*} areaVerties
*/
checkInArea(areaVerties: vec3[]): boolean;
/**
* 특정 위치가 객체를 가리키고 있는데 체크한다.
*
* @param {number} x
* @param {number} y
*/
hasPoint(x: number, y: number): boolean;
/**
* areaVerties 안에 Layer 가 포함된 경우
*
* @param {vec3[]} areaVerties
*/
isIncludeByArea(areaVerties: vec3[]): boolean;
getPerspectiveMatrix(): mat4 | undefined;
getItemTransformMatrix(): mat4;
getItemTransformMatrixInverse(): mat4;
/**
* refer to https://www.w3.org/TR/css-transforms-2/
*
* 1. Start with the identity matrix.
* 2. Translate by the computed X, Y and Z of transform-origin
* 3. Multiply by each of the transform functions in transform property from left to right
* 4. Translate by the negated computed X, Y and Z values of transform-origin
*/
getTransformMatrix(): mat4;
getTransformMatrixInverse(): mat4;
/**
* 방향에 따른 matrix 구하기
*
* @param {vec3} vertextOffset
*/
getDirectionTransformMatrix(
vertextOffset: vec3,
width: Length,
height: Length
): mat4;
getDirectionTopLeftMatrix(width: Length, height: Length): mat4;
getDirectionLeftMatrix(width: Length, height: Length): mat4;
getDirectionTopMatrix(width: Length, height: Length): mat4;
getDirectionBottomLeftMatrix(width: Length, height: Length): mat4;
getDirectionTopRightMatrix(width: Length, height: Length): mat4;
getDirectionRightMatrix(width: Length, height: Length): mat4;
getDirectionBottomRightMatrix(width: Length, height: Length): mat4;
getDirectionBottomMatrix(width: Length, height: Length): mat4;
getAbsoluteMatrix(): mat4;
getAbsoluteMatrixInverse(): mat4;
verties(width: Length, height: Length): vec3[];
selectionVerties(): vec3[];
rectVerties(): vec3[];
guideVerties(): vec3[];
get matrix(): ICachedMatrix;
/**
*
* @returns {vec3[]} 패스의 verties
*/
pathVerties(): vec3[];
/**
* 중첩된 matrix 적용한 path segment
*
* @returns {PathParser}
*/
absolutePath(pathString: string): PathParser;
// 전체 캔버스에 그려진 path 의 개별 verties 를
// svg container 의 matrix 의 inverse matrix 를 곱해서 재계산 한다.
invertPath(pathString: string): PathParser;
/**
* pathString 의 좌표를 기준 좌표로 돌린다.
*
* @param {string} pathString svg path string
*/
invertPathString(pathString: string): string;
/**
* 나를 포함한 모든 layer 에 대해서 체크한다.
*
* project, artboard 를 제외
*
* @param {vec3[]} areaVerties
*/
checkInAreaForAll(areaVerties: vec3[]): MovableItem[];
/**
* area 에 속하는지 충돌 체크,
*
* @param {vec3[]} areaVerties
* @returns {Item[]} 충돌 체크된 선택된 객체 리스트
*/
checkInAreaForLayers(areaVerties: vec3[]): MovableItem[];
getTransformOriginMatrix(): mat4;
getTransformOriginMatrixInverse(): mat4;
/**
* 새로운 부모를 기준으로 childItem 의 transform 을 맞춘다.
*
* 1. childItem 의 absoluteMatrix 를 구한다.
* 2. 새로운 부모를 기준으로 좌표를 다시 맞춘다. parentItem.absoluteMatrixInverse
*
* childItem 의 좌표를 새로운 parent 로 맞출 때는
* itemMatrix (rotateZ) 를 먼저 구하고 offset 을 다시 구하는 순서로 간다.
*
* @param {Item} childItem
*/
resetMatrix(childItem: Item): void;
/** order by */
getIndex(): number;
setOrder(targetIndex: number): void;
// get next sibiling item
next(): MovableItem;
// get prev sibiling item
prev(): MovableItem;
/**
* 레이어를 현재의 다음으로 보낸다.
* 즉, 화면상에 렌더링 영역에서 올라온다.
*/
orderNext(): void;
isFirst(): boolean;
isLast(): boolean;
/**
* 레이어를 현재의 이전으로 보낸다.
* 즉, 화면상에 렌더링 영역에서 내려간다.
*/
orderPrev(): void;
// 부모의 처음으로 보내기
orderFirst(): void;
// 부모의 마지막으로 보내기
orderLast(): void;
//TODO: 전체중에 처음으로 보내기
orderTop(): void;
//TODO: 전체중에 마지막으로 보내기
orderBottom(): void;
}
export class GroupItem extends MovableItem {
get isGroup(): boolean;
isLayoutItem(): boolean;
/**
*
* 레이아웃을 가지고 있는 container 인지 판별
*
* @returns {boolean}
*/
hasLayout(): boolean;
isInGrid(): boolean;
isInFlex(): boolean;
}
export class DomItem extends GroupItem {}
export class Layer extends DomItem {}
export class Component extends Layer {
static createComponent: (params: IComponentParams) => Component;
}
export class EventMachine {
protected opt: KeyValue;
protected parent: any;
protected props: KeyValue;
protected state: KeyValue;
public source: string;
public sourceName: string;
/**
* UIElement instance 에 필요한 기본 속성 설정
*/
protected initializeProperty(opt: KeyValue, props: KeyValue): void;
protected initComponents(): void;
protected initializeHandler(): any[];
/**
* state 를 초기화 한것을 리턴한다.
*
* @protected
* @returns {Object}
*/
protected initState(): KeyValue;
/**
* state 를 변경한다.
*
* @param {Object} state 새로운 state
* @param {Boolean} isLoad 다시 로드 할 것인지 체크 , true 면 state 변경후 다시 로드
*/
setState(state: KeyValue, isLoad: boolean): void;
/**
* state 에 있는 key 필드의 값을 토글한다.
* Boolean 형태의 값만 동작한다.
*
* @param {string} key
* @param {Boolean} isLoad
*/
toggleState(key: string, isLoad: boolean): void;
/**
* 객체를 다시 그릴 때 사용한다.
*
* @param {*} props
* @protected
*/
protected _reload(props: KeyValue): void;
/**
* template 을 렌더링 한다.
*
* @param {Dom|undefined} $container 컴포넌트가 그려질 대상
*/
render($container: Dom | undefined): Promise<void>;
protected initialize(): void;
/**
* render 이후에 실행될 함수
* dom 이 실제로 생성된 이후에 수행할 작업들을 정의한다.
*
* @protected
*/
protected afterRender(): void;
/**
* 하위에 연결될 객체들을 정의한다
*
* @protected
* @returns {Object}
*/
protected components(): KeyValue;
/**
* ref 이름을 가진 Component 를 가지고 온다.
*
* @param {any[]} args
* @returns {EventMachine}
*/
getRef(...args: string[]): Dom;
/**
* refresh 는 load 함수들을 실행한다.
*/
public refresh(): void;
protected load(...args: any[]): Promise<any>;
public bindData(...args: string[]): void;
// 기본 템플릿 지정
protected template(): string|string[]|HTMLElement|HTMLElement[]|null|undefined;
//
protected eachChildren(callback: Function): void;
rerender(): void;
/**
* 자원을 해제한다.
* 이것도 역시 자식 컴포넌트까지 제어하기 때문에 가장 최상위 부모에서 한번만 호출되도 된다.
*
*/
destroy(): void;
/* magic check method */
protected self(e: any): boolean;
protected isAltKey(e: any): boolean;
protected isCtrlKey(e: any): boolean;
protected isShiftKey(e: any): boolean;
protected isMetaKey(e: any): boolean;
protected isMouseLeftButton(e: any): boolean;
/** before check method */
/* after check method */
protected preventDefault(e: any): boolean;
protected stopPropagation(e: any): boolean;
protected bodyMouseMove(e: any, methodName: string): void;
protected bodyMouseUp(e: any, methodName: string): void;
}
export class UIElement extends EventMachine {
/**
* UIElement 가 생성될 때 호출되는 메소드
* @protected
*/
protected created(): void;
/**
* UIElement 기반으로 메세지를 호출 한다.
* 나 이외의 객체들에게 메세지를 전달한다.
*
* @param {string} messageName
* @param {any[]} args
*/
emit(messageName: string, ...args: any[]): void;
/**
* MicroTask 를 수행한다.
*
* @param {Function} callback
*/
nextTick(callback: () => void);
/**
*
* UIElement 자신의 메세지를 수행한다.
* emit 은 나외의 객체에게 메세지를 보내고
*
* @param {string} messageName
* @param {any[]} args
*/
trigger(messageName: string, ...args: any[]): void;
/**
* 모든 자식컴포넌트에 메세지를 보낸다.
*
* @param messageName
* @param args
*/
broadcast(messageName: string, ...args: any[]): void;
/**
* 메세지 등록
*
* @param message
* @param callback
*/
on(message: string, callback: Function): void;
/**
* 메세지 등록 해제
* @param message
* @param callback
*/
off(message: string, callback: Function): void;
}
interface ConfigManager {
get(key: string): any;
set(key: string, value: any, isSave: boolean): void;
setAll(obj: KeyValue): void;
getType(key: string): string;
isType(key: string, type: string): boolean;
isBoolean(key: string): boolean;
toggle(key: string): void;
true(key: string): boolean;
false(key: string): boolean;
is(key: string, value: any): boolean;
remove(key: string): void;
/**
* config 기본 설정을 등록한다.
*
* @param {Object} config
* @param {string} config.type config key 자료형
* @param {string} config.key config key 이름
* @param {any} config.defaultValue config key 기본 값
* @param {string} config.title config key 제목
* @param {string} config.description config key 설명
*/
registerConfig(config: KeyValue): void;
}
export class EditorElement extends UIElement {
get $editor(): EditorInstance;
get $store(): BaseStore;
/**
* i18n 텍스트를 리턴한다.
*
* @param {string} key
* @returns {string} i18n 텍스트
*/
$i18n(key: string): string;
$theme(key: string): any;
}
export class BaseProperty extends EditorElement {
onToggleShow(): void;
protected setTitle(title: string): void;
protected isHideHeader(): boolean;
protected isFirstShow(): boolean;
protected getClassName(): string;
protected getTitleClassName(): string;
protected getBodyClassName(): string;
getTitle(): string;
getTools(): string;
getBody(): string;
getFooter(): string;
isPropertyShow(): boolean;
toggle(isShow: boolean): void;
hide(): void;
show(): void;
onShowTitle(isShow: boolean): void;
refreshShowIsNot(type: string, isRefresh: boolean): void;
refreshShow(type: string, isRefresh: boolean): void;
}
export interface ObjectPropertyProps {
title: string;
editableProperty?: string;
action?: string | Function;
inspector?: Function;
}
export class ObjectProperty {
static create(json: ObjectPropertyProps): BaseProperty;
}
export interface ICommandObject {}
export interface ShortcutObject {}
export interface MenuItemCallback<T> {
(editor: EditorInstance, ...args: any[]): T;
}
export interface DropdownMenuItem {
type: "dropdown";
items?: MenuItem[];
direction?: "left" | "right";
icon?: string;
title?: string;
events?: any[];
selected?: boolean;
selectedKey?: string | MenuItemCallback<string>;
action?: MenuItemCallback<void>;
style?: KeyValue;
dy?: number;
}
export type EventCommandType = string;
export interface CustomMenuItem {
type: "custom";
title?: string;
icon?: string;
key?: string;
action?: MenuItemCallback<void>;
command?: string;
args?: any[];
template: string | MenuItemCallback<string>;
events?: EventCommandType[];
}
export interface ButtonMenuItem {
type: "button";
title?: string;
icon?: string;
command?: string;
shortcut?: string;
closable?: boolean;
args?: any[];
nextTick?: MenuItemCallback<void>;
disabled?: boolean;
selected?: boolean;
key?: string;
action?: MenuItemCallback<void>;
events?: EventCommandType[];
style?: KeyValue;
}
export interface CheckboxMenuItem {
type: "checkbox";
checked?: boolean | (() => boolean);
value?: string;
title?: string;
command?: string;
shortcut?: string;
args?: any[];
nextTick?: MenuItemCallback<void>;
disabled?: boolean;
selected?: boolean;
key?: string;
action?: MenuItemCallback<void>;
events?: EventCommandType[];
style?: KeyValue;
}
export type MenuItem =
| string
| DropdownMenuItem
| ButtonMenuItem
| CheckboxMenuItem
| CustomMenuItem;
export interface EditorInstance {
registerElement(obj: ElementValue<EditorElement>): void;
registerUI(target: string, obj: ElementValue<EditorElement>): void;
registerComponent(name: string, component: ElementValue<EditorElement>);
registerItem(name: string, item: Item);
registerInspector(name: string, inspectorCallback: Function);
registerRenderer(
rendererType: string,
name: string,
rendererInstance: any
);
registerCommand(commandObject: Function | ICommandObject): void;
registerShortCut(shortcut: ShortcutObject): void;
/**
* 에디터에 맞는 config 를 등록한다.
*
* @param {object} config
*/
registerConfig(config: KeyValue): void;
/**
*
* @param {PluginInterface} createPluginFunction
*/
registerPlugin(createPluginFunction: PluginInterface): void;
registerPluginList(plugins: PluginInterface[]): void;
/**
* locale 에 맞는 i18n 메세지 등록
*
* @param locale
* @param messages
*/
registerI18nMessage(locale: string, messages: KeyValue): void;
/**
* 설정된 전체 locale 에 맞는 메세지 등록
*
* @param messages
*/
registerI18nMessageWithLocale(messages: KeyValue): void;
/**
* itemType 에 대한 아이콘 지정
*
* @param itemType
* @param iconOrFunction
*/
registerIcon(itemType: string, iconOrFunction: string | Function): void;
registerMenu(target: string, menu: MenuItem | MenuItem[]): void;
/**
* HTML Renderer 인스턴스
*/
html: HTMLRenderer;
svg: SVGRenderer;
json: JSONRenderer;
config: ConfigManager;
context: KeyValue;
}
export interface PluginInterface {
(editor: EditorInstance): void;
}
export interface EditorInterface {
createDesignEditor(opt: KeyValue): EditorElement;
createDesignPlayer(opt: KeyValue): EditorElement;
plugins: PluginInterface[];
}
export interface HTMLRenderer {
render(item: Item, renderer: HTMLRenderer): string;
update(item: Item, currentElement: Dom, editor: EditorInstance): any;
}
export interface SVGRenderer {
render(item: Item, renderer: SVGRenderer): string;
update(item: Item, currentElement: Dom, editor: EditorInstance): any;
}
export interface JSONRenderer {
render(item: Item, renderer: JSONRenderer): string;
update(item: Item, currentElement: Dom, editor: EditorInstance): any;
}
export class Render {}
export class HTMLItemRender extends Render {
render(item: Item, renderer: HTMLRenderer): string;
/**
* 초기 렌더링 이후 업데이트만 할 때
*
* @param {Item} item
* @param {Dom} currentElement
* @override
*/
update(item: Item, currentElement: Dom): void;
}
export class DomRender extends HTMLItemRender {
toDefString(item: Item): string;
}
export class HTMLLayerRender extends DomRender {}
const easylogic: EditorInterface;
export type icon = ElementValue<string>;
type ElementFunction = () => any;
type ElementType = typeof UIElement | ElementFunction;
interface EditorPlugin {
(editor: EditorInstance): void;
}
interface EditorOptions {
container: string | HTMLElement;
config?: KeyValue;
plugins?: EditorPlugin[];
}
export function start(uiElement: ElementType, options: KeyValue): UIElement;
export function renderToString(
uiElement: ElementType,
options: KeyValue
): Promise<string>;
export function createDesignEditor(opts: EditorOptions): UIElement;
export function createBlankEditor(opts: EditorOptions): UIElement;
export function createComponent(
ComponentName: string,
props?: KeyValue,
children?: any[]
): string;
export function createComponentList(...args: any[]): string;
export function createElement(
Component: string,
props: KeyValue,
children: any[]
): string;
type FragmentInstanceType = any;
/**
* fragment 용 instance
*/
export const FragmentInstance: FragmentInstanceType;
export function createElementJsx(
Component: ElementType | string | FragmentInstanceType,
props: KeyValue,
...children: any[]
): string;
export default easylogic;
}