Minimal Tiptap
import { MinimalTiptap } from '@hanzo/ui'
Default
A prose field that opens at a 200px floor, tall enough for a paragraph before it ever scrolls.
export function Default() {return (<YStack width={420}><MinimalTiptap placeholder="Write the release notes…" /></YStack>)}
Controlled
`value` and `onChange` take and hand back a plain string, the same shape a form's own state already speaks.
0 characters
export function Controlled() {const [body, setBody] = useState("")return (<YStack width={420} gap="$2"><MinimalTiptap value={body} onChange={setBody} placeholder="What changed, and why" /><Text fontSize="$2" color="$quiet">{body.length} characters</Text></YStack>)}
Floor
The 200px minimum is a default, not a pin: a shorter field for a one-line summary, a taller one for a full changelog entry.
export function Floor() {return (<YStack width={420} gap="$3"><MinimalTiptap minH={80} placeholder="One-line summary" /><MinimalTiptap minH={320} placeholder="Full changelog entry" /></YStack>)}
Disabled
A closed field takes no input and fades, same as any other text field.
export function Disabled() {return (<YStack width={420}><MinimalTiptap disabled defaultValue="Locked after the release shipped." /></YStack>)}
Types
export type MinimalTiptapProps = Omit<React.ComponentProps<typeof Textarea>,'onChange' | 'onChangeText' | 'value'> & {value?: stringonChange?: (value: string) => void}
Exports
MinimalTiptaptype MinimalTiptapProps