Zetta v0.10

Components · Forms & selection

Textarea

A multi-line text input — the same chrome as Input, with an 88px minimum height and vertical-only resize. Pairs with the same field, label, helper and error parts.

Preview

Light
A short description for your profile.
Dark
A short description for your profile.
Accessibility
A short description for your profile.

Spec

Values and token references straight from the Zetta spec.

textarea
backgroundColor
{colors.surface-card}
textColor
{colors.ink}
placeholderColor
{colors.placeholder}
placeholderStyle
italic
borderColor
{colors.border-strong}
borderWidth
1px
borderRadius
{rounded.base}
fontFamily
Geist
fontSize
14px
fontWeight
400
lineHeight
1.6
minHeight
88px
paddingX
14px
paddingY
12px
resize
vertical
textarea-hover
borderColor
{colors.border-strong}
boxShadow
{shadows.sm}
textarea-focus
borderColor
{colors.border-focus}
outline
2px solid {colors.border-focus}
outlineOffset
2px
textarea-disabled
backgroundColor
{colors.disabled-bg}
textColor
{colors.disabled-text}
borderColor
{colors.disabled-border}
cursor
not-allowed
resize
none

Build with the skill

No package to install — hand this to your AI to generate the textarea in your stack.

Prompt for your AI
Implement the Zetta "Textarea" component in this project's stack using the zetta-design-md skill.

- Apply the `textarea` spec from the skill (variants: default, hover, focus, invalid, disabled).
- Use this project's own component conventions and framework idioms.
- Reference the Zetta design tokens (CSS variables) for every color, radius, and shadow — never hardcode values.
- Implement all states (hover, focus, active, disabled, and invalid where applicable) with a visible 2px focus ring.
- Honor the Zetta guardrails (brand never shifts hue, shadows for overlays only, etc.) and verify in Light, Dark, and Accessibility.

Anatomy & states

  • 14px padding, 8px radius, border-strong border, 88px min-height, resize: vertical. Placeholder is italic placeholder color.
  • Hover lifts var(--shadow-sm); focus rings; invalid (aria-invalid) turns the border danger; disabled uses the disabled tokens and locks resize.

Accessibility

  • Associate the label via for/id; link errors with aria-describedby and set aria-invalid="true".

Known gaps

  • Auto-grow and character-count variants are not yet specified.