/** * Message block type registry. * * Core owns the base block types; plugins can contribute additional block * renderers via ``registerBlockType`` / ``unregisterBlockTypes`` during their * frontend activation lifecycle (Block H / HC-F). */ import type { ComponentType } from 'react'; import type { MessageBlock } from '@/store/commStore'; export type BlockComponent = ComponentType<{ block: MessageBlock }>; const _registry = new Map(); export function registerBlockType(blockType: string, component: BlockComponent, owner = ''): void { if (_registry.has(blockType)) { // eslint-disable-next-line no-console console.warn(`[blockRegistry] block type '${blockType}' re-registered by '${owner || 'unknown'}' — overwriting`); } // eslint-disable-next-line @typescript-eslint/no-explicit-any (component as any).__block_owner__ = owner; _registry.set(blockType, component); } export function unregisterBlockTypes(owner: string): void { for (const [key, component] of _registry.entries()) { // eslint-disable-next-line @typescript-eslint/no-explicit-any if ((component as any).__block_owner__ === owner) { _registry.delete(key); } } } export function getBlockComponent(blockType: string): BlockComponent | undefined { return _registry.get(blockType); }