Member Junction
    Preparing search index...

    Component for displaying a single message in a conversation Follows the dynamic rendering pattern from skip-chat for optimal performance This component is created dynamically via ViewContainerRef.createComponent()

    Hierarchy (View Summary)

    Implements

    • OnInit
    • AfterViewInit
    • OnDestroy
    • OnChanges
    • DoCheck
    Index

    Constructors

    Properties

    Accessors

    Methods

    Constructors

    Properties

    _agentRunDurationFormatted: string = '0:00'
    _elapsedTimeFormatted: string = '0:00'
    afterResponseFormSubmitted: EventEmitter<AfterResponseFormSubmittedEventArgs> = ...

    Fired AFTER the response form's values have been submitted. Carries the form id (using the message ID as a stable per-message identifier) and the submitted values map. Not fired when beforeResponseFormSubmitted was canceled.

    agentRun: MJAIAgentRunEntityExtended | null = null
    allowMessageDelete: boolean = true

    Allow deleting the user's own messages (the per-message delete button).

    allowMessageEdit: boolean = true

    Allow editing the user's own messages (the per-message edit button).

    allowPinning: boolean = true

    Allow pinning messages (the per-message pin button).

    artifact?: MJArtifactEntity
    artifactActionPerformed: EventEmitter<{ action: string; artifactId: string }> = ...
    artifactClicked: EventEmitter<{ artifactId: string; versionId?: string }> = ...
    artifacts: MessageArtifactRef[] = []

    All distinct artifacts attached to this message, each at its latest version. Preferred over the single artifact/artifactVersion inputs above (which are retained for backward compatibility and kept pointed at the first entry).

    artifactVersion?: MJArtifactVersionEntity
    assistantAvatarFailed: boolean = false

    The last assistantAvatarUrl failed to load — fall back to the icon branch.

    assistantDisplayName: string | null = null

    Host override for the AI message display name (white-label persona). Null = the agent record's name.

    attachmentClicked: EventEmitter<MessageAttachment> = ...
    attachments: MessageAttachment[] = []
    beforeResponseFormSubmitted: EventEmitter<BeforeResponseFormSubmittedEventArgs> = ...

    Cancelable — fired BEFORE the response form's values are sent back as a new conversation message. Listeners may set event.Cancel = true to halt the submission (e.g., a validation pass that finds required fields unfilled). When canceled, the corresponding afterResponseFormSubmitted event is NOT fired and suggestedResponseSelected is NOT emitted. Follows MJ's established Before/After cancelable event pattern.

    conversation: MJConversationEntity | null
    currentUser: UserInfo
    deleteClicked: EventEmitter<MJConversationDetailEntity> = ...
    detailTasks: MJTaskEntity[] = []
    diagnosticRequested: EventEmitter<string> = ...
    editClicked: EventEmitter<MJConversationDetailEntity> = ...
    editedText: string = ''
    isAgentDetailsExpanded: boolean = false
    isEditing: boolean = false
    isLastMessage: boolean = false
    isProcessing: boolean = false
    messageEdited: EventEmitter<MJConversationDetailEntity> = ...
    messageExtraTemplate: TemplateRef<unknown> | null = null

    Optional additive per-message slot template (forwarded from chat-area's mjChatSlot="messageExtra"). Rendered inside the bubble after the message content, before attachments. Receives the message as $implicit + a named message context binding. Null when no consumer template is projected.

    messagePinToggled: EventEmitter<MJConversationDetailEntity> = ...
    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.

    ratings?: RatingJSON[]
    retryClicked: EventEmitter<MJConversationDetailEntity> = ...
    showAgentRunDetails: boolean = true

    Show the per-message agent run-detail grid (run ID, step/token counts, $ cost).

    showMessageRating: boolean = true

    Show the per-message thumbs rating control on completed AI messages.

    showReactions: boolean = true

    Show the per-message reaction buttons (like / comment).

    suggestedResponseSelected: EventEmitter<{ customInput?: string; text: string }> = ...
    testFeedbackClicked: EventEmitter<MJConversationDetailEntity> = ...
    userAvatarMap: Map<
        string,
        { iconClass: string
        | null; imageUrl: string | null },
    > = ...
    "ɵdir": unknown
    "ɵfac": unknown

    Accessors

    • get hasAgentDetailsPanelContent(): boolean

      Whether the agent-run gear's expanded panel would actually render anything — used to gate the gear button itself so it doesn't appear as a dead control that opens an empty popup. The panel hosts, in order: the run-details section (only when showAgentRunDetails), associated tasks, and (non-last messages only) the delete / rating / pin overflow. With showAgentRunDetails=false and none of those enabled — a white-labeled end-user surface — the gear vanishes entirely instead of opening onto nothing.

      Each arm below mirrors the corresponding template condition EXACTLY; keep them in lockstep with message-item.component.html's .agent-details-panel block.

      Defaults leave it unchanged: with showAgentRunDetails=true (the default) this is unconditionally true, so the gear renders exactly as before — including the pre-existing window where agentRun hasn't loaded yet and the panel is briefly empty. That window is deliberately preserved (byte-identical defaults) rather than fixed here.

      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 RunReportToUse(): IRunReportProvider

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

      Returns IRunReportProvider

    • 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> }

      Returns void