@ -1,5 +1,24 @@
import { AddOptions , OptionAsDocument , WithHTMLParserOptions } from '../common' ;
import Component from './model/Component' ;
import type {
AddOptions ,
EventCallbackAdd ,
EventCallbackRemoveBefore ,
ObjectAny ,
OptionAsDocument ,
WithHTMLParserOptions ,
} from '../common' ;
import type CssRule from '../css_composer/model/CssRule' ;
import type {
ComponentResizeEventEndProps ,
ComponentResizeEventMoveProps ,
ComponentResizeEventStartProps ,
ComponentResizeEventUpdateProps ,
} from '../commands/view/Resize' ;
import type { StyleProps } from '../domain_abstract/model/StyleableModel' ;
import type Selector from '../selector_manager/model/Selector' ;
import type Component from './model/Component' ;
import type { ResetFromStringOptions } from './model/Components' ;
import type { ComponentOptions , ComponentStackItem } from './model/types' ;
import type ComponentView from './view/ComponentView' ;
export enum ActionLabelComponents {
remove = 'component:remove' ,
@ -38,6 +57,7 @@ export enum ComponentsEvents {
remove = 'component:remove' ,
removeBefore = 'component:remove:before' ,
removed = 'component:removed' ,
clone = 'component:clone' ,
/ * *
* @event ` component:create ` Component created .
@ -52,6 +72,7 @@ export enum ComponentsEvents {
* editor . on ( 'component:update' , ( component ) = > { . . . } ) ;
* /
update = 'component:update' ,
updateProperty = 'component:update:' ,
updateInside = 'component:update-inside' ,
/ * *
@ -69,6 +90,20 @@ export enum ComponentsEvents {
* /
select = 'component:select' ,
selectBefore = 'component:select:before' ,
selected = 'component:selected' ,
deselected = 'component:deselected' ,
toggled = 'component:toggled' ,
hover = 'component:hover' ,
hoverBefore = 'component:hover:before' ,
hovered = 'component:hovered' ,
unhovered = 'component:unhovered' ,
paste = 'component:paste' ,
syncStyle = 'component:sync-style' ,
typeAdd = 'component:type:add' ,
typeUpdate = 'component:type:update' ,
dragStart = 'component:drag:start' ,
drag = 'component:drag' ,
dragEnd = 'component:drag:end' ,
/ * *
* @event ` component:mount ` Component is mounted in the canvas .
@ -105,6 +140,7 @@ export enum ComponentsEvents {
* editor . on ( 'component:input' , ( component ) = > { . . . } ) ;
* /
input = 'component:input' ,
content = 'component:content' ,
/ * *
* @event ` component:resize ` Component resized . This event is triggered when the component is resized in the canvas .
@ -214,3 +250,149 @@ export enum ComponentsEvents {
* /
symbol = 'symbol' ,
}
type ComponentEventStatic = Exclude <
` ${ ComponentsEvents } ` ,
` ${ ComponentsEvents . updateProperty } ` | ` ${ ComponentsEvents . styleUpdateProperty } `
> ;
type SymbolMainEvent =
| ComponentsEvents . symbolMainAdd
| ComponentsEvents . symbolMainUpdate
| ComponentsEvents . symbolMainUpdateDeep
| ComponentsEvents . symbolMainRemove ;
type SymbolInstanceEvent = ComponentsEvents . symbolInstanceAdd | ComponentsEvents . symbolInstanceRemove ;
export type ComponentEvent =
| ComponentEventStatic
| ` ${ ComponentsEvents . updateProperty } ${ string } `
| ` ${ ComponentsEvents . styleUpdateProperty } ${ string } ` ;
export interface ComponentScriptEventData {
component : Component ;
view : ComponentView ;
el : HTMLElement ;
}
export interface ComponentStyleUpdateEventData {
style : StyleProps ;
}
export interface ComponentUpdateEventData {
component : Component ;
changed : ObjectAny ;
options : ObjectAny ;
}
export interface ComponentTypeEventData extends Partial < Omit < ComponentStackItem , ' id ' > > {
id : string ;
[ key : string ] : any ;
}
export interface ComponentDragEventData {
target? : Component ;
parent? : Component ;
index? : number ;
cancelled? : boolean ;
[ key : string ] : unknown ;
}
export interface ComponentResizeEventEndData {
type : 'end' ;
component : Component ;
el : HTMLElement ;
}
export type ComponentResizeEventData =
| ( { type : 'start' } & ComponentResizeEventStartProps )
| ( { type : 'move' } & ComponentResizeEventMoveProps )
| ComponentResizeEventEndData ;
export interface ComponentResizeInitEventData {
component : Component ;
hasCustomResize : boolean ;
resizable : Component [ 'resizable' ] ;
}
export interface ComponentRemovedEventData {
removeOptions : ObjectAny ;
}
export interface ComponentSyncStyleEventData {
component : Component | undefined ;
selectors : Selector [ ] ;
mediaText : string ;
rule : CssRule ;
ruleComponents : CssRule [ ] ;
state : string ;
}
export interface SymbolEventData {
component : Component ;
changed? : ObjectAny ;
options? : ObjectAny ;
}
export interface SymbolMainEventData extends SymbolEventData {
event : SymbolMainEvent ;
}
export interface SymbolInstanceEventData extends SymbolEventData {
event : SymbolInstanceEvent ;
}
export interface ComponentsEventCallback {
[ ComponentsEvents . add ] : EventCallbackAdd < Component > ;
[ ComponentsEvents . remove ] : [ Component ] ;
[ ComponentsEvents . removeBefore ] : EventCallbackRemoveBefore < Component > ;
[ ComponentsEvents . removed ] : [ Component , ComponentRemovedEventData | undefined ] ;
[ ComponentsEvents . clone ] : [ Component ] ;
[ ComponentsEvents . create ] : [ Component , ComponentOptions ] ;
[ ComponentsEvents . update ] : [ Component , . . . any [ ] ] ;
[ ComponentsEvents . updateInside ] : [ ComponentUpdateEventData ] ;
[ ComponentsEvents . styleUpdate ] : [ Component , ComponentStyleUpdateEventData ] ;
[ ComponentsEvents . select ] : [ Component , ObjectAny ] ;
[ ComponentsEvents . selectBefore ] : [ Component , ObjectAny ] ;
[ ComponentsEvents . selected ] : [ Component , ObjectAny ] ;
[ ComponentsEvents . deselected ] : [ Component , ObjectAny ] ;
[ ComponentsEvents . toggled ] : [ Component ? , ObjectAny ? ] ;
[ ComponentsEvents . hover ] : [ Component | undefined , ObjectAny ] ;
[ ComponentsEvents . hoverBefore ] : [ Component , ObjectAny ] ;
[ ComponentsEvents . hovered ] : [ Component , ObjectAny ] ;
[ ComponentsEvents . unhovered ] : [ Component , ObjectAny ] ;
[ ComponentsEvents . paste ] : [ Component ] ;
[ ComponentsEvents . syncStyle ] : [ ComponentSyncStyleEventData ] ;
[ ComponentsEvents . typeAdd ] : [ ComponentTypeEventData ] ;
[ ComponentsEvents . typeUpdate ] : [ ComponentTypeEventData ] ;
[ ComponentsEvents . dragStart ] : [ ComponentDragEventData ] ;
[ ComponentsEvents . drag ] : [ ComponentDragEventData ] ;
[ ComponentsEvents . dragEnd ] : [ ComponentDragEventData ] ;
[ ComponentsEvents . mount ] : [ Component ] ;
[ ComponentsEvents . scriptMount ] : [ ComponentScriptEventData ] ;
[ ComponentsEvents . scriptMountBefore ] : [ ComponentScriptEventData ] ;
[ ComponentsEvents . scriptUnmount ] : [ ComponentScriptEventData ] ;
[ ComponentsEvents . render ] : [ ComponentScriptEventData ] ;
[ ComponentsEvents . input ] : [ Component ] ;
[ ComponentsEvents . content ] : [ Component | undefined , ResetFromStringOptions , string ] ;
[ ComponentsEvents . resize ] : [ ComponentResizeEventData ] ;
[ ComponentsEvents . resizeStart ] : [ ComponentResizeEventStartProps | ComponentResizeEventMoveProps ] ;
[ ComponentsEvents . resizeMove ] : [ ComponentResizeEventMoveProps ] ;
[ ComponentsEvents . resizeEnd ] : [ ComponentResizeEventEndProps ] ;
[ ComponentsEvents . resizeUpdate ] : [ ComponentResizeEventUpdateProps ] ;
[ ComponentsEvents . resizeInit ] : [ ComponentResizeInitEventData ] ;
[ ComponentsEvents . symbolMainAdd ] : [ SymbolEventData ] ;
[ ComponentsEvents . symbolMainUpdate ] : [ ComponentUpdateEventData ] ;
[ ComponentsEvents . symbolMainUpdateDeep ] : [ ComponentUpdateEventData ] ;
[ ComponentsEvents . symbolMainRemove ] : [ SymbolEventData ] ;
[ ComponentsEvents . symbolMain ] : [ SymbolMainEventData ] ;
[ ComponentsEvents . symbolInstanceAdd ] : [ SymbolEventData ] ;
[ ComponentsEvents . symbolInstanceRemove ] : [ SymbolEventData ] ;
[ ComponentsEvents . symbolInstance ] : [ SymbolInstanceEventData ] ;
[ ComponentsEvents . symbol ] : [ ] ;
[ key : ` ${ ComponentsEvents . updateProperty } ${ string } ` ] : [ Component , . . . any [ ] ] ;
[ key : ` ${ ComponentsEvents . styleUpdateProperty } ${ string } ` ] : [ Component , ComponentStyleUpdateEventData ] ;
}
// need this to avoid the TS documentation generator to break
export default ComponentsEvents ;