import { A_Caller, A_Component, A_Context, A_Feature, A_Inject, A_Meta, A_Scope, A_TYPES__Ctor } from "@adaas/a-concept"; import { A_SignalBusFeatures, A_Signal, A_SignalState, A_SignalVector } from "@adaas/a-utils/a-signal"; import { A_Logger } from "@adaas/a-utils/a-logger"; import { AreContext } from "@adaas/are/component/Are.context"; import { AreFeatures, AreSignalFeatureKey } from "@adaas/are/component/Are.constants"; import { AreNode } from "@adaas/are/node/AreNode.entity"; import { AreNodeFeatures } from "@adaas/are/node/AreNode.constants"; import { AreEvent } from "@adaas/are/event/AreEvent.context"; import { A_Frame } from "@adaas/a-frame/core"; import { AreSignalsMeta } from "./AreSignals.meta"; import { AreSignalsContext } from "./AreSignals.context"; import { Are } from "@adaas/are/component/Are.component"; @A_Frame.Define({ namespace: 'A-ARE', description: 'AreSignals is the central signal bus component within the ARE framework. It listens for incoming signal vectors and dispatches them to all subscribed root nodes, enabling reactive, event-driven rendering and lifecycle management across the component tree.' }) @A_Meta.Define(AreSignalsMeta) export class AreSignals extends A_Component { @A_Feature.Extend({ name: A_SignalBusFeatures.onNext, }) async handleSignalVector( @A_Inject(A_SignalVector) vector: A_SignalVector, @A_Inject(AreSignalsContext) context: AreSignalsContext, @A_Inject(A_SignalState) state: A_SignalState, @A_Inject(A_Scope) scope: A_Scope, @A_Inject(A_Logger) logger?: A_Logger, ) { logger?.debug(`Handling Signal Vector with ${context.subscribers.size} root nodes.`, vector); try { for (const sub of context.subscribers) { // Skip subscriber roots that are not backed by a real Are // component. Stray top-level template nodes (whitespace text, // HTML comments, a