From 0cd7386a952cc97ca86ac6ffabf8c51654fcf966 Mon Sep 17 00:00:00 2001 From: Artur Arseniev Date: Tue, 17 Feb 2026 14:05:42 +0400 Subject: [PATCH] Add callback types to layers --- packages/core/src/editor/types.ts | 3 +++ packages/core/src/navigator/index.ts | 3 +-- packages/core/src/navigator/types.ts | 27 ++++++++++++++++++++ packages/core/src/navigator/view/ItemView.ts | 3 ++- 4 files changed, 33 insertions(+), 3 deletions(-) diff --git a/packages/core/src/editor/types.ts b/packages/core/src/editor/types.ts index 55f5a1b90..fb5a584b8 100644 --- a/packages/core/src/editor/types.ts +++ b/packages/core/src/editor/types.ts @@ -9,6 +9,7 @@ import { ComponentEvent } from '../dom_components'; import { I18nEvent, I18nEventCallback } from '../i18n/types'; import { KeymapEvent, KeymapsEventCallback } from '../keymaps/types'; import { ModalEvent, ModalEventCallback } from '../modal_dialog/types'; +import { LayerEvent, LayerEventCallback } from '../navigator/types'; import { RichTextEditorEvent } from '../rich_text_editor'; import { SelectorEvent } from '../selector_manager'; import { StyleManagerEvent } from '../style_manager'; @@ -25,6 +26,7 @@ type EditorBuiltInEvents = | BlockEvent | AssetEvent | KeymapEvent + | LayerEvent | StyleManagerEvent | StorageEvent | CanvasEvent @@ -49,6 +51,7 @@ export interface EditorEventCallbacks DevicesEventCallback, I18nEventCallback, KeymapsEventCallback, + LayerEventCallback, ModalEventCallback { [key: string]: any[]; diff --git a/packages/core/src/navigator/index.ts b/packages/core/src/navigator/index.ts index f45a27726..ff4388a92 100644 --- a/packages/core/src/navigator/index.ts +++ b/packages/core/src/navigator/index.ts @@ -47,8 +47,7 @@ import { hasWin, isComponent, isDef } from '../utils/mixins'; import defConfig, { LayerManagerConfig } from './config/config'; import { LayerData, LayerEvents } from './types'; import View from './view/ItemView'; - -export type LayerEvent = `${LayerEvents}`; +export type { LayerEvent } from './types'; const styleOpts = { mediaText: '' }; diff --git a/packages/core/src/navigator/types.ts b/packages/core/src/navigator/types.ts index 5557967a6..b74aacaca 100644 --- a/packages/core/src/navigator/types.ts +++ b/packages/core/src/navigator/types.ts @@ -1,3 +1,4 @@ +import { ObjectAny } from '../common'; import Component from '../dom_components/model/Component'; export interface LayerData { @@ -32,8 +33,34 @@ export enum LayerEvents { * editor.on('layer:custom', ({ container, root }) => { ... }); */ custom = 'layer:custom', + + /** + * @event `layer:render` Component layer rendered. Object with component and rendered layer element is passed as an argument. + * @example + * editor.on('layer:render', ({ component, el }) => { ... }); + */ + render = 'layer:render', } /**{END_EVENTS}*/ +export type LayerEvent = `${LayerEvents}`; + +export interface LayerCustomEventData { + container: HTMLElement | undefined; + root: Component; +} + +export interface LayerRenderEventData { + component: Component; + el: HTMLElement; +} + +export interface LayerEventCallback { + [LayerEvents.root]: [Component]; + [LayerEvents.component]: [Component, ObjectAny?]; + [LayerEvents.custom]: [LayerCustomEventData]; + [LayerEvents.render]: [LayerRenderEventData]; +} + // need this to avoid the TS documentation generator to break export default LayerEvents; diff --git a/packages/core/src/navigator/view/ItemView.ts b/packages/core/src/navigator/view/ItemView.ts index 3b9080b73..9faa1f7de 100644 --- a/packages/core/src/navigator/view/ItemView.ts +++ b/packages/core/src/navigator/view/ItemView.ts @@ -5,6 +5,7 @@ import ComponentView from '../../dom_components/view/ComponentView'; import EditorModel from '../../editor/model/Editor'; import { isEnterKey, isEscKey } from '../../utils/dom'; import LayerManager from '../index'; +import { LayerEvents } from '../types'; import ItemsView from './ItemsView'; import { getOnComponentDrag, getOnComponentDragEnd, getOnComponentDragStart } from '../../commands'; import Sorter from '../../utils/sorter/Sorter'; @@ -450,6 +451,6 @@ export default class ItemView extends View { const { onRender } = config; const opt = { component: model, el }; onRender.bind(this)(opt); - this.em.trigger('layer:render', opt); + this.em.trigger(LayerEvents.render, opt); } }