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.
Forwarded from MessageItemComponent — see its docs.
Whether message items offer Stop on an in-progress agent reply. Default true.
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.
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.
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.
Forwarded from MessageItemComponent — see its docs.
Relays a message item's BeforeStopClicked: fired before an in-progress run is stopped,
cancelable by setting event.Cancel = true.
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.
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.
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.
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.
Forwarded from MessageItemComponent: the user edited a message to save as a new fork.
A chip was clicked in one of the items: a fork to open, or the view and message of an original chip.
An item asked to fork the conversation at its message.
True while an older page is in flight.
A message's run has gone quiet; the host should re-read durable state. Emits messageId.
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.
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).
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.
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.
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.
OptionalOlderOnly present while HasMoreAbove is true — the @if creates and destroys it.
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.
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.
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.
Emitted with the MJ: AI Agent Sessions.ID when a realtime session block's Open affordance is clicked.
Forwarded from MessageItemComponent: the user asked for a new reply in place of an AI reply.
Forwarded from MessageItemComponent: "Save and resend" saved a user message; the host reruns its turn.
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.
Use RegenerateRequested. Emits with it, for hosts that still bind the old name.
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.
Whether the sticky date header + jump-to-date dropdown render.
Whether the built-in "No messages yet" filler renders for empty conversations. Hosts with their own empty-state chrome set false.
Relays a message item's uncanceled stop request: the host stops the run behind that AI reply.
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.
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.
StaticɵdirStaticɵfacUse AgentRunMap.
Use AllowMessageDelete.
Use AllowMessageEdit.
Use AllowPinning.
Use ArtifactMap.
Use AssistantAvatarUrl.
Image URL for the AI message avatar. Null = the agent's Font Awesome icon.
Use AssistantDisplayName.
Display name shown on AI messages. Null = the engine-resolved agent name.
Use AttachmentsMap.
True when the person may start forks; a new value is pushed into the items on screen. False hides the fork actions.
Use Conversation.
Use CurrentDateDisplay.
Use CurrentUser.
The fork marker shown on its own when the view has no rows (a draft fork with no earlier rows); null otherwise.
Fork chips per normalized detail id, from the chat area's fork summaries. A new map is pushed into the items on screen.
How a fork view draws its rows; null in Main. A new layout is pushed into the items on screen.
True when older pages remain above the loaded window.
Setter rather than a plain input: flipping this creates or destroys the sentinel via
@if, and the observer has to be re-pointed at the new element. Relying on an ambient
ngAfterViewChecked tick to notice is fragile — once the list settles there may not be
another one.
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.
How many agent replies are in flight in the open view; items offer their own Stop only above one. Changes mid-session as runs start and finish, so it is restamped onto rendered items.
The latest turn that in-place Edit and Regenerate may change; null when there is none. A new value is pushed into the items on screen.
Use IsProcessing.
Use MessageContainerRef.
Use MessageExtraTemplate.
Called when messages array changes Efficiently updates the DOM without re-rendering everything
Use OlderSentinel.
Returns either the default Metadata provider or the one specified in the Provider property, if it was specified
Use RatingsMap.
Hides response forms and actionable commands on each message. Restamped onto already-rendered items — they are created dynamically.
Returns either the default RunQuery provider or the one specified in the Provider property, if it was specified
Returns either the default RunView provider or the one specified in the Provider property, if it was specified
Use ScrollContainer.
The host's scrolling element, used as the sentinel observer's root.
This component's own container does NOT scroll — hosts wrap it in their own scroller
(in the chat area, .chat-messages-container, which carries the min-height: 0 a flex
child needs). Passing it in is deterministic; discovering it by walking the DOM depends
on layout having settled, which is not knowable from in here.
Optional: when omitted the component falls back to walking its ancestors.
Use SessionMetaMap.
Use ShouldShowDateFilter.
Use ShowAgentRunDetails.
Use ShowDateNav.
Use ShowDateNavigation.
Use ShowEmptyFill.
Use ShowMessageRating.
Use ShowReactions.
Use UserAvatarMap.
Use UserAvatarMap.
Handles a date-navigator selection.
The list cannot page history itself — it is a Generic widget with no store — so it asks the host, which owns the window and runs the older-page loop, then calls back into ScrollToDateTarget. The label updates immediately so the dropdown feels responsive while paging runs.
A callback method that is invoked immediately after the default change detector has completed one change-check cycle for a component's view.
A callback method that is invoked immediately after Angular has completed initialization of a component's view. It is invoked only once when the view is instantiated.
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.
The changed properties.
A callback method that performs custom clean-up, invoked immediately before a directive, pipe, or service instance is destroyed.
A callback method that is invoked immediately after the default change detector has checked the directive's data-bound properties for the first time, and before any of the view or content children have been checked. It is invoked only once when the directive is instantiated.
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.
Optionaloptions: { markStreaming?: 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.
Removes a message from the rendered list Called externally when a message is deleted
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.
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.
Use ToggleDateNav.
Base class for all Angular components in the MemberJunction system.