grapesjs
Version:
Free and Open Source Web Builder Framework
1,732 lines (1,731 loc) • 360 kB
TypeScript
import Backbone from 'backbone';
export interface NOOP {
}
export type Debounced = Function & {
cancel(): void;
};
export type SetOptions = Backbone.ModelSetOptions & {
avoidStore?: boolean;
};
export type AddOptions = Backbone.AddOptions & {
temporary?: boolean;
};
export type DisableOptions = {
fromMove?: boolean;
};
export type LocaleOptions = {
locale?: boolean;
};
export type RemoveOptions = Backbone.Silenceable;
export type EventHandler = Backbone.EventHandler;
export type ObjectHash = Backbone.ObjectHash;
export type ObjectAny = Record<string, any>;
export type Nullable = undefined | null | false;
export type LiteralUnion<T, U> = T | (U & NOOP);
export type Position = {
x: number;
y: number;
};
export interface Coordinates {
x: number;
y: number;
}
export interface Dimensions {
height: number;
width: number;
}
export interface BoxRect extends Coordinates, Dimensions {
}
export type ElementRect = {
top: number;
left: number;
width: number;
height: number;
};
export type CombinedModelConstructorOptions<E, M extends Model<any, any, E> = Model> = Backbone.ModelConstructorOptions<M> & E;
export interface ViewOptions<TModel extends Model | undefined = Model, TElement extends Element = HTMLElement> extends Backbone.ViewOptions<TModel, TElement> {
}
declare class Model<T extends ObjectHash = any, S = SetOptions, E = any> extends Backbone.Model<T, S, E> {
}
declare class Collection<T extends Model = Model> extends Backbone.Collection<T> {
}
declare class View<T extends Model | undefined = Model, E extends Element = HTMLElement> extends Backbone.View<T, E> {
}
export type PickMatching<T, V> = {
[K in keyof T as T[K] extends V ? K : never]: T[K];
};
export type ExtractMethods<T> = PickMatching<T, Function>;
declare enum CoordinatesTypes {
Screen = "screen",
World = "world"
}
export type PrevToNewIdMap = Record<string, string>;
export interface SelectorProps {
name: string;
label?: string;
type?: number;
active?: boolean;
private?: boolean;
protected?: boolean;
}
/**
* @typedef Selector
* @property {String} name Selector name, eg. `my-class`
* @property {String} label Selector label, eg. `My Class`
* @property {Number} [type=1] Type of the selector. 1 (class) | 2 (id)
* @property {Boolean} [active=true] If not active, it's not selectable by the Style Manager.
* @property {Boolean} [private=false] If true, it can't be seen by the Style Manager, but it will be rendered in the canvas and in export code.
* @property {Boolean} [protected=false] If true, it can't be removed from the attached component.
*/
export declare class Selector extends Model<SelectorProps & {
[key: string]: unknown;
}> {
defaults(): {
name: string;
label: string;
type: number;
active: boolean;
private: boolean;
protected: boolean;
_undo: boolean;
};
static readonly TYPE_CLASS = 1;
static readonly TYPE_ID = 2;
em: EditorModel;
/**
* @hideconstructor
*/
constructor(props: any, opts?: any);
isId(): boolean;
isClass(): boolean;
getFullName(opts?: any): string;
/**
* Get selector as a string.
* @returns {String}
* @example
* // Given such selector: { name: 'my-selector', type: 2 }
* console.log(selector.toString());
* // -> `#my-selector`
*/
toString(): string;
/**
* Get selector name.
* @returns {String}
* @example
* // Given such selector: { name: 'my-selector', label: 'My selector' }
* console.log(selector.getName());
* // -> `my-selector`
*/
getName(): string;
/**
* Get selector label.
* @returns {String}
* @example
* // Given such selector: { name: 'my-selector', label: 'My selector' }
* console.log(selector.getLabel());
* // -> `My selector`
*/
getLabel(): string;
/**
* Update selector label.
* @param {String} label New label
* @example
* // Given such selector: { name: 'my-selector', label: 'My selector' }
* selector.setLabel('New Label')
* console.log(selector.getLabel());
* // -> `New Label`
*/
setLabel(label: string): this;
/**
* Get selector active state.
* @returns {Boolean}
*/
getActive(): boolean;
/**
* Update selector active state.
* @param {Boolean} value New active state
*/
setActive(value: boolean): this;
toJSON(opts?: {}): any;
/**
* Escape string
* @param {string} name
* @return {string}
* @private
*/
static escapeName(name: string): string;
}
export interface FullNameOptions {
combination?: boolean;
array?: boolean;
}
export declare class Selectors extends Collection<Selector> {
modelId(attr: any): string;
getStyleable(): Selector[];
getValid({ noDisabled }?: any): Selector[];
getFullString(collection?: Selector[] | null, opts?: {
sort?: boolean;
}): string;
getFullName<T extends FullNameOptions>(opts?: T): T["array"] extends true ? string[] : string;
}
export type StyleProps = Record<string, string | string[]>;
export type UpdateStyleOptions = ObjectAny & {
partial?: boolean;
addStyle?: StyleProps;
};
declare class StyleableModel<T extends ObjectHash = any> extends Model<T> {
/**
* Forward style string to `parseStyle` to be parse to an object
* @param {string} str
* @returns
*/
parseStyle(str: string): Record<string, string | string[]>;
/**
* To trigger the style change event on models I have to
* pass a new object instance
* @param {Object} prop
* @return {Object}
*/
extendStyle(prop: ObjectAny): ObjectAny;
/**
* Get style object
* @return {Object}
*/
getStyle(prop?: string | ObjectAny): StyleProps;
/**
* Set new style object
* @param {Object|string} prop
* @param {Object} opts
* @return {Object} Applied properties
*/
setStyle(prop?: string | ObjectAny, opts?: UpdateStyleOptions): {
[x: string]: any;
};
/**
* Add style property
* @param {Object|string} prop
* @param {string} value
* @example
* this.addStyle({color: 'red'});
* this.addStyle('color', 'blue');
*/
addStyle(prop: string | ObjectAny, value?: any, opts?: UpdateStyleOptions): void;
/**
* Remove style property
* @param {string} prop
*/
removeStyle(prop: string): void;
/**
* Returns string of style properties
* @param {Object} [opts={}] Options
* @return {String}
*/
styleToString(opts?: ObjectAny): string;
getSelectors(): Selectors;
getSelectorsString(opts?: ObjectAny): any;
}
export interface DomComponentsConfig {
stylePrefix?: string;
/**
* Could be used for default components.
*/
components?: Record<string, any>[];
/**
* If the component is draggable you can drag the component itself (not only from the toolbar).
* @default true
*/
draggableComponents?: boolean;
/**
* Experimental: Disable text inner components.
* With this option, you're able to decide which inner component inside text should be
* disabled (eg. no select, no hover, no layer visibility) once edited.
* @default false
* @example
* // disable all inner childs
* disableTextInnerChilds: true,
* // disable all except link components
* disableTextInnerChilds: (child) => !child.is('link'),
*/
disableTextInnerChilds?: boolean | ((cmp: Component) => boolean | void);
/**
* You can setup a custom component definition processor before adding it into the editor.
* It might be useful to transform custom objects (es. some framework specific JSX) to GrapesJS component one.
* This custom function will be executed on ANY new added component to the editor so make smart checks/conditions
* to avoid doing useless executions
* By default, GrapesJS supports already elements generated from React JSX preset
* @example
* processor: (obj) => {
* if (obj.$$typeof) { // eg. this is a React Element
* const gjsComponent = {
* type: obj.type,
* components: obj.props.children,
* ...
* };
* ...
* return gjsComponent;
* }
* }
*/
processor?: (obj: any) => Record<string, any> | undefined;
/**
* List of HTML void elements.
* https://www.w3.org/TR/2011/WD-html-markup-20110113/syntax.html#void-elements
*/
voidElements?: string[];
/**
* Experimental: Use the frame document for DOM element creation.
* This option might be useful when elements require the local document context to
* work properly (eg. Web Components).
*/
useFrameDoc?: boolean;
}
declare class ComponentWrapper extends Component {
get defaults(): {
tagName: string;
removable: boolean;
copyable: boolean;
draggable: boolean;
components: never[];
traits: never[];
stylable: string[];
};
__postAdd(): void;
__postRemove(): void;
static isComponent(): boolean;
}
declare class ModuleModel<TModule extends IBaseModule<any> = Module, T extends ObjectHash = any, S = SetOptions, E = any> extends Model<T, S, E> {
private _module;
constructor(module: TModule, attributes?: T, options?: CombinedModelConstructorOptions<E>);
get module(): TModule;
get config(): TModule extends IBaseModule<infer C> ? C : unknown;
get em(): EditorModel;
}
export type ModuleExt<TModel extends ModuleModel> = TModel extends ModuleModel<infer M> ? M : unknown;
export type ModelConstructor<TModel extends ModuleModel> = {
new (mod: ModuleExt<TModel>, attr: any): TModel;
};
declare class ModuleCollection<TModel extends ModuleModel = ModuleModel> extends Collection<TModel> {
module: ModuleExt<TModel>;
private newModel;
add(model: Array<Record<string, any>> | TModel, options?: AddOptions): TModel;
add(models: Array<Array<Record<string, any>> | TModel>, options?: AddOptions): TModel[];
constructor(module: ModuleExt<TModel>, models: TModel[] | Array<Record<string, any>>, modelConstructor: ModelConstructor<TModel>);
preinitialize(models?: TModel[] | Array<Record<string, any>>, options?: any): void;
}
export type ModuleFromModel<TModel extends ModuleModel> = TModel extends ModuleModel<infer M> ? M : unknown;
export type ModuleModelExt<TItem extends ModuleModel | ModuleCollection> = TItem extends ModuleCollection<infer M> ? ModuleFromModel<M> : TItem extends ModuleModel<infer M> ? M : unknown;
declare class ModuleView<TModel extends ModuleModel | ModuleCollection = ModuleModel, TElement extends Element = HTMLElement> extends View<TModel extends ModuleModel ? TModel : undefined, TElement> {
protected get pfx(): string;
protected get ppfx(): string;
collection: TModel extends ModuleModel ? ModuleCollection<ModuleModel> : TModel;
protected get module(): ModuleModelExt<TModel>;
protected get em(): EditorModel;
protected get config(): ModuleModelExt<TModel> extends IBaseModule<infer C> ? C : unknown;
className: string;
preinitialize(options?: any): void;
}
export type DragStop = (cancel?: boolean) => void;
export type DragContent = (content: any) => void;
declare class Droppable {
em: EditorModel;
canvas: CanvasModule;
el: HTMLElement;
counter: number;
sortOpts?: Record<string, any> | null;
over?: boolean;
dragStop?: DragStop;
dragContent?: DragContent;
sorter?: any;
constructor(em: EditorModel, rootEl?: HTMLElement);
toggleEffects(el: HTMLElement, enable: boolean): void;
__customTglEff(enable: boolean): void;
startCustom(): void;
endCustom(cancel?: boolean): void;
/**
* This function is expected to be always executed at the end of d&d.
*/
endDrop(cancel?: boolean, ev?: Event): void;
handleDragLeave(ev: Event): void;
updateCounter(value: number, ev: Event): void;
handleDragEnter(ev: DragEvent | Event): void;
handleDragEnd(model: any, dt: any): void;
/**
* Always need to have this handler active for enabling the drop
* @param {Event} ev
*/
handleDragOver(ev: Event): void;
/**
* WARNING: This function might fail to run on drop, for example, when the
* drop, accidentally, happens on some external element (DOM not inside the iframe)
*/
handleDrop(ev: Event | DragEvent): void;
getContentByData(dt: any): {
content: any;
};
}
export interface PageManagerConfig extends ModuleConfig {
pages?: any[];
}
export interface SelectableOption {
/**
* Select the page.
*/
select?: boolean;
}
export interface AbortOption {
abort?: boolean;
}
declare enum PagesEvents {
/**
* @event `page:add` Added new page. The page is passed as an argument to the callback.
* @example
* editor.on('page:add', (page) => { ... });
*/
add = "page:add",
addBefore = "page:add:before",
/**
* @event `page:remove` Page removed. The page is passed as an argument to the callback.
* @example
* editor.on('page:remove', (page) => { ... });
*/
remove = "page:remove",
removeBefore = "page:remove:before",
/**
* @event `page:select` New page selected. The newly selected page and the previous one, are passed as arguments to the callback.
* @example
* editor.on('page:select', (page, previousPage) => { ... });
*/
select = "page:select",
selectBefore = "page:select:before",
/**
* @event `page:update` Page updated. The updated page and the object containing changes are passed as arguments to the callback.
* @example
* editor.on('page:update', (page, changes) => { ... });
*/
update = "page:update",
/**
* @event `page` Catch-all event for all the events mentioned above. An object containing all the available data about the triggered event is passed as an argument to the callback.
* @example
* editor.on('page', ({ event, model, ... }) => { ... });
*/
all = "page"
}
export declare class Frames extends ModuleCollection<Frame> {
loadedItems: number;
itemsToLoad: number;
page?: Page;
constructor(module: CanvasModule, models?: Frame[] | Array<Record<string, any>>);
onAdd(frame: Frame): void;
onReset(m: Frame, opts?: {
previousModels?: Frame[];
}): void;
onRemove(frame: Frame): void;
initRefs(): void;
itemLoaded(): void;
listenToLoad(): void;
listenToLoadItems(on: boolean): void;
}
/** @private */
export interface CssRuleProperties {
/**
* Array of selectors
*/
selectors: Selector[];
/**
* Object containing style definitions
* @default {}
*/
style?: Record<string, any>;
/**
* Additional string css selectors
* @default ''
*/
selectorsAdd?: string;
/**
* Type of at-rule, eg. `media`, 'font-face'
* @default ''
*/
atRuleType?: string;
/**
* At-rule value, eg. `(max-width: 1000px)`
* @default ''
*/
mediaText?: string;
/**
* This property is used only on at-rules, like 'page' or 'font-face', where the block containes only style declarations.
* @default false
*/
singleAtRule?: boolean;
/**
* State of the rule, eg: `hover`, `focused`
* @default ''
*/
state?: string;
/**
* If true, sets `!important` on all properties. You can also pass an array to specify properties on which to use important.
* @default false
*/
important?: boolean | string[];
/**
* Indicates if the rule is stylable from the editor.
* @default true
*/
stylable?: boolean | string[];
/**
* Group for rules.
* @default ''
*/
group?: string;
/**
* If true, the rule won't be stored in JSON or showed in CSS export.
* @default false
*/
shallow?: boolean;
}
export interface CssRuleJSON extends Omit<CssRuleProperties, "selectors"> {
selectors: (string | SelectorProps)[];
}
/**
* @typedef CssRule
* @property {Array<Selector>} selectors Array of selectors
* @property {Object} style Object containing style definitions
* @property {String} [selectorsAdd=''] Additional string css selectors
* @property {String} [atRuleType=''] Type of at-rule, eg. `media`, 'font-face'
* @property {String} [mediaText=''] At-rule value, eg. `(max-width: 1000px)`
* @property {Boolean} [singleAtRule=false] This property is used only on at-rules, like 'page' or 'font-face', where the block containes only style declarations
* @property {String} [state=''] State of the rule, eg: `hover`, `focused`
* @property {Boolean|Array<String>} [important=false] If true, sets `!important` on all properties. You can also pass an array to specify properties on which use important
* @property {Boolean} [stylable=true] Indicates if the rule is stylable from the editor
*
* [Device]: device.html
* [State]: state.html
* [Component]: component.html
*/
export declare class CssRule extends StyleableModel<CssRuleProperties> {
config: CssRuleProperties;
em?: EditorModel;
opt: any;
defaults(): {
selectors: never[];
selectorsAdd: string;
style: {};
mediaText: string;
state: string;
stylable: boolean;
atRuleType: string;
singleAtRule: boolean;
important: boolean;
group: string;
shallow: boolean;
_undo: boolean;
};
constructor(props: CssRuleProperties, opt?: any);
__onChange(m: CssRule, opts: any): void;
clone(): CssRule;
ensureSelectors(m: any, c: any, opts: any): void;
/**
* Returns the at-rule statement when exists, eg. `@media (...)`, `@keyframes`
* @returns {String}
* @example
* const cssRule = editor.Css.setRule('.class1', { color: 'red' }, {
* atRuleType: 'media',
* atRuleParams: '(min-width: 500px)'
* });
* cssRule.getAtRule(); // "@media (min-width: 500px)"
*/
getAtRule(): string;
/**
* Return selectors of the rule as a string
* @param {Object} [opts] Options
* @param {Boolean} [opts.skipState] Skip state from the result
* @returns {String}
* @example
* const cssRule = editor.Css.setRule('.class1:hover', { color: 'red' });
* cssRule.selectorsToString(); // ".class1:hover"
* cssRule.selectorsToString({ skipState: true }); // ".class1"
*/
selectorsToString(opts?: ObjectAny): string;
/**
* Get declaration block (without the at-rule statement)
* @param {Object} [opts={}] Options (same as in `selectorsToString`)
* @returns {String}
* @example
* const cssRule = editor.Css.setRule('.class1', { color: 'red' }, {
* atRuleType: 'media',
* atRuleParams: '(min-width: 500px)'
* });
* cssRule.getDeclaration() // ".class1{color:red;}"
*/
getDeclaration(opts?: ObjectAny): string;
/**
* Get the Device the rule is related to.
* @returns {[Device]|null}
* @example
* const device = rule.getDevice();
* console.log(device?.getName());
*/
getDevice(): any;
/**
* Get the State the rule is related to.
* @returns {[State]|null}
* @example
* const state = rule.getState();
* console.log(state?.getLabel());
*/
getState(): any;
/**
* Returns the related Component (valid only for component-specific rules).
* @returns {[Component]|null}
* @example
* const cmp = rule.getComponent();
* console.log(cmp?.toHTML());
*/
getComponent(): any;
/**
* Return the CSS string of the rule
* @param {Object} [opts={}] Options (same as in `getDeclaration`)
* @return {String} CSS string
* @example
* const cssRule = editor.Css.setRule('.class1', { color: 'red' }, {
* atRuleType: 'media',
* atRuleParams: '(min-width: 500px)'
* });
* cssRule.toCSS() // "@media (min-width: 500px){.class1{color:red;}}"
*/
toCSS(opts?: ObjectAny): string;
toJSON(...args: any): any;
/**
* Compare the actual model with parameters
* @param {Object} selectors Collection of selectors
* @param {String} state Css rule state
* @param {String} width For which device this style is oriented
* @param {Object} ruleProps Other rule props
* @returns {Boolean}
* @private
*/
compare(selectors: any, state?: string, width?: string, ruleProps?: Partial<CssRuleProperties>): boolean;
}
/** @private */
export interface PageProperties {
/**
* Panel id.
*/
id?: string;
/**
* Page name.
*/
name?: string;
/**
* HTML to load as page content.
*/
component?: string | ComponentDefinition | ComponentDefinition[];
/**
* CSS to load with the page.
*/
styles?: string | CssRuleJSON[];
[key: string]: unknown;
}
export interface PagePropertiesDefined extends Pick<PageProperties, "id" | "name"> {
frames: Frames;
[key: string]: unknown;
}
export declare class Page extends Model<PagePropertiesDefined> {
defaults(): {
name: string;
frames: Frames;
_undo: boolean;
};
em: EditorModel;
constructor(props: any, opts?: {
em?: EditorModel;
config?: PageManagerConfig;
});
onRemove(): void;
getFrames(): Frames;
/**
* Get page id
* @returns {String}
*/
getId(): string;
/**
* Get page name
* @returns {String}
*/
getName(): string;
/**
* Update page name
* @param {String} name New page name
* @example
* page.setName('New name');
*/
setName(name: string): this;
/**
* Get all frames
* @returns {Array<Frame>}
* @example
* const arrayOfFrames = page.getAllFrames();
*/
getAllFrames(): Frame[];
/**
* Get the first frame of the page (identified always as the main one)
* @returns {Frame}
* @example
* const mainFrame = page.getMainFrame();
*/
getMainFrame(): Frame;
/**
* Get the root component (usually is the `wrapper` component) from the main frame
* @returns {Component}
* @example
* const rootComponent = page.getMainComponent();
* console.log(rootComponent.toHTML());
*/
getMainComponent(): ComponentWrapper;
toJSON(opts?: {}): any;
}
export declare class Canvas extends ModuleModel<CanvasModule> {
defaults(): {
frame: string;
frames: never[];
rulers: boolean;
zoom: number;
x: number;
y: number;
scripts: never[];
styles: never[];
pointer: Coordinates;
pointerScreen: Coordinates;
};
constructor(module: CanvasModule);
get frames(): Frames;
init(): void;
_pageUpdated(page: Page, prev?: Page): void;
updateDevice(opts?: any): void;
onZoomChange(): void;
onCoordsChange(): void;
onPointerChange(): void;
getPointerCoords(type?: CoordinatesTypes): Coordinates;
}
export type DraggerPosition = Position & {
end?: boolean;
};
export type Guide = {
x: number;
y: number;
lock?: number;
active?: boolean;
};
export interface DraggerOptions {
/**
* Element on which the drag will be executed. By default, the document will be used
*/
container?: HTMLElement;
/**
* Callback on drag start.
* @example
* onStart(ev, dragger) {
* console.log('pointer start', dragger.startPointer, 'position start', dragger.startPosition);
* }
*/
onStart?: (ev: Event, dragger: Dragger) => void;
/**
* Callback on drag.
* @example
* onDrag(ev, dragger) {
* console.log('pointer', dragger.currentPointer, 'position', dragger.position, 'delta', dragger.delta);
* }
*/
onDrag?: (ev: Event, dragger: Dragger) => void;
/**
* Callback on drag end.
* @example
* onEnd(ev, dragger) {
* console.log('pointer', dragger.currentPointer, 'position', dragger.position, 'delta', dragger.delta);
* }
*/
onEnd?: (ev: Event, dragger: Dragger, opts: {
cancelled: boolean;
}) => void;
/**
* Indicate a callback where to pass an object with new coordinates
*/
setPosition?: (position: DraggerPosition) => void;
/**
* Indicate a callback where to get initial coordinates.
* @example
* getPosition: () => {
* // ...
* return { x: 10, y: 100 }
* }
*/
getPosition?: () => DraggerPosition;
/**
* Indicate a callback where to get pointer coordinates.
*/
getPointerPosition?: (ev: Event) => DraggerPosition;
/**
* Static guides to be snapped.
*/
guidesStatic?: () => Guide[];
/**
* Target guides that will snap to static one.
*/
guidesTarget?: () => Guide[];
/**
* Offset before snap to guides.
* @default 5
*/
snapOffset?: number;
/**
* Document on which listen to pointer events.
*/
doc?: Document;
/**
* Scale result points, can also be a function.
* @default 1
*/
scale?: number | (() => number);
}
declare class Dragger {
opts: DraggerOptions;
startPointer: DraggerPosition;
delta: DraggerPosition;
lastScroll: DraggerPosition;
lastScrollDiff: DraggerPosition;
startPosition: DraggerPosition;
globScrollDiff: DraggerPosition;
currentPointer: DraggerPosition;
position: DraggerPosition;
el?: HTMLElement;
guidesStatic: Guide[];
guidesTarget: Guide[];
lockedAxis?: any;
docs: Document[];
trgX?: Guide;
trgY?: Guide;
/**
* Init the dragger
* @param {Object} opts
*/
constructor(opts?: DraggerOptions);
/**
* Update options
* @param {Object} options
*/
setOptions(opts?: Partial<DraggerOptions>): void;
toggleDrag(enable?: boolean): void;
handleScroll(): void;
/**
* Start dragging
* @param {Event} e
*/
start(ev: Event): void;
/**
* Drag event
* @param {Event} event
*/
drag(ev: Event): void;
/**
* Check if the delta hits some guide
*/
snapGuides(delta: DraggerPosition): {
newDelta: DraggerPosition;
trgX: Guide | undefined;
trgY: Guide | undefined;
};
isPointIn(src: number, trg: number, { offset }?: {
offset?: number;
}): boolean;
setGuideLock(guide: Guide, value: any): Guide;
/**
* Stop dragging
*/
stop(ev: Event, opts?: {
cancel?: boolean;
}): void;
keyHandle(ev: Event): void;
/**
* Move the element
* @param {integer} x
* @param {integer} y
*/
move(x: number, y: number, end?: boolean): void;
getContainerEl(): HTMLElement[] | Document[];
getWindowEl(): any[];
/**
* Returns documents
*/
getDocumentEl(el?: HTMLElement): Document[];
/**
* Get mouse coordinates
* @param {Event} event
* @return {Object}
*/
getPointerPos(ev: Event): DraggerPosition;
getStartPosition(): {
x: number;
y: number;
};
getScrollInfo(): {
y: number;
x: number;
};
detectAxisLock(x: number, y: number): "x" | "y" | undefined;
}
export interface ToScreenOption {
toScreen?: boolean;
}
export interface ToWorldOption {
toWorld?: boolean;
}
export interface GetBoxRectOptions extends ToScreenOption {
local?: boolean;
}
export interface CanvasRefreshOptions {
/**
* Refresh canvas spots.
*/
spots?: boolean;
all?: boolean;
}
declare enum CanvasEvents {
/**
* @event `canvas:dragenter` Something is dragged inside the canvas, `DataTransfer` instance passed as an argument.
*/
dragEnter = "canvas:dragenter",
/**
* @event `canvas:dragover` Something is dragging on the canvas, `DataTransfer` instance passed as an argument.
*/
dragOver = "canvas:dragover",
/**
* @event `canvas:dragend` When a drag operation is ended, `DataTransfer` instance passed as an argument.
*/
dragEnd = "canvas:dragend",
/**
* @event `canvas:dragdata` On any dataTransfer parse, `DataTransfer` instance and the `result` are passed as arguments.
* By changing `result.content` you're able to customize what is dropped.
*/
dragData = "canvas:dragdata",
/**
* @event `canvas:drop` Something is dropped in canvas, `DataTransfer` instance and the dropped model are passed as arguments.
*/
drop = "canvas:drop",
/**
* @event `canvas:spot` Spots updated.
* @example
* editor.on('canvas:spot', () => {
* console.log('Spots', editor.Canvas.getSpots());
* });
*/
spot = "canvas:spot",
/**
* @event `canvas:spot:add` New canvas spot added.
* @example
* editor.on('canvas:spot:add', ({ spot }) => {
* console.log('Spot added', spot);
* });
*/
spotAdd = "canvas:spot:add",
/**
* @event `canvas:spot:update` Canvas spot updated.
* @example
* editor.on('canvas:spot:update', ({ spot }) => {
* console.log('Spot updated', spot);
* });
*/
spotUpdate = "canvas:spot:update",
/**
* @event `canvas:spot:remove` Canvas spot removed.
* @example
* editor.on('canvas:spot:remove', ({ spot }) => {
* console.log('Spot removed', spot);
* });
*/
spotRemove = "canvas:spot:remove",
/**
* @event `canvas:coords` Canvas coordinates updated.
* @example
* editor.on('canvas:coords', () => {
* console.log('Canvas coordinates updated:', editor.Canvas.getCoords());
* });
*/
coords = "canvas:coords",
/**
* @event `canvas:zoom` Canvas zoom updated.
* @example
* editor.on('canvas:zoom', () => {
* console.log('Canvas zoom updated:', editor.Canvas.getZoom());
* });
*/
zoom = "canvas:zoom",
/**
* @event `canvas:pointer` Canvas pointer updated.
* @example
* editor.on('canvas:pointer', () => {
* console.log('Canvas pointer updated:', editor.Canvas.getPointer());
* });
*/
pointer = "canvas:pointer",
/**
* @event `canvas:refresh` Canvas was refreshed to update elements on top,
* like spots/tools (eg. via `editor.Canvas.refresh()` or on frame resize).
* @example
* editor.on('canvas:refresh', (canvasRefreshOptions) => {
* console.log('Canvas refreshed with options:', canvasRefreshOptions);
* });
*/
refresh = "canvas:refresh",
/**
* @event `canvas:frame:load` Frame loaded in canvas.
* The event is triggered right after iframe's `onload`.
* @example
* editor.on('canvas:frame:load', ({ window }) => {
* console.log('Frame loaded', window);
* });
*/
frameLoad = "canvas:frame:load",
/**
* @event `canvas:frame:load:head` Frame head loaded in canvas.
* The event is triggered right after iframe's finished to load the head elemenets (eg. scripts)
* @example
* editor.on('canvas:frame:load:head', ({ window }) => {
* console.log('Frame head loaded', window);
* });
*/
frameLoadHead = "canvas:frame:load:head",
/**
* @event `canvas:frame:load:body` Frame body loaded in canvas.
* The event is triggered when the body is rendered with components.
* @example
* editor.on('canvas:frame:load:body', ({ window }) => {
* console.log('Frame completed the body render', window);
* });
*/
frameLoadBody = "canvas:frame:load:body"
}
declare abstract class ModuleDomainViews<TCollection extends ModuleCollection, TItemView extends ModuleView> extends ModuleView<TCollection> {
itemsView: string;
protected itemType: string;
reuseView: boolean;
viewCollection: TItemView[];
constructor(opts?: any, autoAdd?: boolean);
/**
* Add new model to the collection
* @param {ModuleModel} model
* @private
* */
private addTo;
private itemViewNotFound;
protected abstract renderView(model: ModuleModel, itemType: string): TItemView;
/**
* Render new model inside the view
* @param {ModuleModel} model
* @param {Object} fragment Fragment collection
* @private
* */
private add;
render(): this;
onRender(): void;
onRemoveBefore(items: TItemView[], opts: any): void;
onRemove(items: TItemView[], opts: any): void;
remove(opts?: any): this;
clearItems(): void;
}
declare class FramesView extends ModuleDomainViews<Frames, FrameWrapView> {
canvasView: CanvasView;
private _module;
constructor(opts: {} | undefined, config: any);
onRemoveBefore(items: FrameWrapView[], opts?: {}): void;
onRender(): void;
clearItems(): void;
protected renderView(item: any, type: string): FrameWrapView;
}
export interface MarginPaddingOffsets {
marginTop?: number;
marginRight?: number;
marginBottom?: number;
marginLeft?: number;
paddingTop?: number;
paddingRight?: number;
paddingBottom?: number;
paddingLeft?: number;
borderTopWidth?: number;
borderRightWidth?: number;
borderBottomWidth?: number;
borderLeftWidth?: number;
}
export type ElementPosOpts = {
avoidFrameOffset?: boolean;
avoidFrameZoom?: boolean;
noScroll?: boolean;
};
export interface FitViewportOptions {
frame?: Frame;
gap?: number | {
x: number;
y: number;
};
ignoreHeight?: boolean;
el?: HTMLElement;
}
declare class CanvasView extends ModuleView<Canvas> {
template(): string;
hlEl?: HTMLElement;
badgeEl?: HTMLElement;
placerEl?: HTMLElement;
ghostEl?: HTMLElement;
toolbarEl?: HTMLElement;
resizerEl?: HTMLElement;
offsetEl?: HTMLElement;
fixedOffsetEl?: HTMLElement;
toolsGlobEl?: HTMLElement;
toolsEl?: HTMLElement;
framesArea?: HTMLElement;
toolsWrapper?: HTMLElement;
spotsEl?: HTMLElement;
cvStyle?: HTMLElement;
clsUnscale: string;
ready: boolean;
frames: FramesView;
frame?: FrameView;
private timerZoom?;
private frmOff?;
private cvsOff?;
constructor(model: Canvas);
_onFramesUpdate(): void;
_initFrames(): void;
checkSelected(component: Component, opts?: {
scroll?: ScrollIntoViewOptions;
}): void;
remove(...args: any): this;
preventDefault(ev: Event): void;
toggleListeners(enable: boolean): void;
screenToWorld(x: number, y: number): Coordinates;
onPointer(ev: WheelEvent): void;
onKeyPress(ev: KeyboardEvent): void;
onWheel(ev: WheelEvent): void;
updateFrames(ev: Event): void;
updateFramesArea(): void;
fitViewport(opts?: FitViewportOptions): void;
/**
* Checks if the element is visible in the canvas's viewport
* @param {HTMLElement} el
* @return {Boolean}
*/
isElInViewport(el: HTMLElement): boolean;
/**
* Get the offset of the element
* @param {HTMLElement} el
* @return { {top: number, left: number, width: number, height: number} }
*/
offset(el?: HTMLElement, opts?: ElementPosOpts): {
top: number;
left: number;
width: number;
height: number;
};
getRectToScreen(boxRect: Partial<BoxRect>): BoxRect;
getElBoxRect(el: HTMLElement, opts?: GetBoxRectOptions): BoxRect;
getViewportRect(opts?: ToWorldOption): BoxRect;
getViewportDelta(opts?: {
withZoom?: number;
}): Coordinates;
/**
* Cleare cached offsets
* @private
*/
clearOff(): void;
/**
* Return frame offset
* @return { {top: number, left: number, width: number, height: number} }
* @public
*/
getFrameOffset(el?: HTMLElement): {
top: number;
left: number;
width: number;
height: number;
};
/**
* Return canvas offset
* @return { {top: number, left: number, width: number, height: number} }
* @public
*/
getCanvasOffset(): {
top: number;
left: number;
width: number;
height: number;
};
/**
* Returns element's rect info
* @param {HTMLElement} el
* @param {object} opts
* @return { {top: number, left: number, width: number, height: number, zoom: number, rect: any} }
* @public
*/
getElementPos(el: HTMLElement, opts?: ElementPosOpts): {
top: number;
left: number;
height: number;
width: number;
zoom: number;
rect: {
top: number;
left: number;
width: number;
height: number;
};
};
/**
* Returns element's offsets like margins and paddings
* @param {HTMLElement} el
* @return { MarginPaddingOffsets }
* @public
*/
getElementOffsets(el: HTMLElement): MarginPaddingOffsets;
/**
* Returns position data of the canvas element
* @return { {top: number, left: number, width: number, height: number} } obj Position object
* @public
*/
getPosition(opts?: any): ElementRect;
/**
* Update javascript of a specific component passed by its View
* @param {ModuleView} view Component's View
* @private
*/
updateScript(view: any): void;
/**
* Get javascript container
* @private
*/
getJsContainer(view?: ComponentView): HTMLElement | undefined;
getFrameView(view?: ComponentView): FrameView | undefined;
_renderFrames(): void;
renderFrames(): void;
render(): this;
}
declare class FrameWrapView extends ModuleView<Frame> {
events(): {
"click [data-action-remove]": string;
"mousedown [data-action-move]": string;
};
elTools?: HTMLElement;
frame: FrameView;
dragger?: Dragger;
cv: CanvasView;
classAnim: string;
sizeObserver?: ResizeObserver;
constructor(model: Frame, canvasView: CanvasView);
setupDragger(): void;
startDrag(ev?: Event): void;
__clear(opts?: any): void;
remove(opts?: any): this;
updateOffset(): void;
updatePos(md?: boolean): void;
updateSize(): void;
/**
* Update dimensions of the frame
* @private
*/
updateDim(): void;
onScroll(): void;
frameLoaded(): void;
__handleSize(): {
noChanges: boolean;
width: any;
height: any;
newW: any;
newH: any;
};
render(): this;
}
declare class FrameView extends ModuleView<Frame, HTMLIFrameElement> {
/** @ts-ignore */
get tagName(): string;
/** @ts-ignore */
get attributes(): {
allowfullscreen: string;
};
dragging: boolean;
loaded: boolean;
droppable?: Droppable;
rect?: DOMRect;
lastClientY?: number;
lastMaxHeight: number;
private jsContainer?;
private tools;
private wrapper?;
private frameWrapView?;
constructor(model: Frame, view?: FrameWrapView);
getBoxRect(): BoxRect;
/**
* Update `<head>` content of the frame
*/
updateHead(): void;
getEl(): HTMLIFrameElement;
getCanvasModel(): Canvas;
getWindow(): Window;
getDoc(): Document;
getHead(): HTMLHeadElement;
getBody(): HTMLBodyElement;
getWrapper(): HTMLElement;
getJsContainer(): HTMLElement;
getToolsEl(): HTMLElement;
getGlobalToolsEl(): HTMLElement;
getHighlighter(): HTMLElement;
getBadgeEl(): HTMLElement;
getOffsetViewerEl(): HTMLElement;
getRect(): DOMRect;
/**
* Get rect data, not affected by the canvas zoom
*/
getOffsetRect(): {
top: number;
left: number;
height: number;
width: number;
scrollTop: number;
scrollLeft: number;
scrollBottom: number;
scrollRight: number;
};
_getTool(name: string): HTMLElement;
remove(...args: any): this;
startAutoscroll(): void;
autoscroll(): void;
updateClientY(ev: Event): void;
showGlobalTools(): void;
stopAutoscroll(): void;
_toggleAutoscrollFx(enable: boolean): void;
render(): this;
renderScripts(): void;
renderStyles(opts?: any): void;
renderBody(): void;
_toggleEffects(enable: boolean): void;
_emitUpdate(): void;
}
export interface CssComposerConfig {
/**
* Style prefix.
* @default 'css-'
*/
stylePrefix?: string;
/**
* Default CSS style rules
*/
rules?: Array<string>;
}
export declare class CssRules extends Collection<CssRule> {
editor: EditorModel;
constructor(props: any, opt: any);
toJSON(opts?: any): any;
onAdd(model: CssRule, c: CssRules, o: any): void;
onRemove(removed: CssRule): void;
/** @ts-ignore */
add(models: any, opt?: any): any[];
}
declare class CssRulesView extends View {
atRules: Record<string, any>;
config: Record<string, any>;
em: EditorModel;
pfx: string;
renderStarted?: boolean;
constructor(o: any);
/**
* Add to collection
* @param {Object} model
* @private
* */
addTo(model: CssRule): void;
/**
* Add new object to collection
* @param {Object} model
* @param {Object} fragmentEl
* @return {Object}
* @private
* */
addToCollection(model: CssRule, fragmentEl?: DocumentFragment): HTMLElement | undefined;
getMediaWidth(mediaText: string): string;
sortRules(a: number, b: number): number;
render(): this;
}
/** @private */
export interface RuleOptions {
/**
* At-rule type, eg. `media`
*/
atRuleType?: string;
/**
* At-rule parameters, eg. `(min-width: 500px)`
*/
atRuleParams?: string;
}
/** @private */
export interface SetRuleOptions extends RuleOptions {
/**
* If the rule exists already, merge passed styles instead of replacing them.
*/
addStyles?: boolean;
}
/** @private */
export interface GetSetRuleOptions {
state?: string;
mediaText?: string;
addOpts?: ObjectAny;
current?: boolean;
}
export type CssRuleStyle = Required<CssRuleProperties>["style"];
declare class CssComposer extends ItemManagerModule<CssComposerConfig & {
pStylePrefix?: string;
}> {
rules: CssRules;
rulesView?: CssRulesView;
Selectors: typeof Selectors;
storageKey: string;
/**
* Initializes module. Automatically called with a new instance of the editor
* @param {Object} config Configurations
* @private
*/
constructor(em: EditorModel);
/**
* On load callback
* @private
*/
onLoad(): void;
/**
* Do stuff after load
* @param {Editor} em
* @private
*/
postLoad(): void;
store(): any;
load(data: any): any;
/**
* Add new rule to the collection, if not yet exists with the same selectors
* @param {Array<Selector>} selectors Array of selectors
* @param {String} state Css rule state
* @param {String} width For which device this style is oriented
* @param {Object} props Other props for the rule
* @param {Object} opts Options for the add of new rule
* @return {Model}
* @private
* @example
* var sm = editor.SelectorManager;
* var sel1 = sm.add('myClass1');
* var sel2 = sm.add('myClass2');
* var rule = cssComposer.add([sel1, sel2], 'hover');
* rule.set('style', {
* width: '100px',
* color: '#fff',
* });
* */
add(selectors: any, state?: string, width?: string, opts?: {}, addOpts?: {}): CssRule;
/**
* Get the rule
* @param {String|Array<Selector>} selectors Array of selectors or selector string, eg `.myClass1.myClass2`
* @param {String} state Css rule state, eg. 'hover'
* @param {String} width Media rule value, eg. '(max-width: 992px)'
* @param {Object} ruleProps Other rule props
* @return {Model|null}
* @private
* @example
* const sm = editor.SelectorManager;
* const sel1 = sm.add('myClass1');
* const sel2 = sm.add('myClass2');
* const rule = cssComposer.get([sel1, sel2], 'hover', '(max-width: 992px)');
* // Update the style
* rule.set('style', {
* width: '300px',
* color: '#000',
* });
* */
get(selectors: any, state?: string, width?: string, ruleProps?: Omit<CssRuleProperties, "selectors">): CssRule | undefined;
getAll(): CssRules;
/**
* Add a raw collection of rule objects
* This method overrides styles, in case, of already defined rule
* @param {String|Array<Object>} data CSS string or an array of rule objects, eg. [{selectors: ['class1'], style: {....}}, ..]
* @param {Object} opts Options
* @param {Object} props Additional properties to add on rules
* @return {Array<Model>}
* @private
*/
addCollection(data: string | CssRuleJSON[], opts?: Record<string, any>, props?: {}): CssRule[];
/**
* Add CssRules via CSS string.
* @param {String} css CSS string of rules to add.
* @returns {Array<[CssRule]>} Array of rules
* @example
* const addedRules = css.addRules('.my-cls{ color: red } @media (max-width: 992px) { .my-cls{ color: darkred } }');
* // Check rules
* console.log(addedRules.map(rule => rule.toCSS()));
*/
addRules(css: string): CssRule[];
/**
* Add/update the CssRule.
* @param {String} selectors Selector string, eg. `.myclass`
* @param {Object} style Style properties and values. If the rule exists, styles will be replaced unless `addStyles` option is used.
* @param {Object} [opts={}] Additional properties.
* @param {String} [opts.atRuleType=''] At-rule type, eg. `media`.
* @param {String} [opts.atRuleParams=''] At-rule parameters, eg. `(min-width: 500px)`.
* @param {Boolean} [opts.addStyles=false] If the rule exists already, merge passed styles instead of replacing them.
* @returns {[CssRule]} The new/updated CssRule.
* @example
* // Simple class-based rule
* const rule = css.setRule('.class1.class2', { color: 'red' });
* console.log(rule.toCSS()) // output: .class1.class2 { color: red }
* // With state and other mixed selector
* const rule = css.setRule('.class1.class2:hover, div#myid', { color: 'red' });
* // output: .class1.class2:hover, div#myid { color: red }
* // With media
* const rule = css.setRule('.class1:hover', { color: 'red' }, {
* atRuleType: 'media',
* atRuleParams: '(min-width: 500px)',
* });
* // output: `@media (min-width: 500px) { .class1:hover { color: red } }`
*
* // Update styles of existent rule
* css.setRule('.class1', { color: 'red', background: 'red' });
* css.setRule('.class1', { color: 'blue' }, { addStyles: true });
* // output: .class1 { color: blue; background: red }
*/
setRule(selectors: any, style?: CssRuleProperties["style"], opts?: SetRuleOptions): CssRule;
/**
* Get the CssRule.
* @param {String} selectors Selector string, eg. `.myclass:hover`
* @param {Object} [opts={}] Additional properties
* @param {String} [opts.atRuleType=''] At-rule type, eg. `media`
* @param {String} [opts.atRuleParams=''] At-rule parameters, eg. '(min-width: 500px)'
* @returns {[CssRule]}
* @example
* const rule = css.getRule('.myclass1:hover');
* const rule2 = css.getRule('.myclass1:hover, div#myid');
* const rule3 = css.getRule('.myclass1', {
* atRuleType: 'media',
* atRuleParams: '(min-width: 500px)',
* });
*/
getRule(selectors: any, opts?: RuleOptions): CssRule | undefined;
/**
* Get all rules or filtered by a matching selector.
* @param {String} [selector=''] Selector, eg. `.myclass`
* @returns {Array<[CssRule]>}
* @example
* // Take all the component specific rules
* const id = someComponent.getId();
* const rules = css.getRules(`#${id}`);
* console.log(rules.map(rule => rule.toCSS()))
* // All rules in the project
* console.log(css.getRules())
*/
getRules(selector?: string): CssRule[];
/**
* Add/update the CSS rule with id selector
* @param {string} name Id selector name, eg. 'my-id'
* @param {Object} style Style properties and values
* @param {Object} [opts={}] Custom options, like `state` and `mediaText`
* @return {CssRule} The new/updated rule
* @private
* @example
* const rule = css.setIdRule('myid', { color: 'red' });
* const ruleHover = css.setIdRule('myid', { color: 'blue' }, { state: 'hover' });
* // This will add current CSS:
* // #myid { color: red }
* // #myid:hover { color: blue }
*/
setIdRule(name: string, style?: CssRuleStyle, opts?: GetSetRuleOptions): CssRule;
/**
* Get the CSS rule by id selector
* @param {string} name Id selector name, eg. 'my-id'
* @param {Object} [opts={}] Custom options, like `state` and `mediaText`
* @return {CssRule}
* @private
* @example
* const rule = css.getIdRule('myid');
* const ruleHover = css.setIdRule('myid', { state: 'hover' });
*/
getIdRule(name: string, opts?: GetSetRuleOptions): CssRule | undefined;
/**
* Add/update the CSS rule with class selector
* @param {string} name Class selector name, eg. 'my-class'
* @param {Object} style Style properties and values
* @param {Object} [opts={}] Custom options, like `state` and `mediaText`
* @return {CssRule} The new/updated rule
* @private
* @example
* const rule = css.setClassRule('myclass', { color: 'red' });
* const ruleHover = css.setClassRule('myclass', { color: 'blue' }, { state: 'hover' });
* // This will add current CSS:
* // .myclass { color: red }
* // .myclass:hover { color: blue }
*/
setClassRule(name: string, style?: CssRuleStyle, opts?: GetSetRuleOptions): CssRule;
/**
* Get the CSS rule by class selector
* @param {string} name Class selector name, eg. 'my-class'
* @param {Object} [opts={}] Custom options, like `state` and `mediaText`
* @return {CssRule}
* @private
* @example
* const rule = css.getClassRule('myclass');
* const ruleHover = css.getClassRule('myclass', { state: 'hover' });
*/
getClassRule(name: string, opts?: GetSetRuleOptions): CssRule | undefined;
/**
* Remove rule, by CssRule or matching selector (eg. the selector will match also at-rules like `@media`)
* @param {String|[CssRule]|Array<[CssRule]>} rule CssRule or matching selector.
* @return {Array<[CssRule]>} Removed rules
* @example
* // Remove by CssRule
* const toRemove = css.getRules('.my-cls');
* css.remove(toRemove);
* // Remove by selector
* css.remove('.my-cls-2');
*/
remove(rule: string | CssRule, opts?: any): CssRule[] | (CssRule & any[]);
/**
* Remove all rules
* @return {this}
*/
clear(opts?: {}): this;
getComponentRules(cmp: Component, opts?: GetSetRuleOptions): CssRule[];
/**
* Render the block of CSS rules
* @return {HTMLElement}
* @private
*/
render(): HTMLElement;
checkId(rule: CssRuleJSON | CssRuleJSON[], opts?: {
idMap?: PrevToNewIdMap;
}): CssRuleJSON[];
destroy(): void;
}
declare class ComponentsView extends View {
opts: any;
config: DomComponentsConfig & {
frameView?: FrameView;
};
em: EditorModel;
parentEl?: HTMLElement;
compView: typeof ComponentView;
initialize(o: any): void;
removeChildren(removed: Component, coll: any, opts?: {}): void;
/**
* Add to collection
* @param {Model} model
* @param {Collection} coll
* @param {Object} opts
* @private
* */
addTo(model: Component, coll?: any, opts?: {
temporary?: boolean;
}): void;
/**
* Add new object to collection
* @param {Object} Model
* @param {Object} Fragment collection
* @param {Integer} Index of append
*
* @return {Object} Object rendered
* @private
* */
addToCollection(model: Component, fragmentEl?: DocumentFragment | null, index?: number): HTMLElement | Text;
resetChildren(models: Components, { previousModels }?: {
previousModels?: never[] | undefined;
}): void;
render(parent?: HTMLElement): this;
}
export type ClbObj = ReturnType<ComponentView["_clbObj"]>;
export interface IComponentView extends ExtractMethods<ComponentView> {
}
export declare class ComponentView<TComp extends Component = Component> extends View</**
* Keep this format to avoid errors in TS bundler */
/** @ts-ignore */
TComp> {
/** @ts-ignore */
model: TComp;
/** @ts-ignore */
className(): any;
/** @ts-ignore */
tagName(): string;
modelOpt: ComponentOptions;
em: EditorModel;
opts?: any;
pfx?: string;
ppfx?: string;
attr?: Record<string, any>;
classe?: string;
config: DomComponentsConfig;
childrenView?: ComponentsView;
getChildrenSelector?: Function;
getTemplate?: Function;
scriptContainer?: HTMLElement;
preinitialize(opt?: any): void;
initialize(opt?: any): void;
get __cmpStyleOpts(): GetSetRuleOptions;
get frameView(): FrameView;
get createDoc(): Document;
__isDraggable(): string | boolean | DraggableDroppableFn | undefined;
_clbObj(): {
editor: Editor;
model: TComp;
el: HTMLElement;
};
/**
* Initialize callback
*/
init(opts: ClbObj): void;
/**
* Remove callback
*/
removed(opts: ClbObj): void;
/**
* On render callback
*/
onRender(opts: ClbObj): void;
/**
* Callback executed when the `active` event is triggered on component
*/
onActive(ev: Event): void;
/**
* Callback executed when the `disable` event is triggered on component
*/
onDisable(opts?: DisableOptions): void;
remove(): this;
handleDragStart(event: Event): false | undefined;
initClasses(): void;
initComponents(opts?: {
avoidRender?: boolean;
}): void;
/**
* Handle any property change
* @private
*/
handleChange(): void;
/**
* Import, if possible, classes inside main container
* @private
* */
importClasses(): void;
/**
* Update item on status change
* @param {Event} e
* @private
* */
updateStatus(opts?: {
noExtHl?: boolean;
avoidHover?: boolean;
}): void;
/**
* Update highlight attribute
* @private
* */
updateHighlight(): void;
/**
* Update style attribute
* @private
* */
updateStyle(m?: any, v?: any,