Theme
Sound
Jump to a component
AniCanonKit · Maki
MakiComposer
MakiComposer is where the person writes to Maki: suggested replies as chips above, the field, attach and send.
Live, from @anicanon/sakuga 2.0.0
Sakuga for iOS and Android is coming
iOS
Coming soon
MakiComposer for iOS is in the roughs. The tokens it will read are the ones on this page, the same on every platform.
Android
Coming soon
MakiComposer for Android is in the roughs. The tokens it will read are the ones on this page, the same on every platform.
- Use it for
- Where the person writes to Maki: suggested replies as chips above the field, attach and send.
- Not for
- Writing the prompt that makes a takePromptComposer
- A plain text field in a formTextField
- A message already sentChatMessage
Guidelines
value,onChange,onSend,onAttachandonSuggestionmake it work: Enter sends, Shift+Enter starts a new line.labelnames the field for screen readers ("Message to Maki" by default).
import { MakiComposer } from '@anicanon/sakuga/anicanonkit';
export default function MakiComposerExample() {
return (
<MakiComposer
suggestions={['Fix the last train', 'Why does it matter?']}
placeholder="Ask Maki about the story…"
/>
);
}PropsMakiComposerProps
placeholderstringsuggestionsstring[]hintstringattachbooleanlabelstringDefault 'Message to Maki'The field's name for screen readers.
valuestringonChange(text: string) => voidonSend(text: string) => voidEnter, or Send: the message. Shift+Enter makes a new line.
onAttachMouseEventHandleronSuggestion(suggestion: string) => voidclassNamestringEach token reads a role, and the role lands on a value in each theme. Change the role and every component that reads it follows.
Colour
maki-composer-bgMakiComposer: field.bg-canvasneutral-50#f6f6f8bg-canvasneutral-950#07070amaki-composer-borderMakiComposer: field outline.border-controlshade-a52rgba(11,10,16,0.52)border-controlwhite-a45rgba(255,255,255,0.45)maki-composer-placeholderMakiComposer: placeholder and hint.text-mutedneutral-600#5c5b67text-mutedneutral-400#a3a3a7Space and shape
maki-composer-gapgap-md8px
maki-composer-chips-gapgap-sm6px
maki-composer-field-gapgap-sm6px
maki-composer-field-min-heightits own value
44px
maki-composer-field-padding-yinset-xs4px
maki-composer-field-padding-rightinset-xs4px
maki-composer-field-padding-leftinset-md12px
maki-composer-field-radiusradius-md12px
maki-composer-field-inset-ring-widthline-hairline1px
maki-composer-input-heightits own value
20px
maki-composer-input-max-heightits own value
120px
maki-composer-field-focus-inset-ring-widthline-strong2px
maki-composer-forced-edge-widthline-hairline1px
maki-composer-forced-focus-widthline-strong2px
Type
maki-composer-field-fonttext-body400 14px/20px "Funnel Sans", system-ui, -apple-system, "Segoe UI", sans-serif
maki-composer-hint-fonttext-small500 12px/16px "Funnel Sans", system-ui, -apple-system, "Segoe UI", sans-serif
Checked automatically with axe-core 4.11.4 against WCAG 2.2 A and AA, on the live preview above, in light and dark, on 26 October 2026.
- Result
- No issues found, in light or in dark.
- By design
- Tab reaches each suggestion (a plain button that runs
onSuggestion), the field (a text area named bylabel, default "Message to Maki", and described by the hint), then "Attach" (onAttach) and "Send". In the field Enter sends throughonSendand Shift+Enter starts a new line. - Not tested
- The automated check doesn't test keyboard use, focus order or what a screen reader says. The lines above are the design system's own account of them.