Auto-focus the editor after view init (the composer default). Disable when embedded in forms.
OptionalcurrentFires when the contenteditable loses focus (hosts persist drafts on this).
Master switch for all mention/command triggers. When false no providers are consulted.
Discovery-mode filter: providers whose stable Key appears here are skipped when
resolving registered providers. Ignored when TriggerProviders is bound.
Right-align the dropdown against its anchor. Only the button path sets this.
Optional metadata provider scoping this editor (multi-provider hosts); passed through to trigger providers.
Explicit trigger-provider list — when bound, EXACTLY these providers are active
(explicit list wins over discovery). Leave null to discover providers registered
with the ClassFactory via @RegisterClass(ComposerTriggerProvider, '<Key>').
True when keyboard focus currently sits inside this editor.
Add an artifact as a pending attachment programmatically. Used by the artifact picker to attach artifacts as conversation inputs.
Clear the editor content and pending attachments
Clear all pending attachments
Close mention dropdown
Focus the editor
Focuses the editor and places the caret at the very end of its content.
Extract mention chips with their configuration data Returns array of objects containing mention info and preset configuration
Get all pending attachments
Get the plain text value with mentions encoded as JSON This format preserves configuration information when messages are saved Format: @{type:"agent",id:"uuid",name:"Agent Name",configId:"uuid",config:"High"}
Check if there are any pending attachments
True when the suggestion dropdown is open FOR THIS trigger character.
Lets a control that opens a trigger render its own pressed state without duplicating the
editor's state. Both halves matter: showMentionDropdown alone would light the Skills button
while an unrelated @ mention dropdown is open.
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 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.
Handle blur event - close dropdown when editor loses focus
Handle clicks on the container - focus the editor if clicking outside the contentEditable
Close the dropdown when the pointer goes down anywhere outside it.
Dismissal previously relied entirely on the editor's blur, which is not enough: clicking a non-focusable area (the message list, page background) does not blur a contenteditable, so the dropdown stayed open with nothing to close it. That was always true for a typed trigger; the Skills button makes it easy to hit, because the button deliberately keeps focus in the editor so the user's next click is the FIRST thing that could dismiss it.
mousedown rather than click: it fires before the browser moves focus, so this decides
before blur's own 200ms timer gets involved and the two cannot race.
The dropdown renders with fixed positioning but stays inside this component's host, so the containment check covers a click on a suggestion row — which must select, not dismiss.
Handle drag leave event
Handle drag over event
Handle drop event
Handle file input change (from file picker)
Handle input changes in contentEditable
Handle keydown events
Handle paste event - images or plain text
Trigger file picker programmatically
Open the suggestion dropdown for a trigger character, exactly as if the user had typed it.
Exists so a trigger can have a BUTTON as well as a keystroke. / commands were previously
reachable only by knowing to type /, which is not an affordance — nothing on screen says the
feature is there.
Deliberately inserts the character and re-runs the normal input path rather than opening the
dropdown directly. Everything downstream (which providers own the char, permission filtering,
the query the user then types, replacing the char with the chosen chip) is already driven by
that path; short-circuiting it would fork the flow and leave mentionStartIndex /
activeTrigger unset, so the first selection would insert in the wrong place.
OptionalanchorEl: HTMLElement | nullfalse when the editor is disabled, unavailable, or no active provider owns the char.
The callback function to register
Registers a callback function that is called when the control's value changes in the UI.
This method is called by the forms API on initialization to update the form model when values propagate from the view to the model.
When implementing the registerOnChange method in your own value accessor,
save the given function so your class calls it at the appropriate time.
The following example stores the provided function as an internal method.
registerOnChange(fn: (_: any) => void): void {
this._onChange = fn;
}
When the value changes in the UI, call the registered function to allow the forms API to update itself:
host: {
'(change)': '_onChange($event.target.value)'
}
The callback function to register
Registers a callback function that is called by the forms API on initialization to update the form model on blur.
When implementing registerOnTouched in your own value accessor, save the given
function so your class calls it when the control should be considered
blurred or "touched".
The following example stores the provided function as an internal method.
registerOnTouched(fn: any): void {
this._onTouched = fn;
}
On blur (or equivalent), your class should call the registered function to allow the forms API to update itself:
host: {
'(blur)': '_onTouched()'
}
Remove a pending attachment by ID
StaticParseSplits text containing serialized mention tokens into plain-string segments and parsed mention segments. Token = '@' followed by a JSON object with at least {type,id,name}; brace matching is string-aware so names containing braces or escaped quotes parse correctly. Malformed candidates stay as literal text.
ContentEditable-based mention editor with visual chips/pills Provides Slack/Teams-style mention UX with immutable mention tokens