How the rules land on components.
The writing principles applied to specific components. Buttons take verbs. Modals take tasks. Toasts take outcomes. These are the per-component rules the dewwrite skill enforces.
TextButton
ActionsVerb-led labels in sentence case, as few words as possible while staying unambiguous.
Write a clear verb phrase
Fewest words possible while staying specific enough that the label makes sense out of context.
- Save
- Delete report
- Add team member
- Confirm
- Click here to save your work
- Report deletion
- OK / Yes / Submit form
Sentence case, no '&'
First letter capitalised, rest lowercase. 'And' reads better than the ampersand.
- Save and close
- Add to queue
- Delete and archive
- Save And Close
- ADD TO QUEUE
- Delete & Archive
IconButton
ActionsNo visible label means aria-label carries the whole meaning — write it like a real sentence, not a chrome description.
aria-label describes the action
A concise verb phrase that makes sense when read aloud in isolation.
- aria-label="Delete comment"
- aria-label="Edit contact"
- aria-label="Close panel"
- aria-label="icon"
- aria-label="button"
- aria-label="X"
Distinguish repeated buttons
When the same icon appears per row, include the item name so screen readers can tell them apart.
- aria-label="More actions for Invoice #123"
- aria-label="More"
HyperlinkButton
ActionsLinks describe the destination, not the click. Short (2–5 words) and specific.
Name the destination
Lead with what the reader will see after following the link.
- View invoice #1042
- Freshworks documentation
- Privacy policy
- Click here
- See more
- Read our privacy policy by clicking this link
'Learn more' only with context
Acceptable when the sentence before it names the topic. Never standalone.
- Two-factor authentication adds an extra layer of security. Learn more
- Learn more
DropdownButton
ActionsThe label describes the category of actions — the chevron already signals there's a menu.
Short, noun-based labels
Skip 'Choose' and 'Select'. The menu itself makes the action obvious.
- Actions
- Export
- More options
- Add
- Click to see actions
- Select an export format
- Options dropdown
SplitButton
ActionsPrimary label names the main action only. Alternatives live in the dropdown with distinguishing text.
Primary = the main verb
The chevron signals variants. The label doesn't need to hint at them.
- Save
- Export
- Delete
- Send
- Save options
- Export / More
- Delete (click arrow for more)
Distinguish dropdown options
Each option reads differently from the primary action.
- Save as draft
- Save as template
- Move to trash
- Export as CSV
- Save
- Template save
- Trash
- CSV file
Checkbox
Input & selectionDescribe the option or its outcome, not the action of ticking the box.
Label = the option
- Email notifications
- Accept terms and conditions
- Remember me
- Turn on email notifications
- Click to accept
- Check to remember me
Description adds context without repeating the label
- Receive updates about your account activity
- Automatically save changes every 5 minutes
- Email notifications: receive email notifications
- Auto-save: turn on auto-save
RadioGroup
Input & selectionGroup label describes what the reader is choosing. Options describe each value — no redundancy with the group.
Group label + distinct options
- Payment method → Credit card · PayPal · Bank transfer
- Shipping option → Standard · Express · Overnight
- Payment method → Payment method: Credit card
- Theme → Select theme
Toggle
Input & selectionLabel names the resulting state when the toggle is on. Written as a statement, not a command.
Describe the 'on' state
- Enable notifications
- Dark mode
- Auto-save
- Turn on notifications
- Switch theme
- Toggle auto-save
Modal
OverlaysTitle states the task or decision. Actions use specific verbs — never 'OK' or 'Yes'.
Title = the task, not a question
- Delete contact
- Edit profile
- Invite team member
- Confirm subscription upgrade
- Are you sure you want to delete this contact?
- Profile editing
- Invitation
- Please confirm your action
Footer actions describe what happens
Primary on right, secondary on left. Each verb matches the outcome.
- Delete / Cancel
- Save changes / Discard
- Invite / Cancel
- Yes / No
- OK / Close
- Submit / Cancel
SliderPanel
OverlaysTitle is a noun phrase describing what the panel holds, not a command.
Name the context
- Account settings
- Add contact
- Filter results
- Edit your account settings
- Adding a new contact
- Click here to filter
Footer = specific verbs, two actions max
- Save changes / Cancel
- Add contact / Discard
- Apply filters / Clear all
- OK / Close
- Submit / Back
- Yes / No
ToastMessage
FeedbackShort, outcome-focused. Describe what happened. Don't explain how it happened.
Concise past-participle phrases
- Changes saved
- Upload complete
- Connection failed
- Your changes have been successfully saved to the database
- The file upload operation has completed successfully
Title + description doesn't repeat
- Payment successful · Your payment of $99.00 has been processed.
- Payment · Payment successful. Your payment of $99.00 has been processed.
Tooltip
FeedbackOne short phrase or sentence. Clarifies the trigger. Never holds must-know info.
One line, plain and helpful
- Save draft
- Eastern Standard Time
- Sync your data with the server
- Click to save
- EST (time zone)
- Tooltip: Sync
Don't hide essential info here
If the user must see it, put it inline — not behind a hover.
- Supplement, don't replace, visible copy.
- Bury required info in a tooltip only.
Tag
MetadataShort nouns or status words. Close-button labels identify what will be removed.
Concise nouns or phrases
- Info
- Success
- Active
- Archived
- Draft
- High priority
- This is an informational tag
- Click here to see more information
- Tag
Close label names the thing being removed
- closeAriaLabel="Remove filter: High priority"
- closeAriaLabel="Deselect category: Technology"
- closeAriaLabel="Close"
- closeAriaLabel="×"
- closeAriaLabel="Remove"
Badge
MetadataNumber-only element. The aria-label carries the meaning behind the count.
aria-label describes what's counted
- aria-label="5 unread messages"
- aria-label="12 pending approvals"
- aria-label="Badge"
- aria-label="12"
Avatar
PeopleDescribe the person. Never describe the picture as a picture.
Alt text names the person
- alt="Jane Doe"
- alt="Profile photo of Jane Doe"
- alt="Image"
- alt="Avatar"
Name fills in when there's no image
When only initials show, the name powers the aria-label. Don't leave it empty.
- name="Jane Doe"
- initials="??"
AvatarGroup
PeopleThe '+N' count speaks for itself. Every avatar still needs a real name.
Don't caption the overflow
- Let "+N" speak; pair with a tooltip or expandable list
- and 3 more avatars
Name every person in the group
- "Jane Doe" · "Support Team"
- "User 1" · "Avatar" · empty alt
Back
For writers
Return to the writing overview.