Appearance
EditableTrigger
Reusable trigger button for entering edit mode in inline editing workflows.
Import
tsx
import { EditableTrigger } from '@/shared/ui/components/editable/EditableTrigger'Props
EditableTriggerProps
| Prop | Type | Default | Description |
|---|---|---|---|
onClick | () => void | Required | Callback when trigger is clicked |
children | ReactNode | Required | Content to display |
showEditIcon | boolean | true | Show edit icon on hover |
className | string | - | Additional CSS classes |
disabled | boolean | false | Whether trigger is disabled |
Features
- Ghost button styling - Looks like inline content, not a button
- Edit icon on hover - Pencil icon appears for discoverability
- Keyboard accessible - Enter and Space keys trigger edit mode
- Focus ring - Clear focus indicator for accessibility
- Disabled state - Visual feedback when editing is not allowed
Examples
Basic Usage
tsx
<EditableTrigger onClick={() => startEdit()}>
<span>{userName}</span>
</EditableTrigger>With Custom Styling
tsx
<EditableTrigger
onClick={() => startEdit()}
className="text-lg font-bold"
>
<h2>{pageTitle}</h2>
</EditableTrigger>Without Edit Icon
tsx
<EditableTrigger
onClick={() => startEdit()}
showEditIcon={false}
>
<span>{value}</span>
</EditableTrigger>Disabled State
tsx
<EditableTrigger
onClick={() => startEdit()}
disabled={!canEdit}
>
<span className="text-muted-foreground">{value}</span>
</EditableTrigger>With Complex Content
tsx
<EditableTrigger onClick={() => startEdit()}>
<div className="flex items-center gap-2">
<Avatar src={user.avatar} size="sm" />
<div>
<p className="font-medium">{user.name}</p>
<p className="text-sm text-muted-foreground">{user.role}</p>
</div>
</div>
</EditableTrigger>Styling
The component uses the following base classes:
tsx
<Button
variant="ghost"
className="group cursor-pointer focus:outline-none focus:ring-2 focus:ring-primary"
>
{children}
{showEditIcon && (
<Edit2 className="h-3 w-3 text-muted-foreground opacity-0 group-hover:opacity-100 transition-opacity" />
)}
</Button>You can override with the className prop:
tsx
<EditableTrigger
onClick={startEdit}
className="hover:bg-accent rounded-md p-2"
>
{content}
</EditableTrigger>Accessibility
- Keyboard navigation: Tab to focus, Enter/Space to activate
- Focus indicator: Clear focus ring
- ARIA: Inherits button role and semantics
- Disabled state: Properly communicated to screen readers