Member Junction
    Preparing search index...

    Base class for all Angular components in the MemberJunction system.

    Hierarchy (View Summary)

    Implements

    • OnInit
    • OnDestroy
    • OnChanges
    • AfterViewInit
    • AfterViewChecked
    Index

    Constructors

    Properties

    Accessors

    Methods

    Constructors

    Properties

    afterResponseFormSubmitted: EventEmitter<AfterResponseFormSubmittedEventArgs> = ...

    Use AfterResponseFormSubmitted.

    The same emitter under the old binding name, so a template still binding (afterResponseFormSubmitted) keeps working. Must stay AFTER AfterResponseFormSubmitted: class fields initialise in order, and the other way round this captures undefined.

    AfterResponseFormSubmitted: EventEmitter<AfterResponseFormSubmittedEventArgs> = ...

    Forwarded from MessageItemComponent — see its docs.

    AgentRunMap: Map<string, MJAIAgentRunEntityExtended> = ...
    AllowMessageDelete: boolean = true
    AllowMessageEdit: boolean = true
    AllowPinning: boolean = true
    AllowStopRun: boolean = true

    Whether message items offer Stop on an in-progress agent reply. Default true.

    artifactClicked: EventEmitter<{ artifactId: string; versionId?: string }> = ...

    Use ArtifactClicked.

    The same emitter under the old binding name, so a template still binding (artifactClicked) keeps working. Must stay AFTER ArtifactClicked: class fields initialise in order, and the other way round this captures undefined.

    ArtifactClicked: EventEmitter<{ artifactId: string; versionId?: string }> = ...
    ArtifactMap: Map<string, LazyArtifactInfo[]> = ...
    attachmentClicked: EventEmitter<MessageAttachment> = ...

    Use AttachmentClicked.

    The same emitter under the old binding name, so a template still binding (attachmentClicked) keeps working. Must stay AFTER AttachmentClicked: class fields initialise in order, and the other way round this captures undefined.

    AttachmentClicked: EventEmitter<MessageAttachment> = ...
    AttachmentsMap: Map<string, MessageAttachment[]> = ...
    beforeResponseFormSubmitted: EventEmitter<BeforeResponseFormSubmittedEventArgs> = ...

    Use BeforeResponseFormSubmitted.

    The same emitter under the old binding name, so a template still binding (beforeResponseFormSubmitted) keeps working. Must stay AFTER BeforeResponseFormSubmitted: class fields initialise in order, and the other way round this captures undefined.

    BeforeResponseFormSubmitted: EventEmitter<BeforeResponseFormSubmittedEventArgs> = ...

    Forwarded from MessageItemComponent — see its docs.

    BeforeStopClicked: EventEmitter<BeforeStopClickedEventArgs> = ...

    Relays a message item's BeforeStopClicked: fired before an in-progress run is stopped, cancelable by setting event.Cancel = true.

    Conversation: MJConversationEntity | null
    CurrentDateDisplay: string = 'Today'
    CurrentUser: UserInfo
    DateJumpRequested: EventEmitter<DateJumpPeriod> = ...

    Asks the host to page older history far enough back to satisfy a date jump, then scroll. Emitted instead of handled locally because paging belongs to the window store.

    deleteMessage: EventEmitter<MJConversationDetailEntity> = ...

    Use DeleteMessage.

    The same emitter under the old binding name, so a template still binding (deleteMessage) keeps working. Must stay AFTER DeleteMessage: class fields initialise in order, and the other way round this captures undefined.

    DeleteMessage: EventEmitter<MJConversationDetailEntity> = ...
    diagnosticRequested: EventEmitter<string> = ...

    Use DiagnosticRequested.

    The same emitter under the old binding name, so a template still binding (diagnosticRequested) keeps working. Must stay AFTER DiagnosticRequested: class fields initialise in order, and the other way round this captures undefined.

    DiagnosticRequested: EventEmitter<string> = ...
    editMessage: EventEmitter<MJConversationDetailEntity> = ...

    Use EditMessage.

    The same emitter under the old binding name, so a template still binding (editMessage) keeps working. Must stay AFTER EditMessage: class fields initialise in order, and the other way round this captures undefined.

    EditMessage: EventEmitter<MJConversationDetailEntity> = ...
    EditResendRequested: EventEmitter<
        { Message: MJConversationDetailEntity; NewText: string },
    > = ...

    Forwarded from MessageItemComponent: the user edited a message to save as a new fork.

    ForkOpenRequested: EventEmitter<ForkChipOpenRequest> = ...

    A chip was clicked in one of the items: a fork to open, or the view and message of an original chip.

    ForkRequested: EventEmitter<MJConversationDetailEntity> = ...

    An item asked to fork the conversation at its message.

    IsLoadingOlder: boolean = false

    True while an older page is in flight.

    IsProcessing: boolean = false
    LivenessCheckRequested: EventEmitter<string> = ...

    A message's run has gone quiet; the host should re-read durable state. Emits messageId.

    MessageContainerRef: ViewContainerRef
    messageEdited: EventEmitter<MJConversationDetailEntity> = ...

    Use MessageEdited.

    The same emitter under the old binding name, so a template still binding (messageEdited) keeps working. Must stay AFTER MessageEdited: class fields initialise in order, and the other way round this captures undefined.

    MessageEdited: EventEmitter<MJConversationDetailEntity> = ...
    MessageExtraTemplate: TemplateRef<unknown> | null = null

    Optional per-message additive decoration template, projected INSIDE the default MessageItemComponent (after the message text). Forwarded by chat-area when a consumer projects mjChatSlot="messageExtra". Ignored when messageRendererTemplate is set (custom renderers own all per-message content).

    messagePinToggled: EventEmitter<MJConversationDetailEntity> = ...

    Use MessagePinToggled.

    The same emitter under the old binding name, so a template still binding (messagePinToggled) keeps working. Must stay AFTER MessagePinToggled: class fields initialise in order, and the other way round this captures undefined.

    MessagePinToggled: EventEmitter<MJConversationDetailEntity> = ...
    MessageRendererTemplate: TemplateRef<unknown> | null = null

    Optional per-iteration custom message renderer. When set, the list renders each message via this template (full replacement) instead of the default MessageItemComponent. Forwarded by chat-area when a consumer projects mjChatSlot="messageRenderer". The template receives the message as $implicit and as a named message context binding.

    Consumers opting into a custom renderer take full responsibility for displaying the message — edit/delete/retry affordances, artifacts, ratings, attachments, etc. The minimal MJChatMessageBubbleDefaultComponent ships as a ready-to-use bubble renderer.

    OlderRequested: EventEmitter<void> = ...

    Asks the host to load the next older page. Fired when the "earlier messages" sentinel scrolls into view — never on a raw scroll event, so a fast scroll costs one emit rather than one per pixel.

    OlderSentinel?: ElementRef<HTMLElement>

    Only present while HasMoreAbove is true — the @if creates and destroys it.

    openEntityRecord: EventEmitter<
        { compositeKey: CompositeKey; entityName: string },
    > = ...

    Use OpenEntityRecord.

    The same emitter under the old binding name, so a template still binding (openEntityRecord) keeps working. Must stay AFTER OpenEntityRecord: class fields initialise in order, and the other way round this captures undefined.

    OpenEntityRecord: EventEmitter<
        { compositeKey: CompositeKey; entityName: string },
    > = ...
    Provider: IMetadataProvider | null

    If specified, this provider will be used for communication and for all metadata purposes. By default, if not provided, the Metadata and RunView classes are used for this and the default GraphQLDataProvider is used which is connected to the same back-end MJAPI instance as the Metadata and RunView classes. If you want to have this component connect to a different MJAPI back-end, create an instance of a ProviderBase sub-class like GraphQLDataProvider/etc, and configure it as appropriate to connect to the MJAPI back-end you want to use, and then pass it in here.

    RatingsMap: Map<string, RatingJSON[]> = ...
    realtimeSessionOpenRequested: EventEmitter<string> = ...

    Use RealtimeSessionOpenRequested.

    The same emitter under the old binding name, so a template still binding (realtimeSessionOpenRequested) keeps working. Must stay AFTER RealtimeSessionOpenRequested: class fields initialise in order, and the other way round this captures undefined.

    RealtimeSessionOpenRequested: EventEmitter<string> = ...

    Emitted with the MJ: AI Agent Sessions.ID when a realtime session block's Open affordance is clicked.

    RegenerateRequested: EventEmitter<MJConversationDetailEntity> = ...

    Forwarded from MessageItemComponent: the user asked for a new reply in place of an AI reply.

    ResendInPlaceRequested: EventEmitter<MJConversationDetailEntity> = ...

    Forwarded from MessageItemComponent: "Save and resend" saved a user message; the host reruns its turn.

    retryMessage: EventEmitter<MJConversationDetailEntity> = ...

    Use RegenerateRequested.

    The same emitter under the old binding name, so a template still binding (retryMessage) keeps working. Must stay AFTER RetryMessage: class fields initialise in order, and the other way round this captures undefined.

    RetryMessage: EventEmitter<MJConversationDetailEntity> = ...

    Use RegenerateRequested. Emits with it, for hosts that still bind the old name.

    ScrollContainer: ElementRef
    scrollToMessageRequested: EventEmitter<string> = ...

    Use ScrollToMessageRequested.

    ScrollToMessageRequested: EventEmitter<string> = ...
    SessionMetaMap: Map<string, RealtimeSessionTimelineMeta> = ...

    Optional session-row enrichment for realtime SESSION BLOCKS, keyed by NormalizeUUID(sessionId) (agent name / status / close reason). Details stamped with an AgentSessionID collapse into one timeline card per session — see BuildConversationTimeline — and this map dresses those cards up when present.

    ShouldShowDateFilter: boolean = false
    ShowAgentRunDetails: boolean = true
    ShowDateNav: boolean = false
    ShowDateNavigation: boolean = true

    Whether the sticky date header + jump-to-date dropdown render.

    ShowEmptyFill: boolean = true

    Whether the built-in "No messages yet" filler renders for empty conversations. Hosts with their own empty-state chrome set false.

    ShowMessageRating: boolean = true
    ShowReactions: boolean = true
    StopMessage: EventEmitter<MJConversationDetailEntity> = ...

    Relays a message item's uncanceled stop request: the host stops the run behind that AI reply.

    suggestedResponseSelected: EventEmitter<{ customInput?: string; text: string }> = ...

    Use SuggestedResponseSelected.

    The same emitter under the old binding name, so a template still binding (suggestedResponseSelected) keeps working. Must stay AFTER SuggestedResponseSelected: class fields initialise in order, and the other way round this captures undefined.

    SuggestedResponseSelected: EventEmitter<{ customInput?: string; text: string }> = ...
    taskGraphPanelRequested: EventEmitter<
        {
            isRunning?: boolean;
            parentTaskId: string;
            workflowName?: string;
            workflowTitle: string;
        },
    > = ...

    Use TaskGraphPanelRequested.

    TaskGraphPanelRequested: EventEmitter<
        {
            isRunning?: boolean;
            parentTaskId: string;
            workflowName?: string;
            workflowTitle: string;
        },
    > = ...
    testFeedbackMessage: EventEmitter<MJConversationDetailEntity> = ...

    Use TestFeedbackMessage.

    The same emitter under the old binding name, so a template still binding (testFeedbackMessage) keeps working. Must stay AFTER TestFeedbackMessage: class fields initialise in order, and the other way round this captures undefined.

    TestFeedbackMessage: EventEmitter<MJConversationDetailEntity> = ...
    UserAvatarMap: Map<
        string,
        { iconClass: string
        | null; imageUrl: string | null },
    > = ...
    "ɵdir": unknown
    "ɵfac": ɵɵFactoryDeclaration<BaseAngularComponent, never>

    Accessors

    • get HostSuppliesScroller(): boolean

      Marks the host as "someone else owns the scrolling", which drops overflow-y on this component's own container.

      position: sticky pins to the nearest ancestor with overflow-y: auto|scroll. When a host supplies a scroller, this component's container still declared overflow-y: auto but never actually scrolled (its content grows to fit), so the sticky date header bound to a container whose scrollTop is permanently 0 — it rendered, then rode out of view with the messages and could not be clicked.

      Driven off _scrollRoot rather than resolveScrollParent() on purpose: the DOM walk is lazy and layout-dependent, and dropping overflow-y for a consumer that turned out to have NO scrolling ancestor would leave the transcript unable to scroll or page at all. The explicit input is the only signal that is safe here — a host that passes it has, by definition, a scroller of its own.

      Returns boolean

    • get ProviderToUse(): IMetadataProvider

      Returns either the default Metadata provider or the one specified in the Provider property, if it was specified

      Returns IMetadataProvider

    • get RunQueryToUse(): IRunQueryProvider

      Returns either the default RunQuery provider or the one specified in the Provider property, if it was specified

      Returns IRunQueryProvider

    • get RunViewToUse(): IRunViewProvider

      Returns either the default RunView provider or the one specified in the Provider property, if it was specified

      Returns IRunViewProvider

    Methods

    • A callback method that is invoked immediately after the default change detector has checked data-bound properties if at least one has changed, and before the view and content children are checked.

      Parameters

      • changes: { [propName: string]: SimpleChange<any> }

        The changed properties.

      Returns void

    • Refreshes one rendered message in place: the streaming path's alternative to replacing the whole messages array, which rebuilds the timeline and re-measures the mounted range on every delta. Marks the item as streaming so its stylesheet can lift the status-line cap.

      Parameters

      Returns boolean

      false only when the message has no rendered entry at all, so the caller can fall back to the full path for that one update. A spacer or a session card standing in for the message is a no-op: the entity holds the text and a remount renders it.

    • Scrolls to the start of period within the currently loaded messages.

      Called by the host AFTER it has paged as far back as it intends to, so whatever is loaded now is the best answer available. Returns the outcome rather than failing silently — the plan's explicit requirement for this path.

      Parameters

      • period: DateJumpPeriod

      Returns DateJumpOutcome

    • Scrolls a LOADED message into view by id, mounted or not, and returns whether it landed.

      Public because the pins panel's "Jump to message" lives on the host: a pin can be far above the viewport, which is exactly the region this component unmounts into spacers, so the host's own [data-message-id] query found nothing and the button silently did nothing. Resolution goes through the timeline key instead — see scrollToTimelineEntry.

      Returns false when the message is not in the loaded window at all; the host decides whether to page back for it or tell the user.

      Parameters

      • messageId: string

      Returns boolean