Use AfterSkillsOpened.
The same emitter under the old binding name, so a template still binding (afterSkillsOpened) keeps working. Must stay AFTER AfterSkillsOpened: 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 AttachmentError.
The same emitter under the old binding name, so a template still binding (attachmentError) keeps working. Must stay AFTER AttachmentError: class fields initialise in order, and the other way round this captures undefined.
Use AttachmentsChanged.
The same emitter under the old binding name, so a template still binding (attachmentsChanged) keeps working. Must stay AFTER AttachmentsChanged: class fields initialise in order, and the other way round this captures undefined.
Use BeforeSkillsOpened.
The same emitter under the old binding name, so a template still binding (beforeSkillsOpened) keeps working. Must stay AFTER BeforeSkillsOpened: class fields initialise in order, and the other way round this captures undefined.
Before/After pair for the Skills button, proxied straight through from the input box. Gated on
EnableSkillCommands — the button and the keystroke are two doors to the same feature, so one
flag governs both rather than letting a composer advertise skills it will not serve.
Cancel on beforeSkillsOpened vetoes the dropdown; afterSkillsOpened then does not fire.
Use Blurred.
The same emitter under the old binding name, so a template still binding (blurred) keeps working. Must stay AFTER Blurred: class fields initialise in order, and the other way round this captures undefined.
Composer lost focus — hosts persist drafts on this.
OptionalCurrentMaster switch for all mention/command triggers (pass-through).
OptionalInputUse PlanModeToggle.
The same emitter under the old binding name, so a template still binding (planModeToggle) keeps working. Must stay AFTER PlanModeToggle: class fields initialise in order, and the other way round this captures undefined.
Optional metadata provider scoping this composer (pass-through to the trigger plugins).
What the send slot is doing; the host decides.
Elapsed time after the status text, kept out of the live region and dropped on narrow screens.
Status line shown bottom-left inside the box while non-null.
The send slot was clicked in stop mode.
How many things a stop would stop; above 1 the slot reads "Stop all".
Tooltip and accessible name of the slot in stop mode.
Use TextSubmitted.
The same emitter under the old binding name, so a template still binding (textSubmitted) keeps working. Must stay AFTER TextSubmitted: class fields initialise in order, and the other way round this captures undefined.
Use ValueChange.
The same emitter under the old binding name, so a template still binding (valueChange) keeps working. Must stay AFTER ValueChange: class fields initialise in order, and the other way round this captures undefined.
Use VoiceRequested.
The same emitter under the old binding name, so a template still binding (voiceRequested) keeps working. Must stay AFTER VoiceRequested: class fields initialise in order, and the other way round this captures undefined.
Use AcceptedFileTypes.
The explicit provider list bound to the inner editor (stable reference; rebuilt only when a flag flips).
The agents the '@' list may offer. Null (the default) offers every agent the user can run; an empty list offers none. Applies to this composer only.
Use CanStartRealtime.
Use CurrentUser.
Use Disabled.
Enables the '@' trigger (agent + user mentions).
Use EnableAttachments.
Enables the '#' trigger (entity + query record mentions).
Use EnableMentions.
Use EnablePlanMode.
Use EnableRealtime.
Enables the '/' trigger (skill commands).
Use InputBox.
Use MaxAttachments.
Use MentionEditor.
The inner mention editor — kept reachable for hosts that drive it directly (e.g. clear-after-programmatic-send).
The people the '@' list offers, such as a chat's members. Null (the default) offers the current user, as before. Applies to this composer only.
Use Placeholder.
Use PlanModeActive.
Use Rows.
Use ShowCharacterCount.
The agent the message is expected to go to, when the host knows it (mj-message-input binds an
explicit @agent chip in the draft, else its resolved continuity/pinned/default agent). Narrows
the '/' skill picker to the skills that agent accepts (AcceptsSkills + MJ: AI Agent Skills
grants). Null = unknown, no narrowing — the server's RequestedSkills guard is the backstop.
Use Value.
Use VoiceActive.
Attach an artifact as a pending attachment (artifact picker flow).
Use Clear.
Clear the editor content and pending attachments.
Use Focus.
Focus with the caret at the end of content.
Use GetMentionChipsData.
Pending (not yet uploaded) attachments.
Plain text with mentions encoded as JSON (@{"type":...}) — the persistence format.
Inserts a resolved mention chip + space (see MentionEditorComponent.InsertMention).
Use OpenFilePicker.
Open the attachment file picker programmatically.
AI-aware composer: wraps the generic
<mj-message-input-box>(from@memberjunction/ng-composer, which ships zero AI knowledge) and builds the AI trigger plugins in — '@' agent/user mentions, '#' entity/query record mentions, and '/' skill commands — while proxying the input box's full surface (inputs, outputs, and public methods).The familiar granular flags live HERE now:
EnableAgentMentions(default true) — the '@' triggerEnableEntityMentions(default true) — the '#' triggerEnableSkillCommands(default true) — the '/' trigger plus the pass-throughenableMentionsmaster switch.The wrapper always runs the inner editor in EXPLICIT provider-list mode (it owns the list; it deliberately does not proxy
TriggerProviders/ExcludedTriggerKeys— use the raw<mj-message-input-box>when you need custom providers or discovery mode).