From f839927de2476ec08e90b786c2b2bc03d9c19579 Mon Sep 17 00:00:00 2001 From: Artur Arseniev Date: Tue, 17 Feb 2026 14:41:43 +0400 Subject: [PATCH] Add callback types to traits --- packages/core/src/editor/types.ts | 5 ++- .../core/src/trait_manager/model/Trait.ts | 2 +- packages/core/src/trait_manager/types.ts | 45 +++++++++++++++++-- 3 files changed, 47 insertions(+), 5 deletions(-) diff --git a/packages/core/src/editor/types.ts b/packages/core/src/editor/types.ts index 82b88b3d5..461d6dcfc 100644 --- a/packages/core/src/editor/types.ts +++ b/packages/core/src/editor/types.ts @@ -16,6 +16,7 @@ import { RichTextEditorEvent, RichTextEditorEventCallback } from '../rich_text_e import { SelectorEvent, SelectorEventCallback } from '../selector_manager/types'; import { StorageEvent, StorageEventCallback } from '../storage_manager/types'; import { StyleManagerEvent, StyleManagerEventCallback } from '../style_manager/types'; +import { TraitEvent, TraitEventCallback } from '../trait_manager/types'; import { EditorConfig } from './config/config'; import EditorModel from './model/Editor'; @@ -37,6 +38,7 @@ type EditorBuiltInEvents = | CanvasEvent | SelectorEvent | RichTextEditorEvent + | TraitEvent | ModalEvent | CommandEvent | GeneralEvent; @@ -63,7 +65,8 @@ export interface EditorEventCallbacks RichTextEditorEventCallback, SelectorEventCallback, StorageEventCallback, - StyleManagerEventCallback + StyleManagerEventCallback, + TraitEventCallback { [key: string]: any[]; } diff --git a/packages/core/src/trait_manager/model/Trait.ts b/packages/core/src/trait_manager/model/Trait.ts index 2c5622902..040cab74d 100644 --- a/packages/core/src/trait_manager/model/Trait.ts +++ b/packages/core/src/trait_manager/model/Trait.ts @@ -257,7 +257,7 @@ export default class Trait extends Model { component.trigger(TraitsEvents.value, props); em?.trigger(TraitsEvents.value, props); // This should be triggered for any trait prop change - em?.trigger('trait:update', props); + em?.trigger(TraitsEvents.update, props); } getTargetValue(opts: TraitGetValueOptions = {}) { diff --git a/packages/core/src/trait_manager/types.ts b/packages/core/src/trait_manager/types.ts index 9f84639c0..edacb6f82 100644 --- a/packages/core/src/trait_manager/types.ts +++ b/packages/core/src/trait_manager/types.ts @@ -1,4 +1,5 @@ -import { CategoryProperties, ItemsByCategory } from '../abstract/ModuleCategory'; +import Category, { CategoryProperties, ItemsByCategory } from '../abstract/ModuleCategory'; +import { ObjectAny } from '../common'; import Component from '../dom_components/model/Component'; import Editor from '../editor'; import EditorModel from '../editor/model/Editor'; @@ -38,6 +39,34 @@ export interface TraitCustomData { container?: HTMLElement; } +export interface TraitSelectEventData { + component?: Component; + traits: Trait[]; +} + +export interface TraitValueEventData { + trait: Trait; + component: Component; + value: any; +} + +export interface TraitCategoryUpdateEventData { + category: Category; + changes: Partial; + options: ObjectAny; +} + +export interface TraitAllEventData { + event: string; + trait?: Trait; + component?: Component; + value?: any; + category?: Category; + changes?: Partial; + options?: ObjectAny; + container?: HTMLElement; +} + export interface TraitProperties { /** * Trait type, defines how the trait should be rendered. @@ -177,8 +206,6 @@ export interface TraitOption { [key: string]: unknown; } -export type TraitsEvent = `${TraitsEvents}`; - /**{START_EVENTS}*/ export enum TraitsEvents { /** @@ -194,6 +221,7 @@ export enum TraitsEvents { * editor.on('trait:value', ({ trait, component, value }) => { ... }); */ value = 'trait:value', + update = 'trait:update', /** * @event `trait:category:update` Trait category updated. @@ -218,5 +246,16 @@ export enum TraitsEvents { } /**{END_EVENTS}*/ +export type TraitEvent = `${TraitsEvents}`; + +export interface TraitEventCallback { + [TraitsEvents.select]: [TraitSelectEventData]; + [TraitsEvents.value]: [TraitValueEventData]; + [TraitsEvents.update]: [TraitValueEventData]; + [TraitsEvents.categoryUpdate]: [TraitCategoryUpdateEventData]; + [TraitsEvents.custom]: [TraitCustomData]; + [TraitsEvents.all]: [TraitAllEventData]; +} + // need this to avoid the TS documentation generator to break export default TraitsEvents;