Mixins / foldkit-mixins-ui

ChatMessageSlots

const · packages/mixins-ui/src/chatMessage.ts:21

const ChatMessageSlots: Slots.Contract<{ readonly root: Slot.UnnamedSlot<Capability.Capability<"Container", readonly [Capability.Capability<"Interactive", readonly [Capability.Capability<"Base", readonly []>]>]>, readonly Slot.EventName[], readonly Slot.AttributeName[], readonly Slot.RequirementName[], boolean>; readonly avatar: Slot.UnnamedSlot<Capability.Capability<"Container", readonly [Capability.Capability<"Interactive", readonly [Capability.Capability<"Base", readonly []>]>]>, readonly Slot.EventName[], readonly Slot.AttributeName[], readonly Slot.RequirementName[], boolean>; readonly main: Slot.UnnamedSlot<Capability.Capability<"Container", readonly [Capability.Capability<"Interactive", readonly [Capability.Capability<"Base", readonly []>]>]>, readonly Slot.EventName[], readonly Slot.AttributeName[], readonly Slot.RequirementName[], boolean>; readonly header: Slot.UnnamedSlot<Capability.Capability<"Container", readonly [Capability.Capability<"Interactive", readonly [Capability.Capability<"Base", readonly []>]>]>, readonly Slot.EventName[], readonly Slot.AttributeName[], readonly Slot.RequirementName[], boolean>; readonly author: Slot.UnnamedSlot<Capability.Capability<"Container", readonly [Capability.Capability<"Interactive", readonly [Capability.Capability<"Base", readonly []>]>]>, readonly Slot.EventName[], readonly Slot.AttributeName[], readonly Slot.RequirementName[], boolean>; readonly time: Slot.UnnamedSlot<Capability.Capability<"Container", readonly [Capability.Capability<"Interactive" …;

A chat message publishes its regions as slots; it owns no state, messages or bundles. Who sent it, when, what it says, whether it reached the server, and what can be done with it are the application's, passed in each draw; a streamed answer is the same message drawn again with more content.

The root carries data-from (user, assistant, system), which the recipe reads to set the user's messages at the end in a bubble, and data-continued, data-status and data-streaming for a style. A message still streaming is aria-busy, so a log around it announces the answer once it is whole rather than word by word. The body holds the content: plain text, or Markdown rendered to Html (foldkit-richtext- markdown's parse, then foldkit-richtext-dom's renderDocument), which the recipe's content: 'markdown' spaces as Prose.