Forwarded from MessageItemComponent — see its docs.
Forwarded from MessageItemComponent — see its docs.
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.
True while an older page is in flight.
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).
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.
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.
Emitted with the MJ: AI Agent Sessions.ID when a realtime session block's Open affordance is clicked.
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.
StaticɵdirStaticɵfacImage URL for the AI message avatar. Null = the agent's Font Awesome icon.
Display name shown on AI messages. Null = the engine-resolved agent name.
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.
Called when messages array changes Efficiently updates the DOM without re-rendering everything
Returns either the default Metadata provider or the one specified in the Provider property, if it was specified
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
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.
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.
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.
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.
Base class for all Angular components in the MemberJunction system.