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

    afterResponseFormSubmitted: EventEmitter<AfterResponseFormSubmittedEventArgs> = ...

    Forwarded from MessageItemComponent — see its docs.

    agentRunMap: Map<string, MJAIAgentRunEntityExtended> = ...
    allowMessageDelete: boolean = true
    allowMessageEdit: boolean = true
    allowPinning: boolean = true
    artifactClicked: EventEmitter<{ artifactId: string; versionId?: string }> = ...
    artifactMap: Map<string, LazyArtifactInfo[]> = ...
    attachmentClicked: EventEmitter<MessageAttachment> = ...
    attachmentsMap: Map<string, MessageAttachment[]> = ...
    beforeResponseFormSubmitted: EventEmitter<BeforeResponseFormSubmittedEventArgs> = ...

    Forwarded from MessageItemComponent — see its docs.

    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> = ...
    diagnosticRequested: EventEmitter<string> = ...
    editMessage: EventEmitter<MJConversationDetailEntity> = ...
    IsLoadingOlder: boolean = false

    True while an older page is in flight.

    isProcessing: boolean = false
    messageContainerRef: ViewContainerRef
    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> = ...
    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 },
    > = ...
    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> = ...

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

    replyInThread: EventEmitter<MJConversationDetailEntity> = ...
    retryMessage: EventEmitter<MJConversationDetailEntity> = ...
    scrollContainer: ElementRef
    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
    suggestedResponseSelected: EventEmitter<{ customInput?: string; text: string }> = ...
    testFeedbackMessage: EventEmitter<MJConversationDetailEntity> = ...
    userAvatarMap: Map<
        string,
        { iconClass: string
        | null; imageUrl: string | null },
    > = ...
    viewThread: EventEmitter<MJConversationDetailEntity> = ...
    "ɵ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

    • The node standing for a LOADED message on screen — the mounted item, the spacer holding its place while it is unmounted, or the session card a session-stamped row folds into. Null when the message is not in the loaded window. Hosts that need to MEASURE a message (not just scroll to it) use this instead of a [data-message-id] query, which fails for exactly the cases listed — see scrollToTimelineEntry.

      Parameters

      • messageId: string

      Returns HTMLElement | null

    • 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

    • 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